一、神經(jīng)網(wǎng)絡(luò)介紹(Neural network)
? ? ? ??神經(jīng)網(wǎng)絡(luò)是一種人類由于受到生物神經(jīng)細(xì)胞結(jié)構(gòu)啟發(fā)而研究出的一種算法體系。

????????經(jīng)典的神經(jīng)網(wǎng)絡(luò)。這是一個(gè)包含三個(gè)層次的神經(jīng)網(wǎng)絡(luò)。我們稱圖中的圓圈為神經(jīng)元,左邊三個(gè)神經(jīng)元組成的一列為輸入層,中間神經(jīng)元列為隱藏層,右邊神經(jīng)元列為輸出層,神經(jīng)元之間的箭頭為權(quán)重(或參數(shù))。權(quán)重具體的值需要通過神經(jīng)網(wǎng)絡(luò)的訓(xùn)練才能獲得。
? ? ? ?我們實(shí)際生活中的學(xué)習(xí)體現(xiàn)在大腦中就是一系列神經(jīng)網(wǎng)絡(luò)回路的建立與強(qiáng)化,多次重復(fù)的學(xué)習(xí)能讓回路變得更加粗壯,使得信號(hào)的傳遞速度加快,最后對(duì)外表現(xiàn)為“深刻”的記憶。人工神經(jīng)網(wǎng)絡(luò)的訓(xùn)練也借鑒于此,如果某種映射關(guān)系出現(xiàn)很多次,那么在訓(xùn)練過程中就相應(yīng)調(diào)高其權(quán)重。
1、感知器(單層神經(jīng)網(wǎng)絡(luò)):
感知器是一種二元分類器,它是神經(jīng)網(wǎng)絡(luò)的基石。感知器是對(duì)神經(jīng)細(xì)胞的模擬:

????????一個(gè)神經(jīng)元通常具有多個(gè)樹突 ,主要用來接受傳入信息,而軸突只有一條,軸突尾端有許多軸突末梢,可以給其他多個(gè)神經(jīng)元傳遞信息。軸突末梢跟其他神經(jīng)元的樹突產(chǎn)生連接,從而傳遞信號(hào)。

?????????神經(jīng)元是計(jì)算單元,相當(dāng)于神經(jīng)元細(xì)胞的細(xì)胞核,利用輸入的數(shù)據(jù)進(jìn)行計(jì)算,然后輸出,一般由一個(gè)線性計(jì)算部分和一個(gè)非線性計(jì)算部分組成;輸入層和輸出層實(shí)現(xiàn)數(shù)據(jù)的輸入輸出,相當(dāng)于細(xì)胞的樹突和軸突末梢;隱藏層指既不是輸入也不是輸出的神經(jīng)元層,一個(gè)神經(jīng)網(wǎng)絡(luò)可以有很多個(gè)隱藏層。

????????輸入以向量的形式表示x=(x0,x1, x2),你可以把它們理解為不同的特征維度,其中的x0是偏置單元(bias unit),相當(dāng)于線性回歸中的常數(shù)項(xiàng)。在經(jīng)過“神經(jīng)元”(激活函數(shù))的計(jì)算后,感知器會(huì)輸出一個(gè)大于0或小于0的數(shù)。箭頭上的數(shù)字代表每個(gè)特征的權(quán)量(weights),相當(dāng)于線性回歸模型的參數(shù),是收集信息的神經(jīng)突觸。

總結(jié):?jiǎn)螌拥纳窠?jīng)網(wǎng)絡(luò)其實(shí)就是一個(gè)邏輯回歸函數(shù)。


2、多層神經(jīng)網(wǎng)絡(luò)
????????單層感知器雖然可以建立與門、或門、非門等,但無法建立更為復(fù)雜的異或門(XOR),即兩個(gè)輸入相同時(shí)輸出1,否則輸出0。
????????為了更為直觀地理解這個(gè)問題,我們可以看下圖:

????????模型有兩個(gè)輸入(input1和input2),我們可以線性地區(qū)分或門的兩類情況:即同時(shí)為0時(shí)在左下角,其它情況在右上角;與門的情況也可以線性地區(qū)分,即輸出同時(shí)為1時(shí)在右上角,其它情況在左下角。但異或門呢?這種情況是無法作出線性區(qū)分的,也就是說,單層感知器無法實(shí)現(xiàn)異或門。
? ??????我們?cè)谳斎雽雍洼敵鰧又g加入兩個(gè)單元的隱藏層:對(duì)于隱藏層的a_1單元(上標(biāo)2代表這是第2層)來說,它實(shí)際上是且門(都為1時(shí)才輸出1);對(duì)a_2單元來說,它的邏輯是(not x_1) and (not x_2),即同時(shí)為0時(shí)才輸出1。而從隱藏層到輸出層,是邏輯或。如下圖所示:

用神經(jīng)網(wǎng)絡(luò)如何實(shí)現(xiàn)異或門?

