常見的損失函數,代價函數以及優化算法彙總

在機器學習和深度學習中,我們通常只需要掌握三個步驟就可以完成訓練了,拿起數據(特徵),搭上模型(目標函數,損失函數,代價函數),不斷優化(優化函數-梯度下降,adam,動量-找到最優的W),就可以完成了

1. 損失函數、代價函數與目標函數
損失函數(Loss Function):是定義在單個樣本上的,是指一個樣本的誤差。
代價函數(Cost Function):是定義在整個訓練集上的,是所有樣本誤差的平均,也就是所有損失函數值的平均。
目標函數(Object Function):是指最終需要優化的函數,一般來說是經驗風險+正則化,也就是(代價函數+正則化項)。
損失函數:
……0-1損失函數
……平方損失函數
……絕對值損失函數
……對數損失函數
……指數損失函數
……鉸鏈損失函數
代價函數:
……均方誤差
……均方根誤差
……平均絕對誤差
……交叉熵代價函數

2. 損失函數
(1)0-1損失函數(0-1 loss function) -----------感知機
在這裏插入圖片描述
(2)平方損失函數(quadratic loss function)------------線性迴歸
在這裏插入圖片描述
(3)絕對值損失函數(absolute loss function)
在這裏插入圖片描述
(4)對數損失函數(logarithmic loss function)-----------邏輯迴歸
在這裏插入圖片描述
(5)指數損失函數(Exponential Loss Function)----------adaboost
在這裏插入圖片描述
(6)鉸鏈損失函數(Hinge loss) ----------SVM
Hinge loss一般分類算法中的損失函數,尤其是SVM。 其中 y=+1或y=−1,f(x)=wx+b,當爲SVM的線性核時。
在這裏插入圖片描述

3. 常用的代價函數
(1)均方誤差(Mean Squared Error)-------(平方損失函數)
在這裏插入圖片描述
(2)均方根誤差-------(平方損失函數)
在這裏插入圖片描述
(3)平均絕對誤差(Mean Absolute Error)-------(絕對值損失函數)
在這裏插入圖片描述
(3)交叉熵代價函數(Cross Entry)----------(對數損失函數)
在這裏插入圖片描述
比如對於二分類模型的交叉熵代價函數:
在這裏插入圖片描述

4、經驗風險和結構風險
一般來說,目標函數就是代價函數(訓練樣本的總誤差),我們也稱代價函數爲經驗風險

         目標函數爲經驗風險              經驗風險=代價函數

結構風險是在經驗風險的基礎上加上表示模型複雜度的正則項 ----爲防止過擬合而提出

         目標函數爲結構風險       結構風險=經驗風險+正則化

5、優化函數

確定了目標函數,接下來的工作就是求最優化的參數W,讓目標函數達到最優值
深度學習優化算法經歷了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam
說到優化算法,入門級必從 SGD 學起,SGD沒有動量,這是最經典也是目前頂級論文都還在用的算法。

優化算法通用框架
首先定義:待優化參數:w ,目標函數: f(w),初始學習率 α。而後,開始進行迭代優化。在每個epoch t:
已經確定了目標函數,包含動量

  1. 計算目標函數關於當前參數的梯度:

    在這裏插入圖片描述

  2. 根據歷史梯度計算一階動量和二階動量:
    在這裏插入圖片描述
    在這裏插入圖片描述

  3. 計算當前時刻的下降梯度:
    在這裏插入圖片描述

  4. 根據下降梯度進行更新:
    在這裏插入圖片描述

常見的優化函數:

1、固定學習率的優化算法.
…sgd
…sgd+Momentum
…sgd+Nesterov Acceleration
2、自適應學習率的優化算法
…AdaGrad
…AdaDelta / RMSProp
…Adam
…Nadam

1、固定學習率的優化算法
SGD算法:
梯度下降法的優化思想是用當前位置負梯度方向作爲搜索方向,因爲該方向爲當前位置的最快下降方向
SGD沒有動量的概念,也就是說:
計算梯度方向
在這裏插入圖片描述
計算沿着梯度方向下降的距離
在這裏插入圖片描述
更新參數W
在這裏插入圖片描述
其中,SGD沒有用到二階動量,因此學習率是恆定的(實際使用過程中會採用學習率衰減策略,因此學習率遞減)。

