曲 靜,馮云霞
(青島科技大學 信息科學技術學院,山東 青島 266061)
人工智能的飛速發展,機器學習促進了人們的衣食住行到航空航天等各個領域的變革,而這背后也都離不開大數據的支持。當今時代的發展又對機器學習提出了更高的要求,這就需要更多的數據進行訓練。但由于數據中往往包含著大量的隱私信息,數據擁有者不愿意共享自己的數據,造成了“數據孤島”問題。共享數據與隱私保護似乎成了兩個相互矛盾的問題。直到物聯網技術地快速發展,產生了大量且分散的數據。
谷歌提出的聯邦學習[1]找到了解決數據共享與隱私保護之間的矛盾的新思路,聯邦學習允許計算節點利用自己的數據集在本地進行訓練,最后由中央服務器集中收集并聚合本地模型,避免了直接收集原始數據造成的隱私泄露風險。但傳統聯邦學習采用中央服務器集中收集、聚合全局模型,默認中央服務器可信,可能會造成隱私泄露風險。另一方面谷歌公司最初提出聯邦學習是為了公司內部數據供共享,如果想要將聯邦學習推廣到開放的網絡環境中,參與的計算節點中可能混入影響訓練的惡意節點,他們可能發送錯誤的本地模型參數、攻擊其他計算節點造成巨大地隱私泄露風險。所以選擇合適的參與節點參與訓練了對于模型的訓練和隱私安全至關重要。
本文將區塊鏈和聯邦學習相結合提出一種分布式聯邦學習,并基于此系統提出了一種基于信譽值的分布式節點選擇算法。分布式聯邦學習在將區塊鏈和聯邦學習相結合實現參與節點直接通信,取代了傳統聯邦學習通過中央服務器轉發信息地通訊模式。基于信譽值的分布式節點選擇算法采用聲譽作為節點可信度的衡量標準,對發布任務的節點以及執行任務的節點都進行篩選,并為此設計了一種基于角色的節點聲譽值計算。
為解決傳統聯邦學習中央服務器帶來的問題,文獻[2-7]通過加密算法等方式預防聯邦學習中的隱私泄露問題,文獻[8-13]將區塊鏈與聯邦學習結合起來,借用區塊鏈不可篡改等特性,解決此問題。文獻[8]中將C/S架構下的工作模式移植到區塊鏈系統,每個節點按照順序循環擔任中央服務器,中央服務器不固定,一定程度上可以有效克服單點失效。在文獻[9]中提出了DeepChain,將區塊鏈技術與聯邦學習結合起來,它鼓勵不信任方參與隱私保護學習、共享梯度和正確更新參數,并最終以雙贏的結果完成迭代式深度學習。聯邦學習和區塊鏈的結合開始逐漸在實際生活領域廣泛研究,2020年新冠肺炎的爆發,在文獻[10]中針對COVID-19,從不同醫院收集少量數據,并使用基于區塊鏈的聯合學習訓練一個全局深度學習模型用于檢測新冠病毒。
為了解決聯邦學習的參與者的可信度的問題,節點選擇可以分為兩個方向:一個是在訓練開始之前對參與節點進行選擇[14-19],另一個是在訓練過程中對節點上傳的本地模型進行有選擇地聚合[20-22]。
對于在訓練開始之前選擇參與節點方向,首先需要確定一個公平的衡量標準來量化節點在訓練中的表現,并根據這個標準對節點進行篩選。在文獻[14]中通過設置參與者節點上傳本地訓練模型的截止時間,選擇截至時間內上傳模型的節點,即計算和通信能力較好的節點,參與訓練,以此縮短訓練時間。在文獻[15]中利用價值函數評估參與節點上傳的本地訓練結果對整體訓練模型的價值,此評估結果為判斷節點工作能力好壞的標準,并決定了節點被選擇參與下次聯邦學習的概率。在文獻[16]中引入聲譽值作為衡量標準,提出EigenTrust算法,利用曾與該節點共同訓練的其他節點對該節點的評價計算聲譽值,根據節點的行為為其生成聲譽意見,并根據收集的聲譽意見計算其聲譽值,避免了某個節點的片面評價導致聲譽值計算錯誤,從而影響節點的選擇。在文獻[17]中提出了一種名為TNA-SL的基于主觀邏輯的參與節點可信度計算方法,從而在參與節點之間建立了信任網絡。文獻[18]引入不易被篡改的區塊鏈記錄聲譽意見,保證聲譽意見的真實性。文獻[19]設計了一個分層信任評估模型,對不同層次的信任指數進行了評估,確定節點的可靠性。
對于訓練過程中篩選本地模型聚合方面,主要是由于聯邦學習不同于集中式機器學習,它的參與者數據集存在異構性的問題[20],而FedAvg算法隨機挑選上傳本地模型進行聚合,這可能導致選擇的本地模型并不利于了全局模型的收斂。在文獻[21]中,為解決參與者數據集異構問題在提出一種名為“FedAdp”的主動加權算法,通過計算收到的本地模型與全局梯度之間的相似度,為本地模型在聚合時設置不同的權重。文獻[22]在聯邦學習中考慮到數據異構的問題,提出一個概率節點選擇框架“FedPNS”,通過計算節點梯度和全局梯度的內積,判斷收到的本地模型是否利于全局模型收斂,選擇出最有利于全局模型收斂的本地模型子集進行聚合。
在本文,首先將區塊鏈和聯邦學習結合,提出一種新的分布式聯邦學習,在區塊鏈的架構中實現聯邦學習,由任務發布節點代替中央服務器降低單點故障的風險。在此架構的基礎上提出了一種基于聲譽值的節點選擇方法,分別篩選任務執行節點和任務執行節點,引入區塊鏈的共識節點記錄聲譽意見。為了計算節點的聲譽值本文又設計了一種基于角色的節點聲譽值計算算法,選擇更加適合任務的節點集進行訓練。
在詳細闡述節點選擇算法之前,本節將介紹本文針對的惡意節點以及系統假設和提出的分布式聯邦學習系統模型。
在開放的網絡環境中,參與節點混入惡意節點會影響任務的訓練,甚至對數據隱私造成威脅[23]。本文重點考慮了主動惡意任務發布節點、被動惡意任務發布節點、主動惡意任務執行節點和被動惡意任務執行節點4種類型的萬一節點。主動,即惡意節點在任務訓練過程中未受到外部干擾主動發起惡意行為;被動,即惡意節點由于外界因素干擾發起惡意行為。主動惡意任務發布節點主動廣播虛假任務,惡意分散系統的總算力;而被動惡意任務發布節點被其他節點攻擊、控制發布虛假任務,分散系統的總算力。主動惡意任務執行節點故意上傳低質量本地模型,甚至故意攻擊其他節點,影響全局模型精度甚至造成數據隱私泄露。被動惡意任務執行節點受到自身數據集質量、CPU計算能力和網絡通信條件等外部條件的影響[24],導致模型不合格或每次迭代的收斂時間受到影響,影響全局模型的訓練。
本文假設面向開放的網絡環境,如果節點隨意加入,會導致系統很高的安全風險,因此本文選擇聯盟鏈。所有參與者只有通過身份驗證加入聯盟鏈,才有資格發布任務或者參與模型訓練,保護參與者的身份隱私。在執行聯邦學習過程中節點可能充當兩種角色:一種是發布任務的任務執行節點,另一種是執行任務的任務執行節點。而且本文支持節點角色可以動態轉換,節點可以擔任多角色,即一個聯盟鏈中節點可以在上個任務中擔任任務發布節點,在本次任務中擔任任務執行節點,甚至一個節點沒有任務需求,也不想參與協同訓練時也可以申請作為區塊鏈的共識節點,參與共識任務。本文中由任務發布節點充當臨時主控節點替代傳統聯邦學習的中央服務器,且在獨立通道channel中進行每個聯邦學習,讓任務發布節點與任務執行節點的直接通信,而且每個任務獨立訓練,實現多任務并行訓練。聯盟鏈的共識節點在聯邦學習訓練過程中擔任驗證節點的角色,負責篩選任務發布節點、根據節點在訓練中的行為生成用于計算聲譽值的聲譽意見存儲。聯盟鏈同時維護聲譽意見以及聯邦學習交易兩個賬本,既保證聯邦學習都記錄上鏈,也能方便快速查找聲譽意見。驗證節點采用實用拜占庭容錯算法(PBFT)達成共識將聲譽意見以及行為證據形成區塊記錄上鏈。
本文提的分布式聯邦學習系統,如圖1,具體運行流程如下:

