周靖凱
摘 要:在2006年,被稱為“深度學(xué)習(xí)”學(xué)習(xí)技術(shù)的發(fā)現(xiàn),引發(fā)了互聯(lián)網(wǎng)時代學(xué)習(xí)方式的變革。而今天,這些被稱為“深度學(xué)習(xí)”的技術(shù)已經(jīng)進(jìn)一步發(fā)展并被廣泛運(yùn)用在各個層面,其在計算機(jī)視覺,語音識別,自然語言處理等許多重要問題上都發(fā)揮了顯著的作用。對此,本文就卷積網(wǎng)絡(luò)與深度學(xué)習(xí)算法進(jìn)行了研究與學(xué)習(xí),首先從數(shù)據(jù)集的生成、卷積網(wǎng)絡(luò)結(jié)構(gòu)的搭建、利用梯度下降算法進(jìn)行前向傳播與反向傳播的訓(xùn)練這三個方面對卷積網(wǎng)絡(luò)進(jìn)行基本概述,簡要介紹了卷積網(wǎng)絡(luò)的結(jié)構(gòu)和實現(xiàn)方法;之后介紹了如何利用在卷積網(wǎng)絡(luò)的不同位置進(jìn)行正則化與隨機(jī)丟棄節(jié)點(diǎn)的方法來優(yōu)化網(wǎng)絡(luò)并處理因網(wǎng)絡(luò)訓(xùn)練過度而引發(fā)的過擬合現(xiàn)象;最后利用優(yōu)化后的卷積網(wǎng)絡(luò)進(jìn)行圖片的分類測試,得出結(jié)論、驗證成果,使卷積網(wǎng)絡(luò)具有識別圖片的能力。
關(guān)鍵詞:卷積網(wǎng)絡(luò);深度學(xué)習(xí);過擬合;圖像識別
0引言
人類的視覺系統(tǒng)是自然給予的最好禮物之一。正因為有了視覺,人乃至所有生物才能主動的尋找食物、住所等需要的一切,而不是隨波逐流的生存。絕大多數(shù)成年人可以輕易分辨0~9的數(shù)字,但這背后付出的是數(shù)十萬年的進(jìn)化與演變,才能極好的適應(yīng)與理解視覺世界的任務(wù)。通過“深度學(xué)習(xí)”技術(shù)開展計算機(jī)視覺應(yīng)用逐漸成為科學(xué)技術(shù)研究熱點(diǎn)。
我們仿造人腦,搭建一個設(shè)法利用圖片的空間結(jié)構(gòu)的網(wǎng)絡(luò),將圖片的長度,寬度以及圖片的色素作為“空間的長,寬和高”,搭建了一個深度的,多層的網(wǎng)絡(luò),它將更加擅長于處理圖像識別問題——這就是卷積網(wǎng)絡(luò)的意義[1]。
1卷積網(wǎng)絡(luò)的結(jié)構(gòu)和實現(xiàn)方法
1.1卷積網(wǎng)絡(luò)的結(jié)構(gòu)和示意圖
首先我們搭建一個實現(xiàn)圖像分類的卷積網(wǎng)絡(luò)??紤]到需要分類的圖片只有65種,訓(xùn)練集與驗證集加起來只有4000多張,因此,我們參考LeNet[2]以及Alexnet[3]的網(wǎng)絡(luò)結(jié)構(gòu)搭建的卷積網(wǎng)絡(luò)不算太深,具體如下,并如圖1所示。
INPUT:(192*192)*3。
第一層:卷積層:卷積核=5*5*3*48,最大池化層=2*2。
第二層:卷積層:卷積核=3*3*48*96,最大池化層=2*2。
第三層:卷積層:卷積核=3*3*96*128。
第四層:卷積層:卷積核=3*3*128*128。
第五層:全連接層:1024個神經(jīng)元。
第六層:全連接層:1024個神經(jīng)元。
第七層:softmax輸出層:65類。
1.2梯度下降算法與前向,反向傳播
網(wǎng)絡(luò)的前向傳播是搭建模型,實現(xiàn)推理的過程,我們會先搭建計算圖,再用會話執(zhí)行。計算圖有輸入層,隱藏層,輸出層三個部分。但要注意,在下面計算層數(shù)時,只計算隱藏層和輸出層的代數(shù)和,即輸入層不參與計算層數(shù),層數(shù)=隱藏層數(shù)+一個輸出層。前向傳播具體可分三個部分:定義輸入和參數(shù),定義前向傳播過程,用會話計算結(jié)果。
每層網(wǎng)絡(luò)都由如圖2所示的基本神經(jīng)元構(gòu)成,公式如下所示:
其中,o為神經(jīng)元單元的輸出值,s為激活函數(shù),w為權(quán)重值,x為輸入值,b為偏移值。
網(wǎng)絡(luò)的反向傳播是訓(xùn)練模型參數(shù)的過程。我們會將大量的特征數(shù)據(jù)喂給神經(jīng)網(wǎng)絡(luò),再迭代優(yōu)化網(wǎng)絡(luò)參數(shù)。在反向傳播中,我們會對所有參數(shù)使用梯度下降算法,使模型在訓(xùn)練數(shù)據(jù)上的損失參數(shù)(loss)最小。即反向傳播的訓(xùn)練方法是以減小損失函數(shù)(loss)值為優(yōu)化目標(biāo)的,出于這一目的,我們使用了隨機(jī)梯度下降算法。
在這個卷積網(wǎng)絡(luò)中,我們選用了較為高效的Adam算法,該算法是設(shè)計用于替代傳統(tǒng)隨機(jī)梯度下降算法的一個優(yōu)化算法,使得神經(jīng)網(wǎng)絡(luò)權(quán)重的更新是基于訓(xùn)練數(shù)據(jù)進(jìn)行的。
1.3損失函數(shù)(loss)
在神經(jīng)網(wǎng)絡(luò)與卷積網(wǎng)絡(luò)中,損失函數(shù)(loss)是指預(yù)測值(y)與已知分類值(y_)的差距。基本的定義公式為:
公式中,E為誤差值,D為訓(xùn)練集,outputs為神經(jīng)網(wǎng)絡(luò)的輸出單元,t為訓(xùn)練樣本在輸出單元的標(biāo)注輸出值,o為訓(xùn)練樣本在輸出單元的實際輸出值。
為使神經(jīng)網(wǎng)絡(luò)(NN)優(yōu)化目標(biāo)的損失函數(shù)最小,我們往往分情況采用均方誤差mse(Mean Squared Error)和交叉熵(Cross Entropy)兩種算法,并在特殊情況使用自定義算法。在本項目中,使用了交叉熵?fù)p失算法。
1.4學(xué)習(xí)速率(learning-rate)
學(xué)習(xí)速率是指每次參數(shù)更新的幅度。學(xué)習(xí)速率并不是說越大或是越小就越好,在不同網(wǎng)絡(luò)中同一學(xué)習(xí)速率也有很大差別。學(xué)習(xí)速率過大:振蕩會不收斂;學(xué)習(xí)速率過小:收斂速度會很慢。選擇一個合適的學(xué)習(xí)速率往往令人毫無頭緒,但我們可以運(yùn)用指數(shù)衰減學(xué)習(xí)速率的方式事先計算出一個合適的學(xué)習(xí)速率,為避免網(wǎng)絡(luò)冗長,本次學(xué)習(xí)的學(xué)習(xí)速率已在搭建網(wǎng)絡(luò)前算好,我們直接使用。
2訓(xùn)練、測試過程
2.1訓(xùn)練過程
我們將學(xué)習(xí)速率設(shè)置為0.001,訓(xùn)練后的結(jié)果如圖2。
觀察圖像后我們可以發(fā)現(xiàn)訓(xùn)練集和驗證集的交叉熵?fù)p失與準(zhǔn)確率都在緩慢提升,但是驗證集的準(zhǔn)確率會低于訓(xùn)練集的準(zhǔn)確率,在隨著訓(xùn)練時間增加的同時,驗證集的準(zhǔn)確率卻會減慢改變速率,最終幾乎保持不變。
再次運(yùn)行網(wǎng)絡(luò)一段時間,發(fā)現(xiàn)程序?qū)τ谟?xùn)練集的判斷準(zhǔn)確率較高,但對于驗證集的判斷準(zhǔn)確率較低,且兩者差距較明顯,我們認(rèn)為可能出現(xiàn)了過擬合現(xiàn)象,應(yīng)在兩者出現(xiàn)偏差時停止訓(xùn)練。
因為本次訓(xùn)練使用的訓(xùn)練集的樣本數(shù)較少,每個種類的圖片只有幾十張,所以程序較容易出現(xiàn)過擬合現(xiàn)象,無法提取足夠的特征,以至于程序的準(zhǔn)確率較低。
為避免過擬合影響程序的準(zhǔn)確率,我采用以下三個方法抑制現(xiàn)象:
方法1:輸入圖片的預(yù)處理:
利用tf.image.per_image_standardization函數(shù),將輸入的圖片進(jìn)行正則化處理;
利用tf.random_crop與tf.image.random_flip_left_right對圖片進(jìn)行隨機(jī)裁取與翻轉(zhuǎn),以擴(kuò)充訓(xùn)練集;
每一個batch中包含隨機(jī)選取的64個樣本圖片。
方法2:卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建細(xì)節(jié):
在每個卷積核的計算中,在利用tf.nn.bias_add將輸出與bias相加之后、relu激活函數(shù)計算之前,利用函數(shù)tf.layers.batch_normalization對結(jié)果進(jìn)行正則化處理,防止進(jìn)入飽和區(qū);
在最大池化計算之后,利用tf.nn.lrn進(jìn)行池化后的正則化處理,防止進(jìn)入飽和區(qū);
在全連接層記性relu激活函數(shù)計算后,利用tf.layers.batch_normalization對結(jié)果進(jìn)行正則化處理;
方法3:在全連接層,利用函數(shù)tf.nn.dropout隨機(jī)丟棄神經(jīng)元處理,防止過擬合。
2.2 測試方法和準(zhǔn)確率
利用訓(xùn)練好的卷積網(wǎng)絡(luò),對測試集的圖片進(jìn)行了分類測試。測試集為取自網(wǎng)絡(luò)的隨機(jī)64張同類圖片,并且該類圖片為訓(xùn)練集中已有的分類。對測試集的圖片進(jìn)行了10次測試,測試的準(zhǔn)確率如圖3所示。由圖中可以看到,測試集圖片分類的準(zhǔn)確率在13%左右,比完全隨機(jī)判斷的準(zhǔn)確率1.5%提高了接近10倍,證明該神經(jīng)網(wǎng)絡(luò)具有識別圖片的能力。
3結(jié)論
本文主要簡要分析了卷積網(wǎng)絡(luò)與深度學(xué)習(xí)算法,首先介紹了卷積網(wǎng)絡(luò)的由來與其較以往機(jī)器學(xué)習(xí)算法相比的優(yōu)越性;再簡要介紹了卷積網(wǎng)絡(luò)的結(jié)構(gòu)和實現(xiàn)方法。在訓(xùn)練中,發(fā)現(xiàn)了網(wǎng)絡(luò)中的過擬合現(xiàn)象,并指出了三個具體的解決方案。最后,對卷積網(wǎng)絡(luò)進(jìn)行了測試,該網(wǎng)絡(luò)對圖片的識別能力為完全隨機(jī)判斷的10倍左右。
4創(chuàng)新點(diǎn)及展望
設(shè)計了一個可用于圖片預(yù)測分類的卷積神經(jīng)網(wǎng)絡(luò)。經(jīng)過縝密的測試,選擇了適用于該網(wǎng)絡(luò)的超參數(shù),包括合適的網(wǎng)絡(luò)結(jié)構(gòu)、學(xué)習(xí)速率、輸入圖片的預(yù)處理方法、過擬合的抑制方法等,使得該網(wǎng)絡(luò)在經(jīng)過較少量的訓(xùn)練集圖片訓(xùn)練后,對測試圖片能輸出一個較為合理的分類預(yù)測結(jié)果。
目前,該卷積網(wǎng)絡(luò)對測試集圖片的預(yù)測分類能力尚有提高空間,主要原因在于訓(xùn)練集的圖片數(shù)量較少,卷積網(wǎng)絡(luò)對圖片的預(yù)測能力尚未達(dá)到一個較高水平時,訓(xùn)練過程便進(jìn)入了過擬合的階段。因此,下一步希望能夠進(jìn)一步擴(kuò)充訓(xùn)練集的樣本圖片數(shù)量,使得卷積神經(jīng)網(wǎng)絡(luò)能夠得到較為充足的訓(xùn)練,進(jìn)一步提高該網(wǎng)絡(luò)對測試圖片的預(yù)測能力了。
參考文獻(xiàn)
[1] Michael A.Nielsen.“Neural Networks and Deep Learning”[M].Determination Press,2015.
[2] Lecun Y ,Bottou L ,Bengio Y ,et al.Gradient-based learning applied to document recognition[J].Proceedings of the IEEE,1998,86(11):2278-2324.
[3] Krizhevsky A,Sutskever I,Hinton G.ImageNet Classification with Deep Convolutional Neural Networks[C].NIPS.Curran Associates Inc.2012.