亞馬遜機器學習總監Alex Smola:TensorFlow、Caffe等已經存在,為何還需要MXNet?
3月28日,地平線機器人技術公司創始人余凱博士、亞馬遜AWS機器學習總監Alex Smola、亞馬遜AWS解決方案架構師鄧明軒以及地平線機器人技術公司演算法副總裁黃暢,在地平線和雷鋒網聯合主辦的“大牛講堂”上做了精彩分享。其中Alex Smola做了“使用MXNet實現快速、可擴展、定制化深度學習”的主題演講,雷鋒網根據現場錄音和PPT做了不改變原意編譯。
Alex Smola于1996年畢業於慕尼克工業大學,獲物理學碩士學位,1998年在柏林工業大學取得電腦科學博士學位。之後,他在澳大利亞國立大學擔任研究院和研究小組組長。2004-2008年,Alex Smola在NICTA研究中心統計機器學習專案擔任專案負責人,2008-2012年在雅虎的從事研究工作,2012-2014加入穀歌從事研究工作,2013年加入卡內基·梅隆大學擔任教授,2015年,他創立了Marianas實驗室,2016年,Alex加入亞馬遜,目前擔任亞馬遜AWS的機器學習總監。迄今為止,Alex共發表超過200篇論文並參與編寫多本學術專著。
1. 深度學習讓一切變得更容易
演講一開始,Alex就提出了一個問題,“為什麼我們現在要做深度學習?”在他看來,最主要的原因有兩點:海量的資料以及計算能力的大幅提升。如今,資料已經可以很容易獲取,而計算能力的提升則是由於GPU在深度學習領域的應用。
從遊戲“
FizzBuzz
”說起
接著,Alex列舉了一個例子——FizzBuzz,這是一種用來教導小學生除法的遊戲:從1數到100,如果遇見了3的倍數要說Fizz,5的倍數到說Buzz,如果即是3的倍數又是5的倍數要說FizzBuzz。
如果要通過程式設計方法來實現,那麼需要先生成訓練資料,然後提取輸入資料的特徵,然後再訓練一個分類器,讓輸入能夠映射出相應的輸出,這一切看起來似乎非常愚蠢。
但是Alex認為,如果你有了“真正的資料”,這其實是是非常有用的。比如訓通過一台小型攝像機來識別貓和狗,這個過程非常複雜,而且無法像以前一樣寫出代碼,但是卻有很多樣本資料可供使用,可以用來訓練estimator(判定器),然後可以基於這些資料搭建一個模型。
而通過MXNet,你所需要做的僅僅只有定義輸入資料,調用MXNet的“fully connected layer”,最後獲得Softmax輸出。而MXNet會替你做好資料反覆運算、載入腳本、以及訓練迴圈。
不過,當只有一層感知器(perecptron)的時候,還比較容易訓練,但是有多層感知器的的時候,訓練會變得十分困難。這將涉及到對每一層的表達,以及過程中的物件變換,而且還會用到鏈式法則(chain rule,微積分中的求導法則,用於求一個複合函數的導數),然而MXNet可以自動完成這些過程。
從遊戲“Where's Waldo?”說起
那麼要怎樣做具體的圖像識別呢?這裡Alex列舉了另一個很有名的遊戲——“Where's Waldo?”其實, 《Where's Waldo?》是一套由英國插畫家Martin Handford創作的兒童書籍,這個書的目標就是讓在讀者在一張人山人海的圖片中找出一個特定的人物——“Waldo”。那麼要如何讓電腦來從圖像中識別出“Waldo”呢?這裡就需要用到卷積神經網路。
CNN(
卷積神經網路
)
什麼是卷積?卷積就是兩個函數之間的相互關係,然後得出一個新的值,他是在連續空間做積分計算,然後在離散空間內求和的過程。卷積運算的目的是提取輸入的不同特徵,第一層卷積層可能只能提取一些低級的特徵如邊緣、線條和角等層級,更多層的網路能從低級特徵中反覆運算提取更複雜的特徵。
在卷積神經網路中,除了卷積層,還有一種叫池化(pooling)的操作。它實際上是一種形式的向下採樣,有多種不同形式的非線性池化函數,而其中“最大池化(Max pooling)”是最為常見的。它是將輸入的圖像劃分為若干個矩形區域,對每個子區域輸出最大值。池化層會不斷地減小資料的空間大小,因此參數的數量和計算量也會下降,這在一定程度上也控制了過擬合。
Alex在這裡列舉了兩種卷積神經網路模型:
1). LeNet
Le顧名思義就是指人工智慧領域的大牛Lecun。這個網路是深度學習網路的最初原型,因為之前的網路都比較淺,它是較深的。
雷鋒網曾對LeNet的實現過程做過詳解:
首先,輸入圖像是32×32的灰度圖,第一層經過了一組卷積和,生成了6個28X28的feature map,然後經過一個池化層,得到得到6個14X14的feature map,然後再經過一個卷積層,生成了16個10X10的卷積層,再經過池化層生成16個5×5的feature map。
從最後16個5X5的feature map開始,經過了3個全連接層,達到最後的輸出,輸出就是標籤空間的輸出。由於設計的是只要對0到9進行識別,所以輸出空間是10,如果要對10個數位再加上26個大小字母進行識別的話,輸出空間就是62。62維向量裡,如果某一個維度上的值最大,它對應的那個字母和數位就是就是預測結果。
2). Inception
穀歌的Inception v1的網路將1x1、3x3、5x5的卷積和3x3的最大池化堆疊在一起,並在3x3、5x5的卷積前以及3x3最大池化後分別加上了1x1的卷積核,起到了降低特徵圖厚度的作用,上圖就是Inception v1的網路結構。
Alex稱,要通過Caffe來實現這一結構需要幾千行代碼,然而要如何簡化這一過程呢?這也就引出了一個問題:為什麼我們需要另一個深度學習工具?
2. 為什麼需要另一個深度學習工具?
目前市面上已經有了TensorFlow、Caffe、Torch、Keras、CNTK、PaddlePaddle、Theano等等,那麼我們為什麼還需要MXNet呢?
Alex介紹道,MXNet主要有3方面的優勢:
效率:節省計算資源,資源利用效率高;
速度:可以隨著機器和GPU的擴展呈線性增長,而且在單台機器上也有很高的效率;
簡單易用:同時支持命令式程式設計(imperative programming)和聲明式程式設計(declarative programming)。
根據維琪百科的解釋:
命令式程式設計是一種描述電腦所需作出的行為的程式設計範型,較高級的指令式程式設計語言使用變數和更複雜的語句,但仍依從相同的範型。因為命令式程式設計的基礎觀念,不但概念上比較熟悉,而且較容易具體表現於硬體,所以大部分的程式設計語言都是指令式的。
聲明式程式設計與命令式程式設計相對立。它描述目標的性質,讓電腦明白目標,而非流程。聲明式程式設計是告訴電腦需要計算“什麼”而不是“如何”去計算,而命令式程式設計則需要用演算法來明確的指出每一步該怎麼做。
比如,如果深度架構的計算圖譜需要深度優化,則比較適合聲明式程式設計;而涉及到更新以及圖譜交互時,比如反覆運算迴圈、參數更新、定向搜索、特徵提取等,這時命令式程式設計則更為合適。
Alex認為,提高用戶的工作效率最為關鍵。
由於每個使用者偏好的程式設計語言以及深度學習的框架可能各不相同,因此MXNet努力擴展自己的相容性。根據Alex的PPT,目前MXNet已經能夠調用Torch,並可以無縫相容Caffe Layer,而且將很快相容Keras。
雖然MXNet同時支持命令式程式設計和聲明式程式設計,但是並沒有將兩者融匯貫通。有開發者基於MXNet,開發了MinPy,提供numpy介面,用來解決這個問題。在使用MinPy時,只需要簡單改寫一句import語句:import minpy.numpy as np,就能夠開始使用MinPy了。由於是完全的命令式程式設計的介面,程式設計的靈活性被大大提高。
Alex列舉了一個例子(如上圖所示),在TensorFlow中,如果需要列印某個變數,需要在列印語句前加上 “control_dependencies”。而在MinPy中,可以直接使用Python的原生“print”語句。
此外,由於GPU採用的是高度並行的運行方式,這也是為何GPU比CPU更加適合深度學習的原因。然而想要寫出並行的程式則是一件非常痛苦的事情,但是MXNet則可以自動執行這一過程:你只需要編寫串列程式,MXNet就可以自動實現並行運行。
當然,Alex也將MXNet與目前最流行的穀歌TensorFlow進行了對比。根據Alex的介紹,在分散式訓練的實驗中,如果用10台以上的機器,MXNet處理圖像樣本的速度要比TensorFlow快2倍。
不過,Alex也提醒道,要想在分散式訓練的過程中快速達到收斂,Batch Size的選擇也很重要,並不是越大越好。
3. AWS為深度學習提供的各種雲服務
作為全球第一大雲服務提供者,亞馬遜也為深度學習提供各種雲服務,Alex主要介紹了Amazon Machine Images(簡稱AMI)以及 CloudFormation Template。
從字面上就可以看出,AMI主打圖像識別,它可以節省資料科學家和開發者設置深度學習系統的時間。除了支持亞馬遜自己的MXNet框架外,AMI還支持TensorFlow、Caffe、Torch、Theano、Keras,用戶可以使用Anaconda、Jupyter、Python 2、Python 3。
Alex表示,如果你要為深度學習搭建一個電腦集群(一種電腦系統,它通過一組鬆散集成的電腦軟體和/或硬體連接起來高度緊密地協作完成計算工作),亞馬遜則提供AWS CloudFormation Template。
雖然MXNet有很多優勢,並於去年11月被亞馬遜選為官方深度學習框架,又在今年2月加入Apache孵化器,利用Apache軟體基金會的流程、管理、外展和社區活動,但是目前最流行的仍然是穀歌的TensorFlow等常用框架。由於被穀歌搶佔先機,未來MXNet想要快速發展,必須爭取更多開發者的支持。