如何評價谷歌新推出的神經網路模型MultiModel?

最近,谷歌的研究員們在Arxiv上預發表了一篇題為《One Model To Learn Them All》的論文。論文中說,深度學習挺好,但每解決一個問題都得建一個模型,還要花好長時間調參、訓練,太麻煩了——於是,他們搞了一個「在各種領域很多問題上效果都不錯」的模型MultiModel……

他們現在在訓練這個神經網路識別ImageNet圖像、進行多種語言翻譯、在COCO數據集上根據圖片生成文字說明、做語音識別、做英文語法分析。

如何看待這篇論文?

論文地址:https://arxiv.org/pdf/1706.05137.pdf


Google的paper名字起得真的是越來越...擲地有聲了...


多任務學習的集成學習版式,感覺是個標題黨,這麼搞下去真的好么?我個人不看好。

從大的角度講這算是個性化模型和統一模型的對抗了吧,Google明顯偏向統一模型的。

對於企業來說這種模型顯然是有很多好處的,快速部署,能力又不弱。然而這玩意感覺並沒有多大的技術含量和創新性。要不是Google做的,估計會被噴吧。


這篇文章與其說是one model,不如說是Google之前一堆工作包裝起來的全家桶。簡單看了一下,文章引用提到Google之前的工作有以下幾個:ByteNet[1], WaveNet[2], SliceNet[3], Xception[4], Attention is all you need[5], Mixture of Expert[6],然後用了一個統一的架構將這些技術細節連在一起,於是就有了這個吸引眼球的名字。

客觀的講,將多種任務(翻譯、圖像分類、image Caption、語音識別、語法分析)統一到一個模型里,確實能減少模型調參、工程開發甚至線上部署工作量等,並且一定程度上利用multi-task的transfer性能,boosting其中某些關聯任務的性能。同時,對於在大公司內部做統一機器學習平台的人來說,這是一個大的利好,他們比較頭疼的是不同的模型比如RNN/CNN/DNN由於結構差異需要針對不同的業務部門不同應用場景分別做優化,而現在統一後,很大精力可以放在這種大一統模型的優化加速上。但是,從實用角度講,有幾個不好的點需要指出:(1)一是多個任務用一個架構合在一起後,哪怕是單獨訓練各自的model,也無法達到甚至遠遠低於state-of-the-art的結果,例如paper中給出的WMT en-de en-fr兩個翻譯任務,趕state-of-the-art分別差5個和10個點,這是一個非常大的差距,在追求模型精度的場景中,人們很難為了這種大一統模型而放棄單個任務的精度要求(2)二是多個模型混合在一起,模型結構相互制約,很難為了某個單一任務的效果而去做針對性的模型設計調整,而且即使調整模型結果協同使得多個任務的效果有了提升,也很難定點的分析到底是哪些改變導致了哪些任務的提升,混在一起很難理清楚。(3)從實際應用業務落地的角度來說,現在很少找到一個深度學習應用方,同時需要這麼多任務的場景,往往業務部門是更多針對當前業務深度定製化的深度學習模型,也就是窄而精,而不是廣效果卻不好,當然這對一篇學術研究論文來說有點吹毛求疵了。

在拋掉全家桶工作包裝、略帶PR的標題之外,論文中的一些技術細節還是值得來看一看。

首先看上圖整個模型的框架,分為Encoder、Decoder、I/O Mixer以及Modality(可以稱為輸入輸出適配器),正所謂大道至簡,這幾個模塊確實足以概括大多機器學習任務,給定輸入通過某種轉換得到輸出,所有的任務可以共享中間的轉換環節,大家表徵一樣、模型結構也一樣,而不同的輸入和輸出就通過不同的輸入輸出適配器映射到統一的表徵空間。由於輸出基本都是sequence的形式,所以用了autoregressive decoder的結構,上一個輸出feed到I/O Mixer作為輸出去預測下一個輸出。

模型用到的除了輸入輸出適配器外的所有架構如下圖所示,最左邊是基本的點乘attention形式,第二列是整個Encoder/Decoder/IO Mixer共用的attention,attention的query是經過兩個ConvStep再做一次self-attention(self-attention參見[5])得到,attention的key-value相同。關於卷積,第三列的ConvBlock用到了dilated conv以及separable conv,都多多少少借鑒他們全家桶paper里的ByteNet, WaveNet, SliceNet, Xception的工作,當然這兩種conv最原始的操作可以參見[7][8]

下面一一介紹下這些工作:

A: dilated conv的介紹可參見知乎答案如何理解空洞卷積(dilated convolution)?

B: 簡單介紹下ByteNet的工作,ByteNet結構如下所示:

ByteNet的幾大特點如下:

(1)運行時間線性,其實RNN也算線性,和輸入長度成正比,但是CNN卷積可並行,因此時間更短,只是ByteNet的深度由depenency field要求決定,如果要求整個句子長度,則網路深度為logS。所以用了Dilated Conv可以比fairseq conv seq2seq的層數淺,這是一大優勢。

(2)encoder端的主要考慮還是resolution preserving,信息保留越多越好,因此使用dilated conv大的感受野能讓單個encoder輸出神經元保留更多信息,也讓後面的encoder到decoder的直連相對能work,因為ByteNet的結構encoder到decoder端沒有attention相連,當前step的encoder輸出直接連到相同step的decoder輸入,某種程度上的大感受野的dilated conv也充當了self-attention的作用。

(3)信息傳輸路徑,Bytenet的信息傳輸和conv深度有關,因此路徑為logS,而傳統的RNN傳輸路徑為S,因此ByteNet大大減少信息傳輸路徑,而且相比fairseq的convseq2seq還可以更短。

