BP神經(jīng)網(wǎng)絡(luò)擬合非線性函數(shù)

本章涉及知識點(diǎn):

1、多層神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)模型

2、前向傳播算法

3、經(jīng)典激活函數(shù)

4、經(jīng)典損失函數(shù)

5、神經(jīng)網(wǎng)絡(luò)的優(yōu)化過程

6、反向傳播算法的推導(dǎo)

7、梯度下降算法優(yōu)化

8、衰減學(xué)習(xí)率的設(shè)計(jì)

9、案例引出—擬合非線性曲線

10、python編程實(shí)現(xiàn)擬合非線性曲線

11、結(jié)果分析

一、多層神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)模型

通常一個多層神經(jīng)網(wǎng)絡(luò)由L層神經(jīng)元組成,分為輸入層、輸出層和隱藏層

輸入層:神經(jīng)網(wǎng)絡(luò)的第一層,表示一列或多列矩陣的輸入

輸出層:神經(jīng)網(wǎng)絡(luò)的最后一層,表示網(wǎng)絡(luò)最終的輸出結(jié)果,通常是一列矩陣

隱藏層:神經(jīng)網(wǎng)絡(luò)的中間層,有L-2層,表示每一層神經(jīng)元通過前向傳播算法計(jì)算的結(jié)果矩陣

多層神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)模型

上述數(shù)學(xué)模型理論上可以學(xué)習(xí)模擬出任何的映射函數(shù),下面我們定義出神經(jīng)網(wǎng)絡(luò)中的所有變量含義

X表示:神經(jīng)網(wǎng)絡(luò)的輸入矩陣:

輸入矩陣

y表示:神經(jīng)網(wǎng)絡(luò)的最終輸出矩陣:

輸出矩陣

h^{(l)}_{i}表示:第l層隱藏層的第i個神經(jīng)元的輸出,設(shè)第l層的有k個神經(jīng)元,則第l層的輸出為:

第l層的輸出

W^{(l)}_{ij}表示:第l-1層的第j個神經(jīng)元和第l層的第i個神經(jīng)元的連接權(quán)重,即兩個神經(jīng)元之間的突觸

b^{(l)}_{i}表示:第l層第i個神經(jīng)元的偏置項(xiàng)

net^{(l)}_{i}表示:第l層第i個神經(jīng)元的輸入

二、前向傳播算法

前向傳播算法指的是依次向前計(jì)算相鄰隱藏層之間的連接輸出,直到模型的最終輸出值。其特點(diǎn)是:

作用于相鄰層的兩個神經(jīng)元之間的連接計(jì)算,且前一層神經(jīng)元的輸出是后一層神經(jīng)元的輸入

設(shè)對于第l層的第i個神經(jīng)元,有l(wèi)-1層的n個神經(jīng)元與該神經(jīng)元有突觸相連,則

第l層的第i個神經(jīng)元的輸入為:

第l層的第i個神經(jīng)元的輸入

第l層的第i個神經(jīng)元的輸出為:

第l層的第i個神經(jīng)元的輸出

其中f(.)表示神經(jīng)元的激活函數(shù)

三、經(jīng)典激活函數(shù)

由于線性函數(shù)具有疊加性,使得無論計(jì)算多少層隱藏層,最后的輸出結(jié)果都是線性變化的,即整個模型都是線性的。但是實(shí)際生活中大多數(shù)問題都是非線性問題,而線性模型處理這些非線性問題的效果是非常不理想的,為此我們需要對每個神經(jīng)元的輸出做非線性變化,使得整個模型非線性

激活函數(shù)的目的:去除每個神經(jīng)元輸出的線性化,使得整個神經(jīng)網(wǎng)絡(luò)模型呈非線性化

神經(jīng)網(wǎng)絡(luò)中常用的幾種非線性激活函數(shù)為

(1)sigmod函數(shù)

sigmod函數(shù)

其導(dǎo)數(shù)為

sigmod導(dǎo)數(shù)

(2)雙曲正切函數(shù)

雙曲正切函數(shù)

其導(dǎo)數(shù)為

雙曲正切函數(shù)導(dǎo)數(shù)

(3)ReLU函數(shù)

ReLU函數(shù)

四、經(jīng)典損失函數(shù)

損失函數(shù)的意義:神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到的模型效果,以及優(yōu)化的目標(biāo)是通過損失函數(shù)來定義量化的

監(jiān)督式學(xué)習(xí)有兩大類問題:分類和回歸

分類問題:根據(jù)事先的樣本和分好的類目,學(xué)習(xí)一個分類函數(shù),使得它可以將新樣本分類到正確的類目中

