深蓝学院的深度学习理论与实践课程:第三章
前言:至于物體被識別成什么,是取決于你提取到了什么特征
1、人類視覺系統
。。。
2、卷積神經網絡數學基礎(CNN數學原理)
黑白圖像的話就只有一個灰色通道。現在還有就是RGBa就是多了一個alpha通道。圖像的不變性是指比如圖中右邊的這個貓他是出現在圖像的中央位置,那我也能識別出他是一個貓;如果貓頭出現在圖像的右上角還是會識別出這樣一個貓頭;如果貓頭出現在圖像的左上角還是會識別出這樣一個貓頭;
輸出層9個神經元是指9種不同的形狀。
比如說他是一個16到9這樣一個全連接神經網絡。首先第一種情況:判斷左上角有沒有這個拐角;先把這個4x4的圖像先給他展平,展成一個輸入層,這里相當于把這16個像素點都進行了一個這樣的全連接。
實際上我們感興趣的是0145,即左上角的部分他有沒有拐角,即判斷出來a這是不是有沒有拐點。實際上就是:
第二種情況:判斷1256這個上邊是不是有拐角。此時他所感興趣的就是1256這4個點。此時就是
同樣依次類推
最后就是16到9的一個全連接神經網絡。(這個全連接神經網絡呢其實這些虛線的連線,他其實并沒有用這些點,這些連線你實際上把這些權重設置為0就可以了?)
我們最終想要的是右邊這9個結果。
我們進一步把整個的給他寫出來,這個就是的連接權重矩陣;就是展平之后就是的這樣一個向量;b是這樣一個的向量;最后得出來就是z,z就是我們最后要有的9個結果。
(注意此處的0和1代表的是起作用,并不是實際的值)根據權重是否起作用可以看出整個w是非常稀疏的,并且1100整個出現的模式是非常有規律的,所以說我們可以把整個這樣的全連接神經網絡給他縮減成為只有1四個位置對應的w。
表示拐角特征;表示斜線特征;
那如果我們把整個的最后一個16到9的一個結果,但是這個9呢把它寫成一個的這樣一個圖像的形式,那么整個的abcdefghi就代表了左邊的這個圖像當中有沒有拐角的這樣的出現(就是圖中有沒有拐點);只要這個abcdefghi他的這9個點當中的某一個點他是激活了,那就代表我左邊的圖中是有這個拐點形式的特征的。
那我們再檢測有沒有這種斜線的特征,那就把剛剛的這樣一種的呢再換成另外一個,他也是一個稀疏的,實際上里邊起作用的還是那對應的11起作用;
再檢測圖中有沒有橫線呢?其實他檢測有沒有某一種模式,最終所起決定性作用的就是這4條連接線,從圖中可以看出這4條連接線就是2條相鄰的,隔著2條再相鄰。最終可以看出實際上是將的參數組,換成了我只需要4個參數就能表示了。檢測每種模式都需要4個參數,檢測出這三種模式一共需要12個參數。
如果我們把最后的9種結果也看成的圖像,那么就是的圖像最后得到的是的圖像結果。
------------------------------卷積神經網絡的卷積操作---------------
比如說看左邊的圖,這一步部分是我的原始圖像,是我的輸入圖像,中間這個圖呢就是我卷積操作的卷積核(也就是相當于我們上一張圖像中的4個連線,這也就是卷積核,卷積核是能夠重用的)這里呢他是一個的卷積核,之前那4條線是一個的卷積核。這里的卷積核其實在左邊整個原始圖像上會對應一部分的的區域,計算操作部分實際上對相同位置上的像素點的值進行相乘最后再進行加和,得出來的就是這個點的結果(對應原始圖像中的一個中心像素的位置);
之后我可以把整個的卷積核向右移動一個位置,移動一個像素點,我整個的卷積核還是不動的,那得到的就是這個點后邊的那個點的位置結果。之后一直移動,把整個圖像走到最右邊。
右邊移動完之后,再把整個卷積核向下移動一個位置,再移到最右邊,然后再向下移動一個位置也就是一行。
一直遍歷完整個原始圖像,最后得出來就是右邊圖中紅框內的結果。
如下例子對左邊圖像使用一個的卷積核,這個地方是進行一個邊緣檢測的一個算子,這是在圖像當中使用的一個算子,這個算子也是一個卷積核;是將卷積核中的數值給固定住了,是為了便于查看怎么計算的。其實事實上我們想要進行求解的就是卷積核當中的這樣一個數值,實際上這樣一個的卷積核就是我們要求解的、、、、這樣一個的權重矩陣,
實際上在某一次卷積操作當中,他只感受到一個局部的特征,那我再進行下一次移動的時候他就會又感受到另一個局部,實際上是每一次感受一個不同的局部。在進行一次卷積操作的時候其他部分的區域是暫時的不管的。
左邊是一個的圖像,卷積核是,最后卷出來是一個大小。
我們原始圖像經過一個卷積層,得出來的一個結果實際上和原始圖像他的像素是沒有多大區別的,比如說一個的圖像,經過一個的卷積,他實際上卷出來的應該是一個大小的結果,實際上和原始圖像他的分辨率沒有多大區別的,那如果我們經過卷積之后,再使用一個全連接神經網絡去進行檢測的時候,他實際上是整個展平之后全連接神經網絡它的神經元還是比較多的,那如果你一直這樣的卷下去,可能要卷很多層,至少要卷128次,因為每一次,是減少2。
就是不用進行每一次的疊加卷積,當然卷積核還可以是或者是的,但是這樣也是要卷好多次,怎么樣能夠減少有效的卷積次數呢?這里就是有一種池化操作。
--------------------池化操作(就是將整個圖像的分辨率進行降低)
由原來的降為,分辨率是直接降為原來的。
Trainable Pooling是把他當做是一個映射函數,那我學習他的函數的參數。
經過卷積核以及pooling之后,就可以定義卷積神經網絡的一般結構。
卷積層主要是為了參數的重復利用,還可以進行這種局部性的特征提取。
經過最后的Pooling層最后已經是一個分辨率非常低的feature map,那就可以把它展平,之后就可以再跟一些全連接層,最后做一些輸出層,做分類和回歸都是可以的。
之前的例子,雖然圖片都是RGB的深度為3的3通道圖片但是為了方便計算,把它看做深度depath為1。
filter的深度也要和你原始圖像的深度是一樣的,第一個3是一個depth表示的是深度,后邊的表示的是他的卷積核的一個長和寬。第二個filter2也是,因為他有兩個卷積核filter1和filter2,所以他卷出來的結果是有2種,就是兩個feature map,
如果看成一個全連接神經網絡他應該是一個的權重矩陣。現在使用的是卷積核的這種操作,一共進行了4次操作,所以可以看到圖中一共有16條連線,正好每一種顏色的連接線他是重復了4次,所以說他實際上還是只有4個權重連接。看左邊這9個他實際上有連接線,第一個他是有1條連接線,第二個他是有2條連接線,第三個他是有1條,第四個有2條,第五個有4條連接線,后邊的就是對稱的,第六個有2條連接線,第七個有1條,第八個有2條,第九個有1條。
再把其放到原始的的圖像上,這就代表了我原始的的圖像上,對應位置的像素值參與了幾次運算。比如最中間的點參與了4次運算。(此部分的內容對后邊進行梯度反向傳播的時候是有用的,因為誤差進行反向傳播的時候,他實際上是跟你原始的這個地方(比如原始輸入圖像)進行了幾次運算是有關的,比如有的地方進行了4次運算,有的地方進行了1次運算,他所進行的誤差傳播是不一樣的)
3、卷積神經網絡推導及其發展歷史(CNN推導)
卷積神經網絡的BP算法(Back Propagation)--------------------卷積神經網絡的誤差反向傳播(Error Back Propagation)--------------------推導過程
卷積神經網絡實際上是分為卷積層(conv)和Pooling層,分別把卷積層和Pooling層分別進行推導。
3.1前向傳播過程
綠色輸入是一個,此處通道為1,它對應的黃色filter的深度也是1,那么輸出的紅色feture map就也是一個。(特征圖就是我經過一次卷積操作獲得的結果)(bias=0代表的是一個偏置項)
卷積操作實際上還是的一個形式,和之前的全連接神經網絡計算的數學形式是一樣的,只不過這里的是一個卷積操作,不是之前的類似于全連接神經網絡的矩陣相乘,
缺少的如圖所示:
為了使卷積之后的feature map的大小和原始輸入圖像的大小一樣,所以在進行卷積前需要在原始圖像外圈補一圈像素,在左邊和右邊同時補的寬度就是Padding的大小,即對應圖中就是這樣寬度的一圈。這樣的話最后算出來的就等于原始的;就等于原始的。
mn還是表示里邊的卷積,d表示深度。
在本例中我通過Pooling之后再進行卷積實際上她所對應的原來的局部感受野他就擴大為原來的兩倍了。
?
總結
以上是生活随笔為你收集整理的深蓝学院的深度学习理论与实践课程:第三章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows下超详细安装Anacond
- 下一篇: 激活函数合集