代價函數——二次代價函數、交叉熵(cross-entropy)、對數似然(log-likelihood cost)(04-1)


二次代價函數

$C = \frac{1} {2n} \sum_{x_1,...x_n} \|y(x)-a^L(x) \|^2$

其中,C表示代價函數,x表示樣本,y表示實際值,a表示輸出值,n表示樣本的總數;整個的意思就是把n個y-a的平方累加起來,再除以2n求一下均值。

為簡單起見,先看下 一個樣本 的情況,此時二次代價函數為:$C = \frac{(y-a)^2} {2}$

$a=\sigma(z), z=\sum w_j*x_j +b$  ,其中a就代表激活函數的輸出值,這個符號$\sigma$代表sigmoid函數將變量映射到0-1的$S$型光滑的曲線,z是上一層神經元信號的總和

假如我們使用梯度下降法(Gradient descent)來調整權值參數的大小,權值w和權值b的梯度推到如下(求導數):

   $\frac {\partial C} {\partial w} = (a-y)\sigma' (z)x$    $\frac {\partial C} {\partial b} = (a-y)\sigma' (z)$

其中,z表示神經元的輸入,$\sigma$表示激活函數sigmoid。可以看出,w和b的梯度跟激活函數的梯度成正比,激活函數的梯度越大,w和b的大小調整越快,訓練收斂的就越快。

 

 假設我們激活函數輸出的值目標是收斂到1,A點離目標較遠,梯度較大,權值調整比較大。B點為0.98離目標比較近,梯度比較小,權值調整比較小,調整方案合理。

 假設我們激活函數輸出的值目標是收斂到0,A點離目標較遠,梯度較大,權值調整比較大。B點為0.98離目標比較遠,梯度比較小,權值調整比較小,調整方案不合理,B點要經過非常長的時間才會收斂到0,而且B點很可能成為不收斂的點。

 

交叉墒代價函數(cross-entropy)

由於上邊的問題,我們換一種思路,我們不改變激活函數,而是改變代價函數,改用交叉墒代價函數:

$C = -\frac{1}{n} \sum_{x_1,,,x_n}, [y\ln a + (1-y) \ln(1-a)]$

其中,C表示代價函數,x表示樣本,y表示實際值,a表示輸出值,n表示樣本的總數。

$a=\sigma(z), z=\sum w_j*x_j +b $ $ \sigma'(z) = \sigma(z)(1-\sigma (x))$ sigmod函數的導數比較好求,這也是為什么大家用sigmoid做激活函數的原因,接下來我們看一下求導的過程

 

懶得敲了,直接貼個圖過來,之后閑了在敲一遍,上邊就是求導的推導過程,從最后的式子可以看出:權值w和偏執值b的調整與$\sigma '(z)$無關,另外,梯度公式中的$\sigma (z)-y$表示輸出值與實際值放入誤差。所以當誤差越大時,梯度就越大,參數w和b的調整就越快,訓練的速度也就越快。

總結:當輸出神經元是線性的,那么二次代價函數就是一種合適的選擇。如果輸出神經元是S型函數,那么比較適合交叉墒代價函數。

 

對數似然代價函數(log-likelihood cost)

對數似然函數常用來作為softmax回歸的代價函數,如果輸出層神經元是sigmoid函數,可以使用交叉墒代價函數。而深度學習中更普遍的做法是將softmax作為最后一層,此時常用的代價函數是對數似然代價函數。

對數似然代價函數與softmax的組合和交叉墒與sigmoid函數的組合非常相似。對數似然代價函數在二分類時可以化簡為交叉墒代價函數的形式。

在TensorFlow中用:

tf.nn.sigmoid_cross_entropy_with_logits()來表示跟sigmoid搭配使用的交叉墒。

tf.nn.softmax_cross_entropy_with_logits()來表示跟softmax搭配使用的交叉墒。

 

目錄:

  1. tensorflow簡介、目錄
  2. tensorflow中的圖(02-1)
  3. tensorflow變量的使用(02-2)
  4. tensorflow中的Fetch、Feed(02-3)
  5. tensorflow版helloworld---擬合線性函數的k和b(02-4)
  6. tensorflow非線性回歸(03-1)
  7. MNIST手寫數字分類simple版(03-2)
  8. 二次代價函數、交叉熵(cross-entropy)、對數似然代價函數(log-likelihood cost)(04-1)
  9. 多層網絡通過防止過擬合,增加模型的准確率(04-2)
  10. 修改優化器進一步提升准確率(04-3)
  11. 手寫數字識別-卷積神經網絡cnn(06-2)
  12. 循環神經網絡rnn與長短時記憶神經網絡簡述(07-2)
  13. 循環神經網絡lstm代碼實現(07-3)
  14. tensorflow模型保存和使用08
  15. 下載inception v3  google訓練好的模型並解壓08-3
  16. 使用inception v3做各種圖像分類識別08-4
  17. word2vec模型訓練簡單案例
  18. word2vec+textcnn文本分類簡述及代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM