神經網絡之調參


  接着上一節,繼續計算神經網絡的梯度。

  

  如上圖所示,計算損失函數J對W14(1)的導數,這是為了更新W14(1)的值。

    

  如上圖所示,損失函數J就是S,S對W14(1)進行求導。首先看,W14(1)的變化導致了一號神經元的變化,而2號神經元沒有發生變化。所以,對W14(1)的求導,與2號神經元沒有關系,可以簡化為上圖中的下半部分。因此,s可表示為W1(2)與a1(2)的乘積。而W1(2)是個常數,可以提出。上圖中的σ代表激活函數。最后的結果可表示為上節課最后所定義的δ函數。

那什么是δ呢?它是損失函數J對z的梯度,a4(1)是輸入。

  從誤差分布的角度解釋反向傳播:

    

  那從δ(k)到δ(k-1)是怎么傳播的呢?如下圖所示:

  

  所謂的反向傳播,其實質就是傳播的誤差。為什么是反向的?因為誤差是從后往前計算的。就是從δ(k)到δ(k-1)的計算。

2. 常用的激活函數: 

  

3.正則化:

  

  正則化:將左邊正常的神經網絡中的一些神經元剔除掉,如果右邊剩余的有缺失結構神經元還能夠訓練出不錯的成績和結果來,並且能夠進行信息還原的話,那原網絡有很大的魯棒性,效果很好。

調參:

    

  你訓練完神經網絡之后,會得到以上兩幅圖像。第一幅圖是隨着訓練次數的增加,你的損失函數變化的關系。第二幅圖是測試集和訓練集分類准確率的關系。

  那請問你如何根據上述兩幅圖調參?

  首先,你希望你的損失函數是什么樣的呢?你希望的肯定是下圖總紅色部分的形式,看着確實舒坦。

  

  那如何把上述損失函數調到你所希望的形式呢?該調哪個參數呢?沒錯,調學習率。學習率調大還是調小呢?應該先調大后調小。如果你先調小,應該會使一開始更加的平緩,而不是更加的陡峭。后邊調大的畫會更加震盪,而我們后邊要趨於平穩,所以后邊應該調小。

  那還應該調什么參數呢?你想想,震盪的原因是什么?是gradient不夠穩定對吧。為什么不夠穩定?是因為可能你對訓練數據進行了采樣,你沒用到全部的訓練數據。那batch_size(http://m.elecfans.com/article/566619.html)是調大還是調小呢?如果把整個數據集喂給它,那可能會趨於穩定了,所以應該把batch_size調大。可是實際情況下這很花錢的,靠GPU容量來稱的。

  那回到上邊那幅圖中的下半部分,是什么現象呢?是欠擬合現象。而不是過擬合。過擬合應該是對測試集結果表現不佳,而且兩條線之間的差距比較大。欠擬合對訓練數據就表現不佳,對測試集的效果和訓練集的效果差不太大。那怎樣解決欠擬合的問題呢?

  有兩種方法,一是說明你這個網絡的表征能力不夠強悍,你會換一個比較更厲害的特征提取的網絡。第二個方法,說明你的訓練數據不夠,增大訓練集,可是你要增加訓練數據的話,你是要消耗更多的硬件gpu資源的,你的老板肯定不會同意的。在計算機視覺領域,有一種方法叫做數據增強,叫Data Augmentation(https://blog.csdn.net/l_xyy/article/details/71516071)就行啦,會使數據集猛然增強。

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM