李文



關鍵詞:神經網絡;梯度消失;激活函數;BN 層
中圖分類號:TP183 文獻標識碼:A
文章編號:1009-3044(2023)10-0019-03
1 神經元與神經網絡
1.1引言
神經元是人體神經系統的基本組成單位,由細胞體和突觸組成,突觸又分為樹突和軸突兩種,這兩種突觸的形狀和功能大不相同。樹突主要是用來接收外界的信號,所以比較短而且分支多,而軸突則與軸突截然不同,形狀較長而且分支少,主要用途是傳遞信號。人體中大約有上百億個神經元,這些功能和形狀各不相同的神經元共同組成了人體的神經系統。一個神經元可以同時接收其他多個神經元傳來的信息,還能通過突觸將信息傳遞給相鄰的神經元,圖1為人體中神經元的示意圖。
1.2人工神經網絡模型
1.2.1神經元模型
1943年,麥卡洛克和皮茨提出“似腦機器”(mind?like machine)的思想,建立了MP模型,提出了神經元的形式化數學描述和網絡構造方法,開創了人工神經網絡研究的時代。
人工神經網絡是由一個個的神經元連接組成的。圖2為一個神經元模型。該神經元有多個輸入(x1、x2、x3、x4...)和一個輸出(t),同時,每個輸入都有一個權重wi,每個權重各不相同。神經元的作用就是將輸入加權求和,然后再加上偏執量b,最后再經過激活函數,就能夠得到神經元的輸出[1]。數學表達式為:
1.2.2人工神經網絡模型
人工神經網絡與人類神經系統相似,也是由大量神經元組成。其中每個神經元都存在狀態變量ai,神經元i 到神經元j 之間的連接系數為wi。圖3為一個簡單的神經網絡模型。
圖3中的神經網絡共有3層,其中第一層是輸入層,用來為網絡提供數據,第二層被稱作隱藏層,隱藏層的深度是可以改變的,根據隱藏層的深度也可以將神經網絡分為淺層網絡和深度網絡。最后一層是輸出層。在網絡中數據是單向流動的,并且同一層的神經元之間是沒有連接的。如圖3所示,將第i 層的激活值記為a(i),第i 到i+1 層的連接權重記為w(i),激活函數記為f(),第i 層神經元的偏置記為θ(i),則對于圖3中的隱藏層來說,激活值分別為:
3 出現問題及解決方案
神經網絡訓練過程中梯度消失的問題被稱作“梯度彌散”。梯度彌散會導致神經網絡中靠近輸出層的神經元參數更新較快,而靠近輸入層的神經元由于梯度的消失,無法得到更新,參數幾乎和初始值一樣。產生梯度彌散最主要的原因就是模型中用的激活函數是“飽和”函數,如sigmoid函數。為了避免這一問題,可以采用非飽和的函數作為激活函數。比如relu。但是relu在輸入小于0的時候,輸出也為0,造成某些神經元無法被激活,參數無法更新??紤]這些問題之后,決定用改進后的leaky-relu函數來代替relu作為激活函數,這樣既可以解決梯度消失的問題,也可以避免出現在輸入小于0時,某些神經元無法被激活的問題,使所有神經元都能夠參與訓練[5]。
另外,還有一種辦法可以避免梯度彌散,那就是加入BN層。BN層與卷積層和池化層一樣,可以視為單獨的一層,通常放在激活函數前,將進行線性變換前的激活輸入值進行歸一化處理。每一層的輸入隨著深度的增加,其分布也會逐漸偏移,落入激活函數的飽和區內,造成梯度消失,而Bn層能將每一層的激活輸入值變換為均值為0,方差為1的標準分布,避免進入飽和區,同時由于輸入落在激活函數的敏感區域[6],梯度大,所以收斂加快,網絡訓練也能更快完成。
4 實驗過程及結果
實驗采用3 000張貓和狗的圖片作為訓練數據集對模型進行訓練,1 000張圖片作為測試數據集對模型進行識別正確率的計算。采用的cnn網絡模型以AlexNet為基礎,將激活函數依次更換為sigmoid、tanh、relu、leaky-relu函數,模型結構為:
輸入的圖片是大小為227×227的RGB彩色圖像,輸出層一共有兩個單元,分別代表貓和狗兩個類別。
實驗首先將sigmoid、tanh、relu、leaky-relu依次作為激活函數構建模型,然后對模型進行50次訓練,最后用測試數據進行分類,統計分類的正確率,繪制出折線圖。
圖8是由同一模型采用四種不同的激活函數(sig?moid、tanh、relu、leaky-relu)訓練后,對測試數據集進行分類識別的正確率,橫坐標代表的是模型的訓練次數,縱坐標代表的是對測試數據進行分類的正確率。
從圖8中可以看出,用sigmoid函數作為激活函數的模型正確率相較于其他函數來說相差很多,正確率僅有53%左右。不僅如此,模型的訓練過程耗時也過長,并且不易收斂。而用tanh函數的模型的分類正確率則高了很多,最終能達到70%左右。采用relu函數的模型的分類正確率相較于tanh又有所提高,能夠達到72%左右,并且relu函數較為簡單,所以訓練模型的時間也有所降低。而采用leaky-relu的模型的正確率達到了最高,leaky-relu函數作為對relu函數的改進,結合了relu的所有優點,理論上是在各方面都優于relu函數的,并且從圖上也能看出來這一點。采用leaky-relu函數的模型分類正確率高,收斂速度快,在訓練50次后正確率能夠達到74%左右。
加入BN層的模型同樣是以AlexNet為基礎,在卷積層和激活函數之間添加BN層,將進行非線性變換的輸入數據進行歸一化處理,在模型進行50次訓練之后對測試數據進行識別,計算識別的正確率。
圖9是在激活函數sigmoid之前添加BN層的模型對測試數據集圖像進行識別后的正確率,橫坐標代表的是模型的訓練次數,縱坐標代表的是對測試數據進行分類的正確率。
從圖9中可以看出,加入BN層后的模型相較于沒有添加BN層的模型來說,正確率提高了很多,最后能夠到達70%左右,sigmoid函數梯度消失的問題基本得到解決,并且收斂速度也有所提升。
總體來說,想要解決梯度消失問題,可以采用非飽和的激活函數,如leaky-relu,或者在激活函數之前添加BN層做歸一化處理,這樣就能夠有效地解決梯度彌散的問題。