亞馬遜首席科學家李沐:構建深度學習開源生態的努力和思考

2020 年 7 月 9 日,以“智聯世界 共同家園”爲主題,以“高端化、國際化、專業化、市場化、智能化”爲特色的世界人工智能大會雲端峯會開幕。會上集聚了衆多全球智能領域最具影響力的科學家和企業家,以及相關政府的領導人,圍繞智能領域的技術前沿、產業趨勢和熱點問題發表演講和進行高端對話。會議第二天,亞馬遜首席科學家李沐在主題爲“當AI在雲端生長”的AWS論壇上發表了的演講。以下爲 InfoQ 根據嘉賓演講進行的內容整理。

內容未經本人確認,由 InfoQ 依據現場視頻進行整理,以下爲李沐的演講全文整理。

首先我們今天的報告是基於深度學習,深度學習在google趨勢中的熱度如下圖所示:

在過去10年裏面我們可以認爲從2012年-2015年是深度學習的開始,幾個算法上的突破使得深度學習在研究屆得到了應用。2016年-2017年隨着資本的介入、媒體的介入,使得深度學習和AI被大家知道和報道,2018年到2020年,可以認爲是用戶趨向於理性的階段。我們知道了機器學習的一些侷限性,我們也看到了深度學習在過去幾年在不斷地被簡化並且成功地應用到工業界的應用上。

深度學習發展的三個階段

針對上述三個階段,我們也做過的思考也是不一樣的。深度學習的黃金時代是2012年到2015年。2012年時,AlexNet贏下了ImageNet,這被認爲是深度學習熱潮的一個開端。AlexNet跟傳統模型不一樣的地方在於它有數十層的神經網絡,以及它需要用多個GPU才能夠有效地訓練,這兩點使得它的開發非常困難。這也導致了大量開發者需要有專有的深度學習框架才能很方便地進行深度學習的開發。當時,我們的第一個嘗試是想做一個Theano,Theano是一個很早期的神經網絡框架,它非常靈活,但是它比較慢。所以我們思考能不能做一個C++版的Theano使得它能更快一點。做出來後發現它特別像Caffe。第二個同時期的項目是Minerva想把NumPy拓展到GPU和自動求導上,使得深度學習能夠用NumPy來開發。

這兩個項目我們當時做得都不是那麼完善,C++Net雖然比較高效,但是它不那麼靈活,Minerva雖然靈活,但是它的性能也不那麼高效。

2015年的時候我們在思考,要不要把這兩個項目的所長結合在一起,這個項目的名字叫做MXNet,之後進入了Apache。當然,同年還有很多神經網絡框架出現,包括在日本開發的對Python很友好的Chainer、Keras (Theano易用前端)以及TensorFlow(Theano增強版)。

2016年到2017年有比較大的兩大趨勢,第一個是自然語言應用的興起。自然語言的興起使得我們需要更靈活的前端,原因是自然語言處理直接處理的是文本,它有不一樣的長度,結構可能也比較複雜,對於模型上的要求也更加高。第二個趨勢是,近兩年AI被廣泛地報道,很多新的用戶湧進來,他們需要門檻更低的框架。最典型的一個框架是PyTorch,它繼承了來自於Torch大量的特性,並借鑑了Chainer。看到PyTorch的興起,我們也借鑑了PyTorch的特性推出了Gluon前端。MXNet有三大可以關注的特性是:第一、我們有類似於Numpy的張量計算NDArray;第二、用戶可以通過Gluon在Python比較友好的情況下進行神經網絡的構建和訓練;第三、通過hybridize切換到計算圖後端來優化和脫離Python部署。

2018年到2019年,我們看到深度學習的熱度在下降,這時候Theano停止了開發,Karas進入了到了默認的前端,Torch和Caffe停止了開發,繼任者Caffe2也併入了PyTorch。目前市面上比較流行的框架包括了TensorFlow,它有強大的後端和生態鏈,使得它廣泛地被公司開發者使用。PyTorch靈活的前端廣受研究者的歡迎。

MXNet我們嘗試讓它像TensorFlow一樣就比較好,有強大的後端,甚至能像PyTorch一樣有比較靈活的前端,使它能夠平衡研究者和工業級用戶。當然這個遠遠不是結局。隨着硬件需求的不斷變化,系統也需要不斷地迭代。

