1. 程式人生 > >深度學習中 經常提到的 end to end 的理解

深度學習中 經常提到的 end to end 的理解

End to end:指的是輸入原始資料,輸出的是最後結果,應用在特徵學習融入演算法,無需單獨處理。

end-to-end(端對端)的方法,一端輸入我的原始資料,一端輸出我想得到的結果。只關心輸入和輸出,中間的步驟全部都不管。

  端到端指的是輸入是原始資料,輸出是最後的結果,原來輸入端不是直接的原始資料,而是在原始資料中提取的特徵,這一點在影象問題上尤為突出,因為影象畫素數太多,資料維度高,會產生維度災難,所以原來一個思路是手工提取影象的一些關鍵特徵,這實際就是就一個降維的過程。
  那麼問題來了,特徵怎麼提?
  特徵提取的好壞異常關鍵,甚至比學習演算法還重要,舉個例子,對一系列人的資料分類,分類結果是性別,如果你提取的特徵是頭髮的顏色,無論分類演算法如何,分類效果都不會好,如果你提取的特徵是頭髮的長短,這個特徵就會好很多,但是還是會有錯誤,如果你提取了一個超強特徵,比如染色體的資料,那你的分類基本就不會錯了。
  這就意味著,特徵需要足夠的經驗去設計,這在資料量越來越大的情況下也越來越困難。
  於是就出現了端到端網路,特徵可以自己去學習,所以特徵提取這一步也就融入到演算法當中,不需要人來干預了

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

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

相關理解:

1、傳統系統需要幾個模組序列分別設計,end2end把中間模組都去掉了。
以機器翻譯為例 要設計翻譯模型 語言模型 調序模型
端到端就是直接一個模型搞定

2、cnn就是比較典型的end2end模型。在影象分類裡輸入image各通道畫素,輸出影象類別。 相比於非end2end,conv層的卷積核可以充當feature extractor部分而不需要額外的工作去做特徵工程的內容。儘管每一層需要自己設計,但如何得到feature並不需要額外的操作。

3、另一種理解:就是輸入一頭豬,輸出的是香腸

End-to-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

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

總之

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