Convolutional Neural Network,卷積神經網絡,簡稱CNN,最近幾年再次流行起來。
CNN和普通的機器學習算法有什么相同,有什么不同?
簡單說,CNN=A+B,即CNN包括兩個方面的功能:
A:feature extactor 特征提取器
普通的機器學習算法,比如決策樹、隨機森林、svm、邏輯回歸/softmax等,它的輸入通常就是若干個features
而CNN的輸入,是圖片!
我們當然可以把圖像像素作為feature vector中的一個維度。但是這畢竟過於naive。往往並不怎么work。
CNN中的特征提取,是通過卷積層完成的。這里說的卷基層,包括狹義的卷積、池化(下采樣)。
個人認為,我們並不一定要把CNN中的卷積層看作傳統人工智能中的神經網絡的改進。因為真的有點勉強:傳統神經網絡的輸入就是一個個的feature vector,用作分類器或者回歸器。CNN的輸入則是圖片。
B:classifier or regressor 分類器或回歸器
CNN中的全連接層和輸出層,這個其實是和傳統的神經網絡一致的:處理的輸入是feature vectors,輸出的是類別label或者連續的預測數值
總結
CNN = 特征提取(卷積層)+ 分類(全連接層)
其中特征提取是說,feature是學出來的,而不是“手工設計的”(比如SIFT,SURF,ORB,HOG,LBP,HSC等)
但是這里還有一個疑問:學出來的feature應該是唯一的嗎?怎樣的學出來的特征算是“好的特征”?我們固然可以設計不同的網絡結構,來學習出不同的特征。但是怎樣的特征才是好的特征?以及,我們能否從特征學習的過程中,得到一些規律,用於輔助手工設計特征?畢竟搞一個CNN的話,要大量數據或者微調,而且需要GPU,並且還是一個black box缺乏理論支持的感覺。。
有想法的請留言。歡迎吐槽。