神經(jīng)網(wǎng)絡(luò)
????神經(jīng)網(wǎng)絡(luò)是機器學(xué)習(xí)當(dāng)中的一個最常見的模型,模擬大腦的神經(jīng)元進行輸入輸出的,需要大量的參數(shù)進行計算。遇到非線性問題時,特征的數(shù)量增大,單純的冪函數(shù)之和是無法分類問題的曲線。
????算法相當(dāng)于是有一個閾值在決定是否激活,類似于區(qū)間的思想,只有當(dāng)總輸入值大于閾值時,神經(jīng)元模型才會輸出相應(yīng)的結(jié)果。通常是使用Sigmoid激活函數(shù)來將大范圍的輸入壓縮到[0,1]區(qū)間上進行輸出。
????全連接神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)一般是一層是特征輸入層,若干個隱藏層,一個結(jié)果輸出層。每層之間都需要大量的參數(shù)來進行控制,包括權(quán)重值和偏置值等等,激活函數(shù)的設(shè)置都是需要考慮的。同層神經(jīng)元之間是不存在連接關(guān)系的。
????以三層神經(jīng)元網(wǎng)絡(luò)為例來說明反向傳播算法

? ?在反向傳播的思路當(dāng)中,首先是隨機給定初始的若干權(quán)重值和偏置,然后帶入訓(xùn)練樣本計算得到預(yù)測值,然后與真實值比較計算損失函數(shù),再根據(jù)損失函數(shù)求梯度,得到每組權(quán)重w向量的變化值,對于輸出層和隱藏層的權(quán)值變換時分成兩步進行,對當(dāng)前值變化后再帶入下一個訓(xùn)練樣本計算。

????? ? 在神經(jīng)網(wǎng)絡(luò)模型的運算中,正向傳播是基礎(chǔ)。a(i)表示某一層的輸出值,第一層輸出的a1就是輸入的特征值x,Θi表示某一層全連接神經(jīng)元之間的參數(shù)值向量,通過與上一層的a(i)進行相乘得到下一層的輸入z(i),再相加常數(shù)值a0后進行sigmoid函數(shù)壓縮,得到本層的輸出a(i)。函數(shù)g(x)就是sigmoid函數(shù)。
????損失函數(shù)的定義依然是最為關(guān)鍵的,直接決定了代價函數(shù)和梯度下降的調(diào)整過程。在神經(jīng)網(wǎng)絡(luò)中,我們依然使用均方差來表示誤差值(預(yù)測-真實),為了后續(xù)求偏導(dǎo)數(shù)梯度的方便就加了個1/2。

?????整體的目標(biāo)是為了代價函數(shù)最小,為了收斂最快也就是采用了梯度下降的方式來進行,沿著負梯度的方向進行調(diào)整。η表示學(xué)習(xí)率控制收斂速度,防止其發(fā)散,一般設(shè)置為0.1.

????代價函數(shù)求出偏導(dǎo)數(shù)后本質(zhì)上仍然是一個關(guān)于參數(shù)θ,也就是權(quán)重w的函數(shù),每一步帶入當(dāng)前位置的一系列w的值,就是θ向量的值,再取反也就是當(dāng)前逆梯度的值,就是最快收斂的方向。

? ? δ4j是輸出層某一個神經(jīng)元的輸出誤差,與真實值相減即可得到,組合起來的δ4則是整個輸出層的誤差向量。第三層間的神經(jīng)元參數(shù)Θ3與δ4相乘,再與sigmoid(z3)導(dǎo)數(shù)點乘得到第三層的誤差值δ3,sigmoid(z3)的導(dǎo)數(shù)也就是a3點乘(1-a3)。同理可得第二層的損失函數(shù)δ2以及第一層的δ1,這個從輸出層反推得到輸入層的損失函數(shù)的過程就是反向傳播。
????梯度下降的求導(dǎo)過程中,在不考慮正則化(即λ=0)的影響下,對于全連接神經(jīng)網(wǎng)絡(luò)中的第l層第j個神經(jīng)元到l+1層第i個神經(jīng)元之間的系數(shù)求偏導(dǎo)時,剛好是對應(yīng)的輸出值a(l)j乘以下一層的損失函數(shù)值delta(l+1)i。

????整體過程如此流程圖所示,最終的終止條件應(yīng)該是代價函數(shù)最小。
????標(biāo)準(zhǔn)BP算法是挨個挨個訓(xùn)練樣本進行計算,但是真實的模型中,一般是將訓(xùn)練集劃分為若干個minibatch來求。求出在這個batch上的累加的cost函數(shù)再取平均,對于這個函數(shù)求梯度,當(dāng)作近似值,稱為隨機梯度下山的方式,并不一定每次都是最快的方向,但是可以加速收斂過程,并且還可以在一定程度上避免陷入局部最優(yōu)解的問題。
????對于隱藏層的神經(jīng)元個數(shù)的設(shè)計問題,一般使用經(jīng)驗和試錯法來進行,權(quán)重值等參數(shù)還可以反向傳播自動計算,但是神經(jīng)元個數(shù)的問題要具體分析。
????過擬合問題一般是使用早停和正則化兩種思路來解決,早停就是說一旦訓(xùn)練集誤差減小而驗證集的誤差升高就立刻停止訓(xùn)練過程,選擇最小的驗證集誤差對應(yīng)的參數(shù)輸出。
????正則化的方借用了SVM的思想,引入網(wǎng)絡(luò)復(fù)雜度的描述到代價函數(shù)當(dāng)中,也就是權(quán)值的平方和,這樣會偏愛于權(quán)值較小的那種類型。

???

?????與logistic回歸模型類型類似,正則化的思想在神經(jīng)網(wǎng)絡(luò)預(yù)測回歸模型也適用。與logistic回歸的二分類模型不同的是,對于輸出層的K個神經(jīng)元節(jié)點輸出的都表示每一種結(jié)果的可能的概率,輸出層節(jié)點的概率之和為1,然后與真實的結(jié)果相減求對數(shù)即得到損失函數(shù)。真實的結(jié)果就只有某一項的概率為1,其他的項都是0組成的向量。最后就是添加全連接神經(jīng)網(wǎng)絡(luò)中的各個節(jié)點之間的權(quán)重值平方和,在最小化的目標(biāo)下,自然會選擇較小的參數(shù)值來構(gòu)成網(wǎng)絡(luò)。
????避免陷入局部最優(yōu)解的思路一般就是隨機梯度下降,當(dāng)然也可以多組初始值開始搜索下山法,耗費資源較多,也有模擬退火的算法,選擇次優(yōu)解,避免收斂速度太快,但是選擇的概率得逐漸降低。

關(guān)于在基礎(chǔ)的編碼過程中,驗證J(Θ)求導(dǎo)是否正確,可以使用導(dǎo)數(shù)的定義來驗證,選擇一個較小的ε,量級10-4次方,來進行雙向檢測確保兩邊導(dǎo)數(shù)均存在,避免程序錯誤。
在反向傳播算法初始值設(shè)定時,不能全部參數(shù)完全設(shè)置成一樣的,否則會使得后續(xù)反向傳播算法中的更新后依然相同,應(yīng)先模型的特征學(xué)習(xí)的效果。為了避免這種對稱權(quán)重的現(xiàn)象,應(yīng)該隨機設(shè)置初始參數(shù)值。
????卷積神經(jīng)網(wǎng)絡(luò)因為時圖像處理相關(guān)的,等到那個時候再學(xué)。