小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

AI基礎(chǔ):機(jī)器學(xué)習(xí)的損失函數(shù)

 LibraryPKU 2020-01-22

0.導(dǎo)語

無論在機(jī)器學(xué)習(xí)還是深度領(lǐng)域中,損失函數(shù)都是一個非常重要的知識點(diǎn)。損失函數(shù)(Loss Function)是用來估量模型的預(yù)測值 f(x) 與真實(shí)值 y 的不一致程度。我們的目標(biāo)就是最小化損失函數(shù),讓 f(x) 與 y 盡量接近。通??梢允褂锰荻认陆邓惴▽ふ液瘮?shù)最小值。

損失函數(shù)有許多不同的類型,沒有哪種損失函數(shù)適合所有的問題,需根據(jù)具體模型和問題進(jìn)行選擇。一般來說,損失函數(shù)大致可以分成兩類:回歸(Regression)和分類(Classification)。

目前已經(jīng)發(fā)布:

AI 基礎(chǔ):簡易數(shù)學(xué)入門

AI 基礎(chǔ):Python開發(fā)環(huán)境設(shè)置和小技巧

AI 基礎(chǔ):Python 簡易入門

AI 基礎(chǔ):Numpy 簡易入門

AI 基礎(chǔ):Pandas 簡易入門

AI 基礎(chǔ):Scipy(科學(xué)計(jì)算庫) 簡易入門

AI基礎(chǔ):數(shù)據(jù)可視化簡易入門(matplotlib和seaborn)

AI基礎(chǔ):機(jī)器學(xué)習(xí)庫Scikit-learn的使用

AI基礎(chǔ):機(jī)器學(xué)習(xí)簡易入門

AI基礎(chǔ):特征工程-類別特征

AI基礎(chǔ):特征工程-數(shù)字特征處理

AI基礎(chǔ):特征工程-文本特征處理

AI基礎(chǔ):詞嵌入基礎(chǔ)和Word2Vec

AI基礎(chǔ):圖解Transformer

AI基礎(chǔ):一文看懂BERT

后續(xù)持續(xù)更新

本文作者:紅色石頭

出處:AI有道

1.回歸損失函數(shù)

回歸模型中的三種損失函數(shù)包括:均方誤差(Mean Square Error)、平均絕對誤差(Mean Absolute Error,MAE)、Huber Loss。

1. 均方誤差(Mean Square Error,MSE)

均方誤差指的就是模型預(yù)測值 f(x) 與樣本真實(shí)值 y 之間距離平方的平均值。其公式如下所示:

其中,yi 和 f(xi) 分別表示第 i 個樣本的真實(shí)值和預(yù)測值,m 為樣本個數(shù)。

為了簡化討論,忽略下標(biāo) i,m = 1,以 y-f(x) 為橫坐標(biāo),MSE 為縱坐標(biāo),繪制其損失函數(shù)的圖形:

MSE 曲線的特點(diǎn)是光滑連續(xù)、可導(dǎo),便于使用梯度下降算法,是比較常用的一種損失函數(shù)。而且,MSE 隨著誤差的減小,梯度也在減小,這有利于函數(shù)的收斂,即使固定學(xué)習(xí)因子,函數(shù)也能較快取得最小值。

平方誤差有個特性,就是當(dāng) yi 與 f(xi) 的差值大于 1 時(shí),會增大其誤差;當(dāng) yi 與 f(xi) 的差值小于 1 時(shí),會減小其誤差。這是由平方的特性決定的。也就是說, MSE 會對誤差較大(>1)的情況給予更大的懲罰,對誤差較?。?lt;1)的情況給予更小的懲罰。從訓(xùn)練的角度來看,模型會更加偏向于懲罰較大的點(diǎn),賦予其更大的權(quán)重。

