有關AutoML的介紹以及相關原理可以參閱這篇簡述AutoML由來與其應用現狀

我將AutoML分為傳統AutoML,自動調節傳統的機器學習演算法的參數,比如隨機森林,我們來調節它的max_depth, num_trees, criterion等參數。還有一類AutoML,則專註深度學習。這類AutoML,不妨稱之為深度AutoML。與傳統AutoML的差別是,現階段深度AutoML,會將神經網路的超參數分為兩類,一類是與訓練有關的超參數,比如learning rate, regularization, momentum等;還有一類超參數,則可以總結為網路結構。對網路結構的超參數自動調節,也叫Neural architecture search (nas)。而針對訓練的超參數,也就是傳統AutoML的自動調節,叫Hyperparameter optimization (ho)

轉自JxKing Blog

「傻瓜式「AutoML

傻瓜式AutoML的概念是面向更廣泛用戶的自動機器學習,不需要用戶對演算法,模型,調參有深入理解,只需要輸入數據集,之後所有的任務都集成在平臺作為一種服務,但往往用戶只有調用的許可權,且無法得知內部的演算法,模型架構以及超參數等。由原始數據輸入,到結果輸出,從輸入端到輸出端,中間的神經網路自成一體(也可以當做黑盒子看待),是端到端的。

  • Cloud AutoML

谷歌的automl服務有三種

拿AutoML Vision為例,像網頁上顯示的一樣,要開始使用,您只需要提供幾十個視覺樣本,其餘的一切都由Cloud AutoML來完成,我們來看一下是什麼流程:

  • 將一組圖片複製到 Google Cloud Storage 中。
  • 創建一個列有圖片及其標籤的 CSV 文件。
  • 使用 AutoML Vision 界面創建數據集,並訓練和部署模型。

開始之前

  • 登錄您的 Google 帳號。
  • 在GCP控制檯中,轉到「管理資源」頁面,然後選擇或創建項目。
  • 確保您的項目已啟用結算功能。
  • 啟用Cloud AutoML和雲存儲API.

創建 Cloud Storage 存儲分區

使用 Cloud Shell(一個連接到 GCP Console 項目的基於瀏覽器的 Linux 命令行)創建 Cloud Storage 存儲分區:

  1. 打開 Cloud Shell。
  2. 輸入以下內容:

PROJECT=$(gcloud config get-value project) && BUCKET="${PROJECT}-vcm"

3. 創建存儲分區:

gsutil mb -p ${PROJECT} -c regional -l us-central1 gs://${BUCKET}

4. 為 AutoML Vision 服務帳號添加許可權:

允許 AutoML Vision 服務帳號訪問您的 Google Cloud 項目資源,在 Cloud Shell 會話中,輸入以下內容:

PROJECT=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT
--member="serviceAccount:[email protected]"
--role="roles/ml.admin"
gcloud projects add-iam-policy-binding $PROJECT
--member="serviceAccount:[email protected]"
--role="roles/storage.admin"

5. 將示例圖片複製到存儲分區中:

接下來,複製此 Tensorflow 博文中使用的花卉數據集。這些圖片存儲在公開的 Cloud Storage 存儲分區中,因此您可以直接將它們從那裡複製到您自己的存儲分區中,在 Cloud Shell 會話中,輸入以下內容:

gsutil -m cp -R gs://cloud-ml-data/img/flower_photos/ gs://${BUCKET}/img/

6. 樣本數據集包含一個 CSV 文件,其中包含所有圖片位置以及每個圖片的標籤。您將基於這一文件創建您自己的 CSV 文件:

  • 更新 CSV 文件,使其指向您自己的存儲分區中的文件:

gsutil cat gs://${BUCKET}/img/flower_photos/all_data.csv | sed "s:cloud-ml-data:${BUCKET}:" > all_data.csv

  • 將 CSV 文件複製到您的存儲分區中:

gsutil cp all_data.csv gs://${BUCKET}/csv/

創建數據集

訪問 AutoML Vision 網站,開始創建數據集和訓練模型的過程:http://beta-dot-custom-vision.appspot.com/。

出現提示時,請確保選擇已用於您的 Cloud Storage 存儲分區的項目。

  1. 在 AutoML Vision 頁面中,點擊新建數據集

2. 為此數據集指定名稱。點擊加號 (+) 繼續。

3. 指定 CSV 文件的 Cloud Storage URI。在本快速入門中,CSV 文件位於gs://your-project-123-vcm/csv/all_data.csv。請確保將your-project-123替換為您的具體項目 ID。

4. 點擊創建數據集。導入過程需要幾分鐘才能完成。完成後,您將進入下一頁,其中包含為數據集識別出的所有圖片(包括已標記圖片和未標記圖片)的詳細信息。在過濾標籤下選擇一個標籤即可按標籤過濾圖片。

訓練模型

創建數據集並完成相應處理後,點擊訓練標籤可啟動模型訓練。

點擊開始訓練以繼續。

系統將針對您的模型啟動訓練。對於此數據集,訓練模型的操作需要大約 10 分鐘完成。該服務將在訓練完成後或發生任何錯誤時通過電子郵件通知您。

訓練完成後,您的模型將自動進行部署。

點擊評估標籤可詳細瞭解 F1、精確率和召回率分數。點擊過濾標籤下的每個標籤可詳細瞭解真正例、假負例和假正例。

進行預測

點擊預測標籤,查看有關如何將圖片發送到模型以進行預測的說明。您也可以參閱查詢 AutoML Vision 模型,以及進行預測中顯示的示例。

預測需要調用api介面:具體的代碼等過程戳這裡

以下是找到的國內以及國外用戶具體項目應用Cloud AutoML的博文:

熟悉各種機器學習模型,以 Cloud AutoML Vision 教程為例_圖片?

www.sohu.com
圖標
手把手教你用Cloud AutoML做毒蜘蛛分類器?

blog.csdn.net

可惜的是谷歌目前在AutoML Vision中只支持訓練圖片分類器


  • Baidu EasyDL

百度的EasyDL,同樣有三種大類的服務:

對比谷歌,百度缺少了文本自動翻譯的功能,這可能就是我們平常不用百度翻譯,而用谷歌翻譯的原因吧,但是百度增加了聲音分類,而且在圖像識別類型中增加了物體檢測的功能,以下是本人對於百度easyDL物體檢測功能的使用過程:

1.創建模型

模型就相當於一個空架子,因為百度會幫你用什麼模型來train你還不清楚,這個空架子很好建立,重要的是數據集,不過模型名稱要與你所實現的功能契合,否則到後面就會忘了。

建立好模型之後會出現這個界面,你可與隨時刪除你創建的模型

2.創建數據集

點擊數據中心的上傳即可建立數據集

給你自己的數據集起一個名字,也是要注意命名考究一些,畢竟你不一定要訓練一種數據集。

當你創建好數據集之後,出現這個界面

點擊標註/上傳界面,上傳你需要訓練的照片

或者你也可以先建立你物體檢測的標籤,然後點擊上傳圖片上傳照片。

3.在圖片標註標籤

這裡請注意,目前百度僅支持利用自己的頁面內進行圖片標註,自己標註過的圖片不行。

利用標籤工具框選你要識別的部位,並且在右面選擇你的標籤

當你把所有數據集的圖片標註完成之後便完成了數據集的準備,下一步可以開始訓練了。

4.訓練模型

接下來可以訓練模型了

選擇你建立的模型,並點擊下面的添加數據集,

導入你想訓練的標籤,就可以開始訓練了。

點擊訓練中旁的!可以查看進度,當模型訓練完成之後會自動給你的手機發簡訊。

5.查看並發布模型

模型訓練完之後,可以查看模型訓練的效果,點擊完整評估結果可以查看更細緻的評測,比如單獨一個標籤的識別好壞。

點擊發布模型,輸入自定義的埠名稱,同樣取名也考究一些方便自己調用。

發布模型之後,工作人員會人工審核,親測如果上午發布,一兩個小時就會通過審核,如果下午發布,可能就要晚上或者第二天了。

6.調用訓練好的模型

