1. 程式人生 > >卷積神經網路CNN知識彙總

卷積神經網路CNN知識彙總

都2018了,已經有好多專業的大神,介紹卷積神經網路。這裡就記錄一下,我覺得寫的最好的吧。^^

通俗理解卷積神經網路
通過100張圖一步步理解CNN

知乎:能否對卷積神經網路工作原理做一個直觀的解釋
個人專欄YJangGo:https://blog.csdn.net/u010751535
鼻祖的斯坦福文章:http://cs231n.github.io/convolutional-networks/
一個視覺化介面,檢視CNN效果的:http://scs.ryerson.ca/~aharley/vis/conv/

知識備忘

1. 卷積

卷積的Kernel本質是兩個: 第一, kernel具有局域性, 即只對影象中的區域性區域敏感, 第二, 權重共享。 也就是說我們是用一個kernel來掃描整個影象, 其中過程kernel的值是不變的。
判定一個圖是貓,就是分析圖都有啥特徵。原來的卷積核都是人工事先定義好的,是經過演算法設計人員精心設計的,他們發現這樣或那樣的設計卷積核通過卷積運算可以突出一個什麼樣的特徵,於是就高高興興的拿去卷積了。但是現在我們所需要的這種特徵太高階了,而且隨任務的不同而不同,人工設計這樣的卷積核非常困難。於是,利用機器學習的思想,我們可以讓他自己去學習出卷積核來!也就是學習出特徵!
如前所述,判斷是否是一隻貓,只有一個特徵不夠,比如僅僅有貓頭是不足的,因此需要多個高階語義特徵的組合,所以應該需要多個卷積核,這就是為什麼需要學習多個卷積核

的原因。
但是實際上CNN會學習出貓頭、貓尾巴、貓身然後經判定這是貓嗎?顯然我們的CNN完全不知道什麼叫貓頭、貓尾巴,也就是說,CNN不知道什麼是貓頭貓尾巴,它學習到的只是一種抽象特徵,甚至可能有些特徵在現實世界並沒有對應的名詞,但是這些特徵組合在一起計算機就會判定這是一隻貓!

2. 池化pooling

池化的唯一目的是減少影象的空間大小。
pooling的方法很多,常見的叫做max pooling,就是找到相鄰幾個畫素裡值最大的那個作為代表其它扔掉。
這裡寫圖片描述

3. 全連線層

當抓取到足以用來識別圖片的特徵後,接下來的就是如何進行分類。 全連線層(也叫前饋層)就可以用來將最後的輸出對映到線性可分的空間。 通常卷積網路的最後會將末端得到的長方體平攤(flatten)成一個長長的向量,並送入全連線層配合輸出層進行分類。

4. CNN

CNN的部件其實大致分為三個,卷積層、池化層、全連線層,這也是LeNet-5的經典結構,之後大部分CNN網路其實都是在這三個基本部件上做各種組合和改進。
LeNet-5在1998年由LeCun Yann(法國人)提出,當年就廣泛用於銀行,識別手寫輸入數字(32x32 pixel)。
這裡寫圖片描述
ps: 其他CNN還有:AlexNet(2012), ZFNet(2013), GoogleNet(also named Inception, 2014), ResNet(2015)

conv1 + pool1 + conv2 + pool2, 可以認為是特徵提取。 hidden4(全連線層), 可以認為是根據特徵做分類。

這裡也體現了深層神經網路或deep learning之所以稱deep的一個原因:模型將特徵抓取層和分類層合在了一起。 負責特徵抓取的卷積層主要是用來學習“如何觀察”。注意,卷積核的值,是我們要學習的,不是事先定義好的喔。