吳恩達(dá)機(jī)器學(xué)習(xí)筆記-反向傳播算法練習(xí)

直觀感受反向傳播的概念

上篇文章講述了神經(jīng)網(wǎng)絡(luò)的反向傳播算法的基本概念,現(xiàn)在來詳細(xì)的對此算法進(jìn)行一些講解。
回憶一下神經(jīng)網(wǎng)絡(luò)的代價函數(shù):

如果我們只考慮一個簡單的只有一個輸出單元的情況,即k=1,那么代價函數(shù)則變成:

直觀的說,\delta_j^(l)項表示在第l層中第j個單元的誤差。更正式的說,\delta的值實際上是代價函數(shù)的導(dǎo)數(shù)。

\delta_j^(l) = \frac{\partial}{\partial z_j^(l)}cost(t)
由于函數(shù)的導(dǎo)數(shù)即是其切線的斜率,因此其切線越陡則說明計算的誤差越大。每一個神經(jīng)元的誤差都與后面連接的神經(jīng)元有關(guān),如下圖計算:

其中:
\delta_2^(2) = \Theta_{12}^(2)\delta_1^(3) + \Theta_{12}^(2)\delta_1^(3)
\delta_2^(3) = \Theta_{12}^(3)\delta_1^(4)

參數(shù)展開

使用神經(jīng)網(wǎng)絡(luò)時,我們處理的一組矩陣:\Theta^(1),\Theta^(2),\Theta^(3)...,為了使用最優(yōu)化函數(shù)比如"fminuc()",我們需要將所有的元素展開將其放入一個長向量中:
thetaVector = [Theta1(:);Theta2(:),Theta(3);]
比如說如果Theta1的維度是1011,Theta2是1011,Theta3是1*11,那我們通過展開后的向量來得到原始的矩陣的話,需要如下的方法:
Theta1 = reshape(thetaVector(1:110),10*11) \\ Theta2 = reshape(thetaVector(111:220),10*11) \\ Theta3 = reshape(thetaVector(221:231),1*11) \\

總結(jié)的話就直接看吳恩達(dá)老師的筆記:

梯度校驗

梯度校驗是用來確保我們做的反向傳播算法是否正確,這里假設(shè)代價函數(shù)的導(dǎo)數(shù)為:
\frac{\partial}{\partial \Theta}J(\Theta) \approx \frac{J(\Theta+\epsilon) - J(\Theta - \epsilon)}{2\epsilon}
那么在多個\theta的矩陣,則可以得到下面近似于關(guān)于\Theta的導(dǎo)數(shù):
\frac{\partial}{\partial \Theta}J(\Theta) \approx \frac{J(\Theta_1,... \Theta_j+\epsilon,...,\Theta_n) - J(\Theta_1...,\Theta_j - \epsilon,... \Theta_n)}{2\epsilon}
一般取\epsilon = 10^{-4}比較合適,太小了會導(dǎo)致一些計算問題。因此我們只是在\Theta矩陣中加上或減去\epsilon,在octave中代碼如下所示:

我們已經(jīng)計算過deltaVector,因此計算出gradApprox后就可以判斷是否gradApprox ≈ deltaVector。一旦計算出反向傳播算法是準(zhǔn)確的,就不需要再繼續(xù)計算gradApprox了,因為計算gradApprox的過程是很緩慢的。

隨機(jī)初始化參數(shù)

將所有的權(quán)重初始化為0不適用于神經(jīng)網(wǎng)絡(luò),那樣反向傳播時,所有節(jié)點將重復(fù)更新為相同的值。因此,我們可以使用以下方法隨機(jī)初始化我們的Θ矩陣的權(quán)重:

因此,這里初始化每個\Theta_{ij}^(l)[-\epsilon,\epsilon]之間的隨機(jī)值,使用上述公式保證我們得到所需的界限,相同的程序使用于所有的\Theta。以下代碼可以用來進(jìn)行實驗:(Theta1,Theta2,Theta3的維度同上面一樣,這里的epsilon和上面梯度校驗的無關(guān)):

Theta1 = rand(10,11) * (2*INIT_EPSILON) - INIT_EPSILON;
Theta2 = rand(10,11) * (2*INIT_EPSILON) - INIT_EPSILON;
Theta3 = rand(1,11) * (2*INIT_EPSILON) - INIT_EPSILON;

總結(jié)

這里就直接使用原課程的筆記,懶得寫了,寫了也只是把這個翻譯一遍不如直接看原版筆記。這一周的內(nèi)容的確有點難度了,需要一定時間消化。

以上,為吳恩達(dá)機(jī)器學(xué)習(xí)第五周后半部分內(nèi)容。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容