如果樣本中存在離群點(diǎn),MSE 會給離群點(diǎn)賦予更高的權(quán)重,但是卻是以犧牲其他正常數(shù)據(jù)點(diǎn)的預(yù)測效果為代價(jià),這最終會降低模型的整體性能。我們來看一下使用 MSE 解決含有離群點(diǎn)的回歸模型。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 20, 40)
y = x + [np.random.choice(4) for _ in range(40)]
y[-5:] -= 8
X = np.vstack((np.ones_like(x),x))    # 引入常數(shù)項(xiàng) 1
m = X.shape[1]
# 參數(shù)初始化
W = np.zeros((1,2))

# 迭代訓(xùn)練 
num_iter = 20
lr = 0.01
J = []
for i in range(num_iter):
   y_pred = W.dot(X)
   loss = 1/(2*m) * np.sum((y-y_pred)**2)
   J.append(loss)
   W = W + lr * 1/m * (y-y_pred).dot(X.T)

# 作圖
y1 = W[0,0] + W[0,1]*1
y2 = W[0,0] + W[0,1]*20
plt.scatter(x, y)
plt.plot([1,20],[y1,y2])
plt.show()

擬合結(jié)果如下圖所示:

可見,使用 MSE 損失函數(shù),受離群點(diǎn)的影響較大,雖然樣本中只有 5 個離群點(diǎn),但是擬合的直線還是比較偏向于離群點(diǎn)。這往往是我們不希望看到的。

2. 平均絕對誤差(Mean Absolute Error,MAE)

平均絕對誤差指的就是模型預(yù)測值 f(x) 與樣本真實(shí)值 y 之間距離的平均值。其公式如下所示:

為了簡化討論,忽略下標(biāo) i,m = 1,以 y-f(x) 為橫坐標(biāo),MAE 為縱坐標(biāo),繪制其損失函數(shù)的圖形:

直觀上來看,MAE 的曲線呈 V 字型,連續(xù)但在 y-f(x)=0 處不可導(dǎo),計(jì)算機(jī)求解導(dǎo)數(shù)比較困難。而且 MAE 大部分情況下梯度都是相等的,這意味著即使對于小的損失值,其梯度也是大的。這不利于函數(shù)的收斂和模型的學(xué)習(xí)。

值得一提的是,MAE 相比 MSE 有個優(yōu)點(diǎn)就是 MAE 對離群點(diǎn)不那么敏感,更有包容性。因?yàn)?MAE 計(jì)算的是誤差 y-f(x) 的絕對值,無論是 y-f(x)>1 還是 y-f(x)<1,沒有平方項(xiàng)的作用,懲罰力度都是一樣的,所占權(quán)重一樣。針對 MSE 中的例子,我們來使用 MAE 進(jìn)行求解,看下擬合直線有什么不同。

X = np.vstack((np.ones_like(x),x))    # 引入常數(shù)項(xiàng) 1
m = X.shape[1]
# 參數(shù)初始化
W = np.zeros((1,2))

# 迭代訓(xùn)練 
num_iter = 20
lr = 0.01
J = []
for i in range(num_iter):
   y_pred = W.dot(X)
   loss = 1/m * np.sum(np.abs(y-y_pred))
   J.append(loss)
   mask = (y-y_pred).copy()
   mask[y-y_pred > 0] = 1
   mask[mask <= 0] = -1
   W = W + lr * 1/m * mask.dot(X.T)

# 作圖
y1 = W[0,0] + W[0,1]*1
y2 = W[0,0] + W[0,1]*20
plt.scatter(x, y)
plt.plot([1,20],[y1,y2],'r--')
plt.xlabel('x')
plt.ylabel('y')
plt.title('MAE')
plt.show()

注意上述代碼中對 MAE 計(jì)算梯度的部分。

擬合結(jié)果如下圖所示:

顯然,使用 MAE 損失函數(shù),受離群點(diǎn)的影響較小,擬合直線能夠較好地表征正常數(shù)據(jù)的分布情況。這一點(diǎn),MAE 要優(yōu)于 MSE。二者的對比圖如下:

選擇 MSE 還是 MAE 呢?

