如何理解“梯度下降法”?什么是“反向傳播”?通過一個視頻,一步一步全部搞明...

梯度下降法
(我是借鑒了up主小黑晚安喵的關(guān)于這個視頻的筆記,在他的基礎(chǔ)上稍微加上了自己的理解)
前文回顧:用交叉熵作為損失函數(shù),結(jié)果是理想模型與神經(jīng)網(wǎng)絡(luò)計算出來的模型的差距的定量表達(dá)
調(diào)整網(wǎng)絡(luò)來減小差距 -> 反向傳播
梯度下降法,是反向傳播中的一種
權(quán)值W和偏置b對結(jié)果產(chǎn)生影響,優(yōu)先調(diào)整那些對結(jié)果有重大影響的參數(shù)。
反向傳播是把偏差反向傳到參數(shù)上,根據(jù)參數(shù)對偏差的貢獻(xiàn)大小來修改參數(shù)
a[3],第三層的輸出值;a[2],第二層的輸出值
σ,激活函數(shù)
J,損失函數(shù)
調(diào)整a[2]就是向前傳播的過程。
第1層中,每個神經(jīng)元要修改的偏差是根據(jù)所有第2層的來的
方向:梯度的反方向,即數(shù)值減小最快的方向;數(shù)值:偏差
過曲面做切面,黑色切線指向定點最快的方向
梯度就是左圖的紅色向量,該向量與黑線在xy平面上投影
梯度分解
我們知道損失函數(shù)就是訓(xùn)練值和目標(biāo)值的偏差,我們訓(xùn)練的目的就是讓訓(xùn)練值趨向于目標(biāo)值,也就是讓損失函數(shù)最小化,而如何讓損失函數(shù)盡快最小化呢,就是利用梯度,因為梯度就是上升最快的方向,對他取反,也就是使得損失函數(shù)趨向于0最快的方向,然后考慮到長遠(yuǎn)的利益,我們需要人為設(shè)置一個超參數(shù),即學(xué)習(xí)η,接下來就可以進(jìn)行修正操作
顯然,損失函數(shù)J(3)是關(guān)于W(3),a(2),b(3)的函數(shù),我們用α,β,γ分別表示J對W,a,b的偏導(dǎo),因此W和b的修正就是W=W-η*α,b=b-η*γ,而由于a作為上一層的輸出結(jié)果,我們不能直接改變它,只有通過修改上一層的參數(shù)W和b,從而達(dá)到間接修改a的目的。所以我們先將β記下。
事實上,β與損失函數(shù)是相似的,他們都是隱藏層和目標(biāo)的一個差值,所以我們可以把β同樣的看作是一個損失函數(shù),記為J(2)=a(2)(修正前)-a(2)(修正后)=β,然后繼續(xù)進(jìn)行反向傳播,開啟下一輪
倒數(shù)第三層,a[0]就是輸入了,是一個常量,因此到此為止參數(shù)修正全部完成,也就意味著一輪學(xué)習(xí)結(jié)束
根據(jù)W[l]i和b[l]i,得出z[l]i,通過激活函數(shù),得到感知機(jī)結(jié)果a[l]i
利用矩陣寫出第l層的感知機(jī)輸出a[l]
輸出層,損失函數(shù)就是y和a[l]的差
拓展成多個輸出分類,去掉常數(shù)y,反向傳播偏差如圖
假定有L+1層,鏈?zhǔn)角髮?dǎo)
注意,這里的W,a,b均為向量,因為每一個感知機(jī)都受前面一層所有感知機(jī)的影響(我覺得這里的J(l+1)應(yīng)該寫成J(l)更合適,因為最終的損失函數(shù)J是a(l)的輸出與a(l)的目標(biāo)之間的誤差,寫成J(l)更合適,但是他是通過J+1層算出來的,后面我都寫成J(l))
顯然J(l)是關(guān)于W(l),a(l-1),b(l)的函數(shù),而且輸出層l層有i個感知機(jī),每一個感知機(jī)都可以對其求梯度,如圖
由于a(l)=σ(z(l))=σ(W(l)*a(l-1)+b(l)),利用鏈?zhǔn)椒▌t,我們可以得到最下方的梯度
注:W是向量,是分別對每個分量求偏導(dǎo)
通過J(l)修改W和b,作為l層的參數(shù);
a(l-1)不能直接上手修改,但可以當(dāng)作l-1層的損失函數(shù)的值J(l-1)
從上圖的最下方我們可以看到損失函數(shù)的形式,仍然是一個求偏導(dǎo)的形式,所以第一個視頻里面的類似鏈?zhǔn)椒▌t的形式就是這么來的
至此,形成遞歸,迭代
需要注意的是,現(xiàn)在的l層(原l-1層)的每一個感知機(jī)都接受l+1層(原l層)所有感知機(jī)傳過來的損失函數(shù)J(l),也就是說相當(dāng)于每個感知機(jī)(假設(shè)是第i個)都接受傳進(jìn)來的m=n(l+1)個損失函數(shù)(事實上是每一個損失函數(shù)這個向量在i上的分量),這時候求平均就可以降維當(dāng)做只有一個偏差了!
反向傳播到輸入層,a[0]分量不存在,則只剩下可以修改的W和b