入門| 機器學習中常用的損失函數你知多少?

2021-01-07 機器之心Pro

選自towards data science

作者:Ravindra Parmar

機器之心編譯

參與:李詩萌、王淑婷

本文作者將常用的損失函數分為了兩大類:分類和回歸。然後又分別對這兩類進行了細分和講解,其中回歸中包含了一種不太常見的損失函數:平均偏差誤差,可以用來確定模型中存在正偏差還是負偏差。

損失函數和優化

機器通過損失函數進行學習。這是一種評估特定算法對給定數據建模程度的方法。如果預測值與實際結果偏離較遠,損失函數會得到一個非常大的值。在一些優化函數的輔助下,損失函數逐漸學會減少預測值的誤差。本文將介紹幾種損失函數及其在機器學習和深度學習領域的應用。

沒有一個適合所有機器學習算法的損失函數。針對特定問題選擇損失函數涉及到許多因素,比如所選機器學習算法的類型、是否易於計算導數以及數據集中異常值所佔比例。

從學習任務的類型出發,可以從廣義上將損失函數分為兩大類——回歸損失和分類損失。在分類任務中,我們要從類別值有限的數據集中預測輸出,比如給定一個手寫數字圖像的大數據集,將其分為 0~9 中的一個。而回歸問題處理的則是連續值的預測問題,例如給定房屋面積、房間數量以及房間大小,預測房屋價格。

NOTE n - Numberof training examples. i - ith training example in a data set. y(i) - Ground truth label for ith training example. y_hat(i) - Prediction for ith training example.

回歸損失

均方誤差/平方損失/L2 損失

數學公式:

均方誤差

顧名思義,均方誤差(MSE)度量的是預測值和實際觀測值間差的平方的均值。它只考慮誤差的平均大小,不考慮其方向。但由於經過平方,與真實值偏離較多的預測值會比偏離較少的預測值受到更為嚴重的懲罰。再加上 MSE 的數學特性很好,這使得計算梯度變得更容易。

import numpy as npy_hat = np.array([0.000, 0.166, 0.333])y_true = np.array([0.000, 0.254, 0.998])def rmse(predictions, targets): differences = predictions - targets differences_squared = differences ** 2 mean_of_differences_squared = differences_squared.mean() rmse_val = np.sqrt(mean_of_differences_squared)return rmse_valprint("d is: " + str(["%.8f" % elem for elem in y_hat]))print("p is: " + str(["%.8f" % elem for elem in y_true]))rmse_val = rmse(y_hat, y_true)print("rms error is: " + str(rmse_val))

平均絕對誤差/L1 損失

數學公式:

平均絕對誤差

平均絕對誤差(MAE)度量的是預測值和實際觀測值之間絕對差之和的平均值。和 MSE 一樣,這種度量方法也是在不考慮方向的情況下衡量誤差大小。但和 MSE 的不同之處在於,MAE 需要像線性規劃這樣更複雜的工具來計算梯度。此外,MAE 對異常值更加穩健,因為它不使用平方。

import numpy as npy_hat = np.array([0.000, 0.166, 0.333])y_true = np.array([0.000, 0.254, 0.998])print("d is: " + str(["%.8f" % elem for elem in y_hat]))print("p is: " + str(["%.8f" % elem for elem in y_true]))def mae(predictions, targets): differences = predictions - targets absolute_differences = np.absolute(differences) mean_absolute_differences = absolute_differences.mean()return mean_absolute_differencesmae_val = mae(y_hat, y_true)print ("mae error is: " + str(mae_val))

平均偏差誤差(mean bias error)

與其它損失函數相比,這個函數在機器學習領域沒有那麼常見。它與 MAE 相似,唯一的區別是這個函數沒有用絕對值。用這個函數需要注意的一點是,正負誤差可以互相抵消。儘管在實際應用中沒那麼準確,但它可以確定模型存在正偏差還是負偏差。

數學公式:

平均偏差誤差

分類損失

Hinge Loss/多分類 SVM 損失

簡言之,在一定的安全間隔內(通常是 1),正確類別的分數應高於所有錯誤類別的分數之和。因此 hinge loss 常用於最大間隔分類(maximum-margin classification),最常用的是支持向量機。儘管不可微,但它是一個凸函數,因此可以輕而易舉地使用機器學習領域中常用的凸優化器。