如果你的模型發布成功,恭喜你擁有一個可以調用的api介面,調用這個介面會直接鏈接這個模型。

打開你的IDE

導入必要的庫:

import requests
import json
import base64

access_token的獲取,我們在調用API時需要帶上該參數才能順利地請求服務,下面的代碼用來獲取Access Token,獲取Access Token可以用多種語言來實現,詳情參考百度雲文檔中心:

url_token = "https://aip.baidubce.com/oauth/2.0/token"
data_token = {"grant_type":"client_credentials","client_id":"SyxRac9LCYvgALevM8jzIrCH","client_secret":"IZNEomXbYA3LZN2g92iOwNc83xvTGYLE"}
#由於post請求的習慣是在body中放入要傳給伺服器的數據,因此,這裡的post方法採用了data參數,而不是params參數。然而,採用params參數也是可以的
resp = requests.post(url_token,data = data_token)
#resp是一個http響應對象,resp.text則是一個json格式的字元串.json.loads()方法可以將json字元串轉為字典。
resp_dict = json.loads(resp.text)
#轉為字典之後的好處就是,可以直接從鍵索引出值,access_token的獲取相比用字元串處理要方便得多
access_token = resp_dict["access_token"]
#print(resp_dict["access_token"])

請求服務

# client_id 為官網獲取的AK, client_secret 為官網獲取的SK
host = https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=b0Xuhn9sZ6hf2u1YcKBP41ii
&client_secret=jtQqGUrWauLAnwA9wdvMvCmvCTVukPE3
response = requests.get(host)
content = response.json()
access_token = content["access_token"]

image = open(rC:\Users\pain\Desktop\plastic.jpg, rb).read()
data = {image: base64.b64encode(image).decode()}

request_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/classification/garbageclassification" + "?access_token=" + access_token
response = requests.post(request_url, data=json.dumps(data))
content = response.json()

print(content)

request url 為上圖的介面地址

client_id 和client_secret分別為發布模型後應用管理中的API Key與Secret Key

替換代碼中的 accesstoken,clientid和client_secret,選擇圖片,即可輸出識別結果:


自動調節參數類

自動調節參數類automl指的是通過平臺上的引擎,或者內置搜索演算法,幫助用戶實現摩模型超參數的自動尋優,但是門檻高於傻瓜式automl,還需要用戶進行模型代碼的實現,轉換輸入數據的格式等。並且對超參數有一定了解。一般屬於傳統機器學習的AutoML

  • 阿里雲pai

阿里雲pai機器學習平臺已經發展很久了,在搭建機器學習演算法可以調用其中的封裝好的模塊,且模塊的種類很多如下:

宣稱搭建機器學習就如同搭積木一般,

不過這種開發平臺還是比較常見的,為什麼還提到pai呢,原因是其添加了一個自動參數調節引擎:

從圖中可以看出,阿里雲新增的引擎在數據集與模型部署之間,並且支持機器學習領域的8大熱門演算法,共計40餘個演算法的自動參數搜索。

也就是說,平臺所做的automl是用戶在明確自己使用模型,並且建立好模型的基礎上,pai平臺訓練的時候,可以進行自動參數選擇。

下面是官方給出的自動調參的簡介:

調參配置

  1. 登錄機器學習控制檯,單擊左側導航欄的實驗
  2. 單擊某個實驗,進入該實驗的畫布區,本文檔以霧霾天氣預測實驗為例。
  3. 選擇畫布左上角的 Auto ML > 模型自動調參

4. 在自動調參配置頁面,選擇需要調參的演算法,單擊下一步

說明:一個實驗中有多個演算法時請單選一個演算法。

5. 在調參配置模塊,選擇調參方式,完成後單擊下一步

阿里雲機器學習提供四種調參方式供您選擇:

1. Evolutionary Optimizer
  • 隨機選定a個參數候選集(探索樣本數a)。
  • 取其中評估指標較高的n個參數候選集,作為下一輪迭代的參數候選集。
  • 繼續在這些參數周邊的r倍(收斂係數r)標準差範圍探索,以探索出新的參數集,來替代上一輪中評估指標靠後的那些a-n個參數集。
  • 根據以上邏輯,迭代m輪(探索次數m),直到找到最優的參數集合。

