郝雅嫻 孫艷蕊
(1.山西師范大學(xué) 山西省太原市 030000 2.東北大學(xué) 遼寧省沈陽市 110000)
隨著科學(xué)水平的不斷提高,計(jì)算機(jī)視覺領(lǐng)域的不斷發(fā)展,我們進(jìn)入了智能化的時代。在計(jì)算機(jī)視覺中,圖像識別是核心的一部分,例如現(xiàn)如今比較流行的人臉識別算法,語義分割算法,行人識別等等計(jì)算機(jī)視覺任務(wù),在進(jìn)行圖像識別時,圖像識別算法設(shè)計(jì)選擇很重要,同樣重要的有損失函數(shù)的選擇。卷積神經(jīng)網(wǎng)絡(luò)在進(jìn)行訓(xùn)練時,樣本的真實(shí)值與預(yù)測值之間的差異除了與樣本自身信息有關(guān),還與損失函數(shù)的選擇有關(guān)。在機(jī)器學(xué)習(xí)算法中有很多損失函數(shù),但是沒有一個損失函數(shù)是可以做到完全適用于所有類型的數(shù)據(jù),因此損失函數(shù)的選擇尤為重要。本文首先介紹了兩種不同的損失函數(shù),交叉熵?fù)p失函數(shù)與負(fù)對數(shù)似然函數(shù)。分別對這兩個損失函數(shù)在公式上進(jìn)行了理論推導(dǎo),在數(shù)據(jù)上進(jìn)行了算法實(shí)驗(yàn),實(shí)驗(yàn)得出針對手寫體數(shù)據(jù)集交叉熵?fù)p失函數(shù)比負(fù)對數(shù)似然函數(shù)更優(yōu)。
由定義可知交叉熵描述的是兩個分布之間的差異,所以交叉熵的值越小表示兩個分布之間的差異越小。在神經(jīng)網(wǎng)絡(luò)的多分類問題中,交叉熵?fù)p失函數(shù)的公式定義為:
其中用y表示樣本真實(shí)分布的概率,表示樣本預(yù)測概率,該公式描述了真實(shí)值與預(yù)測值之間的距離,交叉熵越小,預(yù)測越準(zhǔn)確,下面給出一個例子。
舉例:有一個3分類問題:對手寫數(shù)字0-2進(jìn)行圖片分類,如果要對數(shù)字2進(jìn)行正確識別,在神經(jīng)網(wǎng)絡(luò)多分類問題中,樣本標(biāo)簽通常是經(jīng)過one-hot編碼,經(jīng)過編碼后樣本的真實(shí)值為(0,0,1),如果預(yù)測值的輸出越接近真實(shí)輸出,模型的效果就越好。假設(shè)現(xiàn)在有2個模型進(jìn)行預(yù)測,第一個模型的輸出為(0.5,0.5,0.8),第二個模型的輸出為(0.2,0.1,0.7),直觀上看第一個模型的預(yù)測更好,以為對數(shù)字2的預(yù)測第一個模型比第二個模型更接近真實(shí)預(yù)測值1,現(xiàn)在通過計(jì)算這兩個模型的交叉熵來對比哪個模型預(yù)測更加準(zhǔn)確:
通過對以上例子交叉熵的計(jì)算,可以看出第一個模型所得的交叉熵?fù)p失函數(shù)值為0.097,第二個模型的交叉熵?fù)p失函數(shù)值為0.15,因此第二個的預(yù)測更加準(zhǔn)確。
由于樣本的真實(shí)分布值為1,即y=1,所以以上交叉熵公式又可以簡化為:
對上式求最大似然估計(jì)即求最小化負(fù)對數(shù)似然估計(jì)
通過觀察可知,交叉熵?fù)p失函數(shù)與負(fù)對數(shù)似然損失函數(shù)在公式的定義上是等價的:
但是不同的是,對于交叉熵?fù)p失函數(shù),可以經(jīng)過onehot編碼后的樣本數(shù)據(jù),也可以處理不經(jīng)過one-hot編碼的數(shù)據(jù)。而極大似然函數(shù)只能處理不經(jīng)過one-hot編碼的數(shù)據(jù)。
在pytorch中,nn.NLLLoss()函數(shù)表示負(fù)對數(shù)似然函數(shù), nn.CrossEntropyLoss()函數(shù)表示交叉熵?fù)p失函數(shù)。nn.NLLLoss()損失函數(shù)在使用one-hot編碼后會報錯,nn.CrossEntropyLoss()在使用one-hot編碼后不會報錯。
本文所用的MNIST數(shù)據(jù)集是在美國國家標(biāo)準(zhǔn)和技術(shù)研究所(NIST)提供的手寫數(shù)字字符NIST 數(shù)據(jù)庫基礎(chǔ)上發(fā)展而來的。數(shù)據(jù)集由包括60000*785個數(shù)值的訓(xùn)練集圖像樣本和包含10000 *785個數(shù)值的測試集樣本兩個部分組成。第一列為標(biāo)簽也就是0~9的手寫阿拉伯?dāng)?shù)字的圖像,第2列到第785列是第1列手寫阿拉伯?dāng)?shù)字的像素值。其中,訓(xùn)練集(training set)由來自250個不同的人手寫的數(shù)字構(gòu)成,其中50%是高中學(xué)生,50%是人口普查局的工作人員,測試集(test set)也是由同樣比例的手寫數(shù)字構(gòu)成現(xiàn)在我們來看訓(xùn)練集,它由785列構(gòu)成。每張圖像的分辨率是28×28。因此,784列表示對應(yīng)每個數(shù)字的所有像素,最后一列表明這些像素實(shí)際表示的數(shù)字。我們來看看圖像和數(shù)據(jù)集的預(yù)覽效果(參見圖1)。
圖1:MNIST數(shù)據(jù)集
首先建立一個卷積神經(jīng)網(wǎng)絡(luò)模型對手寫體數(shù)據(jù)進(jìn)行分類,本文定義的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中,包含兩個卷積層conv1和conv2,每個層均包含卷積層與激活函數(shù)層、池化層。fc層包含兩個全連接層和激活函數(shù)層,out層由一個全連接層構(gòu)成,卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)圖如圖2所示。
圖2:卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
本文實(shí)驗(yàn)對手寫體數(shù)據(jù)集訓(xùn)練Epoch=5輪,每輪進(jìn)行100次迭代之后輸出損失值,并同時計(jì)算出算法在測試集合上的精度值。
圖3中的左圖是損失函數(shù)為交叉熵?fù)p失函數(shù)時所得到的訓(xùn)練集損失函數(shù)曲線,由圖可知,當(dāng)損失函數(shù)為交叉熵?fù)p失函數(shù)的時候,收斂曲線在剛開始的Epoch中進(jìn)行迭代時,損失值下降較快,隨著迭代此時與Epoch的次數(shù)增加,逐漸下降速度趨于平穩(wěn),在小幅波動情況下近似趨于收斂,總體呈下凸函數(shù)。
圖3右圖是損失函數(shù)為負(fù)對數(shù)似然函數(shù)時所得到的訓(xùn)練集損失函數(shù)曲線,由圖可知,當(dāng)損失函數(shù)為負(fù)對數(shù)似然函數(shù)的時候,收斂曲線整體呈上凸函數(shù),在最開始的幾輪Epoch中,訓(xùn)練集的損失值變化不大,但隨著迭代次數(shù)的增加,訓(xùn)練集的損失值一直在下降,通過觀察損失函數(shù)值,可知其損失函數(shù)值為負(fù)值,說明在利用負(fù)對數(shù)似然函數(shù)作為損失值時,樣本x分到y(tǒng)類的預(yù)測概率值 大于1,雖然在理論上,我們知道 得值時不應(yīng)該大于1的,但是在樣本的訓(xùn)練中,因?yàn)?的取值是來源于樣本本身的標(biāo)簽屬性,所以在實(shí)際訓(xùn)練中, 的值是可以取到大于1的。
圖3:交叉熵?fù)p失函數(shù)與負(fù)對數(shù)似然損失函數(shù)在訓(xùn)練集上的訓(xùn)練損失收斂曲線
因此在對比了交叉熵?fù)p失函數(shù)于負(fù)對數(shù)似然損失函數(shù)在訓(xùn)練集上的損失值,我們可以得出結(jié)論:在進(jìn)行手寫體數(shù)字識別時,采用交叉熵?fù)p失函數(shù)比負(fù)對數(shù)似然函數(shù)更好一些,圖4所描述的測試集的精度值也說明這一點(diǎn)。
圖4:交叉熵?fù)p失函數(shù)與負(fù)對數(shù)似然損失函數(shù)在測試集上的訓(xùn)練精度曲線
圖4中藍(lán)色的曲線表示的是損失函數(shù)為交叉熵?fù)p失函數(shù)時所得到得在測試集上得精度曲線,綠色得曲線是損失函數(shù)為負(fù)對數(shù)似然函數(shù)時所得到得在測試集上得精度曲線,由圖可知,當(dāng)損失函數(shù)為交叉熵?fù)p失函數(shù)時,算法得在測試集上得精度隨著訓(xùn)練次數(shù)得增加不斷升高,聯(lián)系圖3得訓(xùn)練集損失圖像可知,卷積神經(jīng)網(wǎng)絡(luò)算法選擇損失函數(shù)為交叉熵?fù)p失函數(shù)時,算法對數(shù)據(jù)得擬合度較好。反之,在損失函數(shù)為負(fù)對數(shù)似然函數(shù)時,測試集上得精度值一直不增長,說明算法在數(shù)據(jù)集上得擬合程度不好,因此我們可以得出結(jié)論:在進(jìn)行數(shù)據(jù)分析時,損失函數(shù)得選擇尤為重要,直接影響算法整體效率
本文針對兩種不同的損失函數(shù)進(jìn)行分析,即交叉熵?fù)p失函數(shù)與負(fù)對數(shù)似然函數(shù),雖然這兩個函數(shù)在公式上的定義是一致的,但是在實(shí)際多分類問題中,損失函數(shù)不同直接影響算法在數(shù)據(jù)集上的擬合效果。因此我們得出,數(shù)據(jù)集在進(jìn)行訓(xùn)練時候,樣本的真實(shí)值與預(yù)測值之間的差異除了與樣本自身信息有關(guān),還與損失函數(shù)的選擇有關(guān)。在機(jī)器學(xué)習(xí)算法中,我們定義過很多損失函數(shù),但是沒有一個損失函數(shù)是可以做到完全適用于所有類型的數(shù)據(jù),因此損失函數(shù)的選擇尤為重要。損失函數(shù)的選擇有多種因素構(gòu)成,最常見的是判斷數(shù)據(jù)是否具有離群點(diǎn),以及機(jī)器學(xué)習(xí)算法的選擇,在進(jìn)行梯度下降訓(xùn)練時候的時間效率,這也是今后進(jìn)一步的研究方向。