實(shí)際應(yīng)用中,我們應(yīng)該選擇 MSE 還是 MAE 呢?從計(jì)算機(jī)求解梯度的復(fù)雜度來說,MSE 要優(yōu)于 MAE,而且梯度也是動態(tài)變化的,能較快準(zhǔn)確達(dá)到收斂。但是從離群點(diǎn)角度來看,如果離群點(diǎn)是實(shí)際數(shù)據(jù)或重要數(shù)據(jù),而且是應(yīng)該被檢測到的異常值,那么我們應(yīng)該使用MSE。另一方面,離群點(diǎn)僅僅代表數(shù)據(jù)損壞或者錯誤采樣,無須給予過多關(guān)注,那么我們應(yīng)該選擇MAE作為損失。

3. Huber Loss

既然 MSE 和 MAE 各有優(yōu)點(diǎn)和缺點(diǎn),那么有沒有一種激活函數(shù)能同時(shí)消除二者的缺點(diǎn),集合二者的優(yōu)點(diǎn)呢?答案是有的。Huber Loss 就具備這樣的優(yōu)點(diǎn),其公式如下:

Huber Loss 是對二者的綜合,包含了一個超參數(shù) δ。δ 值的大小決定了 Huber Loss 對 MSE 和 MAE 的側(cè)重性,當(dāng) |y?f(x)| ≤ δ 時(shí),變?yōu)?MSE;當(dāng) |y?f(x)| > δ 時(shí),則變成類似于 MAE,因此 Huber Loss 同時(shí)具備了 MSE 和 MAE 的優(yōu)點(diǎn),減小了對離群點(diǎn)的敏感度問題,實(shí)現(xiàn)了處處可導(dǎo)的功能。

通常來說,超參數(shù) δ 可以通過交叉驗(yàn)證選取最佳值。下面,分別取 δ = 0.1、δ = 10,繪制相應(yīng)的 Huber Loss,如下圖所示:

Huber Loss 在 |y?f(x)| > δ 時(shí),梯度一直近似為 δ,能夠保證模型以一個較快的速度更新參數(shù)。當(dāng) |y?f(x)| ≤ δ 時(shí),梯度逐漸減小,能夠保證模型更精確地得到全局最優(yōu)值。因此,Huber Loss 同時(shí)具備了前兩種損失函數(shù)的優(yōu)點(diǎn)。

下面,我們用 Huber Loss 來解決同樣的例子。

X = np.vstack((np.ones_like(x),x))    # 引入常數(shù)項(xiàng) 1
m = X.shape[1]
# 參數(shù)初始化
W = np.zeros((1,2))

# 迭代訓(xùn)練 
num_iter = 20
lr = 0.01
delta = 2
J = []
for i in range(num_iter):
   y_pred = W.dot(X)
   loss = 1/m * np.sum(np.abs(y-y_pred))
   J.append(loss)
   mask = (y-y_pred).copy()
   mask[y-y_pred > delta] = delta
   mask[mask < -delta] = -delta
   W = W + lr * 1/m * mask.dot(X.T)

# 作圖
y1 = W[0,0] + W[0,1]*1
y2 = W[0,0] + W[0,1]*20
plt.scatter(x, y)
plt.plot([1,20],[y1,y2],'r--')
plt.xlabel('x')
plt.ylabel('y')
plt.title('MAE')
plt.show()

注意上述代碼中對 Huber Loss 計(jì)算梯度的部分。

擬合結(jié)果如下圖所示:

可見,使用 Huber Loss 作為激活函數(shù),對離群點(diǎn)仍然有很好的抗干擾性,這一點(diǎn)比 MSE 強(qiáng)。另外,我們把這三種損失函數(shù)對應(yīng)的 Loss 隨著迭代次數(shù)變化的趨勢繪制出來:

MSE:

MAE:

Huber Loss:

對比發(fā)現(xiàn),MSE 的 Loss 下降得最快,MAE 的 Loss 下降得最慢,Huber Loss 下降速度介于 MSE 和 MAE 之間。也就是說,Huber Loss 彌補(bǔ)了此例中 MAE 的 Loss 下降速度慢的問題,使得優(yōu)化速度接近 MSE。