根據以上原理,最終產生的模型數目為 a+(a-n)*m 。

注意:n的第一個值為 a/2-1,在迭代過程中默認為 n/2-1(小數向上取整)。
      • 數據拆分比例:將輸入數據源分為訓練集以及評估集,0.7 表示 70% 的數據用於訓練模型,30% 用於評估。
      • 探索樣本數:每輪迭代的參數集個數,個數越多越準,計算量越大,取值為 5~30(正整數)。
      • 探索次數:迭代輪數,輪數越多探索越準,計算量越大,取值 1~10(正整數)。
      • 收斂係數:用來調節探索範圍(上文提到的 r 倍標準差範圍搜索),越小收斂越快,但是可能會錯過好的參數,取值0.1~1(小數點後一位浮點數)。
      • 需要輸入每個參數的調節範圍,如果未改變當前參數範圍,則此參數按照默認值代入,並不參與自動調參

2. Random search

    • 每個參數在所在範圍內隨機選取一個值。
    • 將這些值組成一組參數進行模型訓練。
    • 如此進行m輪(迭代次數),訓練產生m個模型並進行排序。
      • 迭代次數:表示在所配置的區間的搜索次數,取值 2~50。
      • 拆分比例參數將輸入數據源分為訓練集以及評估集,0.7 表示 70% 的數據用於訓練模型,30% 用於評估。
      • 需要輸入每個參數的調節範圍,如果未改變當前參數範圍,則此參數按照默認值代入,並不參與自動調參

3. Grid search

    • 將每個參數的取值區間拆成 n 段(網格拆分數)。
    • 在 n 段裡面各隨機取出一個隨機值。假設有 m 個參數,就可以組合出 n^m 組參數。
    • 根據 n^m 組參數訓練生成 n^m 個模型並進行排序。
      • 網格拆分數:表示拆分出的grid個數,取值2~10。
      • 拆分比例參數將輸入數據源分為訓練集以及評估集,0.7 表示 70% 的數據用於訓練模型,30% 用於評估。
      • 需要輸入每個參數的調節範圍,如果未改變當前參數範圍,則此參數按照默認值代入,並不參與自動調參

4. 自定義參數

      • 用戶枚舉參數候選集,然後系統幫用戶對候選集進行全部組合嘗試並打分。
      • 枚舉範圍可以用戶自定義輸入,參數間通過逗號間隔,如果未輸入按照默認參數執行。

6. 在調參模型輸出選擇模塊,配置模型輸出參數,完成後單擊下一步

  • 模型評估:可選擇 AUCF1-scorePRECISIONRECALL 四個維度中的一個作為評估標準。
  • 模型保存:保存模型可以選擇 1~5 個。根據您所選擇的評估標準,對模型進行排名,最終保存排名靠前的幾個模型,數量對應您所選擇的保存模型數量
  • 模型是否向下傳導:開關默認打開。如果開關關閉,將將當前組件的默認參數生成的模型,向下傳導至後續組件節點。如果開關打開,則將自動調參生成的最優模型,向下傳導至後續組件節點。

7. 配置完成後,單擊畫布左上角的運行,運行自動調參演算法。

說明:配置完成後,畫布上的對應演算法已經打開 Auto ML 開關,後續也可以選擇打開或關閉此開關。

8.(可選)滑鼠右鍵單擊模型組件,選擇編輯AutoML參數,更改 AutoML 配置參數。

輸出模型展示

1. 在調參過程中,滑鼠右鍵單擊目標模型組件,選擇調參運行詳情

2. 在 AutoML-自動調參詳情對話框中,單擊指標數據,查看當前調參的進度、各模型的運行狀態等信息。

3. 根據候選模型的指標列表(AUCF1-SCORE準確率召回率)進行排序。

4. 在查看詳情列單擊日誌參數,查看每一個候選模型的日誌及參數。

調參效果展示

單擊上圖中的圖表,查看模型評估對比超參迭代效果對比圖表。

您可以通過超參迭代效果對比,查看每一輪參數更新後評估指標增長的趨勢。

