AI前線(2020年7月)

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

作者:李沐

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

深度學習發展的三個階段

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

這兩個項目我們當時做得都不是那麼完善C++版本的Th e ano雖然高效但是不那麼靈活Minerva 靈活但是並不那麼高效。

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

2016 年到 2017 年有兩個比較大的趨勢第一個是自然語言處理等應用的興起。自然語言的興起使得需要更靈活的前端原因是自然語言處理直接處理的是文本有不一樣的長度結構可能也比較複雜對模型的要求也更高第二個趨勢是大量新用戶湧入需要門檻更低的框架最典型的一個框架是 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 更加友好的前端針對入門用戶我們提供算法工具包。

那麼在接下來一年裏我們也在針對不一樣的用戶羣做不一樣的突破面向所有學生和工程師基於AutoML技術使得用戶不再需要費時調參技術繼續下沉在編輯器層面拓展硬件支持、加速深度學習訓練和推理任務。

目錄

生態評論

AI 芯片從未成功過?

重磅訪談

Linux AI 基金會董事會主席星爵:國產開源需要更多利他主義丨開源創新 30 人

落地實踐

進擊的 Flink:網易雲音樂實時數倉建設實踐

企業機器學習平臺

谷歌大腦開源項目 AutoML-Zero:僅用數學運算就能探索出機器學習算法

推薦閱讀

Go 語言之父:四十年來軟件開發之鉅變與 Go 的過去和未來

精選論文導讀

百度鳳巢提出新一代廣告召回系統 MOBIUS | 技術深度解讀

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