在2019年到2020年,我們做了兩大比較重要的事情,第一,我們將Tensor API完全兼容NumPy,因爲我們發現大部分Python用戶在學習機器學習或者深度學習之前已經接觸過NumPy,但是NumPy還是不夠被深度學習用戶所使用,我們需要對NumPy進行GUP加速,以及提供求導。在過去5年的技術積累上,我們也在編譯器上做了大量的工作。終於使得我們可以完全進入NumPy,而且保證性能,使用起來也很方便。

同時,我們提到我們的深度學習框架時基於Gluon,但是我們還是需要用戶來hybridize到後端計算圖,使得用戶需要考慮到一些事情。現在,用戶不需要再考慮計算圖和符號來執行,因爲我們的優化已經做得足夠好。用戶只需要關心怎樣在Python上使用NumPy接口來實現它的代碼,然後系統可以將所有的代碼轉化成計算圖,並且脫離Python來執行。

2017年,當大量用戶進來的時候,我們觀察到一個現象,當下的用戶不再爲深度學習框架感到興奮,而是當它們本應該存在。那麼,這時候,快速落地最爲關鍵。如何有效、高效地處理數據,能夠快速地訓練模型,然後能夠流暢地部署,這是用戶關心的問題。因此,我們於2017年的時候在框架的基礎上開始開發算法工具包,方便特定領域的模型的訓練和部署,包括面想計算機視覺的GluonCV。

在算法工具包開發過程中,我們經歷了兩個階段,第一個階段我們更關注細節,我們保證每個模型都能提供很好的精度。我們發現論文中很多細節都被一筆帶過,於是我們在實現GluonCV的時候,調用了大量的論文和代碼,然後嘗試把所有細節都用在一起。

下圖是一個基於ResNet的結果,下圖顯示了三個ResNet 模型,X軸表示速度,Y軸表示精度,可以看到,每個紅色點的最上方橫線是此模型在論文中的精度,ResNet-50是最快的,精度也是最低的,ResNet-152和ResNet-101雖然比ResNet-50要慢,但是它們的精度也要更高。如果我們能將一些訓練的技巧運用過來,可以看到它可以對整個模型進行顯著的提升。如果允許模型進行細微的調動,在不影響太多速度的情況下,我們能更加進一步地提升它的精度。

更多地,我們發現這些結果不僅僅對一個模型適用,它幾乎可以改變所有模型的精度。如下圖所示,可能兩條黃線的區別看起來不大,但實際上可能代表的是計算機視覺近幾年的一些進展的總和。

工具包開發的第二個階段是我們能夠做一些解決用戶問題的研究。舉個例子,遷移學習是深度學習在計算機視覺領域興起的一大原因,我們可以通過訓練好的深度卷積神經網絡來抽取圖片的語義特徵,然後用在其他諸如物體識別、圖片分割等任務上。但是,深度卷積神經網絡的研究主要關注在能夠得到更好的ImageNet分上,實際使用中,大家仍然主要使用結構簡單的RestNet。

我們的想法是,是不是能在不改變ResNet的結構的前提下,加入分裂注意力層,使將其能更好抽取語義特徵。

我們還在GluonCV之外開發了面向自然語言處理的工具包GluonNLP。NLP和計算機視覺不一樣的地方在於它的應用比較多樣化。

此外,我們比較關注的方向是加速BERT在工業界的應用。我們第一個工作是在公有云的硬件上將BERT訓練時間減少到一個小時之內,之前在一個小時之內的結果都是基於特製的集羣。第二個工作是,我們在AWS G4實例上,一百萬次的BERT推理開銷降到1.5元錢以內。這樣就使得BERT能夠大量地、很便宜地應用在工業界的應用上。

如何入門深度學習?

2018年的時候,隨着AI和深度學習的廣泛普及,我們不斷收到用戶和工程師的反饋,他們都在詢問想要學習深度學習,但是不知道如何開始。學習深度學習需要知道數學、模型、調參、實現、性能一樣都不能少。對我個人而言,我發現最好學習的方法是將文字和公式轉換成代碼,並在實際數據上跑上幾次,才能大概知道怎麼回事兒。

在過去幾年裏面,我們針對不一樣的用戶提供了不一樣的工具,針對骨灰級用戶,我們提供深度學習框架,對資深用戶,我們提供Python更加友好的前端,針對入門用戶我們提供算法工具包。

那麼,在接下來一年裏,我們也在針對不一樣的用戶羣做不一樣的突破。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章