模型存儲

  1. 選擇左側導航欄的模型
  2. 單擊實驗模型,打開實驗模型文件夾。
  3. 單擊打開對應的實驗文件夾,查看 Auto ML 保存的模型。

更多參考資料詳見阿里雲文檔


  • 騰訊智能鈦機器學習

騰訊智能鈦機器學習平臺與阿里雲pai類似,在下圖,可以明顯的看出線上三種產品的定位以及功能:

阿里雲pai平臺相當於TI-ONE的產品,很多GUI模塊可以拖拽以調用,TI-ONE 是一站式的機器學習平臺,通過可視化的拖拽佈局,組合各種數據源、組件、演算法、模型和評估模塊,形成工作流。讓演算法工程師方便地進行模型訓練、評估及預測。

任務工作流示例圖:

可以說與阿里雲pai很類似了。敬請期待的TI-S應該就是屬於傻瓜式Auto ML,類似與百度的easydl。

在此不再贅述,有興趣可以去官網註冊並嘗試:

智能鈦一站式機器學習 TI-ONE?

cloud.tencent.com
圖標

開源AutoML庫

開源的AutoML庫有很多,下面僅列舉幾個知名的,使用AutoML開源庫的門檻要比平臺的auto調參要高一些,儘管庫裏有可以支持automl的機制,但是還是需要手動定義搜索空間等一些參數,需要對演算法的理解深入。

  • 微軟nni

NNI (Neural Network Intelligence) 是一個工具包,可有效的幫助用戶設計並調優機器學習模型的神經網路架構,複雜系統的參數(如超參)等。 NNI 的特性包括:易於使用,可擴展,靈活,高效。

  • 易於使用:NNI 可通過 pip 安裝。 只需要在代碼中添加幾行,就可以利用 NNI 來調優參數。 可使用命令行工具或 Web 界面來查看實驗過程。
  • 可擴展:調優超參或網路結構通常需要大量的計算資源。NNI 在設計時就支持了多種不同的計算資源,如遠程伺服器組,訓練平臺(如:OpenPAI,Kubernetes),等等。 通過訓練平臺,可擁有同時運行數百個 Trial 的能力。
  • 靈活:除了內置的演算法,NNI 中還可以輕鬆集成自定義的超參調優演算法,神經網路架構搜索演算法,提前終止演算法等等。 還可以將 NNI 連接到更多的訓練平臺上,如雲中的虛擬機集羣,Kubernetes 服務等等。 此外,NNI 還可以連接到外部環境中的特殊應用和模型上。
  • 高效:NNI 在系統及演算法級別上不停的優化。 例如:通過 Trial 早期的反饋來加速調優過程。

下圖顯示了 NNI 的體系結構。

主要概念

  • Experiment(實驗):實驗是一次找到模型的最佳超參組合,或最好的神經網路架構的任務。 它由 Trial 和自動機器學習演算法所組成。
  • 搜索空間:是模型調優的範圍。 例如,超參的取值範圍。
  • Configuration(配置):配置是來自搜索空間的一個參數實例,每個超參都會有一個特定的值。
  • Trial: Trial 是一次嘗試,它會使用某組配置(例如,一組超參值,或者特定的神經網路架構)。 Trial 會基於提供的配置來運行。
  • Tuner: Tuner 是一個自動機器學習演算法,會為下一個 Trial 生成新的配置。 新的 Trial 會使用這組配置來運行。
  • Assessor:Assessor 分析 Trial 的中間結果(例如,測試數據集上定期的精度),來確定 Trial 是否應該被提前終止。
  • 訓練平臺:是 Trial 的執行環境。 根據 Experiment 的配置,可以是本機,遠程伺服器組,或其它大規模訓練平臺(如,OpenPAI,Kubernetes)。

Experiment 的運行過程為:Tuner 接收搜索空間並生成配置。 這些配置將被提交到訓練平臺,如本機,遠程伺服器組或訓練集羣。 執行的性能結果會被返回給 Tuner。 然後,再生成並提交新的配置。

