卷积神经网络学习心得
卷積神經網絡學習心得
文章目錄
- 卷積神經網絡學習心得
- 一、卷積神經網絡
- 1、卷積
- 2、池化
- 3、激活函數
- 3、全連接層
- 3、訓練過程
- 二、傳播過程
- 1.卷積神經網絡的前向傳播過程
- 1.1卷積層的前向傳播過程
- 1.2下采樣層的前向傳播過程
- 1.3全連接層的向前傳播過程
- 2.全連接層的向前傳播過程
- 2.1全連接層之間的誤差傳遞
- 2.2當前層為下采樣層,求上一層的誤差
- 2.3當前層為卷積層,求上一層的誤差
- 3卷積神經網絡的權值更新
- 3.1卷積層的權值更新
- 3.2全連接層的權值更新過程
- 總結
一、卷積神經網絡
1、卷積
一、卷積核(算子,即卷積神經網絡上的提取特征的濾波窗口)
理解一
在卷積神經網絡中,“卷積”更像是一個,特征提取算子。什么是特征提取算子呢?簡單來說就是,提取圖片紋理、邊緣等特征信息的濾波器。
如:
如上圖所示,假設,貓的上眼皮部分(框出部分),這部分的數據,展開后如圖中數組所示**(這里,為了敘述簡便,忽略了rgb三維通道,把圖像當成一個二維數組[類比灰度圖片]),我們使用一個算子,來檢測橫向邊沿**——這個算子,讓第一行的值減去第三行的值,得出結果。具體計算過程如下,比如,原圖左上角數據,經過這個算子:
200×1+199×1+189×1+203×0+23×0+34×0+177×(?1)+12×(?1)+22×(?1)=328
然后,算子向右滑動一個像素,得到第二個輸出:533,依次向右滑動,最終得到第一行輸出;
?然后,向下滑動一個像素,到達第二行;在第二行,從左向右滑動,得到第二行輸出……
從輸出結果可以看出,在上眼皮處顏色較深,而眼皮上方和下方,無論是眼皮上方的毛發,還是眼皮下方的眼白,顏色都很淺,因此,這樣做之后,如果濾波結果中有大值出現,就意味著,這里出現了橫向邊沿。不斷在原圖上滑動這個算子,我們就可以,檢測到圖像中所有的橫向邊沿。傳統的機器視覺方法,就是設計更多更復雜的算子,檢測更多的特征,最后,組合這些特征,得出判斷結果。
? 卷積神經網絡,做了類似的事情,所謂卷積,就是把一個算子在原圖上不斷滑動,得出濾波結果——這個結果,我們叫做“特征圖”(Feature Map),這些算子被稱為“卷積核”(Convolution Kernel)。不同的是,我們不必人工設計這些算子,而是使用隨機初始化,來得到很多卷積核(算子),然后通過反向傳播,優化這些卷積核,以期望得到更好的識別結果。
理解二
定義一個卷積核(相當于權重),用來從圖像中提取一定的特征。卷積核與數字矩陣對應位相乘再相加,得到卷積層輸出結果。
(429 = 181+540+511+550+1211+750+351+240+204*1)
卷積核的取值在沒有以往學習的經驗下,可由函數隨機生成,再逐步訓練調整
當所有的像素點都至少被覆蓋一次后,就可以產生一個卷積層的輸出(下圖的步長為1)
機器一開始并不知道要識別的部分具有哪些特征,是通過與不同的卷積核相作用得到的輸出值,相互比較來判斷哪一個卷積核最能表現該圖片的特征——比如我們要識別圖像中的某種特征(比如曲線),也就是說,這個卷積核要對這種曲線有很高的輸出值,對其他形狀(比如三角形)則輸出較低。卷積層輸出值越高,就說明匹配程度越高,越能表現該圖片的特征。
卷積層的具體工作過程
比如我們設計的一個卷積核如下左,想要識別出來的曲線如下右:
現在我們用上面的卷積核,來識別這個簡化版的圖片——一只漫畫老鼠
而用同一個卷積核,來識別老鼠的耳朵的時候,輸出則很小:0
我們就可以認為:現有的這個卷積核保存著曲線的特征,匹配識別出來了老鼠的屁股是曲線的。我們則還需要其他特征的卷積核,來匹配識別出來老鼠的其他部分。卷積層的作用其實就是通過不斷的改變卷積核,來確定能初步表征圖片特征的有用的卷積核是哪些,再得到與相應的卷積核相乘后的輸出矩陣
二、卷積核(算子)的權重
權重共享:在卷積神經網絡中,卷積層的每一個卷積濾波器重復的作用于整個感受野中,對輸入圖像進行卷積,卷積結果構成了輸入圖像的特征圖,提取出圖像的局部特征。每一個卷積濾波器共享相同的參數,包括相同的權重矩陣和偏置項。共享權重的好處是在對圖像進行特征提取時不用考慮局部特征的位置。而且權重共享提供了一種有效的方式,使要學習的卷積神經網絡模型參數數量大大降低。
一個卷積核(相當于權重),用來從圖像中提取一定的特征。卷積核與數字矩陣對應位相乘再相加,得到卷積層輸出結果。
權重共享的作用:
權重共享 就是一個算子的權重作用于整張圖片,主要用于提取某一類事物(具體看理解2)。訓練的時候,不斷的去訓練識別一個物體1,識別該物體1的權重就會訓練成具有該類物體的特征(即用該算子掃描其相應的圖片時,該圖片中的物體1就會與該算子相互作用輸出一個特征更強的矩陣,而其他無關的物體與該算子相互作用之后就會削弱其特征,二重點突出該物體1)。權重共享,整張圖片都用同一個算子,才會得到重點突出某一個物體的特征,削弱其他物體的特征的效果,所以最終得到的訓練結果就是適合的權重,吧這個得到的適合權重,再重新導入到原來的網絡中就可以進行對新圖片的識別。
2、池化
使用降采樣的原因是,根據圖像局部相關性的原理,對圖像進行子采樣可以減少計算量,同時保持圖像旋轉不變性。
池化層的輸入就是卷積層輸出的原數據與相應的卷積核相乘后的輸出矩陣
最大池化:max-pooling——選取指定區域內最大的一個數來代表整片區域
均值池化:mean-pooling——選取指定區域內數值的平均值來代表整片區域
3、激活函數
分別是s i g m o i d sigmoidsigmoid和r e l u relurelu函數,函數公式如下
補充說明
引入激活函數的目的是,在模型中引入非線性。如果沒有激活函數,那么,無論你的神經網絡有多少層,最終都是一個線性映射,單純的線性映射,無法解決線性不可分問題。引入非線性可以讓模型解決線性不可分問題。
一般來說,在神經網絡的中間層,更加建議使用r e l u relurelu函數,兩個原因:
r e l u relurelu函數計算簡單,可以加快模型速度;
由于反向傳播過程中,需要計算偏導數,通過求導可以得到,s i g m o i d sigmoidsigmoid函數導數的最大值為0.25,如果使用s i g m o i d sigmoidsigmoid函數的話,每一層的反向傳播,都會使梯度最少變為原來的四分之一,當層數比較多的時候可能會造成梯度消失,從而模型無法收斂。
3、全連接層
卷積層和池化層的工作就是提取特征,并減少原始圖像帶來的參數。然而,為了生成最終的輸出,我們需要應用全連接層來生成一個等于我們需要的類的數量的分類器。
全連接層的工作原理和之前的神經網絡學習很類似,我們需要把池化層輸出的張量重新切割成一些向量,乘上權重矩陣,加上偏置值,然后對其使用ReLU激活函數,用梯度下降法優化參數既可。
3、訓練過程
1、網絡進行權值的初始化;
2、輸入數據經過卷積層、下采樣層、全連接層的向前傳播得到輸出值;
3、求出網絡的輸出值與目標值之間的誤差;
4、當誤差大于我們的期望值時,將誤差傳回網絡中,依次求得全連接層,下采樣層,卷積層的誤差。各層的誤差可以理解為對于網絡的總誤差,網絡應承擔多少;當誤差等于或小于我們的期望值時,結束訓練。
5、根據求得誤差進行權值更新。然后在進入到第二步。
二、傳播過程
1.卷積神經網絡的前向傳播過程
1.1卷積層的前向傳播過程
卷積層的向前傳播過程是,通過卷積核對輸入數據進行卷積操作得到卷積操作。數據在實際的網絡中的計算過程,我們以圖3-4為例,介紹卷積層的向前傳播過程。其中一個輸入為15個神經元的圖片,卷積核為2×2×1的網絡,即卷積核的權值為W1,W2,W3,W4。那么卷積核對于輸入數據的卷積過程,如下圖4-2所示。卷積核采用步長為1的卷積方式,卷積整個輸入圖片,形成了局部感受野,然后與其進行卷積算法,即權值矩陣與圖片的特征值進行加權和(再加上一個偏置量),然后通過激活函數得到輸出。
圖4-2圖片深度為1,卷積層的向前傳播過程
而在圖3-4中,圖片深度為2時,卷積層的向前傳播過程如圖4-3所示。輸入的圖片的深度為4×4×2,卷積核為2×2×2,向前傳播過程為,求得第一層的數據與卷積核的第一層的權值的加權和,然后再求得第二層的數據與卷積核的第二層的權值的加權和,兩層的加權和相加得到網絡的輸出。
1.2下采樣層的前向傳播過程
上一層(卷積層)提取的特征作為輸入傳到下采樣層,通過下采樣層的池化操作,降低數據的維度,可以避免過擬合。如圖4-4中為常見的池化方式示意。最大池化方法也就是選取特征圖中的最大值。均值池化則是求出特征圖的平均值。隨機池化方法則是先求出所有的特征值出現在該特征圖中的概率,然后在來隨機選取其中的一個概率作為該特征圖的特征值,其中概率越大的選擇的幾率越大。
1.3全連接層的向前傳播過程
特征圖進過卷積層和下采樣層的特征提取之后,將提取出來的特征傳到全連接層中,通過全連接層,進行分類,獲得分類模型,得到最后的結果。圖4-5為一個三層的全連接層。假設卷積神經網絡中,傳入全連接層的特征為x1,x2。則其在全連接層中的向前傳播過程如圖4-5所示。第一層全連接層有3個神經元y1,y2,y3。這三個節點的權值矩陣為W,其中b1,b2,b3分別為節點y1,y2,y3的偏置量。可以看出,在全連接層中,參數的個數=全連接層中節點的個數×輸入的特征的個數+節點的個數(偏置量)。其向前傳遞過程具體如圖所示,得到輸出矩陣后,經過激勵函數f(y)的激活,傳入下一層。
2.全連接層的向前傳播過程
當卷積神經網絡輸出的結果與我們的期望值不相符時,則進行反向傳播過程。求出結果與期望值的誤差,再將誤差一層一層的返回,計算出每一層的誤差,然后進行權值更新。該過程的主要目的是通過訓練樣本和期望值來調整網絡權值。誤差的傳遞過程可以這樣來理解,首先,數據從輸入層到輸出層,期間經過了卷積層,下采樣層,全連接層,而數據在各層之間傳遞的過程中難免會造成數據的損失,則也就導致了誤差的產生。而每一層造成的誤差值是不一樣的,所以當我們求出網絡的總誤差之后,需要將誤差傳入網絡中,求得該各層對于總的誤差應該承擔多少比重。
反向傳播的訓練過程的第一步為計算出網絡總的誤差:求出輸出層n的輸出a(n)與目標值y之間為誤差。計算公式為:
其中,為激勵函數的導函數的值。
2.1全連接層之間的誤差傳遞
求出網絡的總差之后,進行反向傳播過程,將誤差傳入輸出層的上一層全連接層,求出在該層中,產生了多少誤差。而網絡的誤差又是由組成該網絡的神經元所造成的,所以我們要求出每個神經元在網絡中的誤差。求上一層的誤差,需要找出上一層中哪些節點與該輸出層連接,然后用誤差乘以節點的權值,求得每個節點的誤差,具體如圖所示:
圖4-6 全連接層中誤差的傳遞過程
2.2當前層為下采樣層,求上一層的誤差
在下采樣層中,根據采用的池化方法,把誤差傳入到上一層。下采樣層如果采用的是最大池化(max-pooling)的方法,則直接把誤差傳到上一層連接的節點中。果采用的是均值池化(mean pooling)的方法,誤差則是均勻的分布到上一層的網絡中。另外在下采樣層中,是不需要進行權值更新的,只需要正確的傳遞所有的誤差到上一層。
2.3當前層為卷積層,求上一層的誤差
卷積層中采用的是局部連接的方式,和全連接層的誤差傳遞方式不同,在卷積層中,誤差的傳遞也是依靠卷積核進行傳遞的。在誤差傳遞的過程,我們需要通過卷積核找到卷積層和上一層的連接節點。求卷積層的上一層的誤差的過程為:先對卷積層誤差進行一層全零填充,然后將卷積層進行一百八十度旋轉,再用旋轉后的卷積核卷積填充過程的誤差矩陣,并得到了上一層的誤差。如圖4-7為卷積層的誤差傳遞過程。圖右上方為卷積層的向前卷積過程,而右下方為卷積層的誤差傳遞過程。從圖中可以看出,誤差的卷積過程正好是沿著向前傳播的過程,將誤差傳到了上一層。
圖4-7卷積層的誤差傳遞過程
3卷積神經網絡的權值更新
3.1卷積層的權值更新
卷積層的誤差更新過程為:將誤差矩陣當做卷積核,卷積輸入的特征圖,并得到了權值的偏差矩陣,然后與原先的卷積核的權值相加,并得到了更新后的卷積核。如圖4-8,圖中可以看出,該卷積方式的權值連接正好和向前傳播中權值的連接是一致的。
圖4-8卷積核的權值更新過程
3.2全連接層的權值更新過程
全連接層中的權值更新過程為:
1、求出權值的偏導數值:學習速率乘以激勵函數的倒數乘以輸入值;
2、原先的權值加上偏導值,得到新的權值矩陣。具體的過程如圖4-9所示(圖中的激活函數為Sigmoid函數)。
總結
總結
以上是生活随笔為你收集整理的卷积神经网络学习心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easyUI datagrid复选框获取
- 下一篇: maya 约束批量导入导出