?因?yàn)樯厦娓兄鞯募せ詈瘮?shù)是線性函數(shù)。這種情況下,神經(jīng)網(wǎng)絡(luò)的輸出也只是輸入的某種線性函數(shù),只不過是通過網(wǎng)絡(luò)的形式來進(jìn)行加權(quán)。線性函數(shù)的線性組合仍然是線性函數(shù)。也就是說,即便是多層的感知器,激活函數(shù)為線性時(shí)也無法實(shí)現(xiàn)輸入00和輸入11時(shí)的輸出比輸入01和10時(shí)大,即非線性。
把激活函數(shù)換為Sigmoid函數(shù):

總結(jié):?多層神經(jīng)網(wǎng)絡(luò)其實(shí)就是一組神經(jīng)元連接在一起的集合。
????????神經(jīng)網(wǎng)絡(luò)的第一層是輸入層,值為xi,最后一層是輸出層,如果作為分類算法訓(xùn)練則有多少個(gè)類別就應(yīng)該有多少個(gè)對(duì)應(yīng)的輸出單元,對(duì)應(yīng)的輸出單元被激活代表著分類的結(jié)果。隱藏層可以有多層,每層可以有多個(gè)單元,規(guī)模越大訓(xùn)練的模型越復(fù)雜。而對(duì)于隱藏層中的每個(gè)單元本身都是一個(gè)邏輯回歸的過程,也就是說每個(gè)隱藏單元都訓(xùn)練出了一個(gè)比前一層更加復(fù)雜的特征,這樣一層接一層我們就可以訓(xùn)練出越來越復(fù)雜的特征,直到得到結(jié)果。一般憑經(jīng)驗(yàn)來確定隱藏層到底應(yīng)該有多少個(gè)節(jié)點(diǎn),在測(cè)試的過程中也可以不斷調(diào)整節(jié)點(diǎn)數(shù)以取得最佳效果。

二、為什么需要神經(jīng)網(wǎng)絡(luò)
????????首先,神經(jīng)網(wǎng)絡(luò)應(yīng)用在分類問題中效果很好。 工業(yè)界中分類問題居多。LR或者linear SVM更適用線性分割。如果數(shù)據(jù)非線性可分(現(xiàn)實(shí)生活中多是非線性的),LR通常需要靠特征工程做特征映射,增加高斯項(xiàng)或者組合項(xiàng);SVM需要選擇核。 而增加高斯項(xiàng)、組合項(xiàng)會(huì)產(chǎn)生很多沒有用的維度,增加計(jì)算量。GBDT可以使用弱的線性分類器組合成強(qiáng)分類器,但維度很高時(shí)效果可能并不好。
? ??????從邏輯回歸看,單層感知器只能解決線性問題。要解決非線性問題,需要引入多層感知器(加入隱層)。

三、神經(jīng)網(wǎng)絡(luò)的發(fā)展歷程

????????從單層神經(jīng)網(wǎng)絡(luò)(感知器)開始,到包含一個(gè)隱藏層的兩層神經(jīng)網(wǎng)絡(luò),再到多層的深度神經(jīng)網(wǎng)絡(luò),一共有三次興起過程。神經(jīng)網(wǎng)絡(luò)為什么能這么火熱?簡(jiǎn)而言之,就是其學(xué)習(xí)效果的強(qiáng)大。隨著神經(jīng)網(wǎng)絡(luò)的發(fā)展,其表示性能越來越強(qiáng)。
從單層神經(jīng)網(wǎng)絡(luò),到兩層神經(jīng)網(wǎng)絡(luò),再到多層神經(jīng)網(wǎng)絡(luò),下圖說明了,隨著網(wǎng)絡(luò)層數(shù)的增加,以及激活函數(shù)的調(diào)整,神經(jīng)網(wǎng)絡(luò)所能擬合的決策分界平面的能力。

快速發(fā)展的外因:更強(qiáng)的計(jì)算性能,更多的數(shù)據(jù),以及更好的訓(xùn)練方法。

四、前向傳播
????????在已經(jīng)訓(xùn)練好權(quán)值的神經(jīng)網(wǎng)絡(luò)上,預(yù)測(cè)的工作是通過前向傳播來實(shí)現(xiàn)的,所謂的“前向”就是從輸入層到輸出層的方向。整個(gè)傳播過程就是沿著神經(jīng)網(wǎng)絡(luò)的方向在每個(gè)神經(jīng)元上做邏輯回歸,不斷訓(xùn)練出更加復(fù)雜的特征,最后得到輸出。以下圖的神經(jīng)網(wǎng)絡(luò)為例:


五、代價(jià)函數(shù)與正則化


六、后向傳播(bp算法)