回歸問題:根據(jù)事先的樣本和對應(yīng)的數(shù)值,學(xué)習(xí)一個回歸函數(shù),使得它可以用新的輸入預(yù)測出具體的數(shù)值

無論對于學(xué)習(xí)到的分類函數(shù),還是回歸函數(shù),其本質(zhì)都是模型的前向傳播算法

(1)對于分類問題:

我們需要事先定義一個場景(規(guī)模),準(zhǔn)備好若干樣例樣本和定義好的所有類目,然后訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)這個樣本的分類邏輯規(guī)則,最后對于輸入的任何一個新樣本,模型都可以輸出其所屬的類目

需要注意的是,在分類問題的最終輸出結(jié)果里,由于我們將“一個樣例屬于某一個類別”視為一個概率事件,則該樣例屬于所有類目的各自概率就構(gòu)成了該樣例的概率分布,而神經(jīng)網(wǎng)絡(luò)的輸出卻不一定是概率分布,為此我們可以用softmax將結(jié)果轉(zhuǎn)化為概率分布:

softmax輸出概率分布

最后我們使用交叉熵函數(shù),來描述模型輸出概率分布p和真實(shí)概率分布q之間的距離,即量化其分類損失

交叉熵函數(shù)

(2)對于回歸問題:

我們需要事先準(zhǔn)備一組輸入輸出的數(shù)據(jù)樣本集,然后訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)這個樣本的輸入輸出映射法則,最后對于任意一個實(shí)數(shù)R,模型都可以預(yù)測出一個具體的數(shù)值

我們可以用MSE(均方誤差)來描述模型輸出結(jié)果和真實(shí)結(jié)果的距離,即量化其回歸損失

MSE函數(shù)

五、神經(jīng)網(wǎng)絡(luò)的優(yōu)化過程

神經(jīng)網(wǎng)絡(luò)的優(yōu)化步驟可以分為下面兩個階段:

(1)通過前向傳播算法,通過矩陣乘法計(jì)算出輸出值,并將真實(shí)值和輸出值對比得到兩者之間的差距

(2)通過反向傳播算法,計(jì)算損失函數(shù)對模型中每個參數(shù)的梯度,通過梯度下降算法來更新每一個參數(shù)

至此我們可以看到反向傳播算法的藝術(shù)為:

反向計(jì)算出損失函數(shù)對每一層隱藏層的突觸的梯度,并更新優(yōu)化其上一層隱藏層的突觸。使得神經(jīng)網(wǎng)絡(luò)每一次學(xué)習(xí)到的模型都變得更加聰明

六、反向傳播算法的推導(dǎo)

我們先整理出前向傳播算法中第l隱藏層的第i個神經(jīng)元的輸入和輸出為

第l層第i個神經(jīng)元的輸入
第l層第i個神經(jīng)元的輸出

結(jié)合上面兩個式子,可以得到第l層第i個神經(jīng)元的輸入和第l-1層第i的神經(jīng)元的輸出的函數(shù)關(guān)系為

第l層第i個神經(jīng)元的輸入

為了推導(dǎo)方便,我們定義第i個神經(jīng)元的損失函數(shù)為

第i個神經(jīng)元的損失函數(shù)

其中dk(i)表示第i個神經(jīng)元的真實(shí)輸出值,yk(i)表示神經(jīng)網(wǎng)絡(luò)模型計(jì)算出的輸出值

下面推導(dǎo)第i個神經(jīng)元的誤差對第l-1(2\leq l\leq L-1)層第j個神經(jīng)元對第l-2層第i個神經(jīng)元的突觸權(quán)重W^{(l-1)}_{ji}的梯度為:

第l-1層第j個神經(jīng)元的梯度計(jì)算1

上式最后3個偏導(dǎo)數(shù)的意義為

\frac{\partial net^{(l)}_{k}}{\partial f(net^{(l-1)}_{j})} :表示第l層的第k個神經(jīng)元的輸入對第l-1層的第j個神經(jīng)元的輸出的偏導(dǎo)數(shù)

\frac{\partial f(net^{(l-1)}_{j})}{\partial net^{(l-1)}_{j}} :表示第l-1層的第j個神經(jīng)元的輸出對第l-1層的第j個神經(jīng)元的輸入的偏導(dǎo)數(shù)

\frac{\partial net^{(l-1)}_{j}}{\partial W^{(l-1)}_{ji}}:表示第l-1層的第j個神經(jīng)元的輸入對第l-1層第j個神經(jīng)元和第l-2層第i個神經(jīng)元的權(quán)重的偏導(dǎo)數(shù)

