神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)讀書(shū)筆記:通過(guò)改變Weights 和Biases進(jìn)而改變Cost Function

好久未更新筆記了,借口:工作比較忙,懶得動(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)差值的平方的和的平均。

Cost Function 最小二乘法形式

而我們的目的是通過(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為因變量。

weight的概念
biase的概念

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

i為第L-1層的神經(jīng)元數(shù)目,σ為sigma函數(shù)

由上述表達(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):

  1. 對(duì)每個(gè)權(quán)值與偏移直接求導(dǎo)計(jì)算量巨大(深度神經(jīng)網(wǎng)絡(luò)中權(quán)值與偏移參數(shù)數(shù)量巨大)。
  2. 求方程組的解,但X不確定,方程組解難以求解。(數(shù)值算法可能存在,但是我沒(méi)找到,如果有同學(xué)找到請(qǐng)共享,謝謝!)

因此,大部分機(jī)器學(xué)習(xí)算法尋求最優(yōu)值時(shí)采用梯度下降算法。

梯度下降算法的經(jīng)典圖

梯度下降就是尋找凸函數(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ù):

二元函數(shù)求偏導(dǎo)數(shù)

下降的變化值:
下降的變化標(biāo)量
?
由此可以求得,C的變化量ΔC:

ΔC
Δv1,Δv2取值

?
為什么Δv這樣取值呢?可以從下面兩個(gè)角度理解:

  1. 在微分的知識(shí)中,梯度的方向指向標(biāo)量增長(zhǎng)的方向。因此,我們要想尋找最小值,那么我們就要與梯度方向相反。所以,v1,v2變化量的方向應(yīng)該與梯度方向相反。
  2. 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á)谷底:

更新V1,V2從而求得C的最小值

。

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

η為學(xué)習(xí)速率

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層j神經(jīng)元產(chǎn)生的誤差為δ

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


NeuralNetworkAndDeepLearning插圖

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

Paste_Image.png

所以,ΔC可以表示為:
Paste_Image.png

現(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è)中間變量:

度量第L層第J個(gè)結(jié)點(diǎn)產(chǎn)生的誤差

由于δ對(duì)C有影響,而C對(duì)w、b的偏導(dǎo)數(shù)也影響C,因此,可以考慮建立δ與w、b的關(guān)系。

2) 兩個(gè)假設(shè):

  1. C等于訓(xùn)練集中所有樣本元素?cái)?shù)目n的最小二乘cost fuction的和的均值。


    訓(xùn)練集中所有樣本元素?cái)?shù)目n

    ?
    因此,單一樣本的cost Function:


    后面推導(dǎo)x取消
  2. C看作神經(jīng)網(wǎng)絡(luò)中所有輸出的一個(gè)函數(shù)。


    多輸出的神經(jīng)網(wǎng)絡(luò)
C看作為神經(jīng)網(wǎng)絡(luò)中所有輸出的函數(shù)

3) 四個(gè)等式及其推導(dǎo)

  1. 輸出層誤差等式 δL
輸出層誤差等式
  1. δl用δl+1表示的等式:
根據(jù)后一層誤差推導(dǎo)前一層
  1. C對(duì)網(wǎng)絡(luò)中任意權(quán)值的導(dǎo)數(shù)(變化率)用δ表示:


    用δ表示C對(duì)權(quán)值的導(dǎo)數(shù)
  2. C對(duì)網(wǎng)絡(luò)中任意偏移的導(dǎo)數(shù)(變化率)用δ表示:


    用δ表示C對(duì)偏移的導(dǎo)數(shù)

4) 后向反饋算法

后向反饋算法為我們提供了一種更新權(quán)值與偏移的算法。首先展示一下單一樣本后向反饋算法的流程:

  1. Input:設(shè)置input X = a^{1}。
  2. 前向反饋:利用前向反饋算法計(jì)算每一層的值2,3... ...L,
    利用前饋算法計(jì)算每一層的值
  3. 計(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 )
  4. 通過(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}
  5. 更新權(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)生了成為批量梯度下降:

  1. 輸入:全訓(xùn)練集。
  2. 批量梯度下降: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
  3. 更新權(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í)》

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

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

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