最后,我們把以上介紹的回歸問題中的三種損失函數(shù)全部繪制在一張圖上。

好了,以上就是回歸問題 3 種常用的損失函數(shù)包括:MSE、MAE、Huber Loss 的簡單介紹和詳細(xì)對比。

2.分類損失函數(shù)

0.模型輸出 

在討論分類問題的損失函數(shù)之前,我想先說一下模型的輸出 g(s)。一般來說,二分類機(jī)器學(xué)習(xí)模型包含兩個部分:線性輸出 s 和非線性輸出 g(s)。其中,線性輸出一般是模型輸入 x 與 參數(shù) w 的乘積,簡寫成:s = wx;非線性輸出一般是 Sigmoid 函數(shù),其表達(dá)式如下:

經(jīng)過 Sigmoid 函數(shù),g(s) 值被限定在 [0,1] 之間,若 s ≥ 0,g(s) ≥ 0.5,則預(yù)測為正類;若 s < 0,g(s) < 0.5,則預(yù)測為負(fù)類。

關(guān)于正類和負(fù)類的表示,通常有兩種方式:一種是用 {+1, -1} 表示正負(fù)類;另一種是用 {1, 0} 表示正負(fù)類。下文默認(rèn)使用 {+1, -1},因?yàn)檫@種表示方法有種好處。如果使用 {+1, -1} 表示正負(fù)類,我們來看預(yù)測類別與真實(shí)類別的四種情況:

  • s ≥ 0, y = +1: 預(yù)測正確

  • s ≥ 0, y = -1: 預(yù)測錯誤

  • s < 0, y = +1: 預(yù)測錯誤

  • s < 0, y = -1: 預(yù)測正確

發(fā)現(xiàn)了嗎?顯然,上面四個式子可以整合成直接看 ys 的符號即可:

  • 若 ys ≥ 0,則預(yù)測正確

  • 若 ys < 0,則預(yù)測錯誤

這里的 ys 類似與回歸模型中的殘差 s - y。因此,在比較分類問題的各個損失函數(shù)的時(shí)候,我們就可以把 ys 當(dāng)作自變量 x 軸即可,這樣更加方便。

1.0-1 Loss

0-1 Loss 是最簡單也是最容易直觀理解的一種損失函數(shù)。對于二分類問題,如果預(yù)測類別 y_hat 與真實(shí)類別 y 不同,則 L=1;如果預(yù)測類別 y_hat 與 真實(shí)類別 y 相同,則 L=0(L 表示損失函數(shù))。0-1 Loss 的表達(dá)式為:

0-1 Loss 的曲線如下圖所示:

0-1 Loss 的特點(diǎn)就是非常直觀容易理解。但是它存在兩個缺點(diǎn):

  • 0-1 Loss 對每個錯分類點(diǎn)都施以相同的懲罰(損失為 1),這樣對犯錯比較大的點(diǎn)(ys 遠(yuǎn)小于 0)無法進(jìn)行較大的懲罰,所有犯錯點(diǎn)都同等看待,這不符合常理,不太合適。

  • 0-1 Loss 不連續(xù)、非凸、不可導(dǎo),難以使用梯度優(yōu)化算法。

因此,實(shí)際應(yīng)用中,0-1 Loss 很少使用。

2.Cross Entropy Loss

Cross Entropy Loss 是非常重要的損失函數(shù),也是應(yīng)用最多的損失函數(shù)之一。二分類問題的交叉熵 Loss 主要有兩種形式,下面分別詳細(xì)介紹。

第一種形式是基于輸出標(biāo)簽 label 的表示方式為 {0,1},也最為常見。它的 Loss 表達(dá)式為:

這個公式是如何推導(dǎo)的呢?很簡單,從極大似然性的角度出發(fā),預(yù)測類別的概率可以寫成:

我們可以這么來看,當(dāng)真實(shí)樣本標(biāo)簽 y = 1 時(shí),上面式子第二項(xiàng)就為 1,概率等式轉(zhuǎn)化為:

當(dāng)真實(shí)樣本標(biāo)簽 y = 0 時(shí),上面式子第一項(xiàng)就為 1,概率等式轉(zhuǎn)化為:

我們希望的是概率 P(y|x) 越大越好。首先,我們對 P(y|x) 引入 log 函數(shù),因?yàn)?log 運(yùn)算并不會影響函數(shù)本身的單調(diào)性。則有:

我們希望 log P(y|x) 越大越好,反過來,只要 log P(y|x) 的負(fù)值 -log P(y|x) 越小就行了。那我們就可以引入損失函數(shù),且令 Loss = -log P(y|x) 即可。則得到損失函數(shù)為:

我們來看,當(dāng) y = 1 時(shí):

因?yàn)椋?br>

所以,代入到 L 中,得:

這時(shí)候,Loss 的曲線如下圖所示:

從圖中明顯能夠看出,s 越大于零,L 越小,函數(shù)的變化趨勢也完全符合實(shí)際需要的情況。

當(dāng) y = 0 時(shí):

對上式進(jìn)行整理,同樣能得到:

這時(shí)候,Loss 的曲線如下圖所示:

從圖中明顯能夠看出,s 越小于零,L 越小,函數(shù)的變化趨勢也完全符合實(shí)際需要的情況。

第二種形式是基于輸出標(biāo)簽 label 的表示方式為 {-1,+1},也比較常見。它的 Loss 表達(dá)式為:

下面對上式做個簡單的推導(dǎo),我們在 0 小節(jié)說過,ys 的符號反映了預(yù)測的準(zhǔn)確性。除此之外,ys 的數(shù)值大小也反映了預(yù)測的置信程度。所以,從概率角度來看,預(yù)測類別的概率可以寫成:

分別令 y = +1 和 y = -1 就能很容易理解上面的式子。

接下來,同樣引入 log 函數(shù),要讓概率最大,反過來,只要其負(fù)數(shù)最小即可。那么就可以定義相應(yīng)的損失函數(shù)為:

這時(shí)候,我們以 ys 為橫坐標(biāo),可以繪制 Loss 的曲線如下圖所示:

其實(shí)上面介紹的兩種形式的交叉熵 Loss 是一樣的,只不過由于標(biāo)簽 label 的表示方式不同,公式稍有變化。標(biāo)簽用 {-1,+1} 表示的好處是可以把 ys 整合在一起,作為橫坐標(biāo),容易作圖且具有實(shí)際的物理意義。

總結(jié)一下,交叉熵 Loss 的優(yōu)點(diǎn)是在整個實(shí)數(shù)域內(nèi),Loss 近似線性變化。尤其是當(dāng) ys << 0 的時(shí)候,Loss 更近似線性。這樣,模型受異常點(diǎn)的干擾就較小。而且,交叉熵 Loss 連續(xù)可導(dǎo),便于求導(dǎo)計(jì)算,是使用最廣泛的損失函數(shù)之一。

3.Hinge Loss

Hinge Loss,又稱合頁損失,其表達(dá)式如下:

Hinge Loss 的曲線如下圖所示:

Hinge Loss 的形狀就像一本要合上的書,故稱為合頁損失。顯然,只有當(dāng) ys < 1 時(shí),Loss 才大于零;對于 ys > 1 的情況,Loss 始終為零。

Hinge Loss 一般多用于支持向量機(jī)(SVM)中,體現(xiàn)了 SVM 距離最大化的思想。而且,當(dāng) Loss 大于零時(shí),是線性函數(shù),便于梯度下降算法求導(dǎo)。

Hinge Loss 的另一個優(yōu)點(diǎn)是使得 ys > 0 的樣本損失皆為 0,由此帶來了稀疏解,使得 SVM 僅通過少量的支持向量就能確定最終超平面。

4.Exponential Loss

Exponential Loss,又稱指數(shù)損失,其表達(dá)式如下:

可以對上式進(jìn)行一個直觀的理解,類似于上文提到的第二種形式的交叉熵 Loss,去掉 log 和 log 中的常數(shù) 1,并不影響 Loss 的單調(diào)性。因此,推導(dǎo)得出了 Exponential Loss 的表達(dá)式。

Exponential Loss 的曲線如下圖所示:

Exponential Loss 與交叉熵 Loss 類似,但它是指數(shù)下降的,因此梯度較其它 Loss 來說,更大一些。

Exponential Loss 一般多用于AdaBoost 中。因?yàn)槭褂?Exponential Loss 能比較方便地利用加法模型推導(dǎo)出 AdaBoost算法。

5.Modified Huber Loss

在之前介紹回歸損失函數(shù),我們介紹過 Huber Loss,它集合了 MSE 和 MAE 的優(yōu)點(diǎn)。Huber Loss 也能應(yīng)用于分類問題中,稱為 Modified Huber Loss,其表達(dá)是如下:

Modified Huber Loss 的曲線如下圖所示:

從表達(dá)式和 Loss 圖形上看,Modified Huber Loss 結(jié)合了 Hinge Loss 和 交叉熵 Loss 的優(yōu)點(diǎn)。一方面能在 ys > 1 時(shí)產(chǎn)生稀疏解提高訓(xùn)練效率;另一方面對于 ys < ?1 樣本的懲罰以線性增加,這意味著受異常點(diǎn)的干擾較少。scikit-learn 中的 SGDClassifier 就使用了 Modified Huber Loss。

6.Softmax Loss

對于多分類問題,也可以使用 Softmax Loss。

機(jī)器學(xué)習(xí)模型的 Softmax 層,正確類別對于的輸出是:

其中,C 為類別個數(shù),小寫字母 s 是正確類別對應(yīng)的 Softmax 輸入,大寫字母 S 是正確類別對應(yīng)的 Softmax 輸出。

由于 log 運(yùn)算符不會影響函數(shù)的單調(diào)性,我們對 S 進(jìn)行 log 操作。另外,我們希望  log(S) 越大越好,即正確類別對應(yīng)的相對概率越大越好,那么就可以對 log(S) 前面加個負(fù)號,來表示損失函數(shù):

Softmax Loss 的曲線如下圖所示:

上圖中,當(dāng) s << 0 時(shí),Softmax 近似線性;當(dāng) s>>0 時(shí),Softmax 趨向于零。Softmax 同樣受異常點(diǎn)的干擾較小,多用于神經(jīng)網(wǎng)絡(luò)多分類問題中。

最后,我們將 0-1 Loss、Cross Entropy Loss、Hinge Loss、Exponential Loss、Modified Huber Loss 畫在一張圖中:

上圖 ys 的取值范圍是 [-2,+2],若我們把 ys 的坐標(biāo)范圍取得更大一些,上面 5 種 Loss 的差別會更大一些,見下圖:

顯然,這時(shí)候 Exponential Loss 會遠(yuǎn)遠(yuǎn)大于其它 Loss。從訓(xùn)練的角度來看,模型會更加偏向于懲罰較大的點(diǎn),賦予其更大的權(quán)重。如果樣本中存在離群點(diǎn),Exponential Loss 會給離群點(diǎn)賦予更高的權(quán)重,但卻可能是以犧牲其他正常數(shù)據(jù)點(diǎn)的預(yù)測效果為代價(jià),可能會降低模型的整體性能,使得模型不夠健壯(robust)。

相比 Exponential Loss,其它四個 Loss,包括 Softmax Loss,都對離群點(diǎn)有較好的“容忍性”,受異常點(diǎn)的干擾較小,模型較為健壯。

好了,以上就是總結(jié)的幾個常用的損失函數(shù),知道這些細(xì)節(jié)和原理,對我們是很有幫助的。希望本文對你有所幫助~

參考文獻(xiàn):

http://www./html/782/201806/2247495489/1.html

https://www.cnblogs.com/massquantity/p/8964029.html

備注:公眾號菜單包含了整理了一本AI小抄,非常適合在通勤路上用學(xué)習(xí)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多