圖1 分布式聯邦學習系統架構圖
1)篩選節點。任務發布節點發布任務,驗證節點區塊鏈上的聲譽意見鏈上查詢節點的聲譽值,實現對任務發布節點以及任務執行節點的篩選(節點篩選的詳細細節在第3章)。
2)聯邦學習初始化。聯邦學習確定了任務執行節點后,首先為參與訓練的節點分配數字證書并設置權限,持有數字證書的參與者可以通過channel進行通信,實現多任務并行訓練,設置權限,以實現任務執行節點之間無通信無法竊取其他節點上傳的本地模型,保證數據隱私安全。
3)聯邦學習迭代訓練。任務發布節點發送初始全局模型,任務執行節點收到全局模型在本地數據集上訓練得到一個本地模型并上傳到任務發布節點;然后任務發布節點對本地模型進行篩選(本地模型的具體篩選細節在第3章詳細介紹),將符合要求的數據集利用聯邦平均算法聚合成全局模型。再發送給任務執行節點,進入下一輪的迭代訓練,直到最終模型符合任務發布節點的要求,或者迭代次數達到上限,訓練結束。
4)生成并存儲聲譽意見。驗證節點根據節點在訓練過程中的行為,任務發布節點以及任務執行節點分別生成聲譽意見,達成共識,共識認為正確,則記錄為可信行為,共識認為錯誤則記錄為不可信行為,否則記錄為不確定行為,記錄上聲譽意見賬本。①生成任務發布節點的聲譽意見:任務發布節點對任務執行節點進行篩選之后,對任務執行結果的篩選結果達成共識,記錄聲譽意見;任務發布節點篩選本地模型結束之后,驗證節點對篩選結果以及聚合結果達成共識,記錄聲譽意見。②生成任務發布執行節點的聲譽意見:根據任務發布節點的篩選結果,參與聚合的任務執行節點本地模型按照精度利用softmax生成一個數值記錄在聲譽意見中,沒參與聚合的任務執行節點記錄為0。
在本節中,將介紹基于信譽的節點選擇算法,聲譽值是根據節點之前行為預測的節點在接下來的行為中可信的概率,聲譽值根據區塊鏈中存儲的聲譽意見進行計算,聲譽值計算的詳細介紹在第4章。由于惡意節點也可能充當任務發布節點發布虛假消息浪費系統整體算力,攻擊其他節點,而且本地模型更新的精度決定了最終全局模型的精度,低質量的本地模型更新甚至會拉低全局模型的精度,所以本文對任務執行節點、任務發布節點,根據節點的聲譽值在節點之間按照角色橫向選擇,同時還對上傳的本地模型都進行篩選。
任務發布節點的篩選在節點廣播發布任務請求之后,由驗證節點進行篩選,只有通過篩選的節點才有資格組織聯邦學習。當有任務需求的聯盟鏈節點廣播“任務發布請求”申請發布任務之后,驗證節點對發布請求節點進行篩選,具體篩選過程如下:
1)當驗證節點收到“任務發布請求”廣播,首先檢驗該節點是否有正在執行的任務,有的話則忽略該“請求”,沒有其他任務則進入第二步驗證。這是由于當前計算機的算力可能無法滿足同時進行多項訓練,而任務發布節點在聯邦學習任務中至關重要,一旦任務發布節點的算力被分散將會造成整體訓練的延時甚至造成最終模型無法收斂,因此本文中任務發布節點只允許同時至多參與一項任務。以后的發展中節點算力充足則可以省略這一步的篩選。
2)驗證節點檢驗請求發布節點的聲譽值。驗證節點在聯盟鏈的聲譽值賬本中查詢該節點的聲譽意見并計算出該節點的聲譽值(聲譽值計算的具體細節在第4章詳細介紹)。如果節點聲譽值低于閾值則忽略該“請求”;否則確定該節點為任務發布節點,同時廣播帶有簽名的“任務T啟動請求”,達成共識記錄上鏈,交易賬本更新。
任務執行節點接收到任務發布節點發送的“任務發布請求”之后,先在交易賬本中查詢該任務,查詢顯示該任務通過驗證無誤后發送“申請加入任務請求”申請加入任務,否則忽略任務啟動請求。隨后由任務發布節點對申請協同訓練的節點進行篩選。具體步驟如下:
1)節點發送“申請加入任務請求”。聯盟鏈上節點根據任務發布節點發送的“任務啟動請求”中的任務要求,滿足任務要求的節點自愿發送“申請加入任務請求”,內容包括擁有的數據集大小、種類以及可以驗證數據集的證明材料。
2)任務發布節點對申請加入任務的節點進行篩選。任務發布節點收到“申請加入任務請求”后,首先在聲譽意見賬本中查詢該節點作為任務發布節點的聲譽意見,然后計算該申請節點的聲譽值,如果聲譽值不低于閾值,該節點被選為任務執行節點,否則忽略該節點請求。直到任務執行節點數達到任務要求,或者超過截至時間篩選結束。
聲譽值低于閾值說明在之前的訓練任務中存在惡意行為(主動或者被動)、該節點的數據集不適合當前任務,通過聲譽值計算識別選擇誠實可信且擁有數據集最合適當前任務的任務執行節點集進行協同訓練。
任務執行節點每輪訓練上傳本地模型到任務執行節點,任務執行節點在訓練集上進行測試,篩選出符合條件的本地模型進行聚合,刪除低精度模型,以得到高質量的最終模型。具體過程如下:
1)聚合所有收到的本地模型。任務發布節點收到本地模型之后,將所有本地模型聚合成整體模型M。
2)篩選本地模型。刪除其中第一個本地模型聚合成檢驗模型ml,并將檢驗模型ml與整體模型M在測試集上進行測試,如果檢驗模型ml的精度大于整體模型M,就淘汰該本地模型。按照上述方式遍歷所有本地模型,完成所有本地模型的初步篩選。
3)確定最終參與聚合的本地模型。聚合經過上輪篩選保留下來的本地模型得到檢驗模型mk,將檢驗模型mk與測試集上進行測試,比較所有檢驗模型集合與整體模型M的精度,選擇精度最高的模型作為本輪最終全局模型,而對應的本地模型作為最終參與聚合的本地模型。
為了實現對任務發布節點和任務執行節點的分別篩選,又考慮到任務發布節點和任務執行節點在聯邦學習中任務不同,任務發布節點發布任務、篩選本地模型、聚合全局模型,只需篩選行為可靠、設備算力充足的誠實節點,而任務執行節點需要利用自己的數據集在本地進行訓練并上傳到任務發布節點處,這不僅需要考慮節點的行為以及設備算力,還要考察節點的數據集與當前訓練主題的貼合度,因為數據集的類型和質量決定了本地模型的精度,本地模型精度不高也將影響去全局模型的精度。所以為了實現任務發布節點和任務執行節點的分別篩選,本文設計了一種基于角色的節點信譽值計算模型,細化不同節點的聲譽計算要素,根據節點角色及節點行為量化節點在訓練中的可信度。而一個聯盟鏈中可能儲存這一個節點的兩種角色的聲譽意見。該模型主要包括兩部分:節點聲譽意見模型和節點聲譽值計算算法。
在聯邦學習訓練任務中,本文用聲譽意見直接記錄各節點在任務中表現情況量化生成一條聲譽意見,節點聲譽意見模型為(role,result,time,remark,sign,H),其中role表示節點在任務中的角色,包括publisher(任務發布節點)和worker(任務執行節點);result是節點行為檢驗結果,任務執行節點的聲譽意見記錄為數值,任務發布節點記錄為:“true”、“false”和“uncertainty”,分別表示可信行為、不可信行為和不確定行為;time是聲譽意見生成時間,sign是生成聲譽意見的驗證節點簽名,remark是聲譽意見的生成證明材料和任務主題,H是信譽意見的加密結果。接下來本文將分別詳細介紹任務發布節點和任務執行節點的聲譽意見。
為了縮短每個任務開始之前計算節點聲譽值的時間,本文在每個任務結束后,利用任務內產生的聲譽意見生成節點的直接聲譽值,節點的聲譽意見作為可追溯證據存儲在區塊鏈中。下次任務開始之前直接在區塊鏈中檢索節點對應角色的直接聲譽值來計算聲譽值。又考慮到多次以某身份參與聯邦學習任務的節點區塊鏈中存儲大量對應聲譽值,而初次以某種角色參與任務的節點在區塊鏈中沒有存儲對應直接聲譽值,因此本文基于節點參加任務的角色以及該節點以此角色參與任務的次數細化算法,設計了4種節點信譽值計算算法:二次任務發布節點聲譽值計算算法、首次任務發布節點聲譽值計算算法、二次任務執行節點聲譽值計算算法、首次任務執行節點聲譽值計算算法。其中“二次”和首次分別指該節點多次和首次擔任此角色參與任務。首先根據節點的申請判斷節點的角色,隨后在區塊鏈中查詢節點的對應角色的直接聲譽值,如果查詢到,那么說明節點是“二次”節點,否則節點為“首次”節點,按照對應算法計算聲譽值。
接下來將首先介紹直接聲譽值計算算法,隨后分別詳細介紹二次任務發布節點聲譽值計算算法、首次任務發布節點聲譽值計算算法、二次任務執行節點聲譽值計算算法、首次任務執行節點聲譽值計算算法。
4.2.1 直接聲譽值計算
由于任務發布節點與任務執行節點的聲譽意見模型中“result”存儲類型不同,本文分別計算二者的直接聲譽值。具體計算過程如下:
(1)
r(publisher)表示該任務發布節點經過本次訓練任務的直接聲譽值,N(result[t])、N(result[f])、N(result[u])分別表示在聯盟鏈記錄的本輪任務中該節點的所有聲譽意見中result記錄是“true”、“false”和“uncertainty”的數目,λ,γ,ζ分別表示result中可信行為、不可信行為和不確定行為的影響參數。
2)任務執行節點直接聲譽值計算模型,即對聲譽意見中的數值求平均,具體計算過程如式(2):
(2)
r(worker)表示該任務執行節點經過本次訓練任務的直接聲譽值,∑result表示在聯盟鏈記錄的本輪任務中該任務執行節點的所有聲譽意見result中的,N表示本輪任務中該任務執行節點的所有聲譽意見的數目。
任務執行節點和任務發布節點的直接聲譽值計算完成后,驗證節點將對此計算結果達成的共識,隨后該驗證節點將本輪任務中所有節點的直接聲譽值按照r=(role,time,score,remark,H)的格式保存在區塊鏈中,其中r表示所記錄節點的直接聲譽值,time記錄為本次任務結束的時間,score表示本次任務中該節點的直接聲譽值,remark是備注信息,存儲本次任務主題和開始、截止時間。
4.2.2 二次任務發布節點聲譽值計算算法
以二次任務發布節點i為例,介紹二次任務發布節點聲譽值計算模型。當驗證節點接收到申請節點發布任務申請之后,首先在聯盟鏈中查詢節點i作為任務發布節點的直接聲譽值,查詢到相應直接聲譽值,判斷節點為二次任務發布節點進行聲譽值計算。在二次任務發布節點聲譽值計算算法中,考慮到節點和網絡的復雜性,隨著時間的推移,節點先前行為的可信度逐漸降低,對應的直接聲譽值的可參考性也逐漸降低。因此,本文引入時間衰減函數來描述時間對直接聲譽值可信度的影響。生成的直接聲譽值與當前任務間隔的時間越長,該直接聲譽值的可參考性越低,計算最終聲譽值時的權重越小,反之該直接聲譽值的可參考性越高,計算最終聲譽值時的權重越大。所以任務發布節點的最終聲譽值如式(3):
(3)