????????BP算法是一種計(jì)算偏導(dǎo)數(shù)的有效方法,它的基本原理是:利用前向傳播最后輸出的結(jié)果來計(jì)算誤差的偏導(dǎo)數(shù),再用這個(gè)偏導(dǎo)數(shù)和前面的隱藏層進(jìn)行加權(quán)求和,如此一層一層的向前傳下去,直到輸入層(不計(jì)算輸入層),最后利用每個(gè)節(jié)點(diǎn)求出的偏導(dǎo)數(shù)來更新權(quán)重。
????????BP的思想就是:利用輸出后的誤差來估計(jì)輸出層前一層的誤差,再用這層誤差來估計(jì)更前一層誤差,如此獲取所有各層誤差估計(jì)。這里的誤差估計(jì)可以理解為某種偏導(dǎo)數(shù),我們就是根據(jù)這種偏導(dǎo)數(shù)來調(diào)整各層的連接權(quán)值,再用調(diào)整后的連接權(quán)值重新計(jì)算輸出誤差。直到輸出的誤差達(dá)到符合的要求或者迭代次數(shù)溢出設(shè)定值。
BP網(wǎng)絡(luò)的數(shù)學(xué)原理:



激活函數(shù)的求導(dǎo):


????????用什么方法最小化L?用隨機(jī)梯度下降。也就是對(duì)每個(gè)訓(xùn)練樣本都使權(quán)重往其負(fù)梯度方向變化?,F(xiàn)在的任務(wù)就是求L對(duì)連接權(quán)重w的梯度。







直觀的BP神經(jīng)網(wǎng)絡(luò)的工作過程總結(jié)如下:

實(shí)例:


學(xué)習(xí)率是一個(gè)預(yù)先設(shè)置好的參數(shù),用于控制每次更新的幅度。??
此后,對(duì)全部數(shù)據(jù)都反復(fù)進(jìn)行這樣的計(jì)算,直到輸出的誤差達(dá)到一個(gè)很小的值為止。







????????這里介紹的是計(jì)算完一條記錄,就馬上更新權(quán)重,以后每計(jì)算完一條都即時(shí)更新權(quán)重。實(shí)際上批量更新的效果會(huì)更好,方法是在不更新權(quán)重的情況下,把記錄集的每條記錄都算過一遍,把要更新的增值全部累加起來求平均值,然后利用這個(gè)平均值來更新一次權(quán)重,然后利用更新后的權(quán)重進(jìn)行下一輪的計(jì)算,這種方法叫批量梯度下降(Batch Gradient Descent)。
七、隨機(jī)初始化權(quán)重參數(shù)
????????在神經(jīng)網(wǎng)絡(luò)中訓(xùn)練初始化時(shí),要特別注意不能使Θ中的值都相同,這樣會(huì)使每一層的神經(jīng)元都訓(xùn)練出完全相同的特征,神經(jīng)網(wǎng)絡(luò)就完全無法工作了。因此,在訓(xùn)練開始前,應(yīng)該對(duì)Θ進(jìn)行隨機(jī)的初始化。
? ? ? ? 對(duì)每一個(gè)Θ值(權(quán)重參數(shù))隨機(jī)初始化為一個(gè)[ -ε , ε?]范圍的值:

八、梯度檢測(cè)

當(dāng)Θ為實(shí)數(shù)時(shí):[ J(Θ+ε)- J(Θ - ε)] / 2 給出圖像在改點(diǎn)的導(dǎo)數(shù)的近似值。
當(dāng)Θ是一個(gè)n維向量時(shí):

????????反向傳播是計(jì)算代價(jià)函數(shù)關(guān)于所有參數(shù)的導(dǎo)數(shù)或偏導(dǎo)數(shù)的一種有效方法。
????????用梯度檢測(cè)得到的導(dǎo)數(shù)值與反向傳播所計(jì)算出的導(dǎo)數(shù)值進(jìn)行比較,如果一樣或者數(shù)值相近,就可以確定反向傳播的實(shí)現(xiàn)是正確的。
總結(jié):
神經(jīng)網(wǎng)絡(luò)的整個(gè)過程:
1、選擇網(wǎng)絡(luò)架構(gòu):多少個(gè)隱藏層(默認(rèn)一個(gè)最合理),每層多少個(gè)隱藏單元(越多越好)
2、構(gòu)建網(wǎng)絡(luò),隨機(jī)初始化權(quán)重參數(shù)
3、計(jì)算出代價(jià)函數(shù)(損失函數(shù))
4、反向傳播計(jì)算出代價(jià)函數(shù)J(Θ)關(guān)于所有參數(shù)的導(dǎo)數(shù)或偏導(dǎo)數(shù)
5、梯度檢測(cè)方法計(jì)算出導(dǎo)數(shù)值,把反向傳播計(jì)算得到的導(dǎo)數(shù)值與其進(jìn)行比較,看是否相等或相近。
6、比較后,值相近,以后停用梯度檢測(cè)
7、用最優(yōu)化算法,如梯度下降算法來最小化J(Θ)
參考:
神經(jīng)網(wǎng)絡(luò)淺講:從神經(jīng)元到深度學(xué)習(xí)
BP神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)原理及其算法實(shí)現(xiàn)
【深度學(xué)習(xí)】神經(jīng)網(wǎng)絡(luò)入門(最通俗的理解神經(jīng)網(wǎng)絡(luò))