數學公式:

SVM 損失(Hinge Loss)

思考下例,我們有三個訓練樣本,要預測三個類別(狗、貓和馬)。以下是我們通過算法預測出來的每一類的值:

Hinge loss/多分類 SVM 損失

計算這 3 個訓練樣本的 hinge loss:

## 1st training examplemax(0, (1.49) - (-0.39) + 1) + max(0, (4.21) - (-0.39) + 1)max(0, 2.88) + max(0, 5.6)2.88 + 5.68.48 (High loss as very wrong prediction)## 2nd training examplemax(0, (-4.61) - (3.28)+ 1) + max(0, (1.46) - (3.28)+ 1)max(0, -6.89) + max(0, -0.82)0 + 00 (Zero loss as correct prediction)## 3rd training examplemax(0, (1.03) - (-2.27)+ 1) + max(0, (-2.37) - (-2.27)+ 1)max(0, 4.3) + max(0, 0.9)4.3 + 0.95.2 (High loss as very wrong prediction)

交叉熵損失/負對數似然:

這是分類問題中最常見的設置。隨著預測概率偏離實際標籤,交叉熵損失會逐漸增加。

數學公式:

交叉熵損失

注意,當實際標籤為 1(y(i)=1) 時,函數的後半部分消失,而當實際標籤是為 0(y(i=0)) 時,函數的前半部分消失。簡言之,我們只是把對真實值類別的實際預測概率的對數相乘。還有重要的一點是,交叉熵損失會重重懲罰那些置信度高但是錯誤的預測值。

import numpy as nppredictions = np.array([[0.25,0.25,0.25,0.25], [0.01,0.01,0.01,0.96]])targets = np.array([[0,0,0,1], [0,0,0,1]])def cross_entropy(predictions, targets, epsilon=1e-10): predictions = np.clip(predictions, epsilon, 1. - epsilon) N = predictions.shape[0] ce_loss = -np.sum(np.sum(targets * np.log(predictions + 1e-5)))/Nreturn ce_losscross_entropy_loss = cross_entropy(predictions, targets)print ("Cross entropy loss is: " + str(cross_entropy_loss))

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

