標籤:

什麼是 end-to-end 神經網路?

學習神經網路的時候,常常看到論文里說,這個網路是end-to-end的,end-to-end是指什麼樣子的網路,自己的理解是 只需要管這個網路的輸入和輸出,中間他是怎麼實現的,不需要知道。 不知道這個理解對不對?


我的理解跟 @YJango 不太一樣。我就在語音識別的範圍內說說我的理解吧。

傳統的語音識別系統,是由許多個模塊組成的,包括聲學模型發音詞典語言模型。其中聲學模型和語言模型是需要訓練的。這些模塊的訓練一般都是獨立進行的,各有各的目標函數,比如聲學模型的訓練目標是最大化訓練語音的概率,語言模型的訓練目標是最小化 perplexity。由於各個模塊在訓練時不能互相取長補短,訓練的目標函數又與系統整體的性能指標(一般是詞錯誤率 WER)有偏差,這樣訓練出的網路往往達不到最優性能。

針對這個問題,一般有兩種解決方案:

  • 端到端訓練(end-to-end training):一般指的是在訓練好語言模型後,將聲學模型和語言模型接在一起,以 WER 或它的一種近似為目標函數去訓練聲學模型。由於訓練聲學模型時要計算系統整體的輸出,所以稱為「端到端」訓練。可以看出這種方法並沒有徹底解決問題,因為語言模型還是獨立訓練的。
  • 端到端模型(end-to-end models):系統中不再有獨立的聲學模型、發音詞典、語言模型等模塊,而是從輸入端(語音波形或特徵序列)到輸出端(單詞或字元序列)直接用一個神經網路相連,讓這個神經網路來承擔原先所有模塊的功能。典型的代表如使用 CTC 的 EESEN [1]、使用注意力機制的 Listen, Attend and Spell [2]。這種模型非常簡潔,但靈活性就差一些:一般來說用於訓練語言模型的文本數據比較容易大量獲取,但不與語音配對的文本數據無法用於訓練端到端的模型。因此,端到端模型也常常再外接一個語言模型,用於在解碼時調整候選輸出的排名(rescoring),如 [1]。

「端到端訓練」和「端到端模型」的區分,在 [2] 的 introduction 部分有比較好的論述。

與 @YJango 的答案不同,我覺得「輸入是語音波形(raw waveform)」並不是端到端模型的本質特徵,端到端模型的輸入也可以是特徵序列(MFCC 等)。端到端模型的本質特徵是把聲學模型、發音詞典、語言模型這些傳統模塊融合在一起。

參考文獻:

[1] Yajie Miao, Mohammad Gowayyed, and Florian Metze, "EESEN: End-to-End Speech Recognition using Deep RNN Models and WFST-based Decoding," in Proc. ASRU 2015.

[2] William Chan, et al. "Listen, attend and spell: A neural network for large vocabulary conversational speech recognition," in Proc. ICASSP 2016.


經典機器學習方式是以人類的先驗知識將raw數據預處理成feature,然後對feature進行分類。分類結果十分取決於feature的好壞。所以過去的機器學習專家將大部分時間花費在設計feature上。那時的機器學習有個更合適的名字叫feature engineering 。

後來人們發現,利用神經網路,讓網路自己學習如何抓取feature效果更佳。於是興起了representation learning。這種方式對數據的擬合更加靈活。

網路進一步加深,多層次概念的representation learning將識別率達到了另一個新高度。於是你聽到了是個搞機器學習的人都知道的名字:deep learning。實指多層次的特徵提取器與識別器統一訓練和預測的網路。

end to end的好處:通過縮減人工預處理和後續處理,儘可能使模型從原始輸入到最終輸出,給模型更多可以根據數據自動調節的空間,增加模型的整體契合度

拿語音識別為具體實例。普遍方法是將語音信號轉成頻域信號,並可以進一步加工成符合人耳特點的MFCC進行編碼(encode)。也可以選擇Convolutional layers對頻譜圖進行特徵抓取。這樣可在encode的部分更接近end to end 中的第一個end。

但識別出的結果並不可以告訴我們這段語音到底是什麼。DNN-HMM混合模型還需要將DNN識別出的結果通過HMM來解碼(decode)。而RNN-CTC就將HMM的對齊工作交給了網路的output layer來實現。在decode的部分更接近end to end 中的第二個end。


end-end在不同應用場景下有不同的具體詮釋,對於視覺領域而言,end-end一詞多用於基於視覺的機器控制方面,具體表現是,神經網路的輸入為原始圖片,神經網路的輸出為(可以直接控制機器的)控制指令,如:

1. Nvidia的基於CNNs的end-end自動駕駛,輸入圖片,直接輸出steering angle。從視頻來看效果拔群,但其實這個系統目前只能做簡單的follow lane,與真正的自動駕駛差距較大。亮點是證實了end-end在自動駕駛領域的可行性,並且對於數據集進行了augmentation。鏈接:https://devblogs.nvidia.com/parallelforall/deep-learning-self-driving-cars/

2. Google的paper: Learning Hand-Eye Coordination for Robotic Grasping with Deep Learning and Large-Scale Data Collection,也可以算是end-end學習:輸入圖片,輸出控制機械手移動的指令來抓取物品。這篇論文很贊,推薦:https://arxiv.org/pdf/1603.02199v4.pdf

3. DeepMind神作Human-level control through deep reinforcement learning,其實也可以歸為end-end,深度增強學習開山之作,值得學習:http://www.nature.com/nature/journal/v518/n7540/full/nature14236.html

4. Princeton大學有個Deep Driving項目,介於end-end和傳統的model based的自動駕駛之間,輸入為圖片,輸出一些有用的affordance(實在不知道這詞怎麼翻譯合適…)例如車身姿態、與前車距離、距路邊距離等,然後利用這些數據通過公式計算所需的具體駕駛指令如加速、剎車、轉向等。鏈接:http://deepdriving.cs.princeton.edu/