4.2.3 首次任務發布節點聲譽值計算算法
1)投用了裝置1.0 MPa蒸汽專線,在4月12日停工第二天,配合動力廠投用進裝置蒸汽專線,確保裝置吹掃蒸汽供應充足。
接下來將以首次任務發布節點g為例,介紹首次任務發布節點聲譽值計算模型。當驗證節點接收到申請節點發布任務申請之后,首先在聯盟鏈中查詢節點g作為任務發布節點的直接聲譽值,查詢無果之后,判斷節點為首次任務發布節點并令其聲譽值等于初始值(任務發布方的信譽值閾值),如式(4):
R(publisherg)=Rinitial(publisher)
(4)
R(publisherg)是節點g作為任務發布方參與本輪訓練的聲譽值,Rinitial(publisher)是對于任務發布方的信譽閾值。
4.2.4 二次任務執行節點聲譽值計算算法
以二次任務執行節點j聲譽值計算算法為例計算其聲譽值。在一個任務中,任務執行節點的主要工作是在本地訓練模型并上傳訓練,本地模型的好壞不僅與節點的行為有關,還與節點的本地數據集有關。所以想要篩選任務執行節點,需要考慮綜合考慮其行為及數據集的可靠性。在本文引入余弦函數計算節點直接聲譽值記錄的任務與當前任務的相似度,相似度直接參與最終信譽值的計算。相似度越大,表示直接信譽值記錄的任務與當前任務越接近,節點j在直接聲譽值所記錄的任務對于當前任務的可參考性越大;反之可參考性越小。節點j的最終信譽值的計算過程如式(5):
(5)

