李宏毅深度学习——Backpropagation
引言?
求導法則?
回顧一下之前學習過的,在求解神經網絡時,我們通常使用梯度下降算法進行求解。首先,先自定義一組參數作為我們的起始值,之后計算我們需要使用的梯度,有了梯度之后就可以利用它進行迭代求解了
顯而易見的是,在一個神經網絡中,可能參數數目成千上萬,遠超過我們的想象,那么這么龐大的計算量,我們就需要一些可以輔助我們的工具。backpropagation(反向傳播)可以幫助我們有效的進行漸變迭代計算(幫助計算梯度)。
求導法則
第一種情況下,一元復合函數求導,內部求導與外部求導的乘積。
第二種情況下,多元復合函數求導,劃分求導路徑,不同路徑求導后加和就行了。
backpropagation(反向傳播)
在計算損失函數函數的時候,總的損失函數可以寫成每一個訓練樣本所構成的損失函數之和。而每一個樣本所構成的損失函數為這個樣本經模型輸出后,模型的預測值與樣本實際值之間的差距。不管是交叉熵還是均方誤差都是在衡量這個差距。
那么為了分析總的損失函數,對總的損失函數求導,我們可以對每個樣本的損失函數進行求導進行分析,之后進行求和分析就行了。先對上圖中紅色三角形的一個小的邏輯回歸進行分析。
對一個邏輯回歸進行分析,每個邏輯回歸先進行一個線性的運算過程,在進行一個sigmoid函數處理過程,當然激活函數也是可以選擇其他激活函數的。
那么對損失函數求導就可以拆成兩項分布求導的積,如上圖,一項是損失函數對z求導(z為邏輯回歸中的線性方程),一項是z對我們需要梯度下降的參數w的求導。
z對w求導稱為前向傳播,損失函數對z求導稱為反向傳播。
???
那么我們就能夠很容易理解前向傳播了,對于前向傳播中的偏微分,這個值應該是上一級的輸出值,這也代表了前向傳播中某一個參數的權重。?
接下來對反向傳播進行求解分析,如圖2-4。從這一節神經元向之后的神經元看過去,對z需要進行一個激活函數的運算(這個例子假設是sigmoid函數),后作為下一級的輸入。那我們的反向傳播的偏微分就可以寫成圖2-4中的相乘的形式,由損失函數對激活函數偏導乘激活函數對z偏導。
?那么另一部分怎么求解呢?假設我們這個模型是下一級只連接了兩個神經元(更多神經元如果理解這個后也就明白了),那么我們的輸出結果就會對之后的兩個神經元產生影響,那么我們可以用求導的鏈式法則去表示出上一步我們需要求解的部分,如上圖。我們發現圖中的兩個部分還是沒有求解出來,這個下文會接著說。
換一種思路去更好的理解反向傳播,如上圖。可以看成是一個新的網絡,這個網絡是和我們剛才的網絡輸入輸出是相反的。這個網絡輸入了下圖中的偏導數,經過上文中介紹的處理方式,得到了之前一級的偏導數,這就是一種反向傳播。
而對于σ(z)函數的偏導,z在輸入的時候就已經確定了具體的大小,所以σ(z)函數的偏導也就是確定的常數了。
如上圖,當下一層為輸出層的時候,由于我們在輸入樣本時是可以計算出輸出值y1和y2,所以這部分的偏導數也是可以很容易做出來的。
這種情況下,我們很容易想到,如果知道下一層的微分值,那么不是可以很容易求解出這一層的微分值嘛?
這時大家肯定想到了遞歸的思想,不斷的遞歸就可以推到輸出層從而計算出我們想要的結果。
從后往前比從前往后更加有效率
總結
最后在這個部分總結下bp,bp是為了簡化對神經網絡做梯度下降時帶來的運算量巨大的問題。bp主要分為反向傳播和前向傳播。
前向傳播很容易,主要傳播的就是神經網絡的輸入。這個每一級的輸入都會作為我們的偏導數來供我們去做梯度下降。
反向傳播傳播的是損失函數對z的偏導(z是每一級線性方程的輸出),這個偏導數可以通過,從輸出層到輸入層的反向求解,使得運算達到進一步的簡化。
總結
以上是生活随笔為你收集整理的李宏毅深度学习——Backpropagation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lesson 2.张量的索引、分片、合并
- 下一篇: 李宏毅深度学习——Tips for De