你的AI有訓練樣本嗎?從0到1教你解決AI數據短缺問題

六年前,IBM Watson進軍智能醫療領域,欲通過AI解決人類醫生都難以解決的醫療問題,一度成爲AI界的“絕對明星”。但隨後,Watson被爆出無法在現實中勝任醫生的工作,給出了一大堆不可靠的醫療建議。最終,Watson被重磅合作伙伴棄用,其研發團隊在經過數次裁員後,也所剩無幾。

其實,IBM Watson的設計思想不但沒有錯,可能還堪稱AI醫療“方法論”的締造者之一。但爲什麼IBM Watson就這樣隕落了呢?罪魁禍首其實是數據。

AI模型的訓練需要大量的優質數據。在所有IBM Watson可以診斷的單病種中,數據樣本量最大的是肺癌,可關於肺癌的數據樣本竟然只有635例,其中一部分還是人工設計的案例,並非真實的案例。

想以這樣的數據量訓練出一個可以實際投入生產的AI模型無異於癡人說夢。並非IBM不想獲取更多數據,實是無法獲取更多數據。由於隱私保護相關法案的限制,加上一些行業數據離散分佈的特性,一個AI模型想要獲取充足的訓練數據是非常困難的。

AI的現實遠比理想要骨感的多。

正是在這種情況下,聯邦學習走入了大衆眼中。聯邦學習本質上是一種加密的分佈式機器學習技術,可以在不披露底層數據和加密形態的前提下共建模型。

2016年,谷歌提出“聯邦學習”的概念,爲解決此類數據問題提供了新的思路。2018年,微衆銀行向IEEE標準協會提交關於建立聯邦學習標準的提案獲批,這也是國際上首個針對人工智能協同技術框架訂立標準的項目。2019年1月,微衆AI團隊將工業級聯邦學習平臺FATE開源,終於爲數據的聯合應用問題夯實了基礎。

一、縱、橫向聯邦學習,保護隱私的同時聯合建模

爲了在保護數據隱私的情況下實現模型共建,微衆銀行將聯邦學習的應用範疇進行業務擴展,形成了三類體系:縱向聯邦學習、橫向聯邦學習和聯邦遷移學習,大賽主要聚焦縱向和橫向聯邦學習。

縱向和橫向聯邦學習主要參照用戶和用戶特徵兩個維度進行劃分。其中,用戶維度是指用戶ID,此ID一般爲一個數據集合,可能包括電話號碼、身份證號碼等一系列數據,用以區分不同的用戶;用戶特徵維度是指用戶財務數據、出行數據、愛好數據等與用戶畫像有關的特徵數據。

接下來,我們分別瞭解縱向和橫向聯邦學習的概念,以及其是如何按照用戶和用戶特徵維度進行劃分的。

縱向聯邦學習

縱向聯邦學習是指,在兩個數據集的用戶重疊較多而用戶特徵重疊較少的情況下,我們把數據集按照縱向(即特徵維度)切分,並取出雙方用戶相同而用戶特徵不完全相同的那部分數據進行訓練。

比如說,擁有用戶財務數據的銀行和擁有用戶畫像的社交媒體公司,在法律層面上是不允許共享數據建立模型的。在這種情況下,縱向聯邦學習就派上了用場,先進行樣本對齊,繼而進行算法拆解,最終在保證數據隱私的情況下建立聯合模型,雙方皆大歡喜。

橫向聯邦學習

橫向聯邦學習是指,在兩個數據集的用戶特徵重疊較多,而用戶重疊較少的情況下,我們把數據集按照橫向(即用戶維度)切分,並取出雙方用戶特徵相同而用戶不完全相同的那部分數據進行訓練。

最典型的例子是銀行間共建反洗錢模型。雖然用戶特徵重疊很多,但各自樣本數量非常單薄。最終的訴求還是在保證各自數據隱私的情況下,共建聯合的反洗錢模型,且模型效果超過單邊數據建模。

兩種聯邦學習最終都在不共享數據的情況下,實現了模型的共建,解決了AI的數據問題,但業界仍然需要一個工業級的開源平臺作爲探索聯邦學習的基礎。

運氣不錯,微衆銀行AI團隊完成了FATE平臺 的建設並於2019年1月宣佈開源,3月誕生第一位外部代碼貢獻者。一個開源的、工業級聯邦學習應用構建平臺終於到來了。

二、認識FATE,構建聯邦學習應用

FATE平臺通過一站式聯合建模幫助開發者快速構建聯邦學習應用。

聯邦統計主要是對數據進行預處理,比如進行樣本對齊、求係數之間的相關性和IV值等等;聯邦特徵工程環節主要是進行數據的特徵分箱和特徵選擇,特徵分箱是指將數據進行離散化處理,特徵選擇主要是指選擇部分適合建模的樣本特徵;在模型訓練環節,FATE已經提供了多種算法給用戶進行模型訓練,如Secureboost等;聯邦在線推理則將訓練完的模型部署到生產環境,做在線推理。

通過這樣的workflow就可以非常方便的訓練並部署一個聯邦學習模型。

而從架構上看,FATE的核心功能主要分爲四層:

  • FATE Workflow:通過DAG圖定義聯邦學習算法工作流。
  • FATE FederatedML Functions:包含聯邦學習算法各個功能組件。
  • EggRoll:分佈式計算和存儲抽象。
  • Federated Network:跨站點網絡通信抽象。

其中最核心的部分是FederatedML Function,分爲五層結構:

在部署方式上,FATE支持單機版部署和集羣版部署,集羣版部署相對複雜一些,需要大家參考文檔進行。

單機Docker版安裝部署命令如下:

git clone https://github.com/WeBankFinTech/FATE.git
FATE $ sh build_standalone_docker.sh
FATE $ CONTAINER_ID='docker run -t -d fate/standalone'
FATE $ docker exec -t -i ${CONTAINER_ID} bash

部署完成後通過三步即可驗證是否成功:

  • 單機版單元測試驗證:
sh ./federatedml/test/run_test.sh
  • Toy-example測試:用於測試eggroll的接口是否完整可用
  • 最小化測試:測試一個最小的建模任務是否能完成

在項目的example文件夾下,也實現了很多例子可以作爲參考,比如hetero_feature_binning

這個例子可以方便的讓你測試Feature binning算法,即一種特徵構造方法,測試命令爲:

sh run_feature_binning_standalone.sh 

運行後的日誌存放在:

your_install_path / logs / feature_binning_ {timestamp}

也可以點擊這裏訪問直播錄像教學。

一旦你開始從代碼入手,踏上了學習FATE及聯邦學習的旅途,人工智能就不再是一個空有模型、沒有數據的高新概念,而是一個你真正可以觸達,可以解決的技術問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章