(6)
T(workerj)引入的時間衰減函數,r[workerj(time)]表示節點j作為任務執行節點的直接聲譽值記錄中的時間。
4.2.5 首次任務執行節點聲譽值計算算法
對于首次任務執行節點參加過訓練任務的節點f,本文結合他的數據集大小、數據類型和其他數據提供者的中值聲譽值來計算他的聲譽值。如果節點f的數據集較大且數據集類型更接近當前任務的主題,則節點f的聲譽值越高,具體計算如下(7):
(7)
workerf指代節點f作為任務執行節點;s(workerf) 是節點f的響應中記錄的數據集大小;Smin是所有參加本任務的所有任務執行節點數據集大小的中位數;S是任務要求的數據集大小;Rinitial(worker)是當前任務中任務執行節點的聲譽值初始值;w(workerf)表示節點f的數據集的數據類型與任務規定數據類型的相似情況;S(workerf)表示節點f數據集大小與任務要求數據集大小的比較情況。
為了驗證所提方法的有效性,本文選擇兩種對比系統進行實驗比較。其中一種方法是一個傳統聲譽值節點選擇算法[16]。另一種是方法是利用基于主觀邏輯的聲譽值計算模型篩選任務執行節點,在計算節點聲譽值時參考所有與篩選節點共同訓練過的節點對于篩選節點的評價,并引入區塊鏈存儲節點的聲譽意見[18],分別簡稱為TRM和SLM,本文的模型稱為RBLNS。設置了手寫數字分類和函數回歸兩類實驗來測試3個模型的效果。接下來將介紹實驗環境設置并分析分類實驗、回歸實驗的結果。

