聶文都,蔡錦凡
(西京學(xué)院信息工程學(xué)院,西安710123)
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)從信息處理的角度對(duì)人腦神經(jīng)元進(jìn)行抽象,建立一種簡(jiǎn)單模型,按不同的連接方式組成不同的網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)是一種運(yùn)算模型,由大量的節(jié)點(diǎn)(或稱神經(jīng)元)之間相互聯(lián)接構(gòu)成。每個(gè)節(jié)點(diǎn)代表一種特定的輸出函數(shù),稱為激勵(lì)函數(shù)(Activation Function)[1]。每?jī)蓚€(gè)節(jié)點(diǎn)間的連接都代表一個(gè)對(duì)于通過(guò)該連接信號(hào)的加權(quán)值,稱之為權(quán)重,這相當(dāng)于人工神經(jīng)網(wǎng)絡(luò)的記憶。網(wǎng)絡(luò)的輸出則依網(wǎng)絡(luò)的連接方式,權(quán)重值和激勵(lì)函數(shù)的不同而不同。而網(wǎng)絡(luò)自身通常都是對(duì)自然界某種算法或者函數(shù)的逼近,也可以是對(duì)一種邏輯策略的表達(dá)。
相對(duì)于傳統(tǒng)的線性邏輯回歸算法[2],人工神經(jīng)網(wǎng)絡(luò)具有良好的容錯(cuò)性,泛化能力好,適于擬合復(fù)雜的非線性關(guān)系,應(yīng)用領(lǐng)域廣泛,是當(dāng)前許多工程領(lǐng)域的研究熱點(diǎn)?,F(xiàn)在很多問(wèn)題都是二分類[3-4]問(wèn)題,現(xiàn)在很多都是利用人工神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)而分類問(wèn)題。
神經(jīng)細(xì)胞是構(gòu)成神經(jīng)系統(tǒng)的基本單元,稱之為生物神經(jīng)元[5],簡(jiǎn)稱神經(jīng)元。神經(jīng)元主要由三部分構(gòu)成:①細(xì)胞體;②軸突;③樹(shù)突。生物神經(jīng)元結(jié)構(gòu)如圖1所示。
圖1 生物神經(jīng)元結(jié)構(gòu)
神經(jīng)元的功能特性:①時(shí)空整合功能;②神經(jīng)元的動(dòng)態(tài)極化性;③興奮與抑制狀態(tài);④結(jié)構(gòu)的可塑性;⑤脈沖與電位信號(hào)的轉(zhuǎn)換;⑥突觸延期和不應(yīng)期;⑦學(xué)習(xí)、遺忘和疲勞。
人工神經(jīng)網(wǎng)絡(luò)是由大量處理單元經(jīng)廣泛互連而組成的人工網(wǎng)絡(luò),用來(lái)模擬腦神經(jīng)系統(tǒng)的結(jié)構(gòu)和功能。而這些處理單元我們把它稱作人工神經(jīng)元[6]。人工神經(jīng)元結(jié)構(gòu)如圖2 所示。
圖2 人工神經(jīng)元結(jié)構(gòu)
神經(jīng)網(wǎng)絡(luò)從兩個(gè)方面模擬大腦:
(1)神經(jīng)網(wǎng)絡(luò)獲取的知識(shí)是從外界環(huán)境中學(xué)習(xí)得來(lái)的;
(2)內(nèi)部神經(jīng)元的連接強(qiáng)度,即突觸權(quán)值。用于儲(chǔ)存獲取的知識(shí)。
神經(jīng)網(wǎng)絡(luò)系統(tǒng)由能夠處理人類大腦不同部分之間信息傳遞的由大量神經(jīng)元連接形成的拓?fù)浣Y(jié)構(gòu)組成,依賴于這些龐大的神經(jīng)元數(shù)目和它們之間的聯(lián)系,人類的大腦能夠收到輸入的信息的刺激由分布式并行處理的神經(jīng)元相互連接進(jìn)行非線性映射處理,從而實(shí)現(xiàn)復(fù)雜的信息處理和推理任務(wù)。對(duì)于某個(gè)處理單元(神經(jīng)元)來(lái)說(shuō),假設(shè)來(lái)自其他處理單元(神經(jīng)元)i 的信息為xi,它們與本處理單元的互相作用強(qiáng)度即連接權(quán)值為wi,i=0,1,2,…,n-1,處理單元的內(nèi)部閾值為θ。而處理單元的輸出為:
式中,xi為第i 個(gè)元素的輸入,wi為第i 個(gè)處理單元與本處理單元的互聯(lián)權(quán)重即神經(jīng)元連接權(quán)值。f 稱為激活函數(shù)或作用函數(shù),它決定節(jié)點(diǎn)(神經(jīng)元)的輸出,θ表示隱含層神經(jīng)節(jié)點(diǎn)的閾值。
一個(gè)人工神經(jīng)網(wǎng)絡(luò)由多個(gè)神經(jīng)元結(jié)構(gòu)組成,每一層的神經(jīng)元都擁有輸入和輸出,每一層都是由多個(gè)神經(jīng)元組成。第i-1 層網(wǎng)絡(luò)神經(jīng)元的輸出是第i 層神經(jīng)元的輸入,輸入的數(shù)據(jù)通過(guò)神經(jīng)元上的激活函數(shù)來(lái)控制輸出數(shù)值的大小。該輸出數(shù)值是一個(gè)非線性值,通過(guò)激活函數(shù)得到的數(shù)值,根據(jù)極限值來(lái)判斷是否需要激活該單元。一般多層人工神經(jīng)網(wǎng)絡(luò)由輸入層、輸出層和隱藏層組成。如圖3 所示。
圖3 三層人工神經(jīng)網(wǎng)絡(luò)模型
輸入層(Input Layer)是接受輸入信號(hào)作為輸入層的輸入;輸出層(Output Layer)是信號(hào)在神經(jīng)網(wǎng)絡(luò)中經(jīng)過(guò)神經(jīng)元的傳輸、內(nèi)積、激活后,形成輸出信號(hào)進(jìn)行輸出;隱藏層(Hidden Layer):隱藏層也被稱為隱層,它介于輸入層和輸出層之間,是由大量神經(jīng)元并列組成的網(wǎng)絡(luò)層,通常一個(gè)人工神經(jīng)網(wǎng)絡(luò)可以有多個(gè)隱藏層。
首先給所有的權(quán)重向量W 和偏置b 賦予隨機(jī)值,使用這些隨即生成的權(quán)重參數(shù)值來(lái)預(yù)測(cè)訓(xùn)練中的數(shù)據(jù)樣本。樣本的預(yù)測(cè)值為y^,真實(shí)值為y,現(xiàn)在定義一個(gè)損失函數(shù)[7-8],目標(biāo)是使預(yù)測(cè)值盡可能接近真實(shí)值,損失函數(shù)就是使得神經(jīng)網(wǎng)絡(luò)的損失值和盡可能的小。其基本公式為:
使得模型效果最佳就是如何改變神經(jīng)網(wǎng)絡(luò)中的參數(shù)W 和b,使得損失函數(shù)的值最小。
在訓(xùn)練階段,通過(guò)算法修改神經(jīng)網(wǎng)絡(luò)的權(quán)值向量W 和偏置b,使得損失函數(shù)最小。當(dāng)損失函數(shù)收斂到某個(gè)閾值或者等于零時(shí),停止訓(xùn)練,就可以得到權(quán)值向量W 和偏置b。到此為止,人工神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)中所有的參數(shù)(輸入層、輸出層、隱層的節(jié)點(diǎn)數(shù)、權(quán)值向量W、偏置b)都是已知的,只需要將向量化后的數(shù)據(jù)從人工神經(jīng)網(wǎng)絡(luò)的輸入層開(kāi)始輸入,順著數(shù)據(jù)流動(dòng)的方向在網(wǎng)絡(luò)中進(jìn)行計(jì)算,直到數(shù)據(jù)傳輸?shù)捷敵鰧硬⑦M(jìn)行輸出(一次前行傳播),就完成一次預(yù)測(cè)并得到分類結(jié)果。
假設(shè)函數(shù)L(θ)為損失函數(shù),為了找到損失函數(shù)的最小值,需要沿著與梯度向量相反的方向更新變量θ,這樣可以使梯度減小得最快,直至損失函數(shù)收斂至最小值。該算法稱為梯度下降算法[9-11],其基本公式為:
其中,η∈R 為學(xué)習(xí)率,用于控制梯度下降的幅度(快慢)。在神經(jīng)網(wǎng)絡(luò)中,上式中的變量θ是由神經(jīng)網(wǎng)絡(luò)的參數(shù)所組成的向量θ={w1,w2,…,wn,b1,b2,…,bn}。梯度下降的目標(biāo)就是找到參數(shù)θ*使得神經(jīng)網(wǎng)絡(luò)總損失L最小,從而確定神經(jīng)網(wǎng)絡(luò)中的權(quán)重向量W 和偏置b。梯度下降算法的特點(diǎn)是:越接近目標(biāo)值,變化越小,梯度下降的速度越慢。梯度下降的算法有很多變種形式,主要有以下三個(gè):①批量梯度下降算法(Batch Gradient Descent,BGD);②隨即梯度下降算法(Stochastic Gradient Descent,SGD);③小批量隨機(jī)梯度下降算法(Min-batch SGD)。如圖4 所示,(a)批量梯度下降算法的下降軌跡平滑,經(jīng)過(guò)多次迭代后達(dá)到全局最優(yōu)解處;而(b)小批量隨機(jī)梯度下降算法在下降過(guò)程中持續(xù)的小幅振蕩,但每次迭代的數(shù)據(jù)量少,能夠更快地找到全局最優(yōu)解。因此小批量隨機(jī)梯度下降算法在實(shí)際工程中使用的頻率更高。
圖4 BGD 和Min-batch SGD 梯度下降示意圖
向前傳播(Feed Forward)算法在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和預(yù)測(cè)階段都會(huì)被反復(fù)用到,是神經(jīng)網(wǎng)絡(luò)中最常見(jiàn)的算法。其計(jì)算方式簡(jiǎn)單,只需要根據(jù)神經(jīng)網(wǎng)絡(luò)模型的數(shù)據(jù)流動(dòng)方向?qū)斎氲臄?shù)據(jù)進(jìn)行計(jì)算,最終得到輸出結(jié)果。圖5 所示是一個(gè)簡(jiǎn)單的人工神經(jīng)網(wǎng)絡(luò)模型[12],其輸入層有兩個(gè)節(jié)點(diǎn),隱層、輸出層均有3 個(gè)節(jié)點(diǎn)??梢酝ㄟ^(guò)矩陣的方式對(duì)向前傳播算法進(jìn)行解析。假設(shè)zi(l)為第l 層網(wǎng)絡(luò)第i 個(gè)神經(jīng)元到第l+1 層網(wǎng)絡(luò)中的第j 個(gè)神經(jīng)元的連接,那么根據(jù)神經(jīng)元基本公式有:
神經(jīng)網(wǎng)絡(luò)的參數(shù)進(jìn)行量化[9],表示為:
因此,單層神經(jīng)網(wǎng)絡(luò)的向前傳播算法可以使用矩陣表達(dá)為:
其中,a(l)為第l 層網(wǎng)絡(luò)的輸出矩陣,f 為激活函數(shù)。
圖5 單隱藏層神經(jīng)網(wǎng)絡(luò)的向前傳播
反向傳播算法[13-15]的數(shù)學(xué)定義是根據(jù)微積分里面的一些數(shù)學(xué)法則來(lái)闡述的。假設(shè)神經(jīng)網(wǎng)絡(luò)模型的參數(shù)為θ={w1,w2,…,wn,b1,b2,…,bn},那么反向傳播算法的精髓是:通過(guò)鏈?zhǔn)角髮?dǎo)法則,求出網(wǎng)絡(luò)模型中的每個(gè)參數(shù)的偏導(dǎo)數(shù)。
反向傳播算法中最基本的四個(gè)方程如下:
BP1 輸出層誤差:
BP2 第l 層誤差:
BP3 損失函數(shù)關(guān)于偏置的偏導(dǎo):
BP4 損失函數(shù)關(guān)于權(quán)值的偏導(dǎo):
其中,定義第l 層的第i 個(gè)神經(jīng)元的誤差為L(zhǎng) 對(duì)z的偏導(dǎo)。▽a為在ail處的梯度,為f 激活函數(shù),w 為權(quán)值,b 為偏置。反向傳播算法流程是根據(jù)四個(gè)基本方程進(jìn)行總結(jié)的,具體流程如圖6 所示。
圖6 反向傳播算法流程
基于華為Matebook-X 筆記本電腦,使用Python 3.6 作為編程開(kāi)發(fā)語(yǔ)言,系統(tǒng)的操作環(huán)境為Windows10,硬件開(kāi)發(fā)環(huán)境為Intel i5 處理器,8GB 運(yùn)行內(nèi)存,CPU 為 Intel Core i5-7200U CPU @2.50GHz 2.71GHz,使用PyCharm 作為神經(jīng)網(wǎng)絡(luò)開(kāi)發(fā)框架。此次實(shí)驗(yàn)是為了實(shí)現(xiàn)醫(yī)療數(shù)據(jù)的二分類,所用到的數(shù)據(jù)為球菌數(shù)據(jù),數(shù)據(jù)源醫(yī)療公共數(shù)據(jù)集。并用了兩種方法實(shí)現(xiàn)此二分類,一種人工神經(jīng)網(wǎng)絡(luò),一種線性邏輯回歸。
建立一個(gè)3 層人工神經(jīng)網(wǎng)絡(luò)模型,輸入層中的神經(jīng)元節(jié)點(diǎn)數(shù)目由輸入數(shù)據(jù)的維數(shù)決定,本實(shí)驗(yàn)中有鏈球菌x1,因此輸入維度是2,輸入有兩個(gè)神經(jīng)元節(jié)點(diǎn)組成。同理,輸出層中的神經(jīng)元節(jié)點(diǎn)數(shù)由輸出的分類維度決定,本實(shí)驗(yàn)中為病原體I(0)和病原體II(1),因此輸出層有兩個(gè)神經(jīng)元組成。最后可以將此次實(shí)驗(yàn)的人工神經(jīng)網(wǎng)絡(luò)定義為如圖7 所示。
圖7 二分類3層人工神經(jīng)網(wǎng)絡(luò)
本實(shí)驗(yàn)中用到了3 個(gè)隱藏層,根據(jù)實(shí)際情況,我們可以增加隱藏層數(shù)和每一個(gè)隱藏層的節(jié)點(diǎn)數(shù),隱藏層越多,隱藏層節(jié)點(diǎn)越多,就能夠處理更加復(fù)雜的數(shù)據(jù)模型,但是代價(jià)開(kāi)銷大:
(1)隱藏層越多,意味著網(wǎng)絡(luò)模型越大,參數(shù)越多,占用GPU 顯存越多;
(2)參數(shù)量越多,數(shù)據(jù)過(guò)擬合的可能性越大,網(wǎng)絡(luò)越有可能不穩(wěn)定,預(yù)測(cè)效果反而下降。
實(shí)驗(yàn)結(jié)果如圖8、圖9 所示。
圖8 ANN二分類結(jié)果
圖9 線性邏輯回歸二分類結(jié)果
實(shí)驗(yàn)結(jié)果分析:
圖8 ANN 二分類實(shí)驗(yàn)結(jié)果中,錯(cuò)誤分類的點(diǎn)較少,分類效果較好;圖9 線性邏輯回歸二分類實(shí)驗(yàn)結(jié)果中,錯(cuò)誤分類較多,分類效果較差。但是ANN 二分類仍然有一些錯(cuò)誤分類的點(diǎn),可能是隱藏層神經(jīng)元節(jié)點(diǎn)數(shù)不夠合理,可以適當(dāng)增加一點(diǎn)隱藏層神經(jīng)元節(jié)點(diǎn)數(shù)。但是要注意增加節(jié)點(diǎn)數(shù)就會(huì)使得過(guò)擬合的可能性越高,經(jīng)過(guò)代碼調(diào)試得知,當(dāng)隱藏層數(shù)達(dá)到50 層時(shí),過(guò)擬合現(xiàn)象就會(huì)很嚴(yán)重。本次實(shí)驗(yàn),兩種方法上對(duì)比分類結(jié)果可以看出,ANN 的二分類效果要比線性邏輯回歸的二分類效果更好。
本文通過(guò)對(duì)人工神經(jīng)網(wǎng)絡(luò)核心算法的介紹,與傳統(tǒng)的線性邏輯回歸算法進(jìn)行對(duì)比,人工神經(jīng)網(wǎng)絡(luò)在處理二分類問(wèn)題上更優(yōu)于線性邏輯回歸算法。雖然人工神經(jīng)網(wǎng)絡(luò)應(yīng)用非常廣泛,也相比傳統(tǒng)的算法在二分類問(wèn)題上更加精確,但是人工神經(jīng)網(wǎng)絡(luò)有關(guān)參數(shù)的計(jì)算量大,需要對(duì)數(shù)據(jù)和參數(shù)進(jìn)行優(yōu)化。對(duì)未來(lái)人工神經(jīng)網(wǎng)絡(luò)的發(fā)展和機(jī)器人在處理二分類問(wèn)題上有著一定的幫助。