引子:圖像分類
對(duì)計(jì)算機(jī)來說圖片是什么骡男?
一張圖片是一個(gè)三層的tensor
把tensor拉直成為一個(gè)向量就可以作為一個(gè)network的輸入。
這里用全鏈接層埃跷,可以發(fā)現(xiàn)如果我們是對(duì)100*100大小的圖片做分類悉盆,需要訓(xùn)練的參數(shù)weight個(gè)數(shù)高達(dá)3X10^7氓英,這么多的參數(shù)很容易導(dǎo)致過擬合問題。
那么考慮到圖片分類的問題上捶闸,可以發(fā)現(xiàn)其實(shí)不一定每個(gè)Neuron都需要考慮整張圖片的每個(gè)位置也就是向量的每個(gè)x夜畴。
如何理解這個(gè)說法呢?
其實(shí)對(duì)于分類一張圖片來說删壮,其實(shí)可以理解成對(duì)圖片每個(gè)部分的一個(gè)匹配贪绘,比如觀察一張圖片是不是鳥,可能會(huì)分別觀察它的嘴央碟、眼睛税灌、爪子。亿虽。菱涤。并不是直觀的從整張圖片上來看(全鏈接層),也就是說每個(gè)Neuron其實(shí)可以負(fù)責(zé)圖片的一部分特征的觀察,也就是觀察到了某些patter,綜合這些信息就能對(duì)圖片進(jìn)行分類了淳附。
-
第一次簡(jiǎn)化
那么從以上說法我們就可以對(duì)全鏈接做第一次簡(jiǎn)化,每一個(gè)Neuron我們?cè)O(shè)置一個(gè)Recptive field堕战,也就是這個(gè)Neuron關(guān)心的區(qū)域祠饺,其他區(qū)域就不管了。
那Recptive field如何決定呢履澳?這就需要自己來決定了吻谋,取決于你要觀察什么位置,要觀察什么范圍低千。
需要注意的是Recptive field是可以重疊甚至可以是一樣的(兩個(gè)Neuron觀察不同的pattern)
靈位Recptive field也可以覆蓋不同的區(qū)Chanel难审,形狀都是自己決定了,不一定是正方形失球,這些都取決于你想要識(shí)別什么樣的Pattern烈疚。
那其實(shí)最經(jīng)典的Recptive field如下
- 覆蓋所有channels33大小
- 一個(gè)Recptive field一門會(huì)分配一組Neuron, 比如一個(gè)Rf分配64個(gè)Neuron
- Rf一般是設(shè)置一定的步長(zhǎng)覆蓋整個(gè)圖片金赦,而且相互會(huì)有重疊,這個(gè)目的是為了識(shí)別可能在兩個(gè)Rf之間的Pattern通殃。
-
按上面的方法Rf超過了圖片的范圍一般用padding,進(jìn)行補(bǔ)值(一般是0)
8E52838F-F328-4852-B630-203CC636965F.png
第二個(gè)問題骗炉,同樣的Patterns可能在圖片的不同位置照宝,比如鳥嘴可能會(huì)出現(xiàn)在圖片的不同位置,那么是不是每個(gè)位置都需要有一個(gè)Neuron來識(shí)別鳥嘴呢句葵?這樣嘴其實(shí)是很低效的()厕鹃。
這就引出了第二個(gè)簡(jiǎn)化:共享參數(shù)
讓不同rf的Neuron共享參數(shù)兢仰。
讓不同rf的Neuron能夠識(shí)別同一個(gè)Pattern
常見的共享參數(shù)的方法:
共享參數(shù)的Neuron我們叫它filter1,filter2...
實(shí)際上剂碴,回到圖片分類的問題把将,就是每個(gè)Rf我們要對(duì)圖片的每個(gè)Pattern進(jìn)行識(shí)別(每一個(gè)區(qū)域我們都需要判斷是鳥嘴、爪子忆矛、眼睛...)
加上參數(shù)共享之后察蹲,這個(gè)過程可以說是卷積層了。
那么卷積層和全鏈接層有什么聯(lián)系呢催训?
其實(shí)按我自己的理解Neuron反而變多了洽议,但是Neuron的擬合能力變差了,也就是w變少了漫拭。全鏈接層就是可以自定義rf大小沒用參數(shù)共享的卷積層亚兄,而卷積就是全鏈接層做了針對(duì)圖像問題的一些限制。
如果之前有學(xué)過CNN采驻,其實(shí)是另一種描述方法
其實(shí)不管是哪種方式审胚,只是換一個(gè)角度描述而已。
Filter 理解成抓取特征的一個(gè)模塊
通過filter抓取特征之后生成featrue map
我們可以再加一層卷積層礼旅,也就是對(duì)featrue map再做一次特征抓取菲盾,使用同樣大小的filter抓取的范圍就變大了。
對(duì)比兩個(gè)版本對(duì)于卷積層的描述
其實(shí)所謂filter里面的數(shù)字各淀,就是前版本描述的neuron的權(quán)重懒鉴,只是在描述的時(shí)候忽略掉了bias的描述,其實(shí)兩者是完全一樣的碎浇。
第二個(gè)版本的Filter的滑動(dòng)抓取临谱,其實(shí)就是第一個(gè)版本的共享參數(shù)。
這個(gè)滑動(dòng)的過程其實(shí)就是所謂卷積
池化
比如把偶數(shù)的像素拿掉奴璃,只會(huì)影響圖片的大小悉默,不會(huì)影響圖片是什么東西。
Max Pooling
Max Pooling 之后
Pooling的目的其實(shí)就是把圖片變小
Pooling實(shí)際上沒有w需要學(xué)習(xí)苟穆,所以不稱為一個(gè)層抄课,Pooling的方式,和大小都是可以自己根據(jù)實(shí)際問題選擇的
實(shí)際上雳旅,如果需要偵測(cè)的pattern比較小跟磨,Pooling可能會(huì)導(dǎo)致某些特征消失,尤其是現(xiàn)在計(jì)算能力不斷變強(qiáng)攒盈,很多架構(gòu)在做卷積的時(shí)候都去掉了Pooling的過程抵拘。
完整的CNN架構(gòu)
Playing Go 用來下棋的CNN
把棋盤作為一個(gè)19X19分類的問題,選擇下一步落子的位置型豁。
這個(gè)問題完全可以用全鏈接層僵蛛,但其實(shí)CNN的效果更好尚蝌,也就是把一個(gè)棋盤看作一張圖片。
直觀看怎么理解充尉?
其實(shí)在下棋的問題上飘言,從局部也可以發(fā)現(xiàn)一些Pattern
但是Pooling呢?
實(shí)際上在alpha go的CNN架構(gòu)中驼侠,并沒有用到Pooling姿鸿。
所以實(shí)際上,CNN不一定要有Pooling
今年來其實(shí)也用在一些其他的領(lǐng)域
這些Respective field會(huì)有不一樣的設(shè)計(jì)泪电。
More
實(shí)際上般妙,CNN是沒法解決圖片放大纪铺、縮小相速、旋轉(zhuǎn)的問題。
所以我們?cè)谟?xùn)練的時(shí)候需要做augmentation鲜锚,也就是在數(shù)據(jù)集加上旋轉(zhuǎn)突诬、放大縮小的問題。
那有什么架構(gòu)可以解決這些問題嗎 》 Spatial Transformer Layer