本章涉及知識點(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é)果矩陣

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

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

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

表示:第l-1層的第j個神經(jīng)元和第l層的第i個神經(jīng)元的連接權(quán)重,即兩個神經(jīng)元之間的突觸
表示:第l層第i個神經(jīng)元的偏置項(xiàng)
表示:第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)元的輸出為:

其中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ù)

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

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

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

(3)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)化為概率分布:

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

(2)對于回歸問題:
我們需要事先準(zhǔn)備一組輸入輸出的數(shù)據(jù)樣本集,然后訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)這個樣本的輸入輸出映射法則,最后對于任意一個實(shí)數(shù)R,模型都可以預(yù)測出一個具體的數(shù)值
我們可以用MSE(均方誤差)來描述模型輸出結(jié)果和真實(shí)結(jié)果的距離,即量化其回歸損失

五、神經(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)元的輸入和輸出為


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

為了推導(dǎo)方便,我們定義第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()層第j個神經(jīng)元對第l-2層第i個神經(jīng)元的突觸權(quán)重
的梯度為:

上式最后3個偏導(dǎo)數(shù)的意義為
:表示第l層的第k個神經(jīng)元的輸入對第l-1層的第j個神經(jīng)元的輸出的偏導(dǎo)數(shù)
:表示第l-1層的第j個神經(jīng)元的輸出對第l-1層的第j個神經(jīng)元的輸入的偏導(dǎo)數(shù)
:表示第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)出第l-1層第j個神經(jīng)元的偏置項(xiàng)梯度為:

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

可以整理出第l-1層的第j個神經(jīng)元的權(quán)重梯度和偏置項(xiàng)梯度為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
由數(shù)學(xué)歸納法,可以得到第l層的第j個神經(jīng)元的權(quán)重梯度和偏置項(xiàng)梯度為:
? ??????????????????????????????????????????????????????????????????
? ??????????????????????????????????????????????????????????????????
七、梯度下降算法優(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í)率

這樣做的優(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ì)算過程如下

最終我們得到了100x1的輸出規(guī)模,即完成回歸問題中輸入和輸出的一一映射關(guān)系
十、python編程實(shí)現(xiàn)擬合非線性曲線
前向傳播算法:

反向傳播算法:

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

十一、結(jié)果分析
模型運(yùn)行結(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ò)