ByteNet的結果要早於convseq2seq,是做char-level的NMT,而且一開始在WMT EN-DE任務上效果不好,最新的結果在WMT 2014上BLEU有23.75,相比fairseq conv seq2seq的25.16還是差點。但是論文的思想還是值得借鑒。

C: SliceNet,應用了Depthwise Separable Convolutions,這個卷積操作具體可參見paper[3]。感覺原理很像做CNN壓縮的通用技巧,即CNN的卷積操作在圖像上一般是在三個維度同時進行(當然在文本上進行1-D卷積有兩個維度,sentence長度和embedding size),Width* Height *Depth,Width和Height就是feature map本身的尺寸,而depth就是多個不同的feature map,同時對這三個維度進行卷積操作,那麼kernel參數肯定很大,為kernel_width*kernel_height*depth (depth為feature map數量),如果在文本上,kernel參數大小為kernel_width*depth(depth為hidden size大小),那能不能對這些維度進行分解,先在Width和Height維度做卷積,然後再在depth維度做卷積呢?答案是可以的,比如paper[10],其實原理就是cp-decomposition,即tensor rank decomposition,其實就是二維矩陣SVD分解一種高維tensor泛化形式,將high rank tensor分解成一系列low rank tensor的乘積。

這次簡單寫到這裡,後面的技術細節下次再更新。

[1] Kalchbrenner, Nal, et al. "Neural machine translation in linear time." arXiv preprint arXiv:1610.10099 (2016).

[2] Oord, Aaron van den, et al. "Wavenet: A generative model for raw audio." arXiv preprint arXiv:1609.03499 (2016).

[3] Kaiser, Lukasz, Aidan N. Gomez, and Francois Chollet. "Depthwise Separable Convolutions for Neural Machine Translation." arXiv preprint arXiv:1706.03059 (2017).

[4] Chollet, Fran?ois. "Xception: Deep Learning with Depthwise Separable Convolutions." arXiv preprint arXiv:1610.02357 (2016).

[5] Vaswani, Ashish, et al. "Attention Is All You Need." arXiv preprint arXiv:1706.03762 (2017).

[6] Shazeer, Noam, et al. "Outrageously large neural networks: The sparsely-gated mixture-of-experts layer." arXiv preprint arXiv:1701.06538 (2017).

[7] Yu, Fisher, and Vladlen Koltun. "Multi-scale context aggregation by dilated convolutions." arXiv preprint arXiv:1511.07122 (2015).

[8] Sifre, L. Rigid-motion scattering for image classification, 2014. Diss. Ph. D. thesis.

[9] Long J, Shelhamer E, Darrell T, et al. Fully convolutional networks for semantic segmentation[C]. Computer Vision and Pattern Recognition, 2015.

[10] Lebedev, Vadim, et al. "Speeding-up convolutional neural networks using fine-tuned cp-decomposition." arXiv preprint arXiv:1412.6553 (2014).


試圖擴展深度學習的泛化能力之前,可以先思考一下這篇文章:Understanding deep learning requires rethinking generalization (https://openreview.net/pdf?id=Sy8gdB9xx)

並回答幾個問題:從一個不相干的任務,比如imagenet,訓練得來的參數應用到文本parsing上得到的提高是否意味著跨modality的transfer learning的成功?用多個訓練集訓練後,相比於用某單項任務的單個訓練集的的提高是來自其他任務的transfer的幫助,還是來自訓練數據量提高等其他原因?深度學習真的能拓展對多modality的泛化能力么?


你仔細看一下他這篇論文是基於8個數據集的。

我給你原文截個圖:

你仔細看下第8條,The reverse of the above: German-French translation. 你的above是啥! 是English-Frensh啊! 哪來的German!

連這麼關鍵的數據集都能寫錯... 所以,你說要怎麼評價?

另外貼一個自己做的關於這篇論文的視頻: 「宋爺帶你看論文」One Model To Learn Them All


標題黨,封面殺手!

神經網路圖林完備早就證明過了,只要網路足夠複雜,可以模擬任何模型/演算法。所以你搞個MultiModel不提時間空間複雜度,就是在耍流氓。


邊看邊回答。

先指出一點,Figure 1第一個圖片描述就出錯了,把手碟(hang drum)識別成了手提箱(suitcase)。應該是因為樣本太少了吧。

另外,從文章整體思路上來看,是把各種應用裡面的核心工具,比如卷積核,注意力機制,sparsely-gated layers做成一個工具箱,然後證明這個工具箱在各種應用上都能取得比單個工具不差甚至更好地效果,但是不能取得最好的效果("not state-of-the-art at present")。具體是數據量較小的時候工具箱更好用,數據量大的時候,效果比單個工具差一點。


MTL想做的是多任務輔助讓某單一任務達到最高精度。而google的multimodel的目標不應該是MTL的單任務突出其他任務輔助,而是多任務共贏。然而論文發表的精度沒有達到多任務共贏,反倒好看點的結論都是MTL該乾的事。不過多modality任務是MTL沒法做的。文章說還沒認真調參所以精度數字不好看,都是為了占坑。。。工業上如果能調出這種多任務共贏的模型的話,inference時間可以縮短到幾分之一,很不錯。


更泛化了,普適性更好


推薦閱讀:

用人工智慧逐漸代替門診醫生是否有可行性?
未來翻譯會被人工智慧取代嗎?
新入學的計算機研究生(專碩)應該怎麼安排兩年半的學習生涯?
MIT 技術評論評選2017年全球50大最聰明公司,中國有9家公司上榜,你怎麼看?

TAG:人工智慧 | 谷歌Google | 神經網路 |