聯邦學習任務中存在50個任務執行節點,其中10個節點也擔任任務發布節點(8個可靠的和2個不可靠的任務發布節點)。所有任務執行節點的數據集都存儲在IPFS中,便于檢索數據集的大小和類型。
對于手寫數字分類實驗,本文使用基于卷積神經網絡的模型來執行數字識別任務,以評估由Pytorch框架實現的節點選擇模型。在實驗中,使用MNIST數據集,該數據集有60 000個訓練示例和10 000個測試示例,廣泛用于聯邦學習的性能評估實驗[24-25]。在MNIST訓練數據集中,對于誠實的高質量任務執行節點,分配的數據集涵蓋所有10個類別(0~9),通過為各任務執行節點有差別隨機分配每個類別數據的量,模擬誠實任務執行節點的數據集主題與訓練任務主題之間的差異;通過為各任務執行節點分配不同數量的數據,模擬誠實任務執行節點的數據集的大小差異。為惡意節點分配少量或缺失某個類別的數據,從而導致上傳低質量本地模型。惡意任務發布節點通過發布虛假任務、錯誤篩選任務執行節點、錯誤聚合最終結果。
對于回歸函數的訓練,本文選擇了30個任務執行節點來共同訓練函數y=cos(2πx),x∈[0,1]是聯邦學習的輸入,y作為輸出。其中25個誠實可靠的節點,以及5個惡意節點。25個誠實節點有20~30個相關訓練數據樣本,5個惡意節點中,2個節點有10個相關訓練樣本,2個節點有5個相關訓練樣本,1個數據節點有20個不相關訓練數據樣本。惡意節點的處理與手寫數字識別實驗一樣對應的減少數據集的大小。
首先發布任務“識別手寫數字1”,通過調節可信任務執行節點數據集中手寫數字1的圖片比例,來模擬不同任務執行節點數據集的主題與任務要求的相關度不同,例如相關度為60%意味著100張圖片中只有60張是手寫數字1的圖片。如圖2,可以發現數據集過小或者數據集與任務要求的相似度較低都會影響訓練的模型精度。當數據集大小為200,數據集的任務相關度在100%時,模型精度為90.1%,而數據集的任務相關度在60%時,模型精度僅為83.2%,大約降低7個百分點;同樣的當數據集任務相關度在90%,數據集大小在1 000時,精度為91.7%,而數據集大小在200時,精度僅為89.1%,大約降低了3個百分點。由此可以看出,擁有低質量數據集(數據集太小或者與任務相關性低)的惡意節點會生成低質量本地模型,所以對參與任務執行節點進行篩選。