分別計(jì)算出這3個偏導(dǎo)數(shù)為

第一個偏導(dǎo)數(shù)
第二個偏導(dǎo)數(shù)
第三個偏導(dǎo)數(shù)

帶入這三個偏導(dǎo)數(shù),得

第l-1層第j個神經(jīng)元的梯度計(jì)算2

同理可以推導(dǎo)出第l-1層第j個神經(jīng)元的偏置項(xiàng)梯度為:

第l-1層第j個神經(jīng)元的偏置項(xiàng)梯度

為了方便整理輸出結(jié)果,我們定義

每一層隱藏層的誤差系數(shù)

可以整理出第l-1層的第j個神經(jīng)元的權(quán)重梯度和偏置項(xiàng)梯度為:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\frac{\partial E(i)}{\partial W^{(l-1)}_{ji}}  = \delta ^{(l-1)}_{j} h^{(l-2)}_{i}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\frac{\partial E(i)}{\partial b^{(l-1)}_{j}}  = \delta ^{(l-1)}_{j}

由數(shù)學(xué)歸納法,可以得到第l層的第j個神經(jīng)元的權(quán)重梯度和偏置項(xiàng)梯度為:

? ??????????????????????????????????????????????????????????????????\frac{\partial E(i)}{\partial W^{(l)}_{ji}}  = \delta ^{(l)}_{j} h^{(l-1)}_{i}

? ??????????????????????????????????????????????????????????????????\frac{\partial E(i)}{\partial b^{(l)}_{j}}  = \delta ^{(l)}_{j}

七、梯度下降算法優(yōu)化

得到每一個隱藏層的連接權(quán)重和偏置項(xiàng)的梯度后,我們利用學(xué)習(xí)率和梯度下降算法更新每一層的連接權(quán)重和偏置項(xiàng)

梯度下降算法

八、衰減學(xué)習(xí)率的設(shè)計(jì)

在配合梯度下降優(yōu)化的過程中,如果學(xué)習(xí)率設(shè)置過大,則容易導(dǎo)致模型過擬合;如果設(shè)置過小,會使得模型優(yōu)化的速度變得很緩慢。為此我們加入衰減因子和學(xué)習(xí)次數(shù)來計(jì)算模型每次學(xué)習(xí)的學(xué)習(xí)率

衰減學(xué)習(xí)率

這樣做的優(yōu)勢是:在初始學(xué)習(xí)階段,學(xué)習(xí)率會較大;隨著學(xué)習(xí)次數(shù)的增加,學(xué)習(xí)率會依次降低

九、案例引出—擬合非線性曲線

案例:求一個神經(jīng)網(wǎng)絡(luò)模型,可以擬合下面曲線

案例擬合非線性曲線
案例曲線

顯然這是一個回歸問題,我們構(gòu)建出案例的神經(jīng)網(wǎng)絡(luò)模型如下:

輸入層規(guī)模:100x1,第一個隱藏層規(guī)模:1x24,第二個隱藏層規(guī)模:24x3,輸出層規(guī)模:3x1

則模型按照前向傳播算法和矩陣乘法規(guī)則,計(jì)算過程如下

案例模型的計(jì)算過程

最終我們得到了100x1的輸出規(guī)模,即完成回歸問題中輸入和輸出的一一映射關(guān)系

十、python編程實(shí)現(xiàn)擬合非線性曲線

前向傳播算法:

前向傳播算法

反向傳播算法:

反向傳播算法

訓(xùn)練BP神經(jīng)網(wǎng)絡(luò):

訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)

十一、結(jié)果分析

模型運(yùn)行結(jié)果如下

模型結(jié)果

從結(jié)果中可以看到,學(xué)習(xí)到模型是一條光滑的曲線來擬合源數(shù)據(jù)點(diǎn),且模型的誤差在下降得越來越緩慢

至此,我們對比《最小二乘法—多項(xiàng)式擬合非線性函數(shù)》,可以總結(jié)出深度學(xué)習(xí)和傳統(tǒng)機(jī)器學(xué)習(xí)的一些特點(diǎn)

(1)機(jī)器學(xué)習(xí)是一種實(shí)現(xiàn)人工智能的方法,它基于不同的具體數(shù)學(xué)算法

(2)深度學(xué)習(xí)是一種實(shí)現(xiàn)機(jī)器學(xué)習(xí)的技術(shù),它基于包含多個隱藏層的神經(jīng)網(wǎng)絡(luò)

案例代碼見:BP神經(jīng)網(wǎng)絡(luò)擬合非線性曲線

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

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

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