引言:
在上節課中,我們知道梯度下降算法的核心是要重複對w,b求偏導數,這樣我們就能夠讓代價函數一直減小,最後讓實際輸出值盡量拟合預計輸出值,那麼我們怎麼去求w和b的偏導數呢?這節課,我們就來講一下。
1)基本規則
既然我們想求出每個位置相應的w和b,我們就需要先将每個位置的w和b清晰的表示出來。請看下圖:
這裡你可能會奇怪,為什麼下标先寫2,再寫4呢?按照常理來說,第二層的第四個神經元應該放在前面,第三層的第二個神經元應該放在後面。這樣才合理嘛,因為是由前向後傳遞嘛。先别急,後面給你解釋。
a(activation值)和b(biases)也有類似的表示方式:
有了以上作為前提後,我們就可以将第l層的第j個神經元的激活值
和第(l-1)層的所有激活值聯系起來了。如下圖:
我們這裡可以舉個例子,求一下第三層第一個神經元的激活值,如下圖:
到這裡,你可能有點了解,為什麼上面要把2放到前面了。
接下來,我們把公式(23)向量化,得到如下形式:
這裡,我們就得到了如何以矩陣形式,求出每一個神經元的激活函數了。
2)兩個假設
第⼀個假設就是代價函數可以被寫成⼀個在每個訓練樣本x 上的代價函數Cx 的均值C,其:
這裡我想問個問題,為什麼要提出這個假設呢?
實質上,反向傳播算法是對一個獨立(不要說你不知道什麼是獨立)的訓練樣本x,計算了代價函數對其的weight和biases的偏導數。然後,我們将所有的樣本訓練完後,然後對其求和取均值,最後得到平均weight和biases偏導數。這樣我就把這個均值化得到的“個性化”的代價函數,當作了全體适用的代價函數。以二次代價函數舉例,如下:
第二個假設就是代價C可以寫成神經網絡輸出的函數。這個就很容易了解了,例如我們對于一個單獨的訓練樣本x的二次代價函數,我們就可以将其寫成:
這裡表示,x的代價可以用對所有的輸出神經元的期望值和實際輸出值做差的平方和的函數來表示。
3)哈達瑪乘積(Hadamard)
求兩個矩陣的Hadamard乘積就是對矩陣之間同位置的元素求積得到的矩陣,如下:
4)四個基本方程
好了,有了以上的做鋪墊,我們可以介紹下面BP算法的四個基本方程了,我們在這裡再強調一遍:BP算法的核心任務是求代價函數關于w和b的偏導數。我們為了解決這個任務,引入一個中間量
,這個中間量是第l層上第j個神經元的誤差。這個誤差和代價函數關于weight和biases的偏導數有關系。這樣,我們可以通過計算誤差來計算偏導數。
你可能要問那麼這個誤差量
從何而來呢?回想一下,輸出函數公式(3):
這裡如果在輸入時,有一個幹擾量
,那麼當我們最終輸出的時候,結果就變成了:
那麼,我們最終輸出産生了如下變化:
我們可以很容易看出來,這裡變化值取決于前面的偏導數(幹擾量假設恒定),是以我們将這個偏導數定義為第l層的第j個神經元的誤差:
好了終于解釋清楚這個中間量怎麼來的了,下面直接給出四個基本方程,我們可以根據這四個基本方程來算出代價函數的偏導數:
我們可以看到(BP3),(BP4)分别是計算對b和w的公式。
下面給出僞算法:
BP算法就介紹到這裡。希望有志同道合的小夥伴關注我的公衆平台,歡迎您的批評指正,共同交流進步。