博士說 – 一萬字入門煉“數(shù)”成金的AutoML
AutoML是AI產(chǎn)業(yè)化、普世技術(shù)的發(fā)展方向之一。作為自動(dòng)代碼編寫技術(shù)的一個(gè)子領(lǐng)域,AutoML是機(jī)器實(shí)現(xiàn)智能化的重要技術(shù)之一,適用于應(yīng)用領(lǐng)域過于專業(yè)、業(yè)務(wù)模型需求大、更新頻率高的特定場(chǎng)景。劍橋2019年度《全景AI報(bào)告》把AutoML等列為取得重大研究與技術(shù)突破的領(lǐng)域。
插播一條小廣告:醞釀已久的《博士說》欄目開更啦!聚焦行業(yè)技術(shù)前沿,匯集各路學(xué)霸大神,助您快速科普入門。
首期欄目我們邀請(qǐng)到浪潮AI算法研究員李峰博士,用萬字長(zhǎng)文帶來AutoML入門技術(shù)詳解。音頻資源現(xiàn)已同步上線,配合食用吸收更佳哦。
我非常有幸在從事著與AI相關(guān)的一些研發(fā)開發(fā)工作,也接觸了十?dāng)?shù)個(gè)行業(yè)以及數(shù)十種AI的應(yīng)用案例,在對(duì)這些應(yīng)用案例的開發(fā)過程當(dāng)中我發(fā)現(xiàn)了一個(gè)事情,我們大部分的時(shí)間和精力都花費(fèi)在了為一個(gè)特定的應(yīng)用進(jìn)行模型開發(fā)以及調(diào)參的過程當(dāng)中。這些工作幾乎消耗了我70%到80%的時(shí)間,俗話說得好,懶是人類進(jìn)步的動(dòng)力,當(dāng)一個(gè)在哪里跌倒就在哪里躺好的懶癌癥晚期患者,在面臨這樣一個(gè)動(dòng)作,它消耗了我80%的時(shí)間的時(shí)候,自然而然會(huì)想到一個(gè)問題,能不能讓自動(dòng)化的方式來解決這件事情,這也就是我們所謂的AutoML自動(dòng)機(jī)器建模的由來。
今天我們一起走進(jìn)AutoML的小小世界里,看一看機(jī)器究竟是怎樣通過自己的思維模式、自己的編程方式,將一個(gè)一個(gè)的人工智能的應(yīng)用模型逐漸開發(fā)出來。
通常我們定義2015年是人工智能元年,2016年人工智能相關(guān)的算法應(yīng)用開始逐漸攀升,2017年是芯片的爆發(fā)之年,2018年人工智能開始逐步落地。從此之后,可以說如雨后春筍一般的人工智能長(zhǎng)起了一地的雞毛,為什么說是一地雞毛呢?人工智能的應(yīng)用雖然看似非常的龐雜,但是有好多是真命題,有好多可能是偽命題,其中的真命題不乏我們現(xiàn)在經(jīng)常用到的語音識(shí)別、人臉識(shí)別等等,還有我們車輛的自動(dòng)駕駛,可以看到在這整個(gè)人工智能的新興過程當(dāng)中有好多好多的應(yīng)用逐步涌現(xiàn)出來,而且他們也逐步的細(xì)化或者深入到我們每一個(gè)人的日常生活當(dāng)中。
每每我們提到人工智能技術(shù)的時(shí)候都繞不開一個(gè)巔峰級(jí)的存在,那就是AlphaGo,在人類智力游戲頂尖的圍棋賽當(dāng)中,AlphaGo可以說是以絕對(duì)碾壓式的成績(jī)對(duì)我們?nèi)祟惖闹巧踢M(jìn)行了一個(gè)慘無人道的蹂躪。我們先拋去比分和實(shí)際的圍棋的技巧不談,在AlphaGo當(dāng)中,大家廣為熟知的、津津樂道的一個(gè)技術(shù)被稱之為強(qiáng)化學(xué)習(xí),強(qiáng)化學(xué)習(xí)是什么呢?在我們的一個(gè)機(jī)器在構(gòu)建網(wǎng)絡(luò)過程當(dāng)中,構(gòu)建一個(gè)行為模式當(dāng)中,他會(huì)自動(dòng)的去學(xué)一些東西,然后來修正他的行為模式,這個(gè)東西在AutoML里面也有應(yīng)用。
人工智能這項(xiàng)技術(shù)逐漸大賣或者逐步擴(kuò)散了其應(yīng)用領(lǐng)域,人工智能整個(gè)皇冠上的一個(gè)翹楚被稱之為深度學(xué)習(xí),可是深度學(xué)習(xí)的發(fā)展也同樣帶來了一些不可小覷的或者不可忽視的問題。
首先我們從ImageNet數(shù)據(jù)集出現(xiàn)之后,圖象處理或者圖象識(shí)別這一個(gè)領(lǐng)域當(dāng)中的應(yīng)用得到了一個(gè)騰飛式的發(fā)展,但是我們看到在之后的一段時(shí)間當(dāng)中,數(shù)據(jù)集的規(guī)模正在與日俱增,而這些數(shù)據(jù)集的增大會(huì)導(dǎo)致我們?cè)谟?xùn)練過程當(dāng)中所需要的內(nèi)存消耗、顯存消耗等等也會(huì)逐漸增大,因此想要訓(xùn)練出一個(gè)非常好的、非常適用的模型,就變得異常的難上加難,尤其當(dāng)我們的應(yīng)用與實(shí)際的ImageNet數(shù)據(jù)集不相符的時(shí)候,我們的數(shù)據(jù)或者我們已有的這些像RestNet(VGG)等等這些模型是否有一些過于的冗余的內(nèi)容在,我們是不是可以消掉其中一部分,然后讓模型更加適合于我們自身的應(yīng)用呢?
另外我們可以看到在深度學(xué)習(xí)技術(shù)的發(fā)展過程當(dāng)中,DNN的網(wǎng)絡(luò)結(jié)構(gòu)也是日趨復(fù)雜,現(xiàn)在各種網(wǎng)絡(luò)連接、各種組合方式都已經(jīng)遠(yuǎn)超人類的想象范疇,在這樣一個(gè)過程當(dāng)中,如果我們?cè)儆行碌娜蝿?wù)、新的數(shù)據(jù)集,我們?cè)撊绾稳ピO(shè)計(jì)這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)?雖說創(chuàng)新是站在巨人的肩膀上,但如果巨人太高了,已經(jīng)超過了珠峰,可能我們攀爬上去都成了一個(gè)難度。隨著網(wǎng)絡(luò)結(jié)構(gòu)日益復(fù)雜,網(wǎng)絡(luò)規(guī)模也在逐步增加,由于這些網(wǎng)絡(luò)規(guī)模增加、參數(shù)的增加,導(dǎo)致網(wǎng)絡(luò)本身的尺度變得越來越大,在我們很多的實(shí)際應(yīng)用當(dāng)中,有可能我們的模型是需要放在終端設(shè)備上來進(jìn)行的,比如說在Systemon Chip的片上芯片、片上系統(tǒng),還有一些嵌入式設(shè)備等等我們的一些終端設(shè)備上要運(yùn)行我們的網(wǎng)絡(luò)結(jié)構(gòu)的時(shí)候,我們會(huì)發(fā)現(xiàn)一個(gè)最大的問題,就是這些網(wǎng)絡(luò)太大了,我們放不進(jìn)去,因此在這時(shí)候我們究竟又該如何去構(gòu)建我們的網(wǎng)絡(luò),如何篩選我們的網(wǎng)絡(luò)。
此外,在網(wǎng)絡(luò)的結(jié)構(gòu)日趨復(fù)雜的時(shí)候,我們?nèi)耘f發(fā)現(xiàn)一個(gè)問題,在網(wǎng)絡(luò)訓(xùn)練過程當(dāng)中,對(duì)于網(wǎng)絡(luò)本身我們還有很多其他的超參數(shù),這些超參數(shù)的設(shè)定又應(yīng)該何去何從,什么樣的超參數(shù)組合可能會(huì)誕生最好的網(wǎng)絡(luò),因此這個(gè)問題是消耗大部分的人工智能的算法的開發(fā)人員的時(shí)間跟精力,因此很多坊間傳聞,人工智能的算法工程師其實(shí)稱之為煉金術(shù)士,我們是一個(gè)調(diào)參師,要嘗試不同的參數(shù)組合。這個(gè)過程就是我們深度學(xué)習(xí)發(fā)展所帶來的一些挑戰(zhàn)和問題。當(dāng)然即便這些問題都可以解決,我們想要訓(xùn)練一個(gè)網(wǎng)絡(luò)的時(shí)候,仍舊會(huì)發(fā)現(xiàn)他需要龐大的時(shí)間消耗和資源消耗,因此這相當(dāng)于像古代的一個(gè)衙門,衙門口沖南開,有理沒錢你別來,所以現(xiàn)在來看深度學(xué)習(xí)仿佛成了富人的游戲。
此外還有一個(gè)非常大的挑戰(zhàn)是什么?在AI的應(yīng)用端,我們把所有的模型從實(shí)驗(yàn)室設(shè)計(jì)出來,想要讓他落地的時(shí)候,會(huì)發(fā)現(xiàn)我們?cè)趹?yīng)用端仍舊存在很多問題,比如說概念漂移,當(dāng)我們?cè)瓉碓谟脤?shí)驗(yàn)室的像ImageNet數(shù)據(jù)集或者是COCO數(shù)據(jù)集,或者VOC的數(shù)據(jù)集,我們訓(xùn)練出來的網(wǎng)絡(luò)模型在實(shí)際的應(yīng)用當(dāng)中的時(shí)候我們發(fā)現(xiàn)圖象的尺寸、圖象的內(nèi)容發(fā)生了一些概念上的變化,而這時(shí)我們的模型往往無法適用。因此很難用原來在ImageNet或者原有公開數(shù)據(jù)集上構(gòu)建的模型就可以適配到我們各行各業(yè)的不同應(yīng)用當(dāng)中。另外一個(gè)是尺度適配的問題,這個(gè)問題也是剛才我們所提到的網(wǎng)絡(luò)設(shè)計(jì)或者學(xué)界網(wǎng)絡(luò)設(shè)計(jì)的規(guī)模跟趨勢(shì)是日趨復(fù)雜、日趨龐大。而實(shí)際我們?cè)谑褂眠^程當(dāng)中前端和終端的推理設(shè)備,我們的存儲(chǔ)容量有限,無法使用這種龐大規(guī)模。
還有一個(gè)問題是數(shù)據(jù)隱私,什么叫數(shù)據(jù)隱私的問題呢?可以想像我們有很多應(yīng)用公司或者有業(yè)務(wù)性的公司,我們都會(huì)有自己的業(yè)務(wù)和自己的數(shù)據(jù),但是恐怕很難說我們每一個(gè)傳統(tǒng)行業(yè)的公司里面都會(huì)有一波人專門從事AI的算法研發(fā)跟開發(fā)工作,如果想要讓傳統(tǒng)行業(yè)當(dāng)中去使用AI技術(shù)的時(shí)候,我們必須要把數(shù)據(jù)交給第三方的公司來做開發(fā),而這時(shí)就會(huì)帶來數(shù)據(jù)的隱私和安全性問題。
出于以上這些角度的考慮,是否能夠讓我們的傳統(tǒng)行業(yè),不具備AI技術(shù)能力的公司同時(shí)可以得到AI的一個(gè)紅利,AutoML就是我們面對(duì)現(xiàn)在的應(yīng)用提出的一種解決方案。
?什么是AutoML
AutoML中文叫自動(dòng)機(jī)器學(xué)習(xí),既然要自動(dòng)機(jī)器學(xué)習(xí),我們先看一下,怎么樣實(shí)現(xiàn)傳統(tǒng)意義上的標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)過程,標(biāo)準(zhǔn)的建模過程是什么樣的呢?通常我們會(huì)拿到原始數(shù)據(jù),在有原始數(shù)據(jù)的時(shí)候我們要對(duì)數(shù)據(jù)進(jìn)行一個(gè)預(yù)處理,然后做特征工程,做模型設(shè)計(jì),最后做一個(gè)模型驗(yàn)證這幾個(gè)階段,相當(dāng)于數(shù)據(jù)處理階段我們需要對(duì)整個(gè)的原始數(shù)據(jù)進(jìn)行數(shù)據(jù)的清洗,篩查掉一些異常數(shù)據(jù)和一些缺失的數(shù)據(jù),然后我們要對(duì)數(shù)據(jù)做一些增強(qiáng),還有像文本數(shù)據(jù)和其他的語音數(shù)據(jù)等等我們要做一個(gè)編碼,把他轉(zhuǎn)換成機(jī)器可讀的一些浮點(diǎn)型數(shù)據(jù)或者是整型數(shù)據(jù)。另外還有數(shù)據(jù)分割,比如說我們的數(shù)據(jù)如果過于龐大的話,像現(xiàn)在如果是720P的一個(gè)影視作品,一張圖片截下來的分辨率就非常大,如果直接放到網(wǎng)絡(luò)模型當(dāng)中去,機(jī)器去計(jì)算的時(shí)候,是無法充分的去計(jì)算,因?yàn)樗膬?nèi)存或者顯存都會(huì)被整個(gè)一張圖片擠爆,因此我們還要對(duì)數(shù)據(jù)進(jìn)行一些數(shù)據(jù)分割,分割也有技巧,比如我們要識(shí)別圖片當(dāng)中的一個(gè)人,如果你分割之后他身首異處了,我也許能識(shí)別出來臉,剩下的半張身子可能就永遠(yuǎn)跟他說再見了。
另外一個(gè)就是要做特征工程,特征工程所有的數(shù)據(jù)輸入之后,經(jīng)過數(shù)據(jù)的預(yù)處理,數(shù)據(jù)的一些清洗和增強(qiáng)操作之后我們會(huì)把他進(jìn)行特征化,我們會(huì)構(gòu)建一些零均值特征,我們會(huì)構(gòu)建一些異方差特征等等,得益于現(xiàn)在深度學(xué)習(xí)的發(fā)展,特征工程和模型構(gòu)建這兩部分對(duì)于圖象出來或者圖象領(lǐng)域的一些任務(wù)來說,他們可以合二為一。
最后,做模型設(shè)計(jì)就是我們現(xiàn)在AutoML的一個(gè)核心階段,AutoML的模型設(shè)計(jì)是什么呢?在傳統(tǒng)意義上來說,就是我們?nèi)斯び靡粡埣埌芽赡艿哪P?、可能的?shù)據(jù)公式拼湊出來,然后排列出來一個(gè)pipeline,然后根據(jù)這個(gè)流程進(jìn)行數(shù)據(jù)的處理和操作,最終我們要進(jìn)行一個(gè)模型驗(yàn)證來判斷我們現(xiàn)在的模型究竟是否適配于原來的數(shù)據(jù)問題,這個(gè)模型驗(yàn)證也有非常多的方法,比如說混淆矩陣、PR測(cè)試,還有AB Test測(cè)試等等,整個(gè)一系列的標(biāo)準(zhǔn)過程里面我們可以發(fā)現(xiàn),數(shù)據(jù)處理,像清洗、增強(qiáng)、文本編碼、數(shù)據(jù)分割等等這些任務(wù)似乎可以自動(dòng)化的用統(tǒng)計(jì)的方式,用一些傳統(tǒng)意義上機(jī)器學(xué)習(xí)的方法讓他自動(dòng)的實(shí)習(xí)。而特征工程跟模型構(gòu)建、模型設(shè)計(jì)的部分,我們似乎也可以把他歸并到一起做一個(gè)模型設(shè)計(jì),如果我能夠構(gòu)建一種方式來自動(dòng)化的去繪制這個(gè)模型的一個(gè)pipeline,這些方程、這些函數(shù)公式操作他的一個(gè)組合,是不是我就可以完成從原始數(shù)據(jù)的輸入一直到模型的輸出,最終我們進(jìn)行模型驗(yàn)證,通常情況下,從技術(shù)角度來說,我們模型驗(yàn)證是可以做成自動(dòng)化完成的,但是通常而言我們不會(huì)這么做,為什么?模型驗(yàn)證最終的驗(yàn)收標(biāo)準(zhǔn)是什么?是否適合我們的應(yīng)用,這個(gè)標(biāo)準(zhǔn)通常情況下來說人的主觀性要比客觀的數(shù)據(jù)更為準(zhǔn)確。
說了這么多,我們把標(biāo)準(zhǔn)的一個(gè)建模過程跟大家表述已清,所謂的自動(dòng)建模又該如何建呢?其實(shí)自動(dòng)建模他的一個(gè)簡(jiǎn)單的問題描述就是在給定的性能指標(biāo)之下,我們希望構(gòu)建或者說找出最好的模型結(jié)構(gòu)及其參數(shù),這個(gè)方式通常我們稱之為序貫?zāi)P退惴ㄅ渲脝栴},對(duì)于深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)來說,有一個(gè)特別的案例我們將他稱之為神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索Neural Architecture Search,簡(jiǎn)稱NAS(神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索),他的一個(gè)問題描述相對(duì)來說更為簡(jiǎn)單,也更為具體,對(duì)于一個(gè)預(yù)測(cè)問題而言,希望能夠從網(wǎng)絡(luò)結(jié)構(gòu)中找到可以使整個(gè)在驗(yàn)證集上能夠最小化誤差的一個(gè)模型結(jié)構(gòu)。
?AutoML的核心要素
自動(dòng)機(jī)器學(xué)習(xí)其實(shí)包含的最重要的是三大要素,其中第一個(gè)是搜索空間,第二個(gè)是搜索策略,第三個(gè)是評(píng)估準(zhǔn)則。
所謂搜索空間就是定義究竟我在什么范圍之內(nèi)進(jìn)行模型搜索,舉一個(gè)簡(jiǎn)單的例子,我們對(duì)于一個(gè)回歸問題,我可以有很多現(xiàn)成的模型或者現(xiàn)成的函數(shù),比如說線性回歸函數(shù)或者多項(xiàng)式回歸函數(shù)或者是SVR支持向量回歸函數(shù),如果是我們的搜索空間就是這些函數(shù),那么我們的搜索策略和評(píng)估上面就變得非常簡(jiǎn)單,我們就是從這些函數(shù)當(dāng)中挑出一個(gè)來使得它滿足我們剛才所提到的評(píng)估標(biāo)準(zhǔn)。對(duì)于深度神經(jīng)網(wǎng)絡(luò)或者對(duì)于(NAS)來說,今天既然深度神經(jīng)網(wǎng)絡(luò)作為人工智能的一個(gè)掌上明珠,皇冠上最亮的那顆星星,我們就以它為例來介紹我們的AutoML技術(shù)。
對(duì)于深度神經(jīng)網(wǎng)絡(luò)來說,我們搜索空間是什么?其實(shí)是一系列的OP,也就是操作,這些操作仿佛是某高的一個(gè)玩具積木,在這些無數(shù)的積木當(dāng)中有四個(gè)頭的、兩個(gè)頭的、三個(gè)頭的、六個(gè)頭的等等,我們需要從這些積木當(dāng)中按照一定的策略挑選出合適的積木,并且按照一張可能的藍(lán)圖把它拼湊出來,最終形成一個(gè)我們想要的東西,比如說我們希望面前有一條河,我希望能構(gòu)建一艘船能讓他過河,也許我們的理想很豐滿,希望通過某高的積木和一張?jiān)O(shè)計(jì)圖紙我們能夠拼出一艘航空母艦,但是現(xiàn)實(shí)往往很骨感,當(dāng)我們拼湊出來以后他也許只是一個(gè)小小的帆板,到這時(shí)候我們的一個(gè)問題就是這個(gè)帆板究竟是對(duì)還是不對(duì),這樣的結(jié)果究竟好還是不好,這就是所謂的評(píng)估準(zhǔn)則。
如果單純從我們要過河這個(gè)角度來看的話這個(gè)帆板是可以的,他滿足了我們的評(píng)估要求,是可以過河的,但是如果我們的評(píng)估準(zhǔn)則不僅僅局限于說我們要過河,還要求了船體的外部流線特征,還要求了他的流體力學(xué)性質(zhì),還要求了他的美觀性、抗毀性等等,我們會(huì)發(fā)現(xiàn),這個(gè)帆板可能是不合格的,這個(gè)不合格的評(píng)價(jià)結(jié)果我們需要把他返回給我們的搜索策略,來修改我們的藍(lán)圖和圖紙,最終不斷經(jīng)過這樣一個(gè)迭代過程,使得我們最終從這些小的積木塊,根據(jù)我們的選擇方式和搜索策略,繪制出一個(gè)標(biāo)準(zhǔn)的航空母艦藍(lán)圖,然后得到了我們最終想要的一個(gè)結(jié)果,這個(gè)過程就涉及到了我們剛才所說的AutoML的三大要素。
搜索空間針對(duì)于深度神經(jīng)網(wǎng)絡(luò)來說,其實(shí)會(huì)更為復(fù)雜,我們搜索空間的表示如果是一個(gè)簡(jiǎn)單的,就是全連接的一個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的話,他的搜索空間的表示就是最大網(wǎng)絡(luò)層數(shù),我們只要給定最大網(wǎng)絡(luò)層數(shù)以及每層可選的元操作,以及每一層我們神經(jīng)原的個(gè)數(shù),是不是就是可以唯一的決定一個(gè)神經(jīng)網(wǎng)絡(luò)該長(zhǎng)什么樣子。對(duì)于一個(gè)卷積神經(jīng)網(wǎng)絡(luò)來說,他比之前所提到的這個(gè)神經(jīng)網(wǎng)絡(luò)要稍微多一點(diǎn),我們的搜索空間表示要包括最大的網(wǎng)絡(luò)層數(shù),然后每一層可選的元操作數(shù),所謂的元操作數(shù)就是一乘一的卷積、三乘三的卷積、五乘五的卷積等等,之后就是與這些操作相關(guān)的一些超參數(shù),因?yàn)閷?duì)于一個(gè)卷積神經(jīng)網(wǎng)絡(luò)來說,一個(gè)卷積層不光包含了我們卷積的大小,同樣也包含了這個(gè)卷積層的通道數(shù)量以及他的一個(gè)step的(步長(zhǎng))等等。這些就是我們搜索空間當(dāng)中所具備的一個(gè)元素,而用這些元素怎么去設(shè)計(jì)我們的搜索策略,然后拼裝出來我們整個(gè)深度神經(jīng)網(wǎng)絡(luò),就是我們AutoML所需要做的一個(gè)事情。
當(dāng)然了,在這個(gè)操作過程當(dāng)中,我們對(duì)于搜索空間的定義有幾種特別的方式,尤其是對(duì)于深度神經(jīng)網(wǎng)絡(luò)來說,通常情況下有一種叫做鏈?zhǔn)骄W(wǎng)絡(luò)結(jié)構(gòu)。鏈?zhǔn)骄W(wǎng)絡(luò)結(jié)構(gòu)就是從輸入到輸出依次來定義我們每一層究竟是什么樣的內(nèi)容,什么樣的結(jié)構(gòu),這樣一個(gè)網(wǎng)絡(luò)構(gòu)建方式可以說是最原始、最傳統(tǒng)、也是我們的搜索空間所能表達(dá)的所有網(wǎng)絡(luò)當(dāng)中最豐富的。還有一種是基于復(fù)用一些網(wǎng)絡(luò)單元的堆疊結(jié)構(gòu),像最右邊這里我們看到人工設(shè)計(jì)了一個(gè)單元堆疊的方式,我們的第一層是input,下面一層是block1,第二個(gè)是block2,第三個(gè)是block3,經(jīng)過這幾個(gè)block堆疊之后我們輸出到一個(gè)output,這個(gè)堆疊方式固定下來之后我們可選的操作是什么呢?就是里面的block,對(duì)于每一個(gè)block或者是我們稱之為一個(gè)模塊,這個(gè)模塊我究竟該如何設(shè)計(jì),這個(gè)模塊里面我們可以采用鏈?zhǔn)骄W(wǎng)絡(luò)結(jié)構(gòu)的一個(gè)設(shè)計(jì)方式,雖然大家看到中間這一部分是分了多個(gè)分支,其實(shí)他仍舊屬于鏈?zhǔn)骄W(wǎng)絡(luò)設(shè)計(jì)的一種邏輯。
我們定義了神經(jīng)網(wǎng)絡(luò)的一個(gè)搜索空間之后,我們可以知道當(dāng)我的積木已經(jīng)準(zhǔn)備好了之后,我們就需要進(jìn)行一個(gè)搜索和采樣,我需要選出我所需要的積木,然后根據(jù)我們?cè)O(shè)計(jì)的藍(lán)圖進(jìn)行一個(gè)拼接,我們的積木的選擇跟藍(lán)圖的繪制目前來說就是我們AutoML搜索策略的幾種方式,當(dāng)今比較流行的三種搜索策略包括進(jìn)化計(jì)算,還有神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索,也就是我們以谷歌的強(qiáng)化學(xué)習(xí)為代表,之后還有一種是網(wǎng)絡(luò)遷移的方式,通常這種方式又被稱之為網(wǎng)絡(luò)形態(tài)學(xué)變換。
所謂進(jìn)化計(jì)算非常好理解的一種說法就稱之為遺傳算法,之前我們剛才看到有網(wǎng)絡(luò)空間,網(wǎng)絡(luò)空間其實(shí)每一種操作我們可以給他定義做一個(gè)編碼,像identity層操作我們稱之為零,1×1的卷積比如說稱之為1,1×3的卷積稱之為2,對(duì)于所有這些我們可用的元操作進(jìn)行一個(gè)數(shù)值編碼之后,我們可以寫出一條所謂的染色體,這一條染色體的長(zhǎng)度就是我們網(wǎng)絡(luò)結(jié)構(gòu)的層數(shù),這里面每一個(gè)數(shù)值就對(duì)應(yīng)著元操作,我們還可以定義一個(gè)沒有操作,這樣如果是某一層沒有操作的話,他存在著一個(gè)跳層,那么我們整個(gè)網(wǎng)絡(luò)層的層數(shù)的深度就會(huì)隨之減少。
我們定義了染色體的編碼方式之后,多個(gè)染色體之間可以通過遺傳算法,遺傳學(xué)當(dāng)中的交叉、變異形成(子帶),這些子帶就是新的染色體,這些染色體就代表了新的網(wǎng)絡(luò)結(jié)構(gòu),然后我們根據(jù)適應(yīng)度評(píng)價(jià)標(biāo)準(zhǔn)、評(píng)價(jià)準(zhǔn)則來判定什么樣的網(wǎng)絡(luò)模型是更好的,整個(gè)過程當(dāng)中,所謂的適應(yīng)度評(píng)價(jià)就是一個(gè)外界對(duì)于一條染色體或者種群當(dāng)中某一個(gè)個(gè)體的一個(gè)評(píng)價(jià),在整個(gè)迭代的過程當(dāng)中,具有高適應(yīng)度的個(gè)體就優(yōu)先獲得了繁衍權(quán)利,而具有低適應(yīng)度的個(gè)體就會(huì)逐漸被淘汰,整個(gè)過程就是達(dá)爾文所說的物競(jìng)天擇、適者生存的一個(gè)邏輯,最終會(huì)把所有與我們適應(yīng)度評(píng)價(jià)函數(shù)最高的染色體,這些子帶流傳下來,也就得到了我們最想要的這些性能標(biāo)準(zhǔn)。
另外一個(gè)我們稱之為叫NAS的一個(gè)方式,叫強(qiáng)化學(xué)習(xí),NAS過程當(dāng)中我們搜索空間也是跟剛才的一樣,定義好多OP,中間會(huì)有一個(gè)控制器,這個(gè)控制器是用來做模型采樣,然后做一個(gè)OP的采樣,這個(gè)控制器傳統(tǒng)方法上面來說或者在遺傳算法上來說,我們的控制器是固定的,只是在每一次控制器采樣到的東西進(jìn)行篩選,去甄別的過程是不定的。而在NAS過程當(dāng)中我們的控制器是變換的,而篩選結(jié)果是不變的,什么意思呢?當(dāng)我們的搜索空間當(dāng)中,采樣到了一個(gè)網(wǎng)絡(luò)模型,采樣到了一個(gè)子網(wǎng)絡(luò)之后我們對(duì)他進(jìn)行了評(píng)估,評(píng)估這個(gè)結(jié)果好壞會(huì)直接影響控制器下一次是否在這個(gè)地方還采樣這個(gè)操作,這樣的話,這個(gè)返回的結(jié)果就會(huì)直接影響到我們參數(shù)空間當(dāng)中進(jìn)行操作采樣的過程,我們采樣出來的結(jié)果在這樣的逐漸迭代的過程當(dāng)中,對(duì)于好的操作,他采樣到的概率就會(huì)逐漸遞增。而對(duì)于一些差的操作或者對(duì)于我們的網(wǎng)絡(luò)性能沒有什么貢獻(xiàn)的操作,他被采到的概率就會(huì)逐漸遞減,之后經(jīng)過無數(shù)輪迭代之后,我們發(fā)現(xiàn)控制器每一次在每一個(gè)所需要的層級(jí)趨于采樣或者大概率的采樣適合于這個(gè)網(wǎng)絡(luò)層的一些操作。
還有一種方式就稱之為網(wǎng)絡(luò)形態(tài)學(xué)變換,這里給出一個(gè)比較標(biāo)準(zhǔn)的剪枝操作,所謂剪枝操作就是我們通過對(duì)于已經(jīng)給定的網(wǎng)絡(luò)模型去修建他當(dāng)中存在的一些不必要的路徑,使得路徑發(fā)生了一些變化之后我們進(jìn)行網(wǎng)絡(luò)參數(shù)更新,這樣整個(gè)網(wǎng)絡(luò)的模型的結(jié)構(gòu)和樣子發(fā)生了變化,同時(shí)模型的大小和尺度也發(fā)生了變化,在這個(gè)過程當(dāng)中,如果我們所用到的數(shù)據(jù)集跟原來訓(xùn)練這個(gè)網(wǎng)絡(luò)的數(shù)據(jù)集是不一致的話,他再進(jìn)行裁剪和重訓(xùn)練之后,這個(gè)網(wǎng)絡(luò)模型就會(huì)更加適配于我們現(xiàn)在在實(shí)際使用、應(yīng)用算法當(dāng)中的應(yīng)用數(shù)據(jù)集。
基于這樣一個(gè)思想,其實(shí)我們可以考慮,如果我有一個(gè)完備的網(wǎng)絡(luò),并且網(wǎng)絡(luò)當(dāng)中的路徑不只一條,就是同樣的兩個(gè)節(jié)點(diǎn)之間的路徑可能不只一條,每一條路徑是一種操作,我可能在下面像左邊這張圖里面,我從0到1、到2、到3有不同的路徑,每一個(gè)節(jié)點(diǎn)之間可選的路徑還有很多,那也就是他從零到一的操作可以有三種不同的操作,在這樣一個(gè)我們稱之為叫完備網(wǎng)絡(luò)圖的結(jié)構(gòu)當(dāng)中,我們采用剪枝的操作或者采用路徑的削減的一個(gè)操作,是不是可以修正和找到最適合于整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的一個(gè)路徑組合呢?比方說像下面的這張圖,他的完備圖經(jīng)過路徑的篩查、篩選之后我們得到右邊這張子圖里面從0到1就有1條橙黃色的路徑,從0到3就有1個(gè)紅色路徑,可以看到從0到2的路被我們刪除了,這個(gè)也許是經(jīng)過網(wǎng)絡(luò)搜索得到的一個(gè)最佳的結(jié)果。
這樣篩選之后我們可以看到一個(gè)新的子網(wǎng)絡(luò)結(jié)構(gòu)具備了新的網(wǎng)絡(luò)結(jié)構(gòu)類型,也同時(shí)具備了不同的尺度,他也達(dá)到了我們說模型從無到有的一個(gè)生成過程。
說完我們的模型搜索過程之后,我們會(huì)發(fā)現(xiàn)我現(xiàn)在有了一堆積木,也有信手拈來可以去把他搭建的過程,搭建出來之后究竟這個(gè)模型是好還是壞,我們需要用一個(gè)評(píng)價(jià)標(biāo)準(zhǔn)來進(jìn)行一個(gè)評(píng)價(jià),通常而言我們的數(shù)據(jù)會(huì)被拆分為幾個(gè)部分,所有的數(shù)據(jù)通常是我們由應(yīng)用和業(yè)務(wù)過程當(dāng)中積累下來的歷史數(shù)據(jù),這些歷史數(shù)據(jù)我們會(huì)拆分成兩個(gè)部分,一個(gè)稱之為訓(xùn)練數(shù)據(jù)集,另外一個(gè)稱之為測(cè)試數(shù)據(jù)集,訓(xùn)練數(shù)據(jù)集當(dāng)中我們會(huì)把他拆分為訓(xùn)練數(shù)據(jù)和驗(yàn)證數(shù)據(jù),驗(yàn)證數(shù)據(jù)用來去驗(yàn)證我們現(xiàn)在的模型是否訓(xùn)練到了一個(gè)收斂的狀態(tài)。對(duì)于AutoML來說,最常用的一種評(píng)價(jià)標(biāo)準(zhǔn)是什么?就是以驗(yàn)證數(shù)據(jù)集作為評(píng)價(jià)標(biāo)準(zhǔn),當(dāng)我們構(gòu)建出來的模型在驗(yàn)證集上的精度作為最終的一個(gè)驗(yàn)收結(jié)果。這樣一個(gè)過程似乎看起來非常完美,我有了搜索空間,我有了可以指導(dǎo)我進(jìn)行模型構(gòu)建的一個(gè)過程和策略,我也有了一個(gè)評(píng)價(jià)標(biāo)準(zhǔn),似乎一切顯得非常完美,我們是不是AutoML就到此結(jié)束了?事實(shí)上在這里又存在了一個(gè)非常龐大的坑,是什么呢?當(dāng)我們的一個(gè)模型構(gòu)建出來之后,如果這個(gè)模型沒有經(jīng)過訓(xùn)練的話,他在驗(yàn)證集上的精度一定是非常差的,如果要訓(xùn)練他得到一個(gè)在驗(yàn)證集上非常好的精度或者可信的精度的話,對(duì)于這個(gè)模型的訓(xùn)練必不可少,而這個(gè)訓(xùn)練又是非常耗時(shí)和耗費(fèi)資源的。
對(duì)于這樣一個(gè)過程我們想怎么樣能夠提升我們驗(yàn)證集或者提升我們?cè)u(píng)價(jià)標(biāo)準(zhǔn)獲得的這樣一個(gè)效率,降低我們的一個(gè)計(jì)算資源消耗呢?有幾種方式,其中一種是當(dāng)我們對(duì)于精度進(jìn)行一個(gè)預(yù)測(cè),我們對(duì)于(學(xué)習(xí)率)的變化進(jìn)行一個(gè)預(yù)測(cè),這里面包括了三種方式,其中第一種對(duì)精度進(jìn)行預(yù)測(cè),第二種對(duì)于學(xué)習(xí)率進(jìn)行預(yù)測(cè),第三種我們采用參數(shù)共享的方法。
對(duì)于精度的預(yù)測(cè)非常簡(jiǎn)單可以理解,當(dāng)我有了一個(gè)模型之后,我雖然現(xiàn)在不知道他訓(xùn)練完整之后,他的精度大概是多少,但是我可以用另外一個(gè)模型來預(yù)測(cè)這樣一個(gè)我們生成出來的子模型,他的驗(yàn)證精度,經(jīng)過幾輪的訓(xùn)練和迭代之后,我們稱之為判別器,用來預(yù)測(cè)采樣到的模型精度的這個(gè)模型我們把他稱之為判別器,當(dāng)這個(gè)判別器被訓(xùn)練的非常完美的時(shí)候,像這個(gè)過程當(dāng)中其實(shí)相當(dāng)于自己進(jìn)行了機(jī)器編碼,這個(gè)是機(jī)器實(shí)現(xiàn)智能化的重要標(biāo)志之一。
另外一個(gè)就是參數(shù)共享,所謂的參數(shù)共享就是我們之前提到的一個(gè)完備的超網(wǎng)絡(luò)圖,在完備的超網(wǎng)絡(luò)圖當(dāng)中,我們進(jìn)行一個(gè)子網(wǎng)絡(luò)采樣,然后對(duì)于這個(gè)子網(wǎng)絡(luò)的訓(xùn)練得到的參數(shù)進(jìn)行上傳,然后我們就把他繼承到了一個(gè)超網(wǎng)絡(luò)當(dāng)中去,在這個(gè)過程當(dāng)中,我們不斷的去采樣子網(wǎng)絡(luò),然后對(duì)他進(jìn)行訓(xùn)練,并且上傳他的參數(shù),超網(wǎng)絡(luò)繼承了這些參數(shù)之后可以看到,當(dāng)子網(wǎng)絡(luò)進(jìn)行了一系列的訓(xùn)練之后,超網(wǎng)絡(luò)整體也得到了一定的訓(xùn)練,而當(dāng)我們經(jīng)過一些輪的迭代之后,超網(wǎng)絡(luò)當(dāng)中的每一個(gè)子網(wǎng)絡(luò)如果都訓(xùn)練趨于成熟,或者說我們得到了一些可預(yù)測(cè)性的網(wǎng)絡(luò)的時(shí)候,對(duì)于這些所采樣到的子網(wǎng)絡(luò)只需要在驗(yàn)證集上進(jìn)行一個(gè)(前向)推理,我們得到一個(gè)驗(yàn)證集的精度,這些精度雖然都不是完整訓(xùn)練到的一個(gè)完備的網(wǎng)絡(luò)精度,但是如果對(duì)于任意的兩個(gè)子網(wǎng)絡(luò)來說,這時(shí)我們得到的驗(yàn)證集精度與完整訓(xùn)練之后的驗(yàn)證集精度相比,它的相對(duì)的精度高低不發(fā)生變化的時(shí)候,可以說這些網(wǎng)絡(luò)就已經(jīng)具備了非常好的可預(yù)測(cè)性,因?yàn)槲覀兯枰氖钦业阶詈玫木W(wǎng)絡(luò),如果他的相對(duì)排序不發(fā)生變化,那么我們就可以進(jìn)行一個(gè)選擇了。
那么到這時(shí)候,我們稱之為這些超網(wǎng)絡(luò)具備了可預(yù)測(cè)性,當(dāng)一個(gè)超網(wǎng)絡(luò)具備了非常好的可預(yù)測(cè)性之后,我們就可以同時(shí)對(duì)他采樣成千上萬的網(wǎng)絡(luò),并且對(duì)這些網(wǎng)絡(luò)進(jìn)行傳統(tǒng)的一些優(yōu)化算法去迭代,去搜索其中最好的網(wǎng)絡(luò)參數(shù)和網(wǎng)絡(luò)結(jié)構(gòu),這樣一個(gè)過程我們可以把它稱之為萬箭齊發(fā)。
?回顧小結(jié)
今天講了非常多的內(nèi)容,其實(shí)翻回頭來仔細(xì)看一看包含幾個(gè)方面。
01. 什么是AutoML?
AutoML其實(shí)就是在采用自動(dòng)化的方式和程式化的一些手段根據(jù)我們的開發(fā)任務(wù)自主的實(shí)現(xiàn)模型構(gòu)建篩選的一種技術(shù)。
02. 這個(gè)技術(shù)為什么要發(fā)展?或者說我們?yōu)槭裁葱枰狝utoML來出現(xiàn)呢?
首先我們來看AutoML是自動(dòng)代碼編寫技術(shù)的一個(gè)子領(lǐng)域,因?yàn)橛蓹C(jī)器本身自動(dòng)去構(gòu)建了一個(gè)網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)其實(shí)是一系列的代碼組合,所以他是一個(gè)自動(dòng)代碼編寫技術(shù)的方式,這種方式和這種技術(shù)是機(jī)器實(shí)現(xiàn)智能化的重要技術(shù)之一;另外AutoML有一些非常好的適用領(lǐng)域,比如說應(yīng)用領(lǐng)域太過專業(yè),業(yè)務(wù)的模型需求量又非常龐大,這些更新的頻率又非常高的這些特定場(chǎng)合里面AutoML是非常適用的,比如說有好多業(yè)務(wù)場(chǎng)景,可能一個(gè)行業(yè)的ISV公司需要cover掉的是這個(gè)行業(yè)當(dāng)中非常多的不同的應(yīng)用和不同的業(yè)務(wù)場(chǎng)景,這些算法工作人員需要不斷的提供很多新的不同的業(yè)務(wù)場(chǎng)景適配的一些模型,在這樣的情況下AutoML就會(huì)非常好的解放他們的生產(chǎn)力;還有一些是我雖然有非常多的應(yīng)用領(lǐng)域或者說我的應(yīng)用領(lǐng)域非常專一,我有非常多的技術(shù),但是對(duì)于一個(gè)傳統(tǒng)的行業(yè)來說,我并沒有這樣的人力資源進(jìn)行AutoML或者AI的開發(fā)過程,此時(shí)AutoML作為一個(gè)拉低AI技術(shù)門檻的核心技術(shù)是非常適用于這些行業(yè)的。因此說AutoML是AI產(chǎn)業(yè)化和普適AI化的一個(gè)發(fā)展方向。
03. AutoML的三大核心要素是什么?
首先是搜索空間,搜索空間定義了模型的元操作,是AutoML當(dāng)中最基礎(chǔ)的一些組成元素,這些元素就決定了我們所構(gòu)建出來的模型所能夠達(dá)到的上限,比如說如果一個(gè)模型在最理想的環(huán)境下可能需要一個(gè)平方操作,但是我們的搜索空間空間如果不包含平方操作的話,他一定達(dá)不到;
另外一個(gè)就是我們的搜索方法,搜索方法就是我們定義操作進(jìn)行組合的一個(gè)方式,是從元素到功能的一種實(shí)現(xiàn),這個(gè)方式?jīng)Q定了模型所能達(dá)到的下限,為什么叫下限呢?我們的搜索方法如果非常差的話,無異于就是一個(gè)隨機(jī)搜索,我們把很多的模型、很多的操作進(jìn)行隨機(jī)的放置、拼接和組合到一起之后我們同樣可以得到一個(gè)網(wǎng)絡(luò)模型,這個(gè)網(wǎng)絡(luò)模型也會(huì)有一個(gè)結(jié)果,這個(gè)結(jié)果通常我們稱之為一個(gè)baseline,是整個(gè)這個(gè)網(wǎng)絡(luò)構(gòu)建的一個(gè)下限,當(dāng)然值得慶幸的一點(diǎn)是什么呢?可能我們并不需要具備非常多非常龐大的領(lǐng)域知識(shí)和非常高精的一些搜索方法才能構(gòu)建出非常好的網(wǎng)絡(luò)模型,因?yàn)榇罅康恼撐暮蛯?shí)踐研究表明我們即便用隨機(jī)搜索方式,我們所能達(dá)到的這個(gè)baseline在很多應(yīng)用場(chǎng)景當(dāng)中已經(jīng)是非常高的了,已經(jīng)可以非常好的適應(yīng)和適用于我們很多實(shí)際的業(yè)務(wù)跟應(yīng)用場(chǎng)景了;
還有一個(gè)就是我們最重要的一個(gè)評(píng)價(jià)準(zhǔn)則,評(píng)價(jià)準(zhǔn)則定義了一個(gè)搜索的發(fā)展方向,決定搜索的一個(gè)傾向性。我記得跟人力聊天的時(shí)候,我們最常說的一句話叫做你考核什么你就得到什么,所以當(dāng)你定義好了你的評(píng)價(jià)準(zhǔn)則、評(píng)價(jià)標(biāo)準(zhǔn)之后,你才會(huì)得到最適用于你的網(wǎng)絡(luò)模型。在整個(gè)網(wǎng)絡(luò)模型和AutoML構(gòu)建過程當(dāng)中我們也提到了AutoML在搜索方法當(dāng)中存在的三大主流方式,包括進(jìn)化計(jì)算、強(qiáng)化學(xué)習(xí)和網(wǎng)絡(luò)遷移的方法,整體來說,什么叫做AutoML?AutoML就是無中生有的從一個(gè)搜索空間當(dāng)中構(gòu)建出一系列的模型,然后如果你采用的是一個(gè)參數(shù)共享的方法,恭喜你你會(huì)得到一個(gè)非常好用的、具有可預(yù)測(cè)性的超網(wǎng)絡(luò),當(dāng)具有超網(wǎng)絡(luò)之后,你就可以在平行的、并行的我們構(gòu)建,從超網(wǎng)絡(luò)當(dāng)中采樣成千上萬的子網(wǎng)絡(luò),稱之為萬箭齊發(fā),這些萬箭齊發(fā)當(dāng)中得到的這些網(wǎng)絡(luò)當(dāng)中我們經(jīng)過評(píng)價(jià)標(biāo)準(zhǔn)的一個(gè)選擇之后,弱水三千只取一瓢飲,萬千人群中找到最適合你的那一個(gè)模型,仿佛滄海一粟,找到之后就可以對(duì)你的業(yè)務(wù)場(chǎng)景和實(shí)際應(yīng)用精準(zhǔn)的出一張殺。