iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
0
AI & Data

從零開始或許曾經想過但想想還是算了的深度雜技系列 第 7

[DAY 07] CNN的前行之路 : Convolution、Pooling 、Activation計算簡介 Part.1

  • 分享至 

  • xImage
  •  

前言


總算來個阿峻廢言

想蓋一個伐木場,你的伐木工要先"七哈"個100個木頭
-----阿峻20190923
咱們今天要來介紹CNN網路的計算過程的基本幾個結構計算,也就是Input丟進一個網絡到算出東西所需要的計算方式,這也是 Forward 計算,主要我們會介紹這幾種計算 : Convolution 、 Pooling 以及 Activation計算。這些作為 CNN 以及其他DL結構的計算基礎,只要我們熟習掌握後,面對其他延伸結構我們能夠更好的接受XD

CNN 結構

我們依樣參考上一章的圖
https://ithelp.ithome.com.tw/upload/images/20190922/20120549wtiqSF2a2E.png
從這張圖我們依次看到 Convolution layer、Activation layer 以及pooling layer,我們依次來介紹各種 layer 的運算行為為何?

Convolution 計算

首先在 Convolution layer我們要提到我們最重要的計算模式 -- Convolution 計算 ,但這麼快直接跳進去我們大概會出事,所以我們先提一下幾個設定:
1.為求簡單,我們先設定我們的 Input 圖片為一張一個 channal 的2D 圖片,例如是一張灰階照片,而像是彩色RGB照片為 3 個 Channal 這樣。這張照片只有 5 * 5 大小,每個像素值只有0或1 (當然正常的灰階照片值域在0~255)
https://ithelp.ithome.com.tw/upload/images/20190923/201205498ykfFhEwhZ.png
2.我們有一個filter(或者也稱為 kernal),大小為 3 * 3,是用來與input進行 convolution 計算,得到我們的 feature map
https://ithelp.ithome.com.tw/upload/images/20190923/20120549TPcsgaFwBJ.png
3. Feature map 為我們這個 convolution 計算的結果,上面內涵著我們從Input萃取出來的資訊
https://ithelp.ithome.com.tw/upload/images/20190923/20120549aU8fk0DkQS.png
4. Convolution 計算規則如下:
依照定義,連續的2D convolution 計算規則如下:
https://ithelp.ithome.com.tw/upload/images/20190923/20120549htpoQ6lAvZ.png
但我們今天是2D的一格一格進行convolution計算,因此是屬於離散的,所以也別慌,公式會像下面這樣:
https://ithelp.ithome.com.tw/upload/images/20190923/20120549tPQA0dg0ii.png
5. 在進行 Convolution 計算時,細心的你或許會發現,诶~我算完了這3 * 3 格Input與kernal的convolution之後,那下一輪要從哪裡開始算呢?是移動一格,還是移動整整三格不要重複算到已經算到的部分在開始算,這是可以介紹一個概念叫做 "Stride" 意思就是步幅,就是你這 Kernal 每次跟 Input 上的 3 * 3 算完之後往旁邊移動的像素數,當然我們可以直覺發現如果Stride越大,那Kernal跟Image做完整個 convolution 的次數越少,所產生的feature map越小,舉個例子齁:
https://ithelp.ithome.com.tw/upload/images/20190923/20120549pKNtUyVEU5.png
6. 诶诶,上面那張圖怎麼多了一個新名詞 "Padding" ,這又是啥QQQQ 細心的你或許想過,我們的 kernal 今天算到邊邊時,以 5 * 5 image 為例子,你的kernal中間已經移動到Image邊號為5的位置,阿這個不是不能算嗎?我們Image又沒有第6格可以給 kernal 做 convolution ,那怎麼辦QQQ旁邊補0或者啥的呀XDD "Padding" 就是定義在整個 Image外面我們要做甚麼處裡,常見的有 Zero-Padding(如下圖),注意input最外圈填0的部分就是 padding加上去的,當然也有改成填1的paading方法:
https://ithelp.ithome.com.tw/upload/images/20190923/20120549cDEr07Sdfk.png
7. 結合上面的幾個的動圖整個convolution可以參考下面動圖:
convolution
如果大家看不到上面這張這可以看下面這一張XD
Imgur

結語

除了convolution,還有 Activation Function、Pooling Layer,下一次我們會來介紹有哪些種類以及效果會是如何。

參考連結

  1. https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/
  2. https://blog.csdn.net/u012905422/article/details/52463324
  3. https://darren1231.pixnet.net/blog/post/336760136-convolutional-neural-net-%E7%AD%86%E8%A8%98
  4. https://zhuanlan.zhihu.com/p/23185164
  5. https://medium.com/jameslearningnote/%E8%B3%87%E6%96%99%E5%88%86%E6%9E%90-%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E7%AC%AC5-1%E8%AC%9B-%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E7%B5%A1%E4%BB%8B%E7%B4%B9-convolutional-neural-network-4f8249d65d4f
  6. https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_convolutional_neural_networks_work.html
  7. http://yangguang2009.github.io/2016/12/18/deeplearning/convolutional-neural-networks-for-machine-learning/
  8. https://medium.com/@chih.sheng.huang821/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-convolutional-neural-network-cnn-%E5%8D%B7%E7%A9%8D%E9%81%8B%E7%AE%97-%E6%B1%A0%E5%8C%96%E9%81%8B%E7%AE%97-856330c2b703
  9. http://mengqi92.github.io/2015/10/06/convolution/

上一篇
[DAY 06] 薛丁格貓的其他工作 : CNN 簡介
下一篇
[DAY 08] CNN的前行之路 : Convolution、Pooling 、Activation計算簡介 Part.2
系列文
從零開始或許曾經想過但想想還是算了的深度雜技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言