趙開宇
(作者單位:四川省廣播電視科學(xué)技術(shù)研究所)
隨著以大數(shù)據(jù)、人工智能為代表的數(shù)據(jù)產(chǎn)業(yè)的不斷發(fā)展,海量數(shù)據(jù)的運算對人工智能提出了更高的要求。如何快速、準確、高效地通過深度學(xué)習(xí)完成機器對數(shù)據(jù)的自動處理是時下的技術(shù)熱點。本文主要針對“Softmax + 二次代價函數(shù)”“Softmax +交叉熵代價函數(shù)”“Sigmoid + 交叉熵代價函數(shù)”三種具有代表性的函數(shù)搭配,進行深度學(xué)習(xí)擬合收斂比較,探討提升深度學(xué)習(xí)準確率的技術(shù)方法。
由于人的筆跡各不相同,手寫數(shù)字識別的功能就是通過深度學(xué)習(xí),準確識別不同筆跡下的正確數(shù)字,如圖1所示:
圖1 手寫數(shù)字識別效果示例
程序運用的是國際開源社區(qū)上成熟的MNIST訓(xùn)練數(shù)據(jù)集,該數(shù)據(jù)包含6萬個數(shù)字圖和1萬個測試圖。每個圖由28×28=784位的矩陣組成,將矩陣向量中的每個元素按由“白”到“黑”取0~1的不同數(shù)字(保留小數(shù)點后1位),代表不同的顏色深度。例如:“0”表示顏色最淺,“1”表示顏色最深。數(shù)字轉(zhuǎn)化矩陣如圖2所示:
圖2 數(shù)字轉(zhuǎn)化矩陣
將每個圖片28×28的矩陣向量轉(zhuǎn)換成1×784的一維向量,目標(biāo)標(biāo)簽取數(shù)字0~9的數(shù)字,最后通過“one-hot vector”取最大值所在位置索引,得到1×10的一維標(biāo)簽向量。MNIST訓(xùn)練集包括60 000張圖片,則可得60 000×784的矩陣向量,通過神經(jīng)網(wǎng)絡(luò)784×10的矩陣向量深度學(xué)習(xí),得到60 000×10的目標(biāo)向量。
程序使用的Anacoda Navigator 3 搭建的軟件環(huán)境,語言為Python 3.9.7,深度學(xué)習(xí)工具為Tensorflow 2.5,IDE使用Jupyter Notebook。
Softmax的公式:
Softmax是一種歸一化函數(shù),它能將K維實數(shù)向量Z壓縮到另一個K維向量σ中,σ中的每個元素表示其對應(yīng)K元素的概率值,概率值介于0~1,且概率和等于1。
例:設(shè)a1=[4.2, 5.3, -1.1, 2.4],則Softmax(a1)=[0.23955214 0.71965441 0.00119575 0.0395977 ]
Softmax的回歸模型如圖3所示:
圖3 Softmax回歸運算模型
Softmax的函數(shù)圖像如圖4所示:
圖4 Softmax函數(shù)圖像
C表示代價,n表示樣本數(shù),x表示樣本,y表示實際值,a表示輸出值(預(yù)測值)。
z表示神經(jīng)元的輸入,σ(z)表示激活函數(shù),C表示代價,y表示實際值,a表示輸出值(預(yù)測值),w表示神經(jīng)網(wǎng)絡(luò)權(quán)重值,b表示偏執(zhí)值。
由式(3)、式(4)可知,w和b的梯度與激活函數(shù)的梯度成正比(梯度可近似理解為斜率),激活函數(shù)的梯度越大,會使得w和b的梯度越大,進而預(yù)測值和實際值間的調(diào)整越大,擬合(收斂)速度越快。
故,二次代價函數(shù)比較適合具有線性特征的數(shù)據(jù)擬合。
備注:由于全部數(shù)據(jù)的損失函數(shù)使用梯度下降法太費時,這里引入了batch(批次),使用批量梯度下降法。
“Softmax+二次代價函數(shù)”輸出結(jié)果如下:
結(jié)果顯示:16次訓(xùn)練,準確率上升到0.911。
C表示代價,n表示樣本數(shù),x表示樣本,y表示實際值,a表示輸出值(預(yù)測值)。
由式(6)、式(7)可知,w和b的梯度與激活函數(shù)的梯度無關(guān),僅與σ(z)輸出值與實際值的差成正比。差值越大,w和b的梯度越大,進而預(yù)測值和實際值間的調(diào)整越大,擬合(收斂)速度 越快。
故,不同于二次代價函數(shù)適合線性關(guān)系數(shù)據(jù)擬合,交叉熵代價函數(shù)比較適合非線性數(shù)據(jù)的擬合。
在“Softmax+二次代價函數(shù)”的程序基礎(chǔ)上,將損失函數(shù)
“l(fā)oss = tf.reduce_mean(tf.square(y-prediction))”變更為
“l(fā)oss =tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))”
“Softmax+交叉熵代價函數(shù)”輸出結(jié)果如下:結(jié)果顯示:16次訓(xùn)練,準確率上升到0.9211。
Sigmoid的公式:
Sigmoid是一種閾值函數(shù)(非歸一化函數(shù)),與Softmax不同,概率值介于0~1。
例:設(shè)a2=[4.2, 5.3, -1.1, 2.4],則Sigmoid(a2)=[0.98522597 0.9950332 0.24973989 0.9168273]。
Sigmoid的函數(shù)圖像如圖7所示:
由圖5可知,Sigmoid函數(shù)的梯度變化有一個“慢—快—慢”的過程。
圖5 Sigmoid函數(shù)圖像
在“Softmax+二次代價函數(shù)”的程序基礎(chǔ)上,
激活函數(shù)不變依然是Softmax,因為使用交叉熵的前提是對數(shù)據(jù)進行歸一化處理。
將損失函數(shù)
“l(fā)oss = tf.reduce_mean(tf.square(y-prediction))”變更為
“l(fā)oss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y, logits=prediction))”
“Sigmoid+交叉熵代價函數(shù)”輸出結(jié)果如下:
結(jié)果顯示:16次訓(xùn)練,準確率上升到0.8927。
對“Softmax+二次代價函數(shù)”“Softmax+交叉熵代價函數(shù)”“Sigmoid+交叉熵代價函數(shù)”三種函數(shù)搭配的運行結(jié)果進行準確率比較,如表1所示:
表1 三種函數(shù)搭配的運行結(jié)果比較
結(jié)果數(shù)據(jù)圖形如圖6所示:
圖6 三組函數(shù)搭配的準確率效果比較
在對輸入數(shù)據(jù)的適用范圍上,交叉熵代價函數(shù)比二次代價函數(shù)適用更廣。若神經(jīng)元數(shù)據(jù)有線性特點,則二次代價函數(shù)效果更佳。
在訓(xùn)練次數(shù)較少的深度學(xué)習(xí)中,在數(shù)據(jù)擬合(收斂)效率上Sigmoid不如Softmax。