深度學習(13)神經網絡中損失函數的作用

三要素

  • 機器學習的三要素就是:表示,評估和優化。
  1. 表示指的是將樣本空間映射到一個合適的特徵空間,一般地,我們更青睞於這樣的表示是低維度的,是更加稀疏交互的,同時也希望是相互獨立的。
  2. 評估指的是模型在數據上表現的量化形式,我們選取合適的函數來表示什麼樣子的模型是好的,性能度量就是評估。
  3. 在前兩步都完成了以後,最後要做的就是優化,就是對評估函數進行求解,找出最合適的解,來確定最終的模型。

所謂的性能度量(performance measure) 就是關於真實值和預測值的關係,真實值與預測值越接近,或者說真實的分佈與預測分佈越接近,性能越好。對於 迴歸 問題,我們可以選用均方誤差(mean squared error),絕對誤差(absolute Loss),決定係數(coefficient of determination )以及Huber Loss來度量模型的性能,對於 分類 問題,我們可以用準確率,錯誤率,或者得到混淆矩陣,進一步得到查準率(precision)、查全率(recall)以及P-R曲線和ROC曲線

我們可以很容易想到,損失函數(Loss function)也是這樣一回事情,真實值與預測值差別越大,Loss越大,我們的優化的目標就是減小Loss。從評估的角度來說,損失函數和性能度量所起到的作用是相同的,那麼我們爲什麼既要有損失函數,也有要性能評估呢?事實上,常見的均方誤差:

在這裏插入圖片描述

既可以被當作性能度量,同時也是迴歸問題的損失函數。但在更多的問題中,我們會發現,我們往往會爲了減小模型的錯誤率,並不直接優化錯誤率,而是會優化另一個函數,比如在logistic迴歸中,我們會優化對數似然,在SVM中,我們會優化hinge loss,在adaboost中會優化指數損失。

期望風險與經驗風險

  • 以二分類問題爲例,我們的錯誤率,也就是0-1損失函數,可以定義爲:

在這裏插入圖片描述

  • 如果我們的模型f攜帶參數θ,那麼我們的任務可以是找到最佳的θ:
    在這裏插入圖片描述

但這樣的函數並不是連續的,因爲參數的變化會反映到錯誤率上,而錯誤率的變化不可能是連續的,當我們預測對樣本每增加一個,錯誤率就會躍變1/m,如果我們採用梯度下降或者牛頓法去優化,就會利用到它的一階導數甚至二階導數,會發現導數根本不存在。

  • 所以損失函數一定要是連續的,這是尋找損失函數的第一個條件。此外,根本性的問題在於,我們想優化的根本不是經驗風險,所謂的經驗風險,如同上式,是定義在訓練集上的樣本上損失;我們真正想優化的是期望風險,定義在全部樣本(包含測試集)的損失,用期望來表示:

在這裏插入圖片描述

將其拆開就是:

在這裏插入圖片描述

但是概率分佈P(x,y)未知的話,我們連期望風險都無法計算,更無法將其最小化。但我們使用的數據越多,根據大數定律,期望風險也就越接近於經驗風險,注意到,我們的聯合分佈還可以寫爲:

在這裏插入圖片描述

  • 聯合分佈可以被拆爲先驗概率和條件概率。但是當我們可以假設模型的概率分佈時,比如線性迴歸假設了高斯分佈,logistic迴歸假設了伯努利分佈,我們就可以利用極大似然估計來逼近期望風險,這也叫做一致性(consistency ),這個是我們尋找損失的函數第二個條件

如果是連續的凸函數,在0處可導,且導數小於零,就具備與0-1損失函數的一致性,我們把這些損失函數叫做替代損失(Surrogate loss),值得注意的是,這是我們選用凸函數的最重要的原因,雖然凸函數具備局部最小值就是全局最小值的性質,但主要是爲了計算上的便利,而非本質意義上的。

在這裏插入圖片描述

如圖,除去Perceptron Loss,其餘的Loss function均可以給出0-1損失的上界,也就是說,在優化替代損失的時候,也就優化了原本的損失函數。

結構風險與正則化

在《貝葉斯的迴歸模型》中曾經把嶺迴歸的正則化項歸結於高斯先驗,把LASSO的正則化項歸結於拉普拉斯先驗,那麼從損失函數的構造角度來看,**所謂正則化項,描述的其實是模型的複雜度,模型的複雜度越高,過擬合的風險也就越大,所謂的結構風險就是指模型本身結構的複雜度。**添加結構風險的Loss Function一般形式就是:

在這裏插入圖片描述

結構風險加上經驗風險,是在數據量有限的情況下,爲了更好的近似期望風險的策略,這一策略的本質意義是,是希望在模型擬合數據能力和複雜度之間取得平衡,擬合數據相同的模型,我們偏向於複雜度低的模型,複雜度相同的模型,我們偏向於擬合得好的模型。雖然我們早就知道了正則化,但從這樣的思路去理解正則話會使得我們在神經網絡這樣解釋能力極差的模型中,也可以添加相應對連接權重的正則化項:

在這裏插入圖片描述


  • 有人認爲,凸函數在統計學習中最好的性質就是局部最優即全局最優,這樣算法就不用擔心其會陷入局部最優而非全局最優,但在神經網絡這樣極其複雜的參數空間中,我們有充足的理由不去過分擔心全局最優的問題。 從這個意義上來說, 尋找一致性的連續的損失函數纔是最關鍵的問題。 對於某些模型,結構風險天然就被包含在了模型之中,比如SVM,它的結構風險項是劃分超平面間隔的大小。

  • 有人認爲,什麼模型就只能用什麼損失函數 ,因爲其他的損失函數,書上沒有講過,這樣的看法是片面的,logistic迴歸這樣一種廣義的線性模型也可以用平方損失函數,只是平方損失並不會滿足一致性,得到的結果無法改善原來的損失。


損失函數層

cnn進行前向傳播階段,依次調用每個Layer的Forward函數,得到逐層的輸出,最後一層與目標函數比較得到損失函數,計算誤差更新值,通過反向傳播逐層到達第一層,所有權值在反向傳播結束時一起更新。

loss layer 是CNN的終點,接受兩個Blob作爲輸入,其中一個是CNN的預測值,另一個是真實標籤。損失層則將這兩個輸入進行一系列運算,得到當前網絡的損失函數(Loss Function),一般記做L(θ)其中θ是當前網絡權值構成的向量空間。機器學習的目的是在權值空間中找到讓損失函數L(θ) 最小的權值θ(opt),可以採用一系列最優化方法(如SGD方法)逼近權值θ(opt)。

損失函數是在前向傳播計算中得到的,同時也是反向傳播的起點。

Softmax函數

假設有K個類別,Softmax計算過程爲:
在這裏插入圖片描述

其中,j=0,1,2,3,4,5,…,K-1

下面圖更直觀:

在這裏插入圖片描述

  • softMax的結果相當於輸入圖像被分到每個標籤的概率分佈,該函數是單調增函數,即輸入值越大,輸出也就越大,輸入圖像屬於該標籤的概率就越大。

SVM只選自己喜歡的男神,Softmax把所有備胎全部拉出來評分,最後還歸一化一下

對softmax的結果計算交叉熵分類損失函數爲:

在這裏插入圖片描述

取log裏面的值就是這組數據正確分類的Softmax值,它佔的比重越大,這個樣本的Loss也就越小,這種定義符合我們的要求.

  • softmax函數的本質就是將一個K 維的任意實數向量壓縮(映射)成另一個K維的實數向量,其中向量中的每個元素取值都介於(0,1)之間。將高維的輸入x轉化一個K維的實數,即K類的各自的概率。

loss計算

理想的分類器應當是除了真實標籤的概率爲1,其餘標籤概率均爲0,這樣計算得到其損失函數爲-ln(1)=0.

損失函數越大,說明該分類器在真實標籤上的分類概率越小,性能也就越差。

當損失函數接近正無窮時表明訓練發散,需要調小學習速率。

在ImageNet-1000分類問題中,初始狀態爲均勻分佈,每個類別的分類概率均爲0.001,此時損失函數-ln(0.001)=ln(1000)=6.90775…,

當loss總在6.9左右時,說明 沒有訓練收斂的跡象,嘗試調大學習速率,或者修改權值初始化方式。

  • softmax_loss的計算包含2步:

    1. 計算softmax歸一化概率

    2. 計算損失

這裏以batchsize=1的2分類爲例:

設最後一層的輸出爲[1.2 0.8],減去最大值後爲[0 -0.4],

然後計算歸一化概率得到[0.5987 0.4013],

假如該圖片的label爲1,則Loss=-log0.4013=0.9130

  • 可選參數
    1. ignore_label
      int型變量,默認爲空。如果指定值,則label等於ignore_label的樣本將不參與Loss計算,並且反向傳播時梯度直接置0.

    2. normalize
      bool型變量,即Loss會除以參與計算的樣本總數;否則Loss等於直接求和

    3. normalization

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章