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