總之,end-end不是什麼新東西,也不是什麼神奇的東西,僅僅是直接輸入原始數據,直接輸出最終目標的一種思想。


端到端指的是輸入是原始數據,輸出是最後的結果,原來輸入端不是直接的原始數據,而是在原始數據中提取的特徵,這一點在圖像問題上尤為突出,因為圖像像素數太多,數據維度高,會產生維度災難,所以原來一個思路是手工提取圖像的一些關鍵特徵,這實際就是就一個降維的過程。

那麼問題來了,特徵怎麼提?

特徵提取的好壞異常關鍵,甚至比學習演算法還重要,舉個例子,對一系列人的數據分類,分類結果是性別,如果你提取的特徵是頭髮的顏色,無論分類演算法如何,分類效果都不會好,如果你提取的特徵是頭髮的長短,這個特徵就會好很多,但是還是會有錯誤,如果你提取了一個超強特徵,比如染色體的數據,那你的分類基本就不會錯了。

這就意味著,特徵需要足夠的經驗去設計,這在數據量越來越大的情況下也越來越困難。

於是就出現了端到端網路,特徵可以自己去學習,所以特徵提取這一步也就融入到演算法當中,不需要人來干預了。


我從目標檢測角度來說說我對end-to-end的理解。

非end-to-end方法:

目前目標檢測領域,效果最好,影響力最大的還是RCNN那一套框架,這種方法需要先在圖像中提取可能含有目標的候選框(region proposal), 然後將這些候選框輸入到CNN模型,讓CNN判斷候選框中是否真的有目標,以及目標的類別是什麼。在我們看到的結果中,往往是類似與下圖這種,在整幅圖中用矩形框標記目標的位置和大小,並且告訴我們框中的物體是什麼。

這種標記的過程,其實是有兩部分組成,一是目標所在位置及大小,二是目標的類別。在整個演算法中,目標位置和大小其實是包含在region proposal的過程里,而類別的判定則是在CNN中來判定的。end-to-end方法:

end-to-end方法的典型代表就是有名的yolo。前面的方法中,CNN本質的作用還是用來分類,定位的功能其並沒有做到。而yolo這種方法就是只通過CNN網路,就能夠實現目標的定位和識別。也就是原始圖像輸入到CNN網路中,直接輸出圖像中所有目標的位置和目標的類別。這種方法就是end-to-end(端對端)的方法,一端輸入我的原始圖像,一端輸出我想得到的結果。只關心輸入和輸出,中間的步驟全部都不管。


就是搬磚工越來越懶了,都喜歡 raw data 丟進去,期望的輸出吐出來,拿去訓練就能得到好看的結果。

好出是方便。

壞處是越來越像一個黑箱。


其實就是joint learning.

end-to-end 的本質是你要解決的問題是多階段的或多步的(跟所謂的raw feature沒啥關係)。如果分階段學習的話,第一階段的最優解不能保證第二階段的問題達到最優。end-to-end把他們堆在一起來優化,確保最後階段的解達到最優。


國立台灣大學的李宏毅教授在其機器學習課程中有講到深度神經網路的 End-to-end Learning,具體可參看其課件或課程視頻的後半部分:

課件:http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/Why%20deep%20(v2).pdf

視頻:https://www.youtube.com/watch?v=XsC9byQkUH8

簡單來說就是深度神經網路處理問題不需要像傳統模型那樣,如同生產線般一步步去處理輸入數據直至輸出最後的結果(其中每一步處理過程都是經過人為考量設定好的 (「hand-crafted」 function))。

與之相反,只需給出輸入數據以及輸出,神經網路就可以通過訓練自動「學得」之前那些一步接一步的 「hand-crafted」 functions。

課件之後還給出了語音識別以及圖像識別的例子,進一步說明深度神經網路 End-to-end Learning與傳統方法的區別。


如果是目標檢測領域,可以比較一下RCNN跟fast RCNN。

兩篇文章一作是一個人,前者不是end-end,後者是。


輸入到輸出的映射中,可學習(learnable)的那部分參數由單個神經網路統一學習,整體優化目標函數。

含有參數固定的輸入輸出變換並不影響端到端的性質,並不一定要把 raw data 作為輸入。


簡單來說,輸入是原始數據,輸出就是你預測的目標。


end to end裡面肯定是joint training 和全局最優,但是end to end 更強調是輸入和輸出的關係,就是原始數據輸入,期望結果輸出。


輸入原始數據,直接得到最後的結果,且網路從頭到尾是可導的。


因為多層神經網路被證明能夠耦合任意非線性函數,通過一些配置能讓網路去做以前需要人工參與的特徵設計這些工作,然後配置合適的功能如classifier,regression,而現在神經網路可以通過配置layers的參數達到這些功能,整個輸入到最終輸出無需太多人工設置,從raw data 到最終輸出指標


不知是否可以理解為end-to-end訓練只用一個階段,如:Fast R-CNN,Faster R-CNN

而R-CNN、SPP訓練需要分為多個階段:微調網路+訓練SVM+訓練邊框回歸器


直接點:end-to-end~上例子

輸入的是語音,輸出的是文本

翻譯:輸入的是英語,輸出的是其他語言

輸入的是文本,輸出的是語音


推薦閱讀:

2017年神經機器翻譯(NMT)的一些重要資源匯總?
只有達到 state of the art精度的方法才能發文章嗎?
如何評價谷歌剛推出的Cloud AutoML?
人工智慧和人類智能的本質區別是什麼?
中科院的「寒武紀1號」晶元和IBM 的「真北」晶元有什麼不同?

TAG:神經網路 |