蔣正鋒,廖群麗
(1.廣西民族師范學(xué)院數(shù)理與電子信息工程學(xué)院,崇左 532200;2.廣西理工職業(yè)技術(shù)學(xué)院電子工程與智能化學(xué)院,崇左 532200)
近年來,隨著計(jì)算機(jī)技術(shù)的發(fā)展,深度學(xué)習(xí)(deep learning)在計(jì)算機(jī)視覺、自然語言處理和語音識(shí)別等多個(gè)領(lǐng)域[1]都已取得顯著的效果,表現(xiàn)出極大的應(yīng)用價(jià)值,現(xiàn)已成為人工智能的一個(gè)研究熱點(diǎn),并開創(chuàng)了神經(jīng)網(wǎng)絡(luò)發(fā)展的新紀(jì)元。
神經(jīng)網(wǎng)絡(luò)起源于1943年的McCulloch-Pitts(MCP)模型,是人工神經(jīng)模型的最早的原型[2]。1985年感知器算法被提出來,使得MCP模型能對多維數(shù)據(jù)進(jìn)行二分類處理,隨后反向傳播算法的提出為現(xiàn)代神經(jīng)網(wǎng)絡(luò)的快速發(fā)展打開了大門。20世紀(jì)80年代,啟發(fā)卷積神經(jīng)網(wǎng)絡(luò)[3]和遞歸神經(jīng)網(wǎng)絡(luò)[4]相繼被提出,而20世紀(jì)90年代,LeNet[5]應(yīng)用于數(shù)字識(shí)別,取得了不錯(cuò)的效果。2006年,因深度神經(jīng)網(wǎng)絡(luò)理論在機(jī)器學(xué)習(xí)中取得初步成功的應(yīng)用,Hinton等人提出了深度學(xué)習(xí)[6]的概念,引起了人們的關(guān)注。經(jīng)過多年的發(fā)展,從單層網(wǎng)絡(luò)逐漸發(fā)展到多層網(wǎng)絡(luò)[7-8],而多層的神經(jīng)網(wǎng)絡(luò)可能包含上百層以及上百兆的訓(xùn)練參數(shù)。2012年提出的深度學(xué)習(xí)架構(gòu)AlexNet摘取了2012年視覺領(lǐng)域競賽ILSVRC[9](imageNet large-scale visual recogni?tion challenge)的桂冠,Top-5的錯(cuò)誤率降低到15.3%[10],其效果大幅度領(lǐng)先傳統(tǒng)的方法。隨后的幾年,識(shí)別錯(cuò)誤率不斷被新提出更深層的卷積神經(jīng)網(wǎng)絡(luò)刷新,在2014年,VGGNet取得了89.3%的平均正確率[11],2016年He等人提出的ResNet,將分類的錯(cuò)誤率降低到3.57%[12],而2017年由胡杰等人提出的SENet錯(cuò)誤識(shí)別率只有2.25%。各種不同的深度神經(jīng)網(wǎng)絡(luò)模型的提出,促進(jìn)了深度學(xué)習(xí)的發(fā)展。
深度學(xué)習(xí)的快速發(fā)展,離不開設(shè)計(jì)更加優(yōu)秀的深度學(xué)習(xí)模型,人們也逐漸意識(shí)到深度學(xué)習(xí)模型的結(jié)構(gòu)是深度學(xué)習(xí)研究的重中之重。深度學(xué)習(xí)的本質(zhì)就是構(gòu)建具有多個(gè)隱層的人工神經(jīng)網(wǎng)絡(luò)模型,人工神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)不管淺層還是深層主要是根據(jù)實(shí)驗(yàn)和經(jīng)驗(yàn)來設(shè)計(jì),但目前還沒有一套具體理論可遵循。本文基于TensorFlow框架,采用一種先簡單后復(fù)雜,多參數(shù)融合逐步優(yōu)化的神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)方法,為后續(xù)設(shè)計(jì)更復(fù)雜的深度神經(jīng)網(wǎng)絡(luò)提供了思路。
Google公司在計(jì)算機(jī)相關(guān)的很多領(lǐng)域都有卓越的表現(xiàn),人工智能領(lǐng)域也不例外。TensforFlow是Google公司2015年開發(fā)的基于DistBelief的一款優(yōu)秀開源的深度學(xué)習(xí)框架,設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)代碼簡潔,得到越來越多開發(fā)者的青睞。TensFlow不是全部由Python編寫,很多底層代碼是由C++或CUDA編寫的,它提供Python和C++的編程接口,對線程和隊(duì)列的基本運(yùn)算能從底層來實(shí)現(xiàn),也能較方便調(diào)用到硬件資源。用戶借助Tensor?Flow靈活的架構(gòu),可部署到多種平臺(tái)(CPU、GPU、TPU)進(jìn)行分布式計(jì)算,為大數(shù)據(jù)分析提供支持。TensorFlow的跨平臺(tái)性也好,在各種設(shè)備(桌面設(shè)備、服務(wù)器集群、移動(dòng)設(shè)備、邊緣設(shè)備)下工作??傊?,TensorFlow為計(jì)算機(jī)視覺、自然語言處理和語音識(shí)別等機(jī)器學(xué)習(xí)和深度學(xué)習(xí)提供了強(qiáng)有力的支持,并且其靈活性的數(shù)值計(jì)算核心也可廣泛應(yīng)用于其他科學(xué)領(lǐng)域。
構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)模型,沒有具體理論可遵,但與待解決的具體問題有關(guān)。以TensorFlow的經(jīng)典實(shí)戰(zhàn)項(xiàng)目MNIST手寫數(shù)字識(shí)別為例,探索如何逐步設(shè)計(jì)一個(gè)滿足要求的多參數(shù)融合的神經(jīng)網(wǎng)絡(luò)模型。設(shè)計(jì)任意一個(gè)淺度或深度的神經(jīng)網(wǎng)絡(luò),一般來說按如下的4個(gè)步驟:①數(shù)據(jù)預(yù)處理。②構(gòu)建符合要求的初步模型。③選擇激活函數(shù)、損失函數(shù)和優(yōu)化器。④訓(xùn)練模型和評價(jià)模型。
本文將詳細(xì)討論整個(gè)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)步驟中的各個(gè)環(huán)節(jié)。
為了在訓(xùn)練中更加容易提取數(shù)據(jù)的相關(guān)信息,需要對數(shù)據(jù)進(jìn)行預(yù)先處理。數(shù)據(jù)預(yù)處理包括歸一化技術(shù)、非線性變換、特征提取、離散輸入、目標(biāo)編碼、缺失數(shù)據(jù)的處理和數(shù)據(jù)集的劃分等。數(shù)據(jù)集的劃分根據(jù)評估模型方法驗(yàn)證和交叉驗(yàn)證來劃分。模型方法為驗(yàn)證時(shí),選擇數(shù)據(jù)集后,一般會(huì)把數(shù)據(jù)劃分為三個(gè)子集:訓(xùn)練集、驗(yàn)證集和測試集。訓(xùn)練集的大小占整個(gè)數(shù)據(jù)集的70%左右,用于構(gòu)建預(yù)測模型,驗(yàn)證集占整個(gè)數(shù)據(jù)集的15%左右,評估訓(xùn)練階段模型的性能,測試集也占整個(gè)數(shù)據(jù)集的15%左右,評估模型未來可能性的性能。
選擇MNIST數(shù)據(jù)集,它是著名的手寫體數(shù)字機(jī)器視覺數(shù)據(jù)集。兩條途徑獲得MNIST數(shù)據(jù)集,一是從Yann LeCun教授的官網(wǎng)上下載,二是使用TensorFlow的官方案例,而MNIST數(shù)據(jù)集包含在TensorFlow中。MNIST數(shù)據(jù)集有60000個(gè)樣本,其中55000個(gè)樣本為訓(xùn)練集,另5000個(gè)樣本為驗(yàn)證集的一部分,驗(yàn)證集總共10000個(gè)樣本,還有5000個(gè)是從訓(xùn)練集中隨機(jī)選擇的,測試集樣本數(shù)為10000。整個(gè)數(shù)據(jù)集的劃分如表1所示。
在數(shù)據(jù)集MNIST中,每個(gè)樣本包含了灰度值信息和這個(gè)樣本對應(yīng)的標(biāo)簽,每張圖片樣本都是28×28像素的手寫數(shù)字組成,為了簡化模型,通過降維處理,二維28×28的圖片轉(zhuǎn)化為有784個(gè)特征的一維向量,則訓(xùn)練集的特征為一個(gè)[55000,784]的張量,測試集和驗(yàn)證集的特征分別為[10000,784]和[10000,784]的張量。訓(xùn)練數(shù)據(jù)集對應(yīng)的標(biāo)簽是一個(gè)[55000,10]的張量,其中第55000表示訓(xùn)練集中有55000張樣本圖片,10表示訓(xùn)練集中每張圖片樣本的標(biāo)簽是一個(gè)包含10個(gè)數(shù)字種類的one_hot編碼。在實(shí)驗(yàn)中,用到訓(xùn)練集和測試集,訓(xùn)練集對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,測試集驗(yàn)證設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)效果。
神經(jīng)網(wǎng)絡(luò)中輸入層神經(jīng)元的個(gè)數(shù)與數(shù)據(jù)集中樣本的維度有關(guān),而輸出層神經(jīng)元的個(gè)數(shù)與分類類別數(shù)量有關(guān)。MNIST數(shù)據(jù)集中樣本是28×28二維的,轉(zhuǎn)成一維向量有784個(gè)灰度值,決定神經(jīng)網(wǎng)絡(luò)模型的輸入層中神經(jīng)元的個(gè)數(shù)為784。MNIST數(shù)據(jù)集是手寫體數(shù)字是0到9共10個(gè)分類,所以輸出層神經(jīng)元的個(gè)數(shù)為10。先設(shè)計(jì)一個(gè)沒有隱含層的簡單神經(jīng)網(wǎng)絡(luò),即只有輸入層和輸出層,如圖1所示。
圖1 沒有隱含層的簡單神經(jīng)網(wǎng)絡(luò)
無隱層神經(jīng)網(wǎng)絡(luò)輸入層和輸出層的神經(jīng)元數(shù)量確定后,通過實(shí)驗(yàn)優(yōu)化多參數(shù)融合的簡單神經(jīng)網(wǎng)絡(luò),然后在沒有隱含層神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上逐漸增加隱含層,隱層的層數(shù)以及每層神經(jīng)元的個(gè)數(shù)通過多參數(shù)調(diào)優(yōu)確定。
2.3.1 激活函數(shù)
激活函數(shù)是使神經(jīng)網(wǎng)絡(luò)具備了分層的非線性映射學(xué)習(xí)的能力,幾乎可以逼近任意的函數(shù),能解決更為復(fù)雜的問題。早期神經(jīng)網(wǎng)絡(luò)的激活函數(shù)有sigmoid函數(shù)或tanh函數(shù),近年來在深度學(xué)習(xí)網(wǎng)絡(luò)中應(yīng)用relu函數(shù)比較多。如何選擇激活函數(shù),還沒有一個(gè)確定的方法,主要還是憑一些經(jīng)驗(yàn)。幾個(gè)常用的激活函數(shù)如下:
(1)sigmoid函數(shù)。sigmoid是常用的非線性的一種激活函數(shù),其定義如式(1)所示:
把輸入z映射到0到1之間的范圍,但在深度神經(jīng)網(wǎng)絡(luò)中sigmoid激活函數(shù)會(huì)導(dǎo)致梯度爆炸和梯度消失的問題,并且sigmoid函數(shù)的輸出是非零均值信號(hào)作為下一層的輸入,會(huì)導(dǎo)致收斂緩慢,并且sigmoid函數(shù)有冪運(yùn)算,運(yùn)算比較耗時(shí)等缺點(diǎn)。
(2)tanh函數(shù)。tanh函數(shù)解決了sigmoid函數(shù)的輸出是非零均值信號(hào)作為下一層輸入的問題,但梯度消失和冪運(yùn)算問題在以tanh為激活函數(shù)的深度神經(jīng)網(wǎng)絡(luò)中依然存在。tanh函數(shù)的解析式如公式(2)所示。
(3)relu函數(shù)。relu函數(shù)的解析式如公式(3)所示。
relu是一個(gè)分區(qū)間取最大值的函數(shù),不是全區(qū)間可導(dǎo)的,但它解決了神經(jīng)網(wǎng)絡(luò)梯度消失的問題,只判斷輸入x與0的大小,計(jì)算速度非常快,收斂速度快于sigmoid和tanh激活函數(shù)。
2.3.2 損失函數(shù)
損失函數(shù)是估算設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)模型預(yù)測值ypre=f(x)與真實(shí)值yhat之間的差異,通常用L oss(yh at,ypre)來表示損失函數(shù),常見的損失函數(shù)如下:
(1)0-1損失函數(shù)。0-1損失函數(shù)的定義如公式(4)所示。
0-1損失函數(shù)不考慮預(yù)測值和真實(shí)值差異程度,如果預(yù)測正確,則損失函數(shù)的值為0,否則損失函數(shù)的值為1。
(2)平方損失函數(shù)。平方損失函數(shù)的定義如公式(5)所示。
平方損失函數(shù)的值是預(yù)測值和真實(shí)值差異的平方。
(3)交叉熵?fù)p失函數(shù)。交叉熵是用來描述實(shí)際輸出概率分布q(x)與期望輸出概率p(x)的距離,交叉熵函數(shù)H(p,q)的定義如公式(6)所示。
2.3.3 優(yōu)化器
設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)模型后,定義好損失函數(shù),在訓(xùn)練模型時(shí)使損失函數(shù)隨訓(xùn)練迭代次數(shù)的增加逐漸趨于0,這是優(yōu)化器的作用。常用的優(yōu)化器有梯度下降法(gradient descent)、動(dòng)量優(yōu)化法和自適應(yīng)學(xué)習(xí)率優(yōu)化算法等。
(1)梯度下降法。梯度下降法是最基本的優(yōu)化器,主要分三種,即標(biāo)準(zhǔn)梯度下降法(gradient descent)、隨機(jī)梯度下降(stochastic gradient de?scent)和批量梯度下降(batch gradient descent)。
(2)動(dòng)量優(yōu)化法。動(dòng)量優(yōu)化方法是基于梯度下降法,具有加速梯度下降的作用。一般有標(biāo)準(zhǔn)動(dòng)量優(yōu)化方法Momentum和NAG(nesterov acceler?ated gradient)動(dòng)量優(yōu)化方法。
(3)自適應(yīng)學(xué)習(xí)率優(yōu)化算法。傳統(tǒng)優(yōu)化器中學(xué)習(xí)率是常數(shù)或根據(jù)訓(xùn)練次數(shù)動(dòng)態(tài)變化,沒有考慮學(xué)習(xí)率其他變化的可能性,而學(xué)習(xí)率對模型的收斂有顯著的影響,采取一些策略更新學(xué)習(xí)率,提高模型的訓(xùn)練速度。自適應(yīng)學(xué)習(xí)率優(yōu)化算法目前主要有AdaGrad算法、RMSProp算法、Adam算法和AdaDelta算法。
神經(jīng)網(wǎng)絡(luò)模型的參數(shù)是weight(權(quán)重)和bias(閾值),訓(xùn)練模型是通過訓(xùn)練樣本和學(xué)習(xí)算法反復(fù)調(diào)整weight和bias模型參數(shù)值,使實(shí)際輸出與理想輸出的誤差較少,最后得到神經(jīng)網(wǎng)絡(luò)解決問題所需要的參數(shù)。訓(xùn)練模型的學(xué)習(xí)算法中,最具有代表性的是誤差反向傳播(error backpropaga?tion,BP)算法,廣泛應(yīng)用于多層前饋神經(jīng)網(wǎng)絡(luò)。
評估模型的方法有驗(yàn)證和交叉驗(yàn)證,不同的評估方法也決定數(shù)據(jù)集的劃分。分類問題常見的模型評價(jià)指標(biāo)有混淆矩陣(confusion matrix)、準(zhǔn)確率(accuracy)、精確率(precision)、召回率(recall)、特異度(specificity)等,如表2所示。
(1)混淆矩陣是一個(gè)N×N的矩陣,其中的N表示類別數(shù)量,混淆矩陣中的行表示樣本的預(yù)測類別,列表示樣本的真實(shí)類別。
(2)準(zhǔn)確率是預(yù)測正確的樣本數(shù)占所有樣本數(shù)的比例。
(3)陽性預(yù)測值或精確率是陽性預(yù)測值被預(yù)測正確的比例。
(4)陰性預(yù)測值陰性預(yù)測值被預(yù)測正確的比例。
(5)召回率或靈敏度是在陽性值中實(shí)際被預(yù)測正確所占的比例。
(6)特異度在陰性值中實(shí)現(xiàn)被預(yù)測正確所占的比例。
表2中True Positive(TP)是被模型預(yù)測為正的正樣本,F(xiàn)alse Positive(FP)是被模型預(yù)測為正的負(fù)樣本,F(xiàn)alse Negative(FN)是被模型預(yù)測為負(fù)的正樣本,True Negative(TN)是被模型預(yù)測為負(fù)的負(fù)樣本。大多數(shù)情況下評估模型只用到準(zhǔn)確率,根據(jù)具體的應(yīng)用側(cè)重于不同的評估指標(biāo)。
表2 評估模型常見的指標(biāo)
實(shí)驗(yàn)在Intel(R)Core(TM)i7-6700HQ CPU@2.6 GHz 2.59 GHz,8 GB內(nèi)存的Windows 10系統(tǒng)上使用TensorFlow進(jìn)行測試的。
MNIST數(shù)據(jù)集中樣本圖片轉(zhuǎn)成一維向量有784個(gè)元素,決定輸入層神經(jīng)元的個(gè)數(shù)為784,而手寫體數(shù)字共10個(gè)類別,則輸出層神經(jīng)元的個(gè)數(shù)為10。無隱層簡單的神經(jīng)網(wǎng)絡(luò),只有輸入層和輸出層,層與層之間采用全連接方式。
(1)損失函數(shù)的比較。學(xué)習(xí)率設(shè)置為0.1,訓(xùn)練模型樣本批次大小是100,迭代次數(shù)為30,優(yōu)化器采用梯度下降法,比較交叉熵和平方損失函數(shù)作用于簡單神經(jīng)網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率。
圖2(a)是訓(xùn)練模型迭代次數(shù)與準(zhǔn)確率之間的曲線關(guān)系,其中上邊兩條曲線為一組,是損失函數(shù)為交叉熵時(shí)訓(xùn)練集和測試集的準(zhǔn)確率曲線,下邊兩條曲線是損失函數(shù)為平方損失函數(shù)時(shí)訓(xùn)練集和測試集的準(zhǔn)確率曲線。由圖2(a)可知,在任何迭代次數(shù)上,損失函數(shù)為交叉熵時(shí)訓(xùn)練集和測試集的準(zhǔn)確率都大于損失函數(shù)為平方損失函數(shù)時(shí)訓(xùn)練集和測試集的準(zhǔn)確率。圖2(b)是迭代次數(shù)與損失值的曲線關(guān)系,同樣也分兩組,損失值高的一組是損失函數(shù)為平方損失函數(shù)時(shí)訓(xùn)練集和測試集的損失值曲線,損失值低的一組是損失函數(shù)為交叉熵時(shí)訓(xùn)練集和測試集的損失值曲線,圖2(b)可知,損失函數(shù)為交叉熵時(shí)收斂速度快。由圖2交叉熵與平方損失函數(shù)準(zhǔn)確率和損失值的比較可知,選擇交叉熵作為簡單神經(jīng)網(wǎng)絡(luò)的損失函數(shù)。
圖2 交叉熵與平方損失函數(shù)的比較
(2)不同學(xué)習(xí)率。訓(xùn)練模型樣本批次大小是100,迭代次數(shù)為30,優(yōu)化器采用梯度下降法,損失函數(shù)為交叉熵,比較不同學(xué)習(xí)率(0.1、0.2、0.3、0.4、0.5、0.6)對神經(jīng)網(wǎng)絡(luò)模型的影響。
圖3展示了基于不同學(xué)習(xí)率準(zhǔn)確率的對比,上一行是訓(xùn)練集的測試結(jié)果,下一行是測試集的測試結(jié)果。
圖3 不同學(xué)習(xí)率對神經(jīng)網(wǎng)絡(luò)準(zhǔn)確率的影響
圖3(a)展示學(xué)習(xí)率分別為0.1、0.2和0.3時(shí)準(zhǔn)確率隨迭代次數(shù)變化的三條曲線。實(shí)驗(yàn)結(jié)果表明,隨著學(xué)習(xí)率的增加,神經(jīng)網(wǎng)絡(luò)的性能逐步改善,在訓(xùn)練集和測試集中,學(xué)習(xí)率為0.3時(shí)準(zhǔn)確率幾乎都是最高的,迭代次數(shù)為30準(zhǔn)確率分別為93.30%和92.58%。圖3(b)是學(xué)習(xí)率分別為0.4、0.5和0.6時(shí)準(zhǔn)確率隨迭代次數(shù)變化的曲線。實(shí)驗(yàn)結(jié)果表明,訓(xùn)練集中學(xué)習(xí)率為0.5和0.6時(shí)準(zhǔn)確率波動(dòng)較大,特別是學(xué)習(xí)率為0.5準(zhǔn)確率不穩(wěn)定。迭代次數(shù)為30時(shí),學(xué)習(xí)率0.6訓(xùn)練集準(zhǔn)確率最高,學(xué)習(xí)率0.5測試集準(zhǔn)確率最高。圖3(c)是學(xué)習(xí)率分別為0.3、0.5和0.6時(shí)準(zhǔn)確率隨迭代次數(shù)變化的曲線。實(shí)驗(yàn)結(jié)果表明,不管是訓(xùn)練集還是測試集,不同學(xué)習(xí)率的準(zhǔn)確率相差不大,學(xué)習(xí)率0.5和0.6的準(zhǔn)確率比學(xué)習(xí)率0.3的準(zhǔn)確率稍高,但訓(xùn)練集中學(xué)習(xí)率0.5和0.6的準(zhǔn)確率波動(dòng)較大。由圖3分析可知,學(xué)習(xí)率0.3到0.4之間比較合適,所以學(xué)習(xí)率選擇0.3。
(3)批次大小。學(xué)習(xí)率為0.3,迭代次數(shù)為30,優(yōu)化器采用梯度下降法,損失函數(shù)為交叉熵,比較不同批次大?。?0、100、150、200、250、300)對神經(jīng)網(wǎng)絡(luò)模型的影響。
圖4展示不同批次大小準(zhǔn)確率的對比,上一行是訓(xùn)練集在不同批次大小的測試結(jié)果,下一行是測試集在不同批次大小的測試結(jié)果。圖4(a)是批次大小分別為50、100和150時(shí)準(zhǔn)確率隨迭代次數(shù)的三條曲線。實(shí)驗(yàn)結(jié)果表明,訓(xùn)練集中,批次大小為50的準(zhǔn)確率高于批次大小為100和150的準(zhǔn)確率,而測試集中,批次大小為100的準(zhǔn)確率高于批次大小為50和150的準(zhǔn)確率。圖4(b)表示批次大小分別為200、250和300時(shí)準(zhǔn)確率隨迭代次數(shù)的曲線關(guān)系,訓(xùn)練集中,迭代次數(shù)30批次大小200時(shí)準(zhǔn)確率為93.03%,高于批次大小250和300對應(yīng)的準(zhǔn)確率92.89%和92.85%,而測試集中迭代次數(shù)30批次大小200時(shí)準(zhǔn)確率也是最高的。圖4(c)表示批次大小分別為100、200和300時(shí)準(zhǔn)確率隨迭代次數(shù)的曲線關(guān)系,不管是訓(xùn)練集還是測試集,批次大小100時(shí)準(zhǔn)確率最高。由圖4分析可知,批次大小為100模型的性能最好。
圖4 不同批次大小對神經(jīng)網(wǎng)絡(luò)準(zhǔn)確率的影響
(4)優(yōu)化器的選擇。訓(xùn)練模型樣本批次大小是100,迭代次數(shù)為30,損失函數(shù)為交叉熵,學(xué)習(xí)率為0.3,比較不同優(yōu)化器(梯度下降、Adam算法、AdaDelta算法和AdaGrad算法)對神經(jīng)網(wǎng)絡(luò)模型的影響。圖5展示不同優(yōu)化器在訓(xùn)練集和測試集上的準(zhǔn)確率曲線,圖5(a)表示的是梯度下降、Adam算法、AdaDelta算法和AdaGrad算法在訓(xùn)練集中準(zhǔn)確率隨迭代次數(shù)增加的變化曲線,最上邊的兩條準(zhǔn)確率曲線對應(yīng)的優(yōu)化器是梯度下降和AdaGrad。實(shí)驗(yàn)結(jié)果表明,梯度下降和AdaGrad的性能優(yōu)化Adam和AdaDelta算法,而AdaGrad算法的性能最優(yōu)。圖5(b)與圖5(a)是對應(yīng)的,曲線的長度表示準(zhǔn)確率的范圍,灰色曲線表示AdaGrad算法所對應(yīng)的準(zhǔn)確率。圖5(c)表示在測試集中,不同優(yōu)化器的準(zhǔn)確率隨迭代次數(shù)增加的變化曲線,實(shí)驗(yàn)結(jié)果表明,最上邊的兩條準(zhǔn)確率曲線對應(yīng)的優(yōu)化器是梯度下降和AdaGrad,而AdaGrad算法的性能最優(yōu)。由圖5分析可知,優(yōu)化器選擇AdaGrad算法。
圖5 不同優(yōu)化器在訓(xùn)練集和測試集上準(zhǔn)確率隨迭代次數(shù)的變化曲線
以上所有實(shí)驗(yàn)結(jié)果分析表明,設(shè)計(jì)無隱層多參數(shù)融合具有較高準(zhǔn)確率的簡單神經(jīng)網(wǎng)絡(luò),可參考表3所示多個(gè)參數(shù)及對應(yīng)的值。
表3 無隱層的簡單神經(jīng)網(wǎng)絡(luò)參數(shù)
在無隱層多參數(shù)融合優(yōu)化的簡單神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上通過增加一隱層繼續(xù)提高準(zhǔn)確率,需考慮的是隱層神經(jīng)元的個(gè)數(shù)、激活函數(shù)及迭代次數(shù)等方面。
(1)隱層神經(jīng)元的個(gè)數(shù)。樣本批次大小100,迭代次數(shù)30,損失函數(shù)為交叉熵,學(xué)習(xí)率0.3,優(yōu)化器是AdaGrad算法,激活函數(shù)sigmoid,單層隱含層,比較隱層不同數(shù)量神經(jīng)元對神經(jīng)網(wǎng)絡(luò)模型的影響。
圖6展示了單隱層不同數(shù)量神經(jīng)元在訓(xùn)練集和測試集中準(zhǔn)確率隨迭代次數(shù)變化的曲線,每幅圖中6條曲線在迭代10次后明顯分成兩組,每組3條曲線幾乎重合在一起。實(shí)驗(yàn)結(jié)果表明,單隱層神經(jīng)網(wǎng)絡(luò)在訓(xùn)練集的準(zhǔn)確率高于在測試集的準(zhǔn)確率,隱層不同神經(jīng)元個(gè)數(shù)對神經(jīng)網(wǎng)絡(luò)模型的性能影響不大,如訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型迭代25次時(shí),圖6(a)神經(jīng)元個(gè)數(shù)為400、500和600在測試集中對應(yīng)的準(zhǔn)確率分別為98.04%,98.07%和98.10%,在訓(xùn)練集中對應(yīng)的準(zhǔn)確率分別為99.85%,99.83%和99.85%,準(zhǔn)確率非常接近。圖6(b)和圖6(c)與圖6(a)類似,隱層不同神經(jīng)元的個(gè)數(shù)對準(zhǔn)確率影響不大,所以選擇隱層神經(jīng)元個(gè)數(shù)為500。
圖6 隱層不同神經(jīng)元個(gè)數(shù)對識(shí)別準(zhǔn)確率的影響
(2)激活函數(shù)。樣本批次大小100,迭代次數(shù)30,損失函數(shù)為交叉熵,學(xué)習(xí)率0.3,優(yōu)化器是AdaGrad算法,單隱層神經(jīng)元個(gè)數(shù)為500,比較不同激活函數(shù)(sigmoid、tanh、rule和selu)對神經(jīng)網(wǎng)絡(luò)模型的影響。
圖7展示不同激活函數(shù)準(zhǔn)確率的對比,上一行是訓(xùn)練集上不同激活函數(shù)的測試結(jié)果,下一行是測試集上不同激活函數(shù)的測試結(jié)果。圖7(a)表示激活函數(shù)sigmoid和tanh在訓(xùn)練集和測試集中準(zhǔn)確率隨迭代次數(shù)變化的曲線。實(shí)驗(yàn)結(jié)果表明不管在訓(xùn)練集還是測試集中使用tanh激活函數(shù)比使用sigmoid激活函數(shù)效果好。圖7(a)上圖展示迭代16次以后,使用tanh激活函數(shù)的準(zhǔn)確率為100%,而使用sigmoid激活的準(zhǔn)確率在99.30%~99.99%之間。圖7(b)表示激活函數(shù)relu和selu在訓(xùn)練集和測試集中準(zhǔn)確率隨迭代次數(shù)變化的曲線。實(shí)驗(yàn)結(jié)果表明,測試集中使用relu激活函數(shù)比使用selu激活函數(shù)效果好,訓(xùn)練集中迭代20次前使用relu激活函數(shù)比使用selu激活函數(shù)效果好,迭代20次以后使用relu和selu激活函數(shù)的準(zhǔn)確率都為100%。圖7(c)是四種激活函數(shù)在訓(xùn)練集和測試集中準(zhǔn)確率隨迭代次數(shù)變化的曲線,訓(xùn)練集中使用relu激活函數(shù)準(zhǔn)確率在迭代12次達(dá)到了100%,測試集中使用relu激活函數(shù)的準(zhǔn)確率比使用其他三種激活函數(shù)的準(zhǔn)確率高。
圖7 不同激活函數(shù)對識(shí)別準(zhǔn)確率的影響
以上單隱層所有實(shí)驗(yàn)結(jié)果分析表明,設(shè)計(jì)單隱層多參數(shù)融合具有較高準(zhǔn)確率的神經(jīng)網(wǎng)絡(luò),需確定隱層神經(jīng)元的個(gè)數(shù)、隱層的激活函數(shù)、學(xué)習(xí)率、優(yōu)化算法等參數(shù)參考表4所示。
表4 單隱層的神經(jīng)網(wǎng)絡(luò)模型參數(shù)
在多參數(shù)融合優(yōu)化的單隱含層神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上再增加一隱層,繼續(xù)優(yōu)化神經(jīng)網(wǎng)絡(luò)模型。樣本批次大小100,迭代次數(shù)30,損失函數(shù)為交叉熵,優(yōu)化器是AdaGrad算法,兩層隱含層,隱含層神經(jīng)元的個(gè)數(shù)分別為500和300,隱含層的激活函數(shù)是relu,在測試集中比較不同學(xué)習(xí)率(0.1、0.15、0.2、0.25、0.3、0.35、0.4、0.45、0.5、0.55、0.6、0.65、0.7)對神經(jīng)網(wǎng)絡(luò)模型的影響。
由表5可知,學(xué)習(xí)率為0.1、0.15、0.2、0.25、0.3、0.35、0.4、0.45時(shí)的準(zhǔn)確率高于學(xué)習(xí)率為0.5、0.55、0.6、0.65、0.7。學(xué)習(xí)率為0.1、0.15、0.2、0.25、0.3、0.35、0.4的準(zhǔn)確率相差不大,它們的準(zhǔn)確率隨迭代次數(shù)的變化曲線幾乎是重疊在一起,其中學(xué)習(xí)率0.2和0.25的性能最優(yōu)。實(shí)驗(yàn)結(jié)果表明,多層隱含層神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)率設(shè)定為0.2。
表5 測試集中不同學(xué)習(xí)率
樣本批次大小100,迭代次數(shù)30,損失函數(shù)為交叉熵,學(xué)習(xí)率為0.2,優(yōu)化器是AdaGrad算法,兩層隱含層,隱含層神經(jīng)元的個(gè)數(shù)分別為500和300,在測試集中比較隱含層不同激活函數(shù)(sigmoid、relu、selu和tanh)對神經(jīng)網(wǎng)絡(luò)模型的影響。圖8展示了使用不同激活函數(shù)在測試集上準(zhǔn)確率的對比,上一行是不同激活函數(shù)在訓(xùn)練集上準(zhǔn)確率的測試結(jié)果,下一行是上一行對應(yīng)損失函數(shù)隨迭代次數(shù)的收斂曲線。圖8(a)是激活函數(shù)sigmoid與relu準(zhǔn)確率和損失函數(shù)值的對比,由上圖中的曲線可知,使用激活函數(shù)relu的準(zhǔn)確率高于使用激活函數(shù)sigmoid的準(zhǔn)確率,下圖中使用激活函數(shù)relu的多參數(shù)融合神經(jīng)網(wǎng)絡(luò)模型的損失函數(shù)隨迭代次數(shù)增加收斂的比較快。
圖8 不同激活函數(shù)對識(shí)別準(zhǔn)確率的影響
圖8(b)是激活函數(shù)selu與tanh準(zhǔn)確率和損失函數(shù)值的對比,使用激活函數(shù)tanh的準(zhǔn)確率比較高及損失函數(shù)收斂比較快。圖8(c)是激活函數(shù)sigmoid、relu、selu和tanh準(zhǔn)確率和損失函數(shù)值的對比。實(shí)驗(yàn)結(jié)果表明,使用激活函數(shù)relu和tanh的多參數(shù)融合神經(jīng)網(wǎng)絡(luò)模型性能比較好,而使用激活函數(shù)relu的神經(jīng)網(wǎng)絡(luò)模型的性能最好,所以選擇relu作為激活函數(shù)。
不同激活函數(shù)在測試集中準(zhǔn)確率隨迭代次數(shù)的如表6所示。
表6 測試集中不同激活函數(shù)
樣本批次大小100,迭代次數(shù)30,學(xué)習(xí)率為0.2,優(yōu)化器是AdaGrad算法,兩層隱含層,隱含層神經(jīng)元的個(gè)數(shù)分別為500和300,隱含層的激活函數(shù)是relu,比較不同損失函數(shù)(平方損失函數(shù)和交叉熵)對模型的影響。圖9主要展示了使用不同損失函數(shù)在訓(xùn)練集和測試集上準(zhǔn)確率的對比,上一行是不同損失函數(shù)準(zhǔn)確率的測試結(jié)果,下一行是上一行對應(yīng)損失函數(shù)隨迭代次數(shù)的收斂曲線。上圖和下圖對比發(fā)現(xiàn),識(shí)別準(zhǔn)確率高的曲線對應(yīng)的損失函數(shù)收斂的速度就快。圖9(a)上圖是在訓(xùn)練集中分別使用平方損失函數(shù)和交叉熵時(shí)神經(jīng)網(wǎng)絡(luò)模型的識(shí)別準(zhǔn)確率曲線,由圖中兩條曲線對比可知,神經(jīng)網(wǎng)絡(luò)的損失函數(shù)為交叉熵優(yōu)于平方損失函數(shù),在訓(xùn)練使用交叉熵的神經(jīng)網(wǎng)絡(luò)模型迭代10次后訓(xùn)練集中的識(shí)別準(zhǔn)確率達(dá)到了100%,其對應(yīng)的10(a)下圖損失值也快速收斂。圖9(b)上圖是測試集中分別使用平方損失函數(shù)和交叉熵時(shí)神經(jīng)網(wǎng)絡(luò)模型的識(shí)別準(zhǔn)確率曲線,其中損失函數(shù)是交叉熵的神經(jīng)網(wǎng)絡(luò)模型的識(shí)別準(zhǔn)確率高的。圖9(c)是平方損失函數(shù)和交叉熵在訓(xùn)練集和測試集上的識(shí)別準(zhǔn)確率曲線以及對應(yīng)的損失函數(shù)的收斂曲線。實(shí)驗(yàn)結(jié)果表明,在訓(xùn)練集和測試集上損失函數(shù)是交叉熵都優(yōu)于平方損失函數(shù)的多參數(shù)融合神經(jīng)網(wǎng)絡(luò)模型的性能。
圖9 不同損失函數(shù)對識(shí)別準(zhǔn)確率的影響
樣本批次大小100,迭代次數(shù)30,學(xué)習(xí)率為0.2,損失函數(shù)為交叉熵,兩層隱含層,隱含層神經(jīng)元的個(gè)數(shù)分別為500和300,隱含層的激活函數(shù)是relu,比較不同優(yōu)化算法(梯度下降、Adam算法、AdaDelta算法和AdaGrad算法)對模型的影響。圖10展示了不同優(yōu)化算法的對比,上一行是梯度下降、AdaDelta算法和AdaGrad算法在訓(xùn)練集和測試集上識(shí)別準(zhǔn)確率隨迭代次數(shù)增加的變化曲線,下一行是上一行不同優(yōu)化算法對應(yīng)交叉熵的收斂曲線。圖10(a)上圖是梯度下降、AdaDelta算法和AdaGrad算法在訓(xùn)練集的識(shí)別準(zhǔn)確率變化曲線,其中梯度下降和AdaGrad優(yōu)化算法對應(yīng)的準(zhǔn)確率變化曲線在迭代5次時(shí)準(zhǔn)確率都就到達(dá)了99%以上,并且AdaGrad優(yōu)化算法稍微優(yōu)于梯度下降優(yōu)化算法,而AdaDelta優(yōu)化算法對應(yīng)的準(zhǔn)確率變化曲線低于梯度下降和AdaGrad優(yōu)化算法對應(yīng)的準(zhǔn)確率變化曲線。圖10(b)上圖是梯度下降、AdaDelta算法和AdaGrad算法在測試集的識(shí)別準(zhǔn)確率變化曲線,在訓(xùn)練迭代3次后,識(shí)別準(zhǔn)確率從高到低所對應(yīng)的優(yōu)化算法分別為AdaGrad算法、梯度下降優(yōu)化算法和AdaDelta算法,迭代30次AdaGrad優(yōu)化算法對應(yīng)的準(zhǔn)確率為98.90%。圖10實(shí)驗(yàn)結(jié)果表明,AdaGrad算法的性能最優(yōu)。
圖10 優(yōu)化算法在訓(xùn)練集和測試集上對識(shí)別準(zhǔn)確率的影響
綜合以上多隱層實(shí)驗(yàn)結(jié)果表明,設(shè)計(jì)多隱層多參數(shù)融合優(yōu)化具有較高準(zhǔn)確率的神經(jīng)網(wǎng)絡(luò)模型,隱層神經(jīng)元個(gè)數(shù)、隱層的激活函數(shù)、優(yōu)化算法、學(xué)習(xí)率、損失函數(shù)等參數(shù)可參考表7所示。
表7 多隱層神經(jīng)網(wǎng)絡(luò)模型參數(shù)
深度學(xué)習(xí)是目前最火熱的研究方向之一,它借助于計(jì)算機(jī)強(qiáng)大的計(jì)算和存儲(chǔ)能力進(jìn)行快速搜索而完成對樣本的特征提取,同時(shí)缺乏對網(wǎng)絡(luò)結(jié)構(gòu)及參數(shù)在理論上的完全解釋,所以結(jié)合領(lǐng)域知識(shí)的特征提取,設(shè)計(jì)多參數(shù)融合優(yōu)化的深度神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)發(fā)展的一個(gè)方向。本文討論了在無隱層神經(jīng)網(wǎng)絡(luò)模型的基礎(chǔ)上逐漸怎樣設(shè)計(jì)出一個(gè)多參數(shù)融合優(yōu)化的具有較高準(zhǔn)確率的深度神經(jīng)網(wǎng)絡(luò)模型,特別是為初學(xué)者構(gòu)建深度神經(jīng)網(wǎng)絡(luò)模型提供了一種有效思路,也為以后在經(jīng)典深度神經(jīng)網(wǎng)絡(luò)模型的基礎(chǔ)上設(shè)計(jì)更復(fù)雜的神經(jīng)網(wǎng)絡(luò)打下基礎(chǔ)。