Model Search:炼丹师最强危机,谷歌开源最强AutoML工具!
Model Search
簡(jiǎn)介
神經(jīng)網(wǎng)絡(luò)(NN)的成功通常取決于它對(duì)各種任務(wù)的泛化能力。然而,設(shè)計(jì)一個(gè)泛化性較好的神經(jīng)網(wǎng)絡(luò)是非常具有挑戰(zhàn)性的,因?yàn)檠芯拷鐚?duì)神經(jīng)網(wǎng)絡(luò)如何泛化的理解目前還是有限的,例如:
- 對(duì)于給定的問(wèn)題,合適的神經(jīng)網(wǎng)絡(luò)是什么樣子的?
- 網(wǎng)絡(luò)應(yīng)該多深比較合適?
- 該使用哪種類(lèi)型的圖層?
- 是否LSTM已經(jīng)夠用了還是Transformer會(huì)更好?亦或是兩者兼而有之?
- ensembling或蒸餾可以提高性能嗎?
在考慮機(jī)器學(xué)習(xí)(ML)領(lǐng)域時(shí),這些棘手的問(wèn)題變得更具挑戰(zhàn)性,因?yàn)樵谶@些領(lǐng)域中,可能存在比其他領(lǐng)域更好的直覺(jué)和更深的理解。
近年來(lái),AutoML算法的出現(xiàn)幫助了非常多的研究人員在不需要手動(dòng)實(shí)驗(yàn)的情況下自動(dòng)找到合適的神經(jīng)網(wǎng)絡(luò)。
例如神經(jīng)結(jié)構(gòu)搜索(NAS)這樣的技術(shù),使用強(qiáng)化學(xué)習(xí)(RL)、演化算法和組合搜索等算法,從給定的搜索空間構(gòu)建神經(jīng)網(wǎng)絡(luò)。通過(guò)適當(dāng)?shù)脑O(shè)置,這些技術(shù)已經(jīng)證明它們能夠帶來(lái)比手工設(shè)計(jì)的更好的結(jié)果。但通常情況下,這些算法的計(jì)算量很大,需要數(shù)千個(gè)模型進(jìn)行訓(xùn)練才能收斂。此外,他們探索的搜索空間是特定領(lǐng)域的,并納入了大量前人的知識(shí),不能很好地進(jìn)行跨領(lǐng)域的轉(zhuǎn)移。例如,在圖像分類(lèi)中,傳統(tǒng)的NAS搜索兩個(gè)好的構(gòu)建塊(卷積塊和下采樣塊),它按照傳統(tǒng)的約定排列來(lái)創(chuàng)建完整的網(wǎng)絡(luò)。
為了克服這些缺點(diǎn)并將AutoML解決方案的使用范圍擴(kuò)展到更廣泛的研究社區(qū),我們很高興宣布Model Search的開(kāi)源版本,這個(gè)平臺(tái)可以幫助研究人員高效、自動(dòng)地開(kāi)發(fā)最佳的ML模型。Model Search并不專(zhuān)注于某個(gè)特定的領(lǐng)域,它是領(lǐng)域無(wú)關(guān)的、靈活的,并且能夠找到最適合給定數(shù)據(jù)集和問(wèn)題的適當(dāng)體系結(jié)構(gòu),同時(shí)最小化編碼時(shí)間、工作量和計(jì)算資源。它建立在Tensorflow之上,可以在單機(jī)上運(yùn)行,也可以在分布式環(huán)境下運(yùn)行。
1. 概覽
Model Search系統(tǒng)由多個(gè)訓(xùn)練器、一個(gè)搜索算法、一個(gè)遷移學(xué)習(xí)算法和一個(gè)數(shù)據(jù)庫(kù)組成。該系統(tǒng)以自適應(yīng)但異步的方式對(duì)各種ML模型(不同的框架和訓(xùn)練技術(shù))進(jìn)行訓(xùn)練和實(shí)驗(yàn)評(píng)估。當(dāng)每個(gè)trainer獨(dú)立進(jìn)行實(shí)驗(yàn)時(shí),所有trainers都分享從他們的實(shí)驗(yàn)中獲得的知識(shí)。在每個(gè)循環(huán)開(kāi)始時(shí),搜索算法查找所有已完成的試驗(yàn),并使用beam search來(lái)決定下一步的試驗(yàn)內(nèi)容。然后,它調(diào)用迄今為止發(fā)現(xiàn)的最佳體系結(jié)構(gòu)之一的變異,并將生成的模型分配給trainer。
該系統(tǒng)從一組預(yù)定義的blocks構(gòu)建神經(jīng)網(wǎng)絡(luò)模型,每個(gè)block表示一個(gè)已知的微結(jié)構(gòu),如LSTM、ResNet或Transformer層。通過(guò)使用預(yù)先存在的體系結(jié)構(gòu)組件塊,模型搜索能夠跨域利用NAS研究中現(xiàn)有的最佳知識(shí)。這種方法也更有效,因?yàn)樗剿鞯氖墙Y(jié)構(gòu),而不是其更基本和更詳細(xì)的組件,因此減少了搜索空間的規(guī)模。
模型搜索框架是建立在Tensorflow之上的,所以block可以實(shí)現(xiàn)任何以張量作為輸入的函數(shù)。例如,假設(shè)有人想引入一個(gè)新的搜索空間,該空間由一系列的微體系結(jié)構(gòu)組成。該框架將采用新定義的塊,并將其納入搜索過(guò)程,以便算法可以從提供的組件構(gòu)建最佳的神經(jīng)網(wǎng)絡(luò)。所提供的塊甚至可以完全定義的神經(jīng)網(wǎng)絡(luò),已經(jīng)知道這些神經(jīng)網(wǎng)絡(luò)可以解決感興趣的問(wèn)題。在這種情況下,可以將Model Search配置為一個(gè)功能強(qiáng)大的ensembling機(jī)器。
在Model Search中實(shí)現(xiàn)的搜索算法具有自適應(yīng)性、貪婪性和增量性,使其收斂速度快于RL算法。不過(guò),它們模仿了RL算法的“explore & exploit”特性,將搜索結(jié)果分離出來(lái)(explore step),并通過(guò)整合發(fā)現(xiàn)的好的候選來(lái)提高準(zhǔn)確性(exploit step)。核心的搜索算法在對(duì)體系結(jié)構(gòu)或訓(xùn)練技術(shù)應(yīng)用隨機(jī)變化(例如,使體系結(jié)構(gòu)更深入)之后自適應(yīng)地修改前k個(gè)執(zhí)行實(shí)驗(yàn)中的一個(gè)(其中k可由用戶指定)。
為了進(jìn)一步提高效率和準(zhǔn)確性,可以在不同的內(nèi)部實(shí)驗(yàn)之間進(jìn)行遷移學(xué)習(xí)。Model Search有兩種方式-通過(guò)知識(shí)提煉(knowledge distillation)或權(quán)重共享(weight sharing)。知識(shí)提煉可以通過(guò)添加一個(gè)損失項(xiàng)來(lái)提高候選項(xiàng)的準(zhǔn)確度,該損失項(xiàng)與高性能模型的預(yù)測(cè)值相匹配,此外還有基本事實(shí)。另一方面,權(quán)重共享通過(guò)從先前訓(xùn)練的模型中復(fù)制合適的權(quán)重并隨機(jī)初始化剩余的模型,從先前訓(xùn)練的候選模型中引導(dǎo)網(wǎng)絡(luò)中的一些參數(shù)(應(yīng)用變異后)。這使得訓(xùn)練更快,從而有機(jī)會(huì)發(fā)現(xiàn)更多(更好)的體系結(jié)構(gòu)。
2. 實(shí)驗(yàn)結(jié)果
Model Search以最少的迭代改進(jìn)了生產(chǎn)模型。在最近的一篇論文中,我們通過(guò)發(fā)現(xiàn)一個(gè)用于關(guān)鍵詞識(shí)別和語(yǔ)言識(shí)別的模型,展示了Model Search在語(yǔ)音領(lǐng)域的能力。在不到200次的迭代中,所得到的模型比由專(zhuān)家設(shè)計(jì)的內(nèi)部最先進(jìn)的生產(chǎn)模型精度稍有提高,使用的可訓(xùn)練參數(shù)少了約130K(184K VS 315K)。
我們還應(yīng)用Model Search來(lái)尋找一種適合于在被深度探索的CIFAR-10圖像數(shù)據(jù)集上進(jìn)行圖像分類(lèi)的體系結(jié)構(gòu)。
使用一組已知的卷積blocks,包括卷積、resnet塊(即兩個(gè)卷積和一個(gè)skip連接)、NAS-A單元、全連接層等,我們觀察到,在209次試驗(yàn)中(即僅探索209個(gè)模型),我們能夠快速達(dá)到91.83的基準(zhǔn)精度。相比之下,在5807次NasNet算法(RL)試驗(yàn)和1160次PNAS(RL+Progressive)試驗(yàn)中,先前表現(xiàn)最好的人達(dá)到了相同的threshold精度。
3. 小結(jié)
我們希望Model Search代碼能為研究人員提供一個(gè)靈活的、領(lǐng)域無(wú)關(guān)的ML模型發(fā)現(xiàn)框架。通過(guò)建立在給定領(lǐng)域的先前知識(shí)的基礎(chǔ)上,我們相信,當(dāng)提供由標(biāo)準(zhǔn)構(gòu)建塊組成的搜索空間時(shí),該框架足夠強(qiáng)大,能夠構(gòu)建具有良好研究問(wèn)題的最新性能的模型。
二、知識(shí)點(diǎn)補(bǔ)充&簡(jiǎn)單案例
關(guān)于序列搜索策略的決定取決于一個(gè)spectrum。如果我們只關(guān)心準(zhǔn)確性,那么很明顯枚舉所有的情況(exhaustive search)是最佳的選擇。但是如果我們更加關(guān)注計(jì)算成本的話,那么貪心搜索(greedy search)將會(huì)是一個(gè)不錯(cuò)的選擇。而B(niǎo)eam Search就是二者中間,希望能在準(zhǔn)確性和計(jì)算成本之間取得一個(gè)折中。
Beam search有一個(gè)超參數(shù),叫做beam size k。在時(shí)間步驟1,我們選擇最高條件概率的個(gè)token。它們中的每一個(gè)將分別是k個(gè)候選輸出序列的第一個(gè)token。在隨后的每個(gè)時(shí)間步上,基于上一時(shí)間步的候選輸出序列,我們繼續(xù)從k|y|中選擇具有最高條件概率的候選輸出序列。
下圖是一個(gè)beam search size為2的案例。
- A;
- C;
- A,B;
- C,E;
- A,B,D;
- C,E,D;
最后,我們基于這六個(gè)序列(例如,包括“”和“”之后的丟棄部分)獲得最終候選輸出序列集。然后我們選擇以下得分最高的序列作為輸出序列:
2. 案例
直接運(yùn)行作者開(kāi)源的工具包會(huì)有較多的bug需要自己去調(diào)。
2.1 下載工具包
!git clone https://github.com/google/model_search.git %cd ./model_search/ !ls2.2 安裝依賴(lài)文件
!pip install -r requirements.txt !ls model_search # 如果沒(méi)有protoc,先安裝protoc # !brew install protoc !protoc --python_out=./ model_search/proto/phoenix_spec.proto !protoc --python_out=./ model_search/proto/hparam.proto !protoc --python_out=./ model_search/proto/distillation_spec.proto !protoc --python_out=./ model_search/proto/ensembling_spec.proto !protoc --python_out=./ model_search/proto/transfer_learning_spec.proto2.3 數(shù)據(jù)讀取
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.preprocessing import MinMaxScaler!lsLICENSE WORKSPACE [34mmodel_search[m[m README.md default.csv requirements.txt## 該文件下載自:https://archive.ics.uci.edu/ml/machine-learning-databases/00350/default%20of%20credit%20card%20clients.xls data=pd.read_excel('../default of credit card clients.xls',skiprows=1) data=data.rename({'default payment next month':'default'}, axis=1) data.head()categorical=['SEX','EDUCATION','MARRIAGE'] numeric=['PAY_0','PAY_2','PAY_3','PAY_4','PAY_5','PAY_6']data_final=pd.get_dummies(data=data[categorical], columns=['SEX','EDUCATION','MARRIAGE']) data_final.head()data_default=pd.concat([data['default'], data_final, data[numeric]], axis=1) data_default.to_csv('default.csv',sep = ',', index = False, header = None) data_default.head()2.4 模型訓(xùn)練
import pandas as pd import seaborn as sns import matplotlib.pyplot as pltfrom sklearn.preprocessing import MinMaxScalerimport model_search from model_search import constants from model_search import single_trainer from model_search.data import csv_data %matplotlib inline trainer = single_trainer.SingleTrainer(data=csv_data.Provider(label_index=0, logits_dimension=2, record_defaults=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], filename="default.csv"),spec='./model_search/configs/dnn_config.pbtxt')!mkdir tmp !mkdir ./tmp/run_exampleimport sys from absl import app# Addresses `UnrecognizedFlagError: Unknown command line flag 'f'` sys.argv = sys.argv[:1]# `app.run` calls `sys.exit` try:app.run(lambda argv: None) except:pass建議用GPU訓(xùn)練,CPU可能會(huì)很慢。
trainer.try_models(number_models=5,train_steps=5,eval_steps=1,root_dir="./tmp/run_example",batch_size=512,experiment_name="example",experiment_owner="model_search_user")參考文獻(xiàn)
- Introducing Model Search: An Open Source Platform for Finding Optimal ML Models:https://ai.googleblog.com/2021/02/introducing-model-search-open-source.html
- Beam Search:https://d2l.ai/chapter_recurrent-modern/beam-search.html
- https://github.com/srivatsan88/YouTubeLI/blob/master/Model_Architecture_Search.ipynb
- https://www.youtube.com/watch?v=-7TZ-IKMJi8
總結(jié)
以上是生活随笔為你收集整理的Model Search:炼丹师最强危机,谷歌开源最强AutoML工具!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 推荐系统与GNN的火花
- 下一篇: 搜索推荐炼丹笔记:CVR预估中的延迟反馈