1. cnn是dnn(fully connected)的簡化版
比dnn的參數更少。爲什麼可以用更少的參數?
1)因爲在每一層的hidden layer裏面,每個神經元(neuron)只分析上一層的部分信息,而不是全部的信息。比如對於一個圖像識別的任務,第一層的hidden layer中的每一 個neuron可以只負責識別原始圖像的一部分信息,如下圖所示(圖片來自臺大李宏毅老師機器學習課程視頻),
要識別圖片裏是否有一隻鳥,對於第一層的hidden layer中的每一個neuron,可以只負責識別鳥身體的一小部分,比如有的neuron負責識別是否有鳥嘴,有的neuron負責識 別是否有爪子,有的neuron負責識別是否有翅膀。你把鳥的身體分爲幾部分就大致需要多少neuron。
2 )同一張圖片裏相似的pattern可能出現在不同的區域,可以用同一個neuron,同一組參數識別出這些相似的pattern
3 )可以對圖片做subsampling(分別對橫向pixels,縱向pixels),而不會改變圖片裏的pattern
下圖的圖像識別任務這麼做subsampling是可以的,但是對於諸如alphago
2. cnn的架構
。
1 )convolution原理
在一層的hidden layer裏面會有多個filter matrix,每一個filter matrix裏面的參數是學出來的,filter的size自己設定。每個filter可以想象爲一個具有某個焦距的攝像頭,
用這個攝像頭去掃描整張圖像。然後換一個焦距,再去掃描圖像。
如下圖,原始圖片裏的相同的pattern,經過一個filter之後得到的pixel應該能夠保證相同
原始圖像經過一個filter之後得到一個feature map
新得到的feature map的size會比原始圖像的size要小,size(feature map) = size(原始圖像)+1 + 2*pading - stride
上圖中,原始圖像裏每個pixel只用一個數值來表示,但經過filter作用之後每個位置用兩個數值來表示,這就是feature map的深度,而深度其實就是取決於filter matrix 的
個數。
爲什麼說convoluiton是fully connected的簡化版
爲什麼cnn可以實現更少的參數?因爲在filter matrix對圖像進行滑動掃描的時候,參數是共享的(shared weights)
max polling
對feature map做groupen操作,對每一個group取最大值,或平均值
2 )cnn實現
李宏毅老師用的keras來實現cnn
可以發現後面的convolution層的filter個數一般多於前面的concolution層。這是因爲第一層的convolutiuon層的input就是原是圖像,所包含的pattern比較少,所以用較少的
filter就可以應對。而後面的convolution層接收的輸入所包含的pattern則更多、更抽象,所以需要更多的pattern。
參考資料:
https://www.bilibili.com/video/av10590361/?from=search&seid=1312558671544415597