cnn學習筆記

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章