圖2 數據質量對于模型精度的影響
5.1.1 手寫數字識別
本節將從手寫數字識別結果、惡意節點聲譽值變化情況、惡意節點識別能力、聚合模型的準確率4個方面對3種模型進行比較。
圖3展示了RBLNS、SLM、TRM三種模型對手寫數字識別結果。最左邊數字是RBLNS識別結果,中間數字是SLM的識別結果,最右邊數字是TRM的識別結果。對于總共20個手寫數字,RBLNS可以正確識別18個數字,而TRM和SLM可以分別識別17個和16個。一方面是由于RBLNS在篩選任務執行節點時不僅以節點行為為篩選標準,還考慮節點的數據集與當前任務的貼合程度,從而篩選出行為可靠、數據集與任務需求高度相匹配的最佳任務執行節點集合進行訓練。另一方面是由于RBLNS在聯邦學習聚合模型過程中對本地模型進行篩選,通過篩選本地模型再聚合全局模型替代傳統聯邦學習的隨機聚合,從而提高了識別能力。

圖3 一個聯邦學習識別手寫數字的例子
5.1.2 惡意節點聲譽值變化情況
在對手寫數字分類任務中,為了驗證3種方法對于二次任務執行節點的篩選情況,假設任務執行節點在執行任務T之前至少會執行6個任務,且表現誠實可靠。然后惡意節點突然出現異常行為,實驗結果如圖4所示。3種模型中對于突然出現異常行為的節點聲譽值都開始下降。而RBLNS在最短時間下降了最大幅度,可以快速識別惡意節點。這是由于RBLNS方法中通過對節點上傳的本地模型進行驗證生成節點聲譽意見,惡意任務執行節點一旦行為表現異常,即上傳低質量本地模型,驗證節點會立即對他生成一個驗證結果值為0的聲譽意見,且本文加大了對于惡意行為的權重,這將導致任務結束之后的直接聲譽值很低,又由于考慮了時間對于直接聲譽值的影響,短時間內生成的聲譽意見在計算最終聲譽值的權重較大,所以RBLSN在短時間內下降的幅度最大。

