100天搞定機器學習|Day35 深度學習之神經網絡的結構網絡
100天搞定機器學習|Day36 深度學習之梯度降低算法機器學習
本篇爲100天搞定機器學習之第37天,亦爲3Blue1Brown《深度學習之反向傳播算法》學習筆記。函數
上集提到咱們要找到特定權重和偏置,從而使代價函數最小化,咱們須要求得代價函數的負梯度,它告訴咱們如何改變連線上的權重偏置,才能讓代價降低的最快。反向傳播算法是用來求這個複雜到爆的梯度的。學習
上一集中提到一點,13000維的梯度向量是不可思議的。換個思路,梯度向量每一項的大小,是在說代價函數對每一個參數有多敏感。以下圖,咱們能夠這樣裏理解,第一個權重對代價函數的影響是是第二個的32倍。3d
咱們先不要管反向傳播算法這一堆公式,當咱們真正理解了這算法,這裏的每一步就會無比清晰了。cdn
咱們來考慮一個尚未被訓練好的網絡。咱們並不能直接改動這些激活值,只能改變權重和偏置值。但記住,咱們想要輸出層出現怎樣的變更,仍是有用的。咱們但願圖像的最後分類結果是2,咱們指望第3個輸出值變大,其他輸出值變小,而且變更的大小應該與如今值和目標值之間的差成正比。舉個例子,增大數字2神經元的激活值,就應該比減小數字8神經元的激活值來得重要,由於後者已經很接近它的目標了。blog
進一步,就來關注數字2這個神經元,想讓它的激活值變大,而這個激活值是把前一層全部激活值的加權和加上偏置值。要增長激活值,咱們有3條路能夠走,一增長偏置,二增長權重,或者三改變上一層的激活值。先來看如何調整權重,各個權重它們的影響力各不相同,鏈接前一層最亮的神經元的權重,影響力也最大,由於這些權重與大的激活值相乘。增大這幾個權重,對最終代價函數形成的影響,就比增大鏈接黯淡神經元的權重所形成的影響,要大上好多倍。get
請記住,說到梯度降低的時候,咱們並不僅看每一個參數是增大仍是變小,咱們還看改變哪一個參數的性價比最大。深度學習
第三個能夠增長神經元激活值的方法是改變前一層的激活值,若是全部正權重連接的神經元更亮,全部負權重連接的神經元更暗的話,那麼數字2的神經元就會更強烈的激發。咱們也要依據對應權重的大小,對激活值作成比例的改變,咱們並不能直接改變激活值,僅對最後一層來講,記住咱們期待的變化也是有幫助的。
不過別忘了,從全局上看,只只不過是數字2的神經元所期待的變化,咱們還須要最後一層其他的每一個輸出神經元,對於如何改變倒數第二層都有各自的想法。
咱們會把數字2神經元的期待,和別的輸出神經元的期待所有加起來,做爲如何改變倒數第二層的指示。這些期待變化不只是對應的權重的倍數,也是每一個神經元激活值改變量的倍數。
這其實就是在實現反向傳播的理念了,咱們把全部期待的改變加起來,獲得一串對倒數第二層改動的變化量,而後重複這個過程,改變倒數第二層神經元激活值的相關參數,一直循環到第一層。咱們對其餘的訓練樣本,一樣的過一遍反向傳播,記錄下每一個樣本想怎樣修改權重和偏置,最後再去一個平均值。
這裏一系列的權重偏置的平均微調大小,不嚴格地說,就是代價函數的負梯度,至少是其標量的倍數。神奇吧?
若是梯度降低的每一步都用上每個訓練樣本計算的話,那麼花費的時間就太長了。實際操做中,咱們通常這樣作:首先把訓練樣本打亂,而後分紅不少組minibatch,每一個minibatch就當包含了100個訓練樣本好了。而後你算出這個minibatch降低的一步,這不是代價函數真正的梯度,然而每一個minibatch會給一個不錯的近似,計算量會減輕很多。
能夠這樣比喻:沿代價函數表面下山,minibatch方法就像醉漢漫無目的的溜下山,可是速度很快。而以前的方法就像細緻入微的人,事先準確的算好了下山的方向,而後謹小慎微的慢慢走。
這就是隨機梯度降低
總結一下:反向傳播算法算的是單個訓練樣本怎樣改變權重和偏置,不只說每一個參數應該變大仍是變小,還包括這些變化的比例是多大才能最快地下降cost。真正的梯度降低,對好幾萬個訓練範例都這樣操做,而後對這些變化取平均值,這樣計算太慢了,咱們要把全部樣本分到各個minibatch中,計算每一個minibatch梯度,調整參數,不斷循環,最終收斂到cost function的局部最小值上。理解是一回事,如何表示出來又是另外一回事,下一期,咱們一塊兒將反向傳播算法用微積分的形式推導出來,敬請期待!