如何理解CNN在CV與NLP領域運用的聯繫與區別?


相同:自然語言處理是對一維信號(詞序列)做操作,計算機視覺是對二維(圖像)或三維(視頻流)信號做操作。

不同:自然語言處理的輸入數據通常是離散取值(例如表示一個單詞或字母通常表示為詞典中的one hot向量),計算機視覺則是連續取值(比如歸一化到0,1之間的灰度值)。

另:樓上幾位沒聽說convnet應用於NLP的,paper讀少了。不說今年nips的新paper,四年前的那篇NLP almost from scratch木有聽說過?


cnn先在cv火,然後在nlp火,接著rnn在nlp火,現在又慢慢開始在cv火了,cv和nlp很多方法都是通用的,我覺得更重要的是學會遷移


CNN在CV領域已經發展的比較成熟,NLP相對來說最近一兩年才開始廣泛使用CNN,並且取得了不錯的效果。

為什麼CNN用在CV上更得心應手,卻不一定適合NLP?要看清這點就要理解CNN的原理。CNN有兩個主要特點,區域不變性(location invariance)和組合性(Compositionality)。

1. 區域不變性:濾波器在每層的輸入向量(圖像)上滑動,檢測的是局部信息,然後通過pooling取最大值或均值。pooling這步綜合了局部特徵,失去了每個特徵的位置信息。這很適合基於圖像的任務,比如要判斷一幅圖裡有沒有貓這種生物,你可能不會去關心這隻貓出現在圖像的哪個區域。但是在NLP里,詞語在句子或是段落里出現的位置,順序,都是很重要的信息。

2. 局部組合性:CNN中,每個濾波器都把較低層的局部特徵組合生成較高層的更全局化的特徵。這在CV里很好理解,像素組合成邊緣,邊緣生成形狀,最後把各種形狀組合起來得到複雜的物體表達。在語言里,當然也有類似的組合關係,但是遠不如圖像來的直接。而且在圖像里,相鄰像素必須是相關的,相鄰的詞語卻未必相關。

當然,還有些技術細節,CNN具體應用在CV和NLP上會有些不同,就不贅述了。比如,濾波器的大小,在CV里濾波器一般覆蓋一個局部的小區域,NLP會覆蓋整個辭彙向量的寬度,等等。。。

那為什麼最近很多項目把CNN用在NLP上取得了很好的結果?很多時候,理論上嚴格正確的模型在實際上不一定比理論不完整的模型更好用。。。也是科研的魅力之一吧。


看到有人說CNN用於CV,RNN用於NLP。我只能說他們說對了一半。之前北大NLP組和紐約城市大學(感謝@楊逍指正)某黃教授鬧得沸沸揚揚的tree-based CNN就是CNN應用在NLP的具體例子。還有的是之前刷arxiv看到百度北京的研究組有人寫了一篇半監督CNN用於識別文本。我這個不是搞NLP的都可以刷兩個例子,估計NLP的深度學習研究者應該會了解的更多吧。

如果以我看到的這兩篇(嚴格來講是三篇,北京大學和華盛頓大學的tree-based CNN是兩個不同模型),他們的輸入都是經過某個language model預訓練出來的word embeding(前兩個基於詞,後面那個基於句子)。本身沒做過NLP相關的文章,希望有大牛小牛來補充指正。

RNN就不說了,在CVPR15裡面的估計都有五六篇相關的。


額……瀉藥,但是我真的對CNN研究不深。

CNN的特點,就是通過卷積和池化大大減少了參數緯度,而這樣做又可以保證很好的效果其中一個很重要的因素就是,自然圖像的特性可以使之經過卷積池化後,扔保留絕大多數特徵信息。

所以,在cv中,CNN可以說是所向披靡。以至於現在說起深度學習,人們就會想到CNN,好吧我承認CNN是個很贊的模型,但我真的更喜歡(也只懂點)RBM啊。

至於nlp,不是大家都在用rnn的嗎……


推薦閱讀:

計算機視覺的應用前景如何?可能有哪些不錯的應用?
如何ensemble多個神經網路?
如何自學平面設計專業的幾個軟體?
VOT2016有什麼值得關注的?
怎麼能夠有效地知道自己對計算機視覺哪個方向感興趣?

TAG:機器學習 | 自然語言處理 | 計算機視覺 | 卷積 | 深度學習DeepLearning |