SGDM (SGD with Momentum )算法
爲了抑制SGD的震盪,SGDM認爲梯度下降過程可以加入慣性。下坡的時候,如果發現是陡坡,那就利用慣性跑的快一些。SGDM全稱是SGD with momentum,在SGD基礎上引入了一階動量:
計算梯度方向
在這裏插入圖片描述
計算沿着梯度方向下降的距離
在這裏插入圖片描述
更新參數W
在這裏插入圖片描述
t 時刻的下降方向,不僅由當前點的梯度方向決定,而且由此前累積的下降方向決定(mt-1)。β1的經驗值爲0.9,這就意味着下降方向主要是此前累積的下降方向,並略微偏向當前時刻的下降方向。

SGD with Nesterov Acceleration

我們知道在時刻 t 的主要下降方向是由累積動量決定的,自己的梯度方向說了也不算,那與其看當前梯度方向,不如先看看如果跟着累積動量走了一步,那個時候再怎麼走。因此,NAG在步驟 1,不計算當前位置的梯度方向,而是計算如果按照累積動量走了一步,那個時候的下降方向:
在這裏插入圖片描述
然後用下一個點的梯度方向,與歷史累積動量相結合,計算步驟 2 中當前時刻的累積動量。
在這裏插入圖片描述

2、自適應學習率的優化算法

“自適應學習率”優化算法需要用到二階動量。SGD及其變種以同樣的學習率更新每個參數,但深度神經網絡往往包含大量的參數,這些參數並不是總會用得到。對於經常更新的參數,我們已經積累了大量關於它的知識,不希望被單個樣本影響太大,希望學習速率慢一些;對於偶爾更新的參數,我們瞭解的信息太少,希望能從每個偶然出現的樣本身上多學一些,即學習速率大一些。

AdaGrad
怎麼樣去度量歷史更新頻率呢?那就是二階動量——該維度上,迄今爲止所有梯度值的平方和:
在這裏插入圖片描述
其他按照我們上述的優化算法通用框架計算最優值。
在這裏插入圖片描述
觀察我們通用框架中的第三步,此時實質上的學習率由
在這裏插入圖片描述
參數更新越頻繁,二階動量越大,學習率就越小,適合處理稀疏梯度。因爲優化算法通用框架中第三步分母是單調遞增的,會使得學習率單調遞減至0,可能會使得訓練過程提前結束,即便後續還有數據也無法學到必要的知識。

AdaDelta / RMSProp
由於AdaGrad單調遞減的學習率變化過於激進,我們考慮一個改變二階動量計算方法的策略:不累積全部歷史梯度,而只關注過去一段時間窗口的下降梯度。這也就是AdaDelta名稱中Delta的來歷。指數移動平均值大約就是過去一段時間的平均值,因此我們用這一方法來計算二階累積動量:

在這裏插入圖片描述
Adam
談到這裏,Adam和Nadam的出現就很自然而然了——它們是前述方法的集大成者。我們看到,SGD-M在SGD基礎上增加了一階動量,AdaGrad和AdaDelta在SGD基礎上增加了二階動量。把一階動量和二階動量都用起來,就是Adam了——Adaptive + Momentum。
SGD的一階動量:
在這裏插入圖片描述
加上AdaDelta的二階動量:
在這裏插入圖片描述
優化算法裏最常見的兩個超參數β1,β2就都在這裏了,前者控制一階動量,後者控制二階動量

Nadam

最後是Nadam。Nadam=Adam+Nesterov
按照NAG的步驟1來計算梯度:
改進地方在第一步加入了Nesterov
在這裏插入圖片描述

另外:
需要注意的是最小二乘法,最小二乘法的解釋就是直接求導找出全局最小,是非迭代法。那麼在我看來這個最小二乘法既給出了目標函數,同時也給出了優化方式即一步到位。
最小二乘法的目標函數如下,就是平方差的和,爲了方便計算通常會在前面乘上1/2:

在這裏插入圖片描述
第二步:對目標函數L求導數
第三步:令導數最小或爲0,求駐點

參考博客:
https://www.cnblogs.com/adong7639/p/9850379.html
https://www.cnblogs.com/lliuye/p/9549881.html

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