好久未更新筆記了,借口:工作比較忙,懶得動(dòng)手了... ...。最近因?yàn)楣ぷ黩?qū)動(dòng)讀了點(diǎn)機(jī)器學(xué)習(xí)相關(guān)資料。本系列文章記錄一下機(jī)器學(xué)習(xí)中的一些容易忘記、比較繞的東西,如有錯(cuò)誤請(qǐng)各位兄弟姐妹不吝賜教,謝謝!
??本篇文章主要梳理自己對(duì)神經(jīng)網(wǎng)絡(luò)中的后向反饋的理解,核心問(wèn)題:改變Weights與Biases的值如何影響Cost Function?
一、問(wèn)題由來(lái)
了解機(jī)器學(xué)習(xí)的同學(xué)們肯定知道,在機(jī)器學(xué)習(xí)中,經(jīng)常會(huì)碰到一個(gè)概念Cost Function,其最小二乘法形式表示所有樣本的預(yù)測(cè)值(y hat)與真實(shí)值(y)差值的平方的和的平均。

而我們的目的是通過(guò)調(diào)整參數(shù)Weights 與 Biases 來(lái)減小真實(shí)值與預(yù)測(cè)值之間的絕對(duì)差。
??達(dá)成此目的的前提就是調(diào)整參數(shù)Weights 與Biases可以改變Cost Fuction。就此,引出本文的問(wèn)題改變Weights與Biases的值如何影響Cost Function?
二、問(wèn)題分析
1.Cost Function為Weights 與 Biases的函數(shù)
Weights 與 Biases(下面簡(jiǎn)稱W與B)想要影響Cost Fuction(下面簡(jiǎn)稱C),那么W、B可以看作自變量,C為因變量。


隱藏層與輸出層的每個(gè)神經(jīng)元的輸入值可以定義為:
?

由上述表達(dá)式可知,如果y hat可以理解為輸出層的某個(gè)神經(jīng)元a的值,那么C就是W與B的函數(shù)。
2.梯度下降算法
上一小節(jié)中提出了Cost Function的最小二乘法表示,C為Weights和Biases的函數(shù)。學(xué)過(guò)導(dǎo)數(shù)的同學(xué)知道,如果相求多元函數(shù)的最值,可以通過(guò)導(dǎo)數(shù)求其極值來(lái)獲得,最值可能出現(xiàn)在極值點(diǎn)。但是為什么在機(jī)器學(xué)習(xí)中最優(yōu)化問(wèn)題是通過(guò)梯度下降方法比導(dǎo)數(shù)求極值的方式更為常見(jiàn)呢?】
我理解主要有兩點(diǎn):
- 對(duì)每個(gè)權(quán)值與偏移直接求導(dǎo)計(jì)算量巨大(深度神經(jīng)網(wǎng)絡(luò)中權(quán)值與偏移參數(shù)數(shù)量巨大)。
- 求方程組的解,但X不確定,方程組解難以求解。(數(shù)值算法可能存在,但是我沒(méi)找到,如果有同學(xué)找到請(qǐng)共享,謝謝!)
因此,大部分機(jī)器學(xué)習(xí)算法尋求最優(yōu)值時(shí)采用梯度下降算法。

梯度下降就是尋找凸函數(shù)的最小值點(diǎn)。這個(gè)圖可以想象為一個(gè)小球沿著坡度往最低點(diǎn)滾動(dòng)。
假設(shè)小球下降方向分解為(v1,v2)兩個(gè)方向,小球在某個(gè)點(diǎn)的下降方向?yàn)樵擖c(diǎn)的切線方向即在該點(diǎn)的導(dǎo)數(shù):

下降的變化值:
由此可以求得,C的變化量ΔC:

?
為什么Δv這樣取值呢?可以從下面兩個(gè)角度理解:
- 在微分的知識(shí)中,梯度的方向指向標(biāo)量增長(zhǎng)的方向。因此,我們要想尋找最小值,那么我們就要與梯度方向相反。所以,v1,v2變化量的方向應(yīng)該與梯度方向相反。
-
C>=0,那么要想C減小,那么ΔC<0,那么可以得到:
\Delta C= -\eta \left (\frac{\partial C}{\partial v_{1}} \right )^{2} -\eta \left (\frac{\partial C}{\partial v_{2}} \right )^{2};?
那么,只要V1,V2按照如下方式更新就可以使小球最終到達(dá)谷底:

。
對(duì)應(yīng)這里的神經(jīng)網(wǎng)絡(luò)的Cost Function與Weights、Biases,可以得到如下等式:

3.后向反饋
通過(guò)第二小節(jié)我們知道了通過(guò)梯度下降算法可以更新w,b進(jìn)而求得C的最小值,那么我們應(yīng)該怎么計(jì)算C對(duì)w的導(dǎo)數(shù)與C對(duì)b的導(dǎo)數(shù)?
介紹后向反饋之前,我們先介紹一個(gè)概念、兩個(gè)假設(shè)與四個(gè)等式及其推導(dǎo),最后給出后向反饋算法。
1) 一個(gè)概念
第L層第j神經(jīng)元產(chǎn)生的誤差為δ,表示:

下面一起來(lái)理解一下δ:

