谷歌大腦提出AutoML-Zero,只會數學運算就能找到AI演算法 | 開源

AIBigbull2050發表於2020-03-13

AlphaGo戰勝了人類最強棋手,但前提是它先學會了人類棋譜,離不開人類指導。

接著谷歌又推出了AlphaGo Zero,只讓AI知道圍棋規則,從零開始學下棋,結果再次登上棋藝頂峰。

AI既然能從零學習圍棋,是否可以從零開始摸索機器學習演算法?當然可以,谷歌大腦團隊最新的研究成果已經做到了。

谷歌將這種技術稱之為 AutoML-Zero,意為“從零開始的自動機器學習”,已經在GitHub開源,並在Arxiv上提交了論文。

谷歌大腦提出AutoML-Zero,只會數學運算就能找到AI演算法 | 開源

而且這一研究還是來自谷歌大腦的Quoc V.Le大神之手。

AutoML-Zero僅使用基本數學運算為基礎,從一段空程式開始,即可自動發現解決機器學習任務的計算機程式。

AutoML Zero能發現什麼

AutoML是一種實現從資料集到機器學習模型的自動化方法,讓你無需高深專業知識,就能自動部署ML模型。

雖說是自動,但現階段的AutoML還要對搜尋空間進行很大的限制,這使我們在使用AutoML的時候仍然需要一些專業知識去設計神經網路的層。

谷歌的目標是讓AutoML可以走得更遠,僅僅使用基本的數學運算作為構建塊,就可以自動發現完整的機器學習演算法,進一步降低機器學習的門檻。

谷歌大腦提出AutoML-Zero,只會數學運算就能找到AI演算法 | 開源

儘管AutoML-Zero巨大的搜尋空間充滿挑戰性,但進化搜尋還是能發現具有梯度下降的線性迴歸演算法、具有反向傳播的二層神經網路。

值得注意的是,可以AutoML-Zero的進化過程也是一個不斷“發明”的過程解釋進化的演算法,它已經找到了雙線性 互動、權重平均、歸一化梯度、資料增強等技術,甚至在某些情況下還發現了類似Dropout的演算法。

下面我們先來看看,AutoML在CIFAR-10的二元分類任務上是如何一步步進化的。它首先發現了線性迴歸,然後找到了損失函式、梯度下降。

谷歌大腦提出AutoML-Zero,只會數學運算就能找到AI演算法 | 開源

隨著訓練的進行,出現了隨機學習率、隨機權重、啟用函式ReLU、梯度歸一化,最後得到了84.06 ± 0.10%正確率的終極演算法。

只訓練一個二元分類結果還不太具有說服力,作者又用3種極端情況考察了Auto ML。

首先,當樣本數量很少的時候,在80個樣本上執行100個epoch。AutoML竟然進化出另一種適應性演算法,給輸入資料加上了噪聲,並開始使用Dropout來訓練模型。

谷歌大腦提出AutoML-Zero,只會數學運算就能找到AI演算法 | 開源

在快速訓練的情況下,只有800個樣本和10個epoch,結果導致學習率衰退反覆出現,這是一個我們在快速訓練訓練機器學習模型中常見的策略。

至於多類別的分類問題,作者使用了CIFAR-10資料集的所有10個類。AutoML進化演算法有時會使用權重矩陣的變換平均值作為學習速率。甚至作者也不知道為什麼這種機制會更有利於多類任務,雖然這種結果在統計學上是顯著的。

上面的所有測試整個過程中,人類沒有告訴程式任何先驗的機器學習知識。

演示

現在谷歌將AutoML-Zero的程式提交到GitHub,普通電腦只需5分鐘就能體驗一下它的實際效果。

安裝好Bazel後,將程式碼下載到本地,執行其中的demo程式:


git clone https://github.com/google-research/google-research.git

cd google-research/automl_zero
./run_demo.sh

這個指令碼在10個線性任務上執行進化搜尋。每次實驗後,它都會評估在100個新的線性任務中發現的最佳演算法。一旦演算法的適應度大於0.9999,就選擇該演算法作為最終結果,將程式碼列印在螢幕上。

在普通電腦上使用CPU在5分鐘內就能發現類似於梯度下降進行線性迴歸的程式:


 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

由人工設計的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.

關於作者

這篇文章的四位作者分別是:Esteban Real、Chen Liang、David R. So以及谷歌大腦的大神Quoc V.Le。

前兩位都是有物理背景的博士生。Esteban Real畢業於哈佛大學,擁有物理學士學位和神經科學博士學位。他的研究方向是視網膜的神經編碼。

谷歌大腦提出AutoML-Zero,只會數學運算就能找到AI演算法 | 開源

Chen Liang畢業於北京大學物理系,之後獲得了西北大學的人工智慧和機器學習博士學位,現在是谷歌大腦的一名研究員,研究方向是強化學習、NLP和AutoML。

谷歌大腦提出AutoML-Zero,只會數學運算就能找到AI演算法 | 開源

傳送門

論文地址:https://arxiv.org/abs/2003.03384

GitHub地址:https://github.com/google-research/google-research/tree/master/automl_zero

— 完 —


https://www.toutiao.com/i6802803803381826060/




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2679945/,如需轉載,請註明出處,否則將追究法律責任。

相關文章