AlphaGo戰(zhàn)勝了人類(lèi)最強(qiáng)棋手,但前提是它先學(xué)會(huì)了人類(lèi)棋譜,離不開(kāi)人類(lèi)指導(dǎo)。
接著谷歌又推出了AlphaGo Zero,只讓AI知道圍棋規(guī)則,從零開(kāi)始學(xué)下棋,結(jié)果再次登上棋藝頂峰。
AI既然能從零學(xué)習(xí)圍棋,是否可以從零開(kāi)始摸索機(jī)器學(xué)習(xí)算法?當(dāng)然可以,谷歌大腦團(tuán)隊(duì)最新的研究成果已經(jīng)做到了。
谷歌將這種技術(shù)稱(chēng)之為AutoML-Zero,意為“從零開(kāi)始的自動(dòng)機(jī)器學(xué)習(xí)”,已經(jīng)在GitHub開(kāi)源,并在Arxiv上提交了論文。
而且這一研究還是來(lái)自谷歌大腦的Quoc V.Le大神之手。
AutoML-Zero僅使用基本數(shù)學(xué)運(yùn)算為基礎(chǔ),從一段空程序開(kāi)始,即可自動(dòng)發(fā)現(xiàn)解決機(jī)器學(xué)習(xí)任務(wù)的計(jì)算機(jī)程序。
AutoML Zero能發(fā)現(xiàn)什么
AutoML是一種實(shí)現(xiàn)從數(shù)據(jù)集到機(jī)器學(xué)習(xí)模型的自動(dòng)化方法,讓你無(wú)需高深專(zhuān)業(yè)知識(shí),就能自動(dòng)部署ML模型。
雖說(shuō)是自動(dòng),但現(xiàn)階段的AutoML還要對(duì)搜索空間進(jìn)行很大的限制,這使我們?cè)谑褂肁utoML的時(shí)候仍然需要一些專(zhuān)業(yè)知識(shí)去設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的層。
谷歌的目標(biāo)是讓AutoML可以走得更遠(yuǎn),僅僅使用基本的數(shù)學(xué)運(yùn)算作為構(gòu)建塊,就可以自動(dòng)發(fā)現(xiàn)完整的機(jī)器學(xué)習(xí)算法,進(jìn)一步降低機(jī)器學(xué)習(xí)的門(mén)檻。
盡管AutoML-Zero巨大的搜索空間充滿挑戰(zhàn)性,但進(jìn)化搜索還是能發(fā)現(xiàn)具有梯度下降的線性回歸算法、具有反向傳播的二層神經(jīng)網(wǎng)絡(luò)。
值得注意的是,可以AutoML-Zero的進(jìn)化過(guò)程也是一個(gè)不斷“發(fā)明”的過(guò)程解釋進(jìn)化的算法,它已經(jīng)找到了雙線性交互、權(quán)重平均、歸一化梯度、數(shù)據(jù)增強(qiáng)等技術(shù),甚至在某些情況下還發(fā)現(xiàn)了類(lèi)似Dropout的算法。
下面我們先來(lái)看看,AutoML在CIFAR-10的二元分類(lèi)任務(wù)上是如何一步步進(jìn)化的。它首先發(fā)現(xiàn)了線性回歸,然后找到了損失函數(shù)、梯度下降。
隨著訓(xùn)練的進(jìn)行,出現(xiàn)了隨機(jī)學(xué)習(xí)率、隨機(jī)權(quán)重、激活函數(shù)ReLU、梯度歸一化,最后得到了84.06 ± 0.10%正確率的終極算法。
只訓(xùn)練一個(gè)二元分類(lèi)結(jié)果還不太具有說(shuō)服力,作者又用3種極端情況考察了Auto ML。
首先,當(dāng)樣本數(shù)量很少的時(shí)候,在80個(gè)樣本上運(yùn)行100個(gè)epoch。AutoML竟然進(jìn)化出另一種適應(yīng)性算法,給輸入數(shù)據(jù)加上了噪聲,并開(kāi)始使用Dropout來(lái)訓(xùn)練模型。
在快速訓(xùn)練的情況下,只有800個(gè)樣本和10個(gè)epoch,結(jié)果導(dǎo)致學(xué)習(xí)率衰退反復(fù)出現(xiàn),這是一個(gè)我們?cè)诳焖儆?xùn)練訓(xùn)練機(jī)器學(xué)習(xí)模型中常見(jiàn)的策略。
至于多類(lèi)別的分類(lèi)問(wèn)題,作者使用了CIFAR-10數(shù)據(jù)集的所有10個(gè)類(lèi)。AutoML進(jìn)化算法有時(shí)會(huì)使用權(quán)重矩陣的變換平均值作為學(xué)習(xí)速率。甚至作者也不知道為什么這種機(jī)制會(huì)更有利于多類(lèi)任務(wù),雖然這種結(jié)果在統(tǒng)計(jì)學(xué)上是顯著的。
上面的所有測(cè)試整個(gè)過(guò)程中,人類(lèi)沒(méi)有告訴程序任何先驗(yàn)的機(jī)器學(xué)習(xí)知識(shí)。
演示
現(xiàn)在谷歌將AutoML-Zero的程序提交到GitHub,普通電腦只需5分鐘就能體驗(yàn)一下它的實(shí)際效果。
安裝好Bazel后,將代碼下載到本地,運(yùn)行其中的demo程序:
git clone https://github.com/google-research/google-research.git
cd google-research/automl_zero
./run_demo.sh
這個(gè)腳本在10個(gè)線性任務(wù)上運(yùn)行進(jìn)化搜索。每次實(shí)驗(yàn)后,它都會(huì)評(píng)估在100個(gè)新的線性任務(wù)中發(fā)現(xiàn)的最佳算法。一旦算法的適應(yīng)度大于0.9999,就選擇該算法作為最終結(jié)果,將代碼打印在屏幕上。
在普通電腦上使用CPU在5分鐘內(nèi)就能發(fā)現(xiàn)類(lèi)似于梯度下降進(jìn)行線性回歸的程序:
found:
found:
def Setup():
s3 = -0.520936
s2 = s2 * s3
s2 = dot(v1, v1)
v2 = s2 * v1
s2 = s3 * s2
v1 = s0 * v2
s2 = s0 - s3
s2 = -0.390138
v2 = s2 * v0
s1 = dot(v1, v0)
def Predict():
s2 = -0.178737
s1 = dot(v1, v0)
def Learn():
s1 = s1 * s2
s3 = s3 * s2
s2 = s0 * s2
s1 = s1 - s2
v2 = s1 * v0
v1 = v2 + v1
v2 = s3 * v0
v1 = v2 + v1
由人工設(shè)計(jì)的ML算法是,有興趣的話,你可以比較這兩段程序的差異。
def Setup():
s2 = 0.001 # Init learning rate.
def Predict(): # v0 = features
s1 = dot(v0, v1) # Apply weights
def Learn(): # v0 = features; s0 = label
s3 = s0 - s1 # Compute error.
s4 = s3 * s1 # Apply learning rate.
v2 = v0 * s4 # Compute gradient.
v1 = v1 + v2 # Update weights.