圖4 惡意節點在3種模型下聲譽值隨時間的變化
5.1.3 惡意節點識別能力
本文通過調整惡意節點相互勾結的比例來比較3種模型選擇節點的能力。實驗結果如圖5所示。實驗設置了4組具有不同程度勾結的參與節點,勾結程度分別是0.0、0.1、0.2、0.3,0.0表示節點相互勾結的可能行為0,而0.1表示節點相互勾結的可能性為10%,0.2表示節點相互勾結的可能行為20%,0.3表示節點相互勾結的可能性為30%(此時被動惡意節點的數量小于30%)。

圖5 惡意節點互相勾結情況中3種模型的表現
如圖5(a)所示,在惡意節點之間不相互勾結的情況下,所有的方法都能在300秒內完全識別惡意節點。然而,當惡意節點之間相互勾結程度增加到0.2和0.3時,RBLNS識別時間比其他兩種模型都短。因為RBLNS的聲譽意見由驗證節點生成并達成共識記錄在區塊鏈中,少數惡意節點相互勾結并不會影響共識結果。然后進一步比較了3種模型在不同惡意節點相互勾結情況下將惡意節點識別出來的成功率,從圖5(b)中可以看出,當所有節點相互勾結程度為0.05~0.15時,SLM和RBLNS篩選成功率都比較高,但當惡意節點相互勾結率上升為0.2~0.3時,SLM的識別成功率明顯降低,RBLNS成功率仍然比較高。
5.1.4 全局模型精度
圖6顯示了在參與節點中惡意節點比例為20%的情況下,隨著FL迭代次數的增加,全局模型精度的變化。從這個圖,可以看到隨著迭代次數的增加,3種模型的最終訓練精度都有所提高。五角星符號標記了模型成功收斂,與TRM和SLM相比,RBLNS的全局模型精度略高于這兩個模型,收斂所需的迭代次數也減少。