每次 Experiment 執行時,用戶只需要定義搜索空間,改動幾行代碼,就能利用 NNI 內置的 Tuner/Assessor 和訓練服務來搜索最好的超參組合以及神經網路結構。 基本上分為三步:

第一步:定義搜索空間

第二步:改動模型代碼

第三步:定義 Experiment 配置

現在nni已經有中文的文檔,其中有一個quickstart文檔值得一讀:

Microsoft/nni?

github.com
圖標

  • Google開源AutoML Adanet

轉自谷歌開源AdaNet:基於TensorFlow的AutoML框架

  • 相關論文: AdaNet: Adaptive Structural Learning of Artificial Neural Networks
  • 論文地址:proceedings.mlr.press/v
  • Github 項目地址:github.com/tensorflow/a
  • 教程 notebook:github.com/tensorflow/a

谷歌發布博客,開源了基於 TensorFlow 的輕量級框架 AdaNet,該框架可以使用少量專家幹預來自動學習高質量模型。AdaNet 在谷歌近期的強化學習和基於進化的 AutoML 的基礎上構建,快速靈活同時能夠提供學習保證(learning guarantee)。重要的是,AdaNet 提供通用框架,不僅能用於學習神經網路架構,還能學習集成架構以獲取更好的模型。

AdaNet 易於使用,能夠創建高質量模型,節省 ML 從業者在選擇最優神經網路架構上所花費的時間,實現學習神經架構作為集成子網路的自適應演算法。AdaNet 能夠添加不同深度、寬度的子網路,從而創建不同的集成,並在性能改進和參數數量之間進行權衡。

AdaNet 適應性地增長集成中神經網路的數量。在每次迭代中,AdaNet 衡量每個候選神經網路的集成損失,然後選擇最好的神經架構進入下一次迭代。

快速易用

AdaNet 實現了 TensorFlow Estimator 介面,通過壓縮訓練、評估、預測和導出極大地簡化了機器學習編程。它整合如 TensorFlow Hub modules、TensorFlow Model Analysis、Google Cloud』s Hyperparameter Tuner 這樣的開源工具。它支持分散式訓練,極大減少了訓練時間,使用可用 CPU 和加速器(例如 GPU)實現線性擴展。

AdaNet 在 CIFAR-100 上每個訓練步(x 軸)對應的準確率(y 軸)。藍線是訓練集上的準確率,紅線是測試集上的性能。每一百萬個訓練步開始一個新的子網路,最終提高整個集成網路的性能。灰色和綠色線是添加新的子網路之前的集成準確率。

TensorBoard 是 TensorFlow 最好的功能之一,能夠可視化訓練過程中的模型指標。AdaNet 將 TensorBoard 無縫集成,以監控子網路的訓練、集成組合和性能。AdaNet 完成訓練後將導出一個 SavedModel,可使用 TensorFlow Serving 進行部署。

學習保證

構建神經網路集成存在多個挑戰:最佳子網路架構是什麼?重複使用同樣的架構好還是鼓勵差異化好?雖然具備更多參數的複雜子網路在訓練集上表現更好,但也因其極大的複雜性它們難以泛化到未見過的數據上。這些挑戰源自對模型性能的評估。我們可以在訓練集分留出的數據集上評估模型表現,但是這麼做會降低訓練神經網路的樣本數量。

不同的是,AdaNet 的方法是優化一個目標函數,在神經網路集成在訓練集上的表現與泛化能力之間進行權衡。直觀上,即僅在候選子網路改進網路集成訓練損失的程度超過其對泛化能力的影響時,選擇該候選子網路。這保證了:

  1. 集成網路的泛化誤差受訓練誤差和複雜度的約束。
  2. 通過優化這一目標函數,能夠直接最小化這一約束。

優化這一目標函數的實際收益是它能減少選擇哪個候選子網路加入集成時對留出數據集的需求。另一個益處是允許使用更多訓練數據來訓練子網路。

AdaNet 目標函數教程:github.com/tensorflow/a

通過固定或自定義 tf.contrib.estimator.Heads,用戶可以使用自己定義的損失函數作為 AdaNet 目標函數的一部分來訓練回歸、分類和多任務學習問題。

