反向傳播算法(Backpropagation Algorithm,BP算法)是深度學(xué)習(xí)的重要思想基礎(chǔ)
目錄
一、BP算法的推導(dǎo)
1、前向傳播的計算
第一層隱藏層的計算
第二層隱藏層的計算
輸出層計算
2、反向傳播計算
計算偏導(dǎo)數(shù)
二、實際數(shù)據(jù)代入推導(dǎo)BP算法
1、前向傳播計算
第一層隱藏層的計算
第二層隱藏層的計算
輸出層計算
2、誤差反向傳播
輸出層誤差計算
第二層隱藏層誤差計算
第一層隱藏層誤差計算
3、更新參數(shù)
其實,大概意思就是在輸入和輸出之間構(gòu)造神經(jīng)網(wǎng)絡(luò)(像人的大腦神經(jīng)網(wǎng)絡(luò)一樣),當(dāng)然這個神經(jīng)網(wǎng)絡(luò)里面會有很多的神經(jīng)節(jié)點和節(jié)點之間相連的邊(就想神經(jīng)元由前到后相連)。然后,這個神經(jīng)網(wǎng)絡(luò)作為一個計算的網(wǎng)絡(luò),里面會有一些參數(shù),要是參數(shù)選的好的話,那么這個模型就可以拿去用了,比如說,看到一張狗的照片,就知道這個是狗了。而反向傳播算法就是從結(jié)果出發(fā)一步步去約束其中的參數(shù),然后使得參數(shù)達到最優(yōu)的狀態(tài)。
看一看神經(jīng)元,這里的:
a1、a2、a3指的是輸入
w1、w2、w3指的是權(quán)重(對應(yīng)輸入的)
b 表示偏置(這里沒有呢)
f 表示激活函數(shù)(你可以想成是平時數(shù)學(xué)課上的函數(shù),一般都是比較簡單的函數(shù),表現(xiàn)出輸入和輸出的關(guān)系)
z 指的是輸出
這個是一個簡單的三層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(兩個隱藏層,一個輸出層)
比如我們來解決一個二分類問題,給一個樣本輸入,通過前向運算得到輸出
輸出值域為(0,1),輸出的結(jié)果越靠近0,就代表樣本是0類的可能性越大,反之,1類的可能性越大
基本上都是矩陣運算
假設(shè)我們使用隨機梯度下降的方式來訓(xùn)練神經(jīng)網(wǎng)絡(luò)的參數(shù):
損失函數(shù)(loss function)或代價函數(shù)(cost function),通常作為學(xué)習(xí)準(zhǔn)則與優(yōu)化問題相聯(lián)系,即通過最小化損失函數(shù)求解和評估模
型。定義為
這里有一些損失函數(shù),我們一般用的是第二個平方損失函數(shù):
當(dāng)損失函數(shù)的值為0時,那么表示模型參數(shù)訓(xùn)練的炒雞好的!因為沒有損失了。
使用梯度下降法進行參數(shù)的學(xué)習(xí),必須計算出損失函數(shù)關(guān)于神經(jīng)網(wǎng)絡(luò)中各層參數(shù)(權(quán)重w和偏置b)的偏導(dǎo)數(shù)。
BP算法基本就是這些
我們對上述的神經(jīng)網(wǎng)絡(luò)代值進行計算驗證,所有的參數(shù)的初始值如下:
注意:這里面的所有的權(quán)值w和所有的偏置b的具體的值都是初始值,當(dāng)然也可以換成其他數(shù)字
我們已經(jīng)計算出每一層的誤差了,現(xiàn)在我們要利用每一層的誤差和梯度來更新每一層的參數(shù)
權(quán)重w和偏置b的更新公式如下:
一般來說,權(quán)重w的更新會在前面加上一個正則化項來避免過擬合,這里為了簡化運算,我們省去正則化項。
正則化:必須有一種自動的東西來告訴我們哪種程度將最適合所提供的數(shù)據(jù),同時告訴我們需要把那些特征的影響降低至最低,以獲得最好的預(yù)測。
在每次迭代中去調(diào)整學(xué)習(xí)率的值是另一種很好的學(xué)習(xí)率自適應(yīng)方法。此類方法的基本思路是當(dāng)你離最優(yōu)值越遠,你需要朝最優(yōu)值移動的就越多,即學(xué)習(xí)率就應(yīng)該越大;反之亦反。我們這里設(shè)置為0.1。
每一層的參數(shù)更新的計算方法都是一樣的,這里只給出第一層隱藏層的參數(shù)更新:
哈哈哈哈,具體還有很多東西,大家可以看看mooc復(fù)旦大學(xué)的商務(wù)數(shù)據(jù)教程!