- 聯(lián)邦學(xué)習(xí)實(shí)戰(zhàn)
- 楊強(qiáng)等
- 2252字
- 2021-05-19 18:07:06
5.4 橫向聯(lián)邦模型訓(xùn)練
數(shù)據(jù)準(zhǔn)備好之后,下一步可以利用FATE來(lái)構(gòu)建橫向聯(lián)邦模型進(jìn)行訓(xùn)練。在FATE中構(gòu)建橫向聯(lián)邦模型,通常情況下會(huì)涉及下面三項(xiàng)工作。
? 數(shù)據(jù)輸入:將文件(如csv、txt等文本文件)轉(zhuǎn)換為FATE支持的DTable格式。DTable是一個(gè)分布式數(shù)據(jù)集合,是FATE的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),F(xiàn)ATE的所有運(yùn)算都基于DTable格式進(jìn)行。
? 模型訓(xùn)練:數(shù)據(jù)轉(zhuǎn)換為DTable格式后,F(xiàn)ATE可以為模型訓(xùn)練構(gòu)建流水線(pipeline)。
? 模型評(píng)估:橫向聯(lián)邦的模型評(píng)估與集中式的模型評(píng)估一樣,將訓(xùn)練好的模型作用于測(cè)試數(shù)據(jù)集來(lái)評(píng)估模型性能。
FATE為橫向聯(lián)邦訓(xùn)練提供了豐富的接口,如4.3節(jié)所述,開發(fā)人員只需要通過提供dsl和conf配置文件,就能完成上面的所有操作。為了后面的敘述統(tǒng)一,我們假設(shè)讀者安裝的FATE單機(jī)版本目錄如下,后面的講解都以該目錄作為基目錄。

5.4.1 數(shù)據(jù)輸入
FATE提供了將本地文件轉(zhuǎn)化為DTable格式的工具,首先將本地的訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)上傳到$fate_dir/examples/data目錄,該操作可以使用rz命令完成。

我們定義上傳數(shù)據(jù)配置文件,將其命名為upload_data.json,其內(nèi)容如下所示。需要修改其中的三個(gè)字段,即file,table_name和namespace,其余字段使用默認(rèn)值。

這三個(gè)字段對(duì)應(yīng)的含義如下。
? file:對(duì)應(yīng)的本地文件位置,也就是剛剛上傳的目錄文件夾。
? table_name:將本地文件轉(zhuǎn)換為DTable格式的表名,可根據(jù)需要自行設(shè)置。
? namespace:DTable格式的表名對(duì)應(yīng)的命名空間,可根據(jù)需要自行設(shè)置。
以上傳文件breast_1_train.csv為例,修改后的upload_data.json文件如下所示。

修改完成后,在命令行中執(zhí)行下面的命令(upload),F(xiàn)ATE會(huì)自動(dòng)將原始的本地文件breast_1_train.csv轉(zhuǎn)換為DTable格式。

如果成功執(zhí)行,那么系統(tǒng)將返回下面的信息,可以將board_url字段中提供的網(wǎng)址輸入瀏覽器中查看執(zhí)行結(jié)果。

同理,對(duì)于breast_2_train.csv,可以按照上面的過程執(zhí)行。對(duì)于測(cè)試數(shù)據(jù)集,我們將本地測(cè)試文件上傳到兩個(gè)參與方,并各自轉(zhuǎn)化為DTable格式。如下所示。

5.4.2 模型訓(xùn)練
當(dāng)我們?cè)谏弦徊綄⒈镜財(cái)?shù)據(jù)轉(zhuǎn)換為DTable格式后,就可以開始構(gòu)建聯(lián)邦學(xué)習(xí)訓(xùn)練流水線了。FATE官方提供了很多模型參考例子。當(dāng)前FATE支持下面幾種常用的機(jī)器學(xué)習(xí)模型,如圖5-5所示。
? 線性模型:包括橫向和縱向的線性回歸、邏輯斯蒂回歸等線性模型實(shí)現(xiàn)。
? 樹模型:基于縱向的GBDT實(shí)現(xiàn)。
? 神經(jīng)網(wǎng)絡(luò):支持橫向的深度神經(jīng)網(wǎng)絡(luò)模型DNN。

