通俗易懂的卷積神經網絡教程-第六講

  第四講,第五講已經把反向傳播給講完了,但是我們反向傳播是要幹啥還記得吧?是要將卷積神經網絡的所有權值都給改變了,也就是說調整權值使得輸出變量Y與標籤接近。

       那麼怎麼進行權值呢?在調節權值之前,我們先把正向和反向傳播的過程用圖片的形式複習一下:

 

  我們最開始的正向傳播,隨機生成了6個濾波器,每個濾波器中有5*5=25個權值和一個偏置量。第二次我們隨機生成了12個濾波器,每個濾波器中有6*5*5=150個權值和一個偏置量。第三次,我們隨機生成了1920個權值和10個偏置量。這些正向傳播的東西都是隨機生成的,它們結合起來產生的最終結果是不準確的,所以嘛,我們需要一個準確的值,那麼我們就需要調節這些東西。

    我們調節的順序就按照正向傳播的順序來調節吧:

(1)首先我們計算一下第二層(卷積層1)的權值梯度。計算的方法很簡單,當初第二講中,我們說過,我們導入了28*28的圖片,我們首先把這張圖片水平翻轉,爲什麼要翻轉呢,因爲我們第四講中我們把6個濾波器中的權值給旋轉了180度。這樣到調節權值係數的時候就相互抵消了(我並不知道爲啥要這樣做)。然後我們用這個圖片與624*24的矩陣,也就是我們第五講中求出的矩陣FF1~FF6做卷積,這次卷積和最初我們第二講講的用圖片與5*5的濾波器做卷積是一樣的,我們這樣就得出了65*5的卷積矩陣。同理,我們因爲一組batchsize50張圖片,於是我們就能夠求出506*5*5的矩陣,我們挑選出第一個矩陣,把50組的值一一對應加和,然後除以50得到一個平均值,同理第二~第六個矩陣也可以得到一個平均值。這樣我們就得出了65*5的平均值矩陣,我們稱爲dk1~dk6

(2)接下來我們計算一下第二層(卷積層1)的偏置量梯度。我們把第五講中求出的矩陣FF1中的所有值(共24*24個)給全部加和。因爲有50組的數據,所以我們做50次加和。最後再把這50次加和的數據再相加。然後我們除以50。求出24*24的矩陣所有元素加和的平均值,並作爲偏置量b1的梯度。同理我們把FF2~FF6的數據求出所有元素加和的平均值,作爲b2~b6的梯度。我們稱爲db1~db6

(3)我們按照同理的方式,求第四層(卷積層2)的權值及其偏置量梯度dkk1~dkk12dbb1~dbb12。這樣我們卷積層的梯度就都求完了。

(4)最後我們要求的梯度是BP全連接的權值和偏置量的梯度。這個的求法和BP神經網絡是一樣的。最早的時候我們求出了sigmoid函數的導數:

  也就是我們把圖片通過正向傳播最後得到的輸出變量結果Y帶入進上面的公式裏。這樣我們就得出了10個導數值,我們稱爲f’1~f’10,我們用導數與我們的全連接層輸入變量x1(也就是黃色小球)相乘:f’1*x1f’2*x1...f’10*x1。我們得到了10個值如果有50組的話,那麼就是5010個值,我們把50組中的f’1x1全部相加,再除以一個50,這樣就得到一個平均值。同理,把f’2*x1~f’10*x1的值按照同理,得到平均值,這樣我們就得到了10個值。同理我們用fx2~x192相乘,最終我們會得到192*10=1920個值,我們把這些值作爲BP網絡的權值梯度,稱dkkk1~dkkk192

(5)BP網絡偏置量的梯度是最好求的了,我們求得了10個導數值f’1~f’10對吧,而我們一共50組數據,也就是有5010個值,我們分別把50f’150f’2...f’10相加除以50求平均值,然後我們就得出了10個導數平均值,我們把這個導數平均值作爲偏置量梯度,稱爲dbbb1~dbbb10

  我們現在把所有的權值都求完了,我們接下來要做的是更新權值和偏置量。更新的方法如下:

(1)對於卷積層1的權值:我們首先設定一個值α,叫做學習速率,這個具體的值是多少需要你們大家自己調節,它沒有一個確定的值,是實際情況實際而定的。然後我們把65*5的濾波器的權值wij減去α*dk。這個是怎麼一回事兒呢,我詳細的說一下,我們取第一個濾波器中的第一個值w1_11,然後我們把這個值減去上面我們求出的65*5矩陣dk1~dk6中第一個矩陣中的第一個值,也就是dk1_11。寫成公式是:w1_11=w1_11-α*dk1_11。接下來我們令第二個值w1_12=w1_12-α*dk1_12。直到加入最後一個w1_55=w1_55-α*dk1_55。這樣我們第一個濾波器就已經更新完畢了。然後同理更新第二個到第5個,我們就把卷積層的濾波器新的權值給求出來了。

(2)對於卷積層1的偏置量:我們當初求出了偏置量的梯度是db1~db6。我們用之前的偏置量減去α*db。比如第一個偏置量b1=b1-α*db1。接着我們按照桶裏的方法更新b2~b5,這樣我們就把卷積層濾波器新的偏置量給求出來了。

(3)對於卷積層2的權值:首先我們確定一個學習速率α2。我們因爲是126*5*5的濾波器,所以我們就先把某個濾波器中的權值和我們的dkk中的值一一對應做更新:wl_k_ij=wl_k_ij-α2*dkkl_k_ij。其中l指的是第幾個濾波器(或dkk矩陣)、k指的是第l個濾波器中的第k個矩陣(或dkk矩陣中的第k個子矩陣)。ijk矩陣中的第i行第j列元素。我們通過公式我們就把新的12個濾波器的權值求出來了。

(4)對於卷積層2的偏執量同(2):我們當初求出了偏置量的梯度是dbb1~dbb12。我們用之前的偏置量減去α*db。偏置量bi=bi-α*dbbi。接着我們按照桶裏的方法更新b2~b12,這樣我們就把卷積層濾波器新的偏置量給求出來了。

(5)對於BP全連接層的權值:首先我們生成一個學習速率α3。我們用的公式是wij=wij-α3*dkkkij。其中i表示黃球(全連接層第i個輸入變量),j表示橙色球(第j個輸出變量),wij爲連接輸入變量i和輸出變量j之間的權值。我們通過公式就可以把1920個權值都計算出來。

(6)對於BP全連接層的偏置量:我們用公式bj=bj-α3*dbbbj。其中j指的是第j個輸出變量。

  我們通過以上六步,卷積神經網絡中的所有權值和偏置量就更新完畢了。

  更新完畢之後,大家不要忘記了,我們這是batchsize=50的一組數據,我們一共有60000張圖片,每次隨機選取了50組呀。我們不可能就進行一組數據的計算,我們要計算的組數一般規定爲60000/50=1200組,在我們正向反向算完一組數據,並更新權值、偏置量之後,我們首先記錄下我們的MSE值,然後用新的權值和偏置量計算第二組隨機選取的50組圖片,然後再更新權值、偏置量,記錄MSE,直到進行1200組爲止。這樣我們就完成了一次大迭代。

  我們完成之後,用什麼東西判定模型訓練的程度牛不牛逼呢?我們使用平均MSE來計算。還有就是我們難道只進行這一次的大迭代嗎?我們計算完畢怎麼判定這個模型的準確度呢?這都是問題,至於怎麼解答,那麼我們在下一講中進行分解。

下一講:加權MSE、大大迭代、模型測試

————————————————

如果對我的課程感興趣的話,歡迎關注小木希望學園-微信公衆號: 

mutianwei521

也可以掃描二維碼哦!


發佈了51 篇原創文章 · 獲贊 221 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章