3月28日,地平線機器人技術(shù)公司創(chuàng)始人余凱博士、亞馬遜AWS機器學(xué)習(xí)總監(jiān)Alex Smola、亞馬遜AWS解決方案架構(gòu)師鄧明軒以及地平線機器人技術(shù)公司算法副總裁黃暢,在地平線和雷鋒網(wǎng)聯(lián)合主辦的“大牛講堂”上做了精彩分享。其中Alex Smola做了“使用MXNet實現(xiàn)快速、可擴展、定制化深度學(xué)習(xí)”的主題演講,根據(jù)現(xiàn)場錄音和PPT做了不改變原意編譯。

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