圖5-5 FATE支持的幾種常用機(jī)器學(xué)習(xí)模型
本章使用的是邏輯回歸模型。進(jìn)入 $fate_dir/examples/dsl/v1/homo_logistic_regression目錄,在該目錄下已經(jīng)有很多預(yù)設(shè)的dsl和conf文件。在本節(jié)的模型訓(xùn)練中,我們挑選其中兩個(gè)來(lái)修改,即使用test_homolr_train_job_dsl.json和test_homolr_train_job_conf.json兩個(gè)文件來(lái)幫助構(gòu)建橫向聯(lián)邦模型。
? test_homolr_train_job_dsl.json:用來(lái)描述任務(wù)模塊,將任務(wù)模塊以有向無(wú)環(huán)圖的形式組合在一起。
? test_homolr_train_job_conf.json:用來(lái)設(shè)置各個(gè)組件的參數(shù),比如輸入模塊的數(shù)據(jù)表名、算法模塊的學(xué)習(xí)率、batch大小、迭代次數(shù)等。
首先查看dsl配置文件。在命令行中輸入命令,打開上述dsl文件。當(dāng)前的dsl已經(jīng)定義了三個(gè)組件模塊,這三個(gè)組件也構(gòu)成了最基本的橫向聯(lián)邦模型流水線,在本案例中直接使用即可。
? dataio_0:數(shù)據(jù)I/O組件,用于將本地?cái)?shù)據(jù)轉(zhuǎn)換為DTable。
? homo_lr_0:橫向邏輯回歸組件。
? evaluation_0:模型評(píng)估組件,如果沒有提供測(cè)試數(shù)據(jù)集,將自動(dòng)使用訓(xùn)練數(shù)據(jù)集進(jìn)行模型評(píng)估。
接下來(lái),查看conf配置文件,該文件包括運(yùn)行相關(guān)的所有參數(shù)信息,在一般情況下使用默認(rèn)值即可,需要修改的地方包括以下幾處。
? role_parameters字段:找到role_parameters字段,該字段下包括guest和host,分別對(duì)應(yīng)于兩個(gè)參與方。這里需要修改三個(gè)參數(shù)。首先是train_data下面的name和namespace,代表的是訓(xùn)練數(shù)據(jù)的DTable表名和命名空間;此外,label_name表示的是標(biāo)簽列對(duì)應(yīng)的屬性名,比如本案例中,我們的標(biāo)簽列名是“y”。

? algorithm_parameters字段:algorithm_parameters字段用來(lái)設(shè)置模型訓(xùn)練的超參數(shù)信息,包括優(yōu)化函數(shù)、學(xué)習(xí)率、迭代次數(shù)等,可以根據(jù)實(shí)際需要自行修改。


文件配置修改完后,在命令行中輸入下面的命令(submit_job)執(zhí)行模型訓(xùn)練,該命令只需要提供dsl和conf配置文件即可。

如果一切運(yùn)行正常,我們可以得到下面的輸出信息,將board_url中的網(wǎng)址輸入瀏覽器中可查看當(dāng)前的任務(wù)運(yùn)行情況。

5.4.3 模型評(píng)估
模型評(píng)估是機(jī)器學(xué)習(xí)算法設(shè)計(jì)中的重要一環(huán),在聯(lián)邦學(xué)習(xí)場(chǎng)景下也是如此,常用的模型評(píng)估方法包括留出法和交叉驗(yàn)證法。
? 留出法(Hold-Out):將數(shù)據(jù)按照一定的比例進(jìn)行切分,預(yù)留一部分?jǐn)?shù)據(jù)作為評(píng)估數(shù)據(jù)集,用于評(píng)估聯(lián)邦學(xué)習(xí)的模型效果,如圖5-6所示。
? 交叉驗(yàn)證法(Cross-Validation):將數(shù)據(jù)集D切分為k份,D1,D2,· · ·,Dk,每一次隨機(jī)選用其中的k-1份數(shù)據(jù)作為訓(xùn)練集,剩余的一份數(shù)據(jù)作為評(píng)估數(shù)據(jù)。這樣可以獲得k組不同的訓(xùn)練數(shù)據(jù)集和評(píng)估數(shù)據(jù)集,得到k個(gè)評(píng)估的結(jié)果,取其均值作為最終模型評(píng)估結(jié)果,如圖5-7所示。