用戶也可以通過拓展 adanet.subnetwork.Generator 類別,完全定義要探索的候選子網路搜索空間。這使得用戶能夠基於硬體擴大或縮小搜索空間範圍。子網路的搜索空間可以簡單到複製具備不同隨機種子的同一子網路配置,從而訓練數十種具備不同超參數組合的子網路,並讓 AdaNet 選擇其中一個進入最終的集成模型。


  • TransmogrifAI

如果說去年「機器換人」的輿論來自車間的機器人手,那今年在全球範圍內揮舞起「自動化」大棒的,就成了機器學習。上月,李飛飛發布面向商業公司的機器學習庫AutoML,技術門檻之低,讓不少工程師擔憂不已。一波未平,8月月初,美國德州農工大學開源Auto Keras,同樣的功能,但是完全免費。而今天,軟體巨頭Salesforce也入場了,他們帶來的TransmogrifAI,纔可能是真正的AutoML「殺手」

工作流程:

通常情況下,如果要構建性能良好的機器學習模型,它需要的研究量和開發量是相當可觀的。數據準備、特徵工程、模型訓練……這些繁瑣過程需要不斷迭代,為了得到成熟的模型,數據科學家們可能要耗費數周乃至數月的時間。

TransmogrifAI是一個基於Scala和SparkML構建的庫,它能承擔這個過程中的部分工作。只需幾行代碼,數據科學家就可以自動完成數據清理、特徵工程和模型選擇,然後訓練出一個高性能模型,進行進一步探索和迭代。

它封裝了機器學習過程的五個主要步驟:

特徵推斷(Feature Inference)

數據是所有機器學習管道的第一步。數據科學家先收集所有相關數據,再進行整平操作,添加、聚合不同數據源,從中提取可能有助於預測的原始信號。這之後,提取得到的信號會被放進靈活的數據結構中,也就是DataFrame,方便後續操作。雖然這些數據結構簡單且易於操作,但其中還是存在一些錯誤,可能會對下游造成影響,比如存在類型錯誤和空值錯誤。

TransmogrifAI可以幫助解決這類問題。它允許用戶為其數據指定類型,自動把原始預測變數和響應信號提取為「特徵」。除了原始類型,TransmogrifAI的支持面更豐富、更細化,地理位置、電話號碼、郵政編碼……凡是數據科學家可能頻繁遇到的,它都能進行區分。

事實上,即便用戶沒有指定,TransmogrifAI也可以自行推斷。例如,當它檢測到數據中的文本特徵其實是分類特徵時,它會記錄這個錯誤並進行適當處理。不用等到運行時再報錯,數據科學家在編譯時就能找出大多數錯誤。

自動化特徵工程(Transmogrification)

雖然找到正確的類型有助於數據推理和減少對下游的不良影響,但最終所有特徵都是要被轉換成數字表示的。只有這樣,機器學習演算法才能尋找並利用其中的規律。這個過程被稱為特徵工程。

舉個例子,我們該怎麼把美國的各個州(如CA, NY, TX等)轉成數字?一種方法是把每個州映射為1到50之間的數字,因為美國一共有50個州。但這種編碼方法的缺點在於沒有保留州與州之間地理位置上的關係。那麼如果我們計算州中心點到美國中心點的距離,並以此為編碼依據呢?這確實可以解決之前提到的問題,但它同樣無法反映東西南北位置。

所以特徵工程的方法有無數種,但是找出正確的一種十分不容易。

TransmogrifAI可以幫數據科學家自動化這個惱人的過程。它為自己支持的所有特徵類型提供了無數種編碼技術,能做到不僅把數據轉成演算法可用的格式,還能優化轉換,使機器學習演算法更容易從數據中學習。例如,同樣是年齡數字特徵,它能根據特定問題(時尚行業、金融理財)把它們轉成最合適的年齡段。

儘管TransmogrifAI已經具備了上述強大能力,但考慮到特徵工程是一場無窮無盡的「博弈」,它也支持用戶自定義和擴展默認值。

自動化特徵驗證(Feature Validation)