圖6 當惡意節點比例為20%時,隨著迭代次數的變化,模型精度發生的變化
在圖7展示了在擬合回歸函數y=cos(2πx)的實驗中,利用3種方法分別訓練得到的函數模型隨著輸入的x的變化曲線。可以看到,RBLNS在最佳擬合函數方面的表現優于TRM和SLM。由于RBLNS為任務選擇最佳的任務執行節點集進行協同訓練,使得每次迭代的擬合效果更好,提高了學習速度。

圖7 聯邦學習回歸函數圖例
在本文中,本文提出了分布式聯邦學習系統并在此基礎上提出基于聲譽的學習節點選擇算法。本文使用區塊鏈的共識節點生成聲譽意見,利用區塊鏈的不易篡改的特性管理聲譽意見。在每個任務開始前,利用基于聲譽值的節點選擇算法,對任務發布節點和任務執行節點分別進行選擇。又考慮到任務中節點角色的變化,不同的任務對應不同的角色。針對不同的角色,設計了基于角色的聲譽值計算模型,計算任務發布節點以及任務執行節點的聲譽值分別計算,也實現首次參與任務的節點與多次參加任務的節點聲譽值的分別計算。考慮到不同節點本地模型更新的異構性,而且本地模型的準確性會干擾模型聚合,本文會對收到本地模型篩選后聚合。實驗結果表明,該算法能提高訓練精度,縮短收斂時間。