圖5-6 留出法

圖5-7 交叉驗(yàn)證法
為了評(píng)估模型的效果,我們使用額外的數(shù)據(jù)集作為評(píng)估數(shù)據(jù)集(即采用留出法)。在5.4.1節(jié)中,我們?yōu)閮蓚€(gè)參與方都分配了一份測(cè)試數(shù)據(jù)breast_eval.csv,并將其轉(zhuǎn)換為DTable格式。為了將這部分?jǐn)?shù)據(jù)用于模型評(píng)估,需要修改dsl的組件配置。具體來(lái)說(shuō),在test_homolr_train_job_dsl文件中,在components組件下添加一個(gè)新的數(shù)據(jù)輸入組件“dataio_1”,用來(lái)讀取測(cè)試數(shù)據(jù),如下所示。

dataio_0與dataio_1的設(shè)置方式基本一致,主要需要設(shè)置module、input和output,如下所示。


然后,需要修改conf文件,在role_parameters字段中為guest和host添加測(cè)試數(shù)據(jù)的DTable表名。

修改完文件配置,為了和沒有測(cè)試數(shù)據(jù)的版本做區(qū)分,我們將dsl文件另存為test_homolr_evaluate_job_dsl.json,將conf文件另存為test_homolr_evaluate_job_conf.json,然后執(zhí)行submit_job命令。

在輸出信息中,通過提供的board_url可以查看帶有模型評(píng)估算法組件模塊的有向無(wú)環(huán)圖,如圖5-8所示。該圖實(shí)際上由訓(xùn)練模塊組件和評(píng)估模塊組件兩部分構(gòu)成。可以點(diǎn)擊評(píng)估模塊組件中的evaluation_1,然后點(diǎn)擊右邊的view the outputs按鈕查看模型在評(píng)估集上的結(jié)果,如圖5-9所示。
打開可視化界面,將看到內(nèi)置的各種評(píng)估指標(biāo)變化曲線,如ROC、K-S、Accuracy等,如圖5-10所示。
此外,我們還可以查看各評(píng)估指標(biāo),如AUC、K-S、混淆矩陣的具體數(shù)值,如圖5-11所示。

圖5-8 有向無(wú)環(huán)圖
左邊是沒有添加評(píng)估數(shù)據(jù)組件的流水線;右邊是添加了評(píng)估數(shù)據(jù)組件的流水線

圖5-9 查看評(píng)估集上的結(jié)果

圖5-10 各種評(píng)估指標(biāo)變化曲線

圖5-11 各評(píng)估指標(biāo)
- AI落地:讓人工智能為你所用
- PVCBOT零基礎(chǔ)機(jī)器人制作(第3版)
- 聯(lián)邦學(xué)習(xí)實(shí)戰(zhàn)
- 生成式AI:人工智能的未來(lái)
- 新一代人工智能:無(wú)代碼人工智能開發(fā)平臺(tái)實(shí)踐
- 一本書讀懂ChatGPT、AIGC和元宇宙
- 機(jī)器學(xué)習(xí)算法評(píng)估實(shí)戰(zhàn)
- 深度學(xué)習(xí)在醫(yī)學(xué)圖像中的應(yīng)用
- 解碼智能時(shí)代2021:來(lái)自未來(lái)的數(shù)智圖譜
- 人工智能的進(jìn)化
- GPT圖解:大模型是怎樣構(gòu)建的
- 碼農(nóng)的零門檻AI課:基于fastai與PyTorch的深度學(xué)習(xí)
- 人工智能重塑世界(第2版)
- DeepSeek全場(chǎng)景指南
- 如何創(chuàng)造思維:人類思想所揭示出的奧秘