相關焦點

  • 機器學習中常用的5種回歸損失函數
    那你了解Huber損失、Log-Cosh損失、以及常用於計算預測區間的分位數損失麼?這些可都是機器學習大牛最常用的回歸損失函數哦!機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。其中,我們一般把最小化的一類函數,稱為「損失函數」。它能根據預測結果,衡量出模型預測能力的好壞。
  • 機器學習常用損失函數小結
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 機器學習常用損失函數總覽:基本形式、原理、特點
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 機器學習大牛最常用的5個回歸損失函數,你知道幾個?
    L1、L2損失函數相信大多數人都早已不陌生。那你了解Huber損失、Log-Cosh損失、以及常用於計算預測區間的分位數損失麼?這些可都是機器學習大牛最常用的回歸損失函數哦!機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。
  • 機器學習經典損失函數比較
    機器學習經典損失函數比較 胡薇 發表於 2018-06-13 17:53:53 所有的機器學習算法都或多或少的依賴於對目標函數最大化或者最小化的過程。
  • 【深度學習】一文讀懂機器學習常用損失函數(Loss Function)
    理解:損失函數旨在表示出logit和label的差異程度,不同的損失函數有不同的表示意義,也就是在最小化損失函數過程中,logit逼近label的方式不同,得到的結果可能也不同。上面提到了線性回歸,這裡額外補充一句,我們通常說的線性有兩種情況,一種是因變量y是自變量x的線性函數,一種是因變量y是參數α的線性函數。在機器學習中,通常指的都是後一種情況。
  • 機器學習常見的損失函數以及何時使用它們
    每一個機器學習工程師都應該知道機器學習中這些常見的損失函數以及何時使用它們。在數學優化和決策理論中,損失函數或成本函數將一個或多個變量的值映射為一個實數,該實數直觀地表示與該事件相關的一些「成本」。損失函數是機器學習算法中的一個重要部分,主要用於進行算法對特徵數據集建模效果的評估,衡量算法的性能。損失函數是每個樣本預測值和真實值的差值,而成本函數是所有損失函數的平均值。但是一般兩者語義沒有明顯的區分。 損失函數直接反映了機器學習模型的預測結果。一般而言,損失函數越低,所建立的模型所提供的結果就越好。
  • 機器學習從業者必知的5種回歸損失函數
    機器學習中的所有算法都依靠最小化或最大化函數,我們將其稱為「目標函數」。被最小化的函數就被稱為「損失函數」。
  • 機器學習算法中的7個損失函數的詳細指南
    介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。
  • Python機器學習算法中的7個損失函數的詳細指南
    介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。
  • 機器學習中的目標函數總結
    關注「SIGAI公眾號」,選擇「星標」或「置頂」原創技術文章,第一時間獲取機器學習中的目標函數總結SIGAI幾乎所有的機器學習算法都歸結為求解最優化問題。有監督學習算法在訓練時通過優化一個目標函數而得到模型,然後用模型進行預測。無監督學習算法通常通過優化一個目標函數完成數據降維或聚類。
  • 機器學習中常用優化算法介紹
    > 作者 | Walker編輯 | 磐石出品 | 磐創AI技術團隊【磐創AI導讀】:本文主要介紹了常用的一些機器學習中常用的優化算法
  • 機器學習初學者都應該知道的5類回歸損失函數
    來源:https://heartbeat.fritz.ai/5-regression-loss-functions-all-machine-learners-should-know-4fb140e9d4b0翻譯:石頭機器學習中的所有算法都依賴於最小化或最大化一個函數
  • 機器學習中的 7 大損失函數實戰總結(附 Python 代碼)
    概述介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。損失函數是我們喜歡使用的機器學習算法的核心。但大多數初學者和愛好者不清楚如何以及在何處使用它們。
  • 學會這10種機器學習算法你才算入門
    其中,你使用直線和曲線連接點從而得到一個等式方程。在機器學習中,你可以將它們用於擬合具有低維度的小型數據集的曲線。(而對於具有多個維度的大型數據或數據集來說,實驗的結果可能總是過度擬合,所以不必麻煩)。OLS有一個封閉形式的解決方案,所以你不需要使用複雜的優化技術。
  • 通俗聊聊損失函數中的均方誤差以及平方誤差
    翻譯 | 張建軍編輯 | 阿司匹林出品 | AI科技大本營機器學習中的所有算法都依賴於最小化或最大化某一個函數,我們稱之為「目標函數」。最小化的這組函數被稱為「損失函數」。損失函數是衡量預測模型預測期望結果表現的指標。尋找函數最小值的最常用方法是「梯度下降」。
  • 【損失函數】常見的損失函數(loss function)總結
    機器學習算法與自然語言處理出品@公眾號原創專欄作者 yyHaker單位 | 哈工大SCIR實驗室損失函數用來評價模型的預測值和真實值不一樣的程度,損失函數越好,通常模型的性能越好。注意公式中 特點:(1)本質上也是一種對數似然函數,可用於二分類和多分類任務中。二分類問題中的loss函數(輸入數據是softmax或者sigmoid函數的輸出):
  • 理解損失函數(理論篇)機器學習你會遇到的「坑」
    性能度量與損失函數機器學習的三要素就是正如我們在《非參數模型》中提到的:機器學習分為表示、評估和優化。表示指的是將樣本空間映射到一個合適的特徵空間,一般地,我們更青睞於這樣的表示是低維度的,是更加稀疏交互的,同時也希望是相互獨立的。
  • 如何在Keras中創建自定義損失函數?
    Karim MANJRA 發布在 Unsplash 上的照片keras 中常用的損失函數如上所述,我們可以創建一個我們自己的自定義損失函數;但是在這之前,討論現有的 Keras 損失函數是很好的。Keras 中的自定義損失函數可以以我們想要的方式提高機器學習模型的性能,並且對於更有效地解決特定問題非常有用。例如,假設我們正在構建一個股票投資組合優化模型。在這種情況下,設計一個定製損失函數將有助於實現對在錯誤方向上預測價格變動的巨大懲罰。
  • 通俗解釋機器學習中的Logistic Regression
    在各種機器學習的文章中,你都會看到,它們給了邏輯函數一個常用的名字:Sigmoid函數。sigmoid,意為「S形的」,這正符合其函數圖像特點,所以大家記住就行了。現在,我們已經有了函數,下一步任務就是求出函數表達式中的未知參數向量 θ 了。這個過程是機器學習中最為核心的計算步驟。