假設(shè)在(layer L,neuron j) 有一個(gè)惡魔導(dǎo)致該結(jié)點(diǎn)產(chǎn)生誤差Δz,然后這個(gè)誤差通過(guò)前向反饋(σ(z + Δz))傳導(dǎo)到輸出層,從而引起誤差,增大C。因此,由導(dǎo)數(shù)定義可知:

所以,ΔC可以表示為:

現(xiàn)在這個(gè)惡魔為了彌補(bǔ)這個(gè)錯(cuò)誤減小C,它就要減小C對(duì)zjL 的導(dǎo)數(shù)與ΔzjL 的乘積,那么這兩者一定符合相反。而且,如果C對(duì)zjL 的導(dǎo)數(shù)很大,說(shuō)明z的變化會(huì)引起C的很大變化,如果C對(duì)zjL 的導(dǎo)數(shù),證明z的變化對(duì)C的影響很小,因此,我們定義一個(gè)中間變量:

由于δ對(duì)C有影響,而C對(duì)w、b的偏導(dǎo)數(shù)也影響C,因此,可以考慮建立δ與w、b的關(guān)系。
2) 兩個(gè)假設(shè):
-
C等于訓(xùn)練集中所有樣本元素?cái)?shù)目n的最小二乘cost fuction的和的均值。
訓(xùn)練集中所有樣本元素?cái)?shù)目n?
因此,單一樣本的cost Function:
后面推導(dǎo)x取消 -
C看作神經(jīng)網(wǎng)絡(luò)中所有輸出的一個(gè)函數(shù)。
多輸出的神經(jīng)網(wǎng)絡(luò)

3) 四個(gè)等式及其推導(dǎo)
- 輸出層誤差等式 δL:

- δl用δl+1表示的等式:

-
C對(duì)網(wǎng)絡(luò)中任意權(quán)值的導(dǎo)數(shù)(變化率)用δ表示:
用δ表示C對(duì)權(quán)值的導(dǎo)數(shù) -
C對(duì)網(wǎng)絡(luò)中任意偏移的導(dǎo)數(shù)(變化率)用δ表示:
用δ表示C對(duì)偏移的導(dǎo)數(shù)
4) 后向反饋算法
后向反饋算法為我們提供了一種更新權(quán)值與偏移的算法。首先展示一下單一樣本后向反饋算法的流程:
- Input:設(shè)置input X = a^{1}。
- 前向反饋:利用前向反饋算法計(jì)算每一層的值2,3... ...L,
利用前饋算法計(jì)算每一層的值- 計(jì)算輸出層L的誤差:每一層L-1,L-2... ...1利用后向反饋算法計(jì)算δ,
\delta^{l}= \left ( w^{l+1} \right )^{T}\delta ^{l+1}\cdot \sigma {}'\left ( z^{l} \right )- 通過(guò)δ計(jì)算網(wǎng)絡(luò)中的每個(gè)權(quán)值與偏移:
\frac{\partial C}{\partial w_{ji}^{l}}= a_{i}^{l-1}\cdot \delta _{j}^{l}; \frac{\partial C}{\partial b_{j}}= \delta _{j}^{l}- 更新權(quán)值w與偏移b:
?w_{j}^{l} \rightarrow w_{j}^{l}-\eta \frac{\partial C}{\partial w_{j}^{l}}; b_{j}^{l} \rightarrow b_{j}^{l}-\eta \frac{\partial C}{\partial b_{j}^{l}};
上述過(guò)程采用的隨機(jī)梯度下降而非標(biāo)準(zhǔn)的梯度下降。隨機(jī)梯度下降與標(biāo)準(zhǔn)梯度下降的最大區(qū)別在于標(biāo)準(zhǔn)梯度下降通過(guò)全訓(xùn)練集來(lái)計(jì)算誤差δ之和的均值進(jìn)而更新權(quán)值和偏移,而隨機(jī)梯度下降是通過(guò)單一訓(xùn)練計(jì)算誤差δ更新權(quán)值與偏移。
標(biāo)準(zhǔn)梯度下降每一次的更新需要計(jì)算全訓(xùn)練集,計(jì)算量大,自然會(huì)想到去掉∑,通過(guò)隨機(jī)梯度下降來(lái)更新。但是,隨機(jī)梯度下降是標(biāo)準(zhǔn)梯度下降的近似更容易陷入局部極小值。
兩者的折中方案也產(chǎn)生了成為批量梯度下降:
- 輸入:全訓(xùn)練集。
- 批量梯度下降:m為一批次訓(xùn)練樣本的數(shù)目,對(duì)本批次的每一個(gè)樣本ax,1執(zhí)行如下步驟:
(1) 前向反饋算法:zx,l=wlax,l?1+bl; ax,l=σ(zx,l)。
(2) 計(jì)算輸出層誤差:
image.png
(3) 后向反饋算法計(jì)算隱藏層誤差:每一層L-1,L-2... ...2計(jì)算誤差δl:
image.png- 更新權(quán)值與偏移:對(duì)于每一層L,L-1,......2更新權(quán)值與偏移
更新權(quán)值
更新偏移
4. 總結(jié)
本文梳理cost Function最小值優(yōu)化問(wèn)題,解釋了為什么梯度下降可以求解優(yōu)化問(wèn)題,以及如何操作。
后續(xù)從代碼示例學(xué)習(xí)分享,并不斷優(yōu)化模型。
參考:《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》、《機(jī)器學(xué)習(xí)》