特徵工程可能導致數據維度出現爆炸性增長,而高維數據往往會讓模型出現差錯!其中最典型的是模型過擬合,另一個容易被忽視但影響巨大的問題是數據泄露。

假設我們手頭有一個包含交易信息的數據集,任務是預測最終的交易金額,而數據集上一個條目叫「已結算交易金額」,這是完成交易後才能統計到的信息。如果我們不慎把這個信息也放進訓練集裏,模型就會發現它的「可參考性」極強,最後成為一個測試時精度極高,實踐時一無所用的廢品。

事實上,在Salesforce業務中,這種後見之明的偏見尤其成問題,因為大部分客戶的數據很複雜,平時也是自動填充的,這使得數據科學家很容易混淆因果關係。

TransgmogrifAI包含執行自動特徵驗證的演算法,可以刪除幾乎沒有預測能力的特徵——隨著時間的推移而使用的特徵,表現出零方差的特徵,或者在訓練樣本中的分佈與預測時的分佈存在顯著不同的特徵。在處理含有偏差的高維數據時,這些演算法會用一系列基於特徵類型的統計測試,結合特徵譜系來檢測和排除偏差。

自動化模型選擇(Model Selection)

完成所有關於數據預處理的工作後,數據科學家就該把機器學習演算法應用於準備好的數據以構建預測模型。如果是手動完成,他們往往需要嘗試許多不同的演算法,並找到合適的參數設置。這是個耗時的工程。

TransmogrifAI的模型選擇器可以在數據上運行多種演算法,並比較它們的平均驗證錯誤,從中挑出最佳演算法。除此之外,它還能通過適當地對數據進行採樣並重新校準預測以匹配真實的先驗,自動處理不平衡數據的問題,進一步提高模型性能。

超參數優化(Hyperparameter Optimization)

上述自動化步驟的基礎都涉及超參數優化,它幾乎無處不在。而就是這麼一個耗時久、任務量重、讓數據科學家望而生畏的操作,它背後的技術原理卻不難,可以直接看成一個高性能模型和一個隨機數生成器模型。這個任務,TransmogrifAI可以代勞。

總的來看,現在TransmogrifAI在Salesforce內部已經成功把訓練模型所需的總時間從幾周、幾個月縮短到了幾個小時。而封裝所有這些複雜操作的代碼卻非常簡單,只需短短几行就能搞定:

// 讀取交易數據
val dealData = DataReaders.Simple.csvCase[Deal](path = pathToData).readDataset().toDF()

// 抽取特徵
val (isClosed, predictors) = FeatureBuilder.fromDataFrame[RealNN](dealData, response = "isClosed")

// 自動化特徵工程
val featureVector = predictors.transmogrify()

// 自動化特徵驗證
val cleanFeatures = survived.sanityCheck(featureVector, removeBadFeatures = true)

// 自動化模型選擇
val (pred, raw, prob) = BinaryClassificationModelSelector().setInput(isClosed, cleanFeatures).getOutput()

// 建立工作流並開始訓練模型
val model = new OpWorkflow().setInputDataset(dealData).setResultFeatures(pred).train()


同時值得一提的就是autosklearn,熟悉sklearn的同學可以看看:

ML神器:sklearn的快速使用 - ML小菜鳥 - 博客園?

www.cnblogs.com
圖標
auto-sklearn - AutoSklearn 0.4.0 documentation?

automl.github.io

總結auto-sklearn - AutoSklearn 0.4.0 documentation總結

一般情況下,進行機器學習首先需要大量的訓練數據,再由機器學習工程師/數據科學家對數據進行分析,設計演算法形成訓練模型;這需要大量的專業知識。但是,如果使用AutoML,就像是在使用一個工具,我們只需要將訓練數據集傳入AutoML,那麼這個工具就會自動幫我們生成參數和模型,形成訓練模型,這樣即使不具備機器學習方面深入的專業知識也可以進行機器學習方面的工作。

轉自blog.csdn.net/lpjishu/a

目前還需要人類去使用AutoML,配置參數;在未來就是通過大量的人工智慧來生成AutoML Box,再將數據傳遞到AutoML Box中生產訓練模型,如下圖所示:


推薦閱讀:
相關文章