About Loss Function All You Need

損失函數(shù)

name meaning
cost function 成本函數(shù)是模型預測的值與實際值之間的誤差的度量欠啤,成本函數(shù)是整個訓練數(shù)據(jù)集的平均損失究抓。
loss function 成本函數(shù)和損失函數(shù)是同義詞,但是損失函數(shù)僅用于單個訓練示例益眉。 有時也稱為錯誤函數(shù)晌柬。
error function 錯誤函數(shù)和損失函數(shù)是同義詞
objective function 一種更為通用的表述,定義某一個具體的成本函數(shù)作為需要優(yōu)化的目標函數(shù)

優(yōu)化目標通常是最小化cost function郭脂,即成本函數(shù)年碘,通常用符號J(\theta),通常我們會采用梯度下降的方式來對其進行最小化

Repeat \quad until \quad convergence: \\ \theta_{j} \leftarrow \theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta)

在優(yōu)化過程中展鸡,如何使用梯度下降法進行優(yōu)化屿衅,對于每個損失函數(shù)通常都會進行如下的5步

  • 確定predict function((f(x))),確定predict function中的參數(shù)
  • 確定loss function-對于每一個訓練實例的損失(L(\theta))
  • 確定cost function–對于所有訓練實例的平均損失(J(\theta))
  • 確定gradients of cost function-對于每個未知參數(shù)(\frac{\partial}{\partial\theta_j}J(\theta))
  • 確定learning rate, 確定epoch莹弊,更新參數(shù)

下面將對每一種損失函數(shù)都進行上面的操作涤久。

回歸損失函數(shù)

Squared Error Loss

也稱為L2損失,是實際值與預測值之差的平方

優(yōu)點:

  • 正二次函數(shù)(形式為ax ^ 2 + bx + c忍弛,其中a> 0)响迂,二次函數(shù)僅具有全局最小值, 沒有局部最小值
  • 可以確保Gradient Descent(梯度下降)收斂(如果完全收斂)到全局最小值

缺點:

  • 因為其平方性質(zhì),導致對異常值的魯棒性低细疚,即對異常值很敏感蔗彤, 因此,如果我們的數(shù)據(jù)容易出現(xiàn)異常值,則不應使用此方法幕与。
  • predict function

f(x_i) = mx_i +b \\ \theta = \{m,b\}

  • loss function

L(\theta)=(y_i-f(x_i))^{2}

  • cost function

J(\theta)=\frac{1}{N}\sum_{i=1}^{N}(y_i-f(x_i))^{2}

  • gradient of cost function

\begin{aligned} for \quad Single \quad training \quad example: \\ \frac{\partial L(\theta)}{\partial m} &=2(y_i-f(x_i))*x_i \\ \frac{\partial L(\theta)}{\partial b} &=2(y_i-f(x_i))*1 \\ for \quad All \quad training \quad example: \\ \frac{\partial J(\theta)}{\partial m} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial m} \\ \frac{\partial J(\theta)}{\partial b} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial b} \\ \end{aligned}

  • update parameters
def update_weights_MSE(m, b, X, Y, learning_rate):
    m_deriv = 0
    b_deriv = 0
    N = len(X)
    for i in range(N):
        # Calculate partial derivatives
        # -2x(y - (mx + b))
        m_deriv += -2*X[i] * (Y[i] - (m*X[i] + b))

        # -2(y - (mx + b))
        b_deriv += -2*(Y[i] - (m*X[i] + b))

    # We subtract because the derivatives point in direction of steepest ascent
    m -= (m_deriv / float(N)) * learning_rate
    b -= (b_deriv / float(N)) * learning_rate

    return m, b
Absolute Error Loss

也稱為L1損失, 預測值與實際值之間的距離,而與符號無關

優(yōu)點:

  • 相比MSE镇防,對于異常值魯棒性更強啦鸣,對異常值不敏感

缺點:

  • Absolute Error 的曲線呈 V 字型,連續(xù)但在 y-f(x)=0 處不可導来氧,計算機求解導數(shù)比較困難
  • predict function

f(x_i) = mx_i +b \\ \theta = \{m,b\}

  • loss function

L(\theta)=|y_i-f(x_i)|

  • cost function

J(\theta)=\frac{1}{N}\sum_{i=1}^{N}|y_i-f(x_i)|

  • gradient of cost function

\begin{aligned} for \quad Single \quad training \quad example: \\ \frac{\partial L(\theta)}{\partial m} &=\frac{(y_i-f(x_i))*x_i}{|y_i-f(x_i)|} \\ \frac{\partial L(\theta)}{\partial b} &=\frac{(y_i-f(x_i))*1}{|y_i-f(x_i)|} \\ for \quad All \quad training \quad example: \\ \frac{\partial J(\theta)}{\partial m} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial m} \\ \frac{\partial J(\theta)}{\partial b} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial b} \\ \end{aligned}

  • update parameters
def update_weights_MAE(m, b, X, Y, learning_rate):
    m_deriv = 0
    b_deriv = 0
    N = len(X)
    for i in range(N):
        # Calculate partial derivatives
        # -x(y - (mx + b)) / |mx + b|
        m_deriv += - X[i] * (Y[i] - (m*X[i] + b)) / abs(Y[i] - (m*X[i] + b))

        # -(y - (mx + b)) / |mx + b|
        b_deriv += -(Y[i] - (m*X[i] + b)) / abs(Y[i] - (m*X[i] + b))

    # We subtract because the derivatives point in direction of steepest ascent
    m -= (m_deriv / float(N)) * learning_rate
    b -= (b_deriv / float(N)) * learning_rate

    return m, b
Huber Loss

Huber Loss 是對二者的綜合诫给,包含了一個超參數(shù) δ。δ 值的大小決定了 Huber Loss 對 MSE 和 MAE 的側重性啦扬,當 |y?f(x)| ≤ δ 時中狂,變?yōu)?MSE;當 |y?f(x)| > δ 時扑毡,則變成類似于 MAE

優(yōu)點:

  • 減小了對異常值的敏感度問題
  • 實現(xiàn)了處處可導的功能
  • predict function

f(x_i) = mx_i +b \\ \theta = \{m,b\}

  • loss function

\begin{aligned} &L_{\delta}(\theta)=\left\{\begin{array}{l} \frac{1}{2}(y_i-{f(x_i)})^{2}, \text { if }|y_i-f(x_i)| \leq \delta. \\ \delta|y_i-f(x_i)|-\frac{1}{2} \delta^{2}, \quad \text { otherwise } \end{array}\right.\\ \end{aligned}

  • cost function

J(\theta)=\frac{1}{N}\sum_{i=1}^{N}L_{\delta}(\theta)

  • gradient of cost function

\begin{aligned} for \quad Single \quad training \quad example: \\ \text { if }|y_i-f(x_i)| \leq \delta: \\ \frac{\partial L_{\delta}(\theta)}{\partial m} &=(y_i-f(x_i))*x_i \\ \frac{\partial L_{\delta}(\theta)}{\partial b} &=(y_i-f(x_i))*1 \\ \text { otherwise }: \\ \frac{\partial L_{\delta}(\theta)}{\partial m} &=\frac{\delta*(y_i-f(x_i))*x_i}{|y_i-f(x_i)|} \\ \frac{\partial L_{\delta}(\theta)}{\partial b} &=\frac{\delta*(y_i-f(x_i))*1}{|y_i-f(x_i)|} \\ for \quad All \quad training \quad example: \\ \frac{\partial J(\theta)}{\partial m} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial m} \\ \frac{\partial J(\theta)}{\partial b} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial b} \\ \end{aligned}

  • update parameters
def update_weights_Huber(m, b, X, Y, delta, learning_rate):
    m_deriv = 0
    b_deriv = 0
    N = len(X)
    for i in range(N):
        # derivative of quadratic for small values and of linear for large values
        if abs(Y[i] - m*X[i] - b) <= delta:
          m_deriv += -X[i] * (Y[i] - (m*X[i] + b))
          b_deriv += - (Y[i] - (m*X[i] + b))
        else:
          m_deriv += delta * X[i] * ((m*X[i] + b) - Y[i]) / abs((m*X[i] + b) - Y[i])
          b_deriv += delta * ((m*X[i] + b) - Y[i]) / abs((m*X[i] + b) - Y[i])
    
    # We subtract because the derivatives point in direction of steepest ascent
    m -= (m_deriv / float(N)) * learning_rate
    b -= (b_deriv / float(N)) * learning_rate

    return m, b

分類損失函數(shù)

分類任務中胃榕,如果要度量真實類別與預測類別的差異,可以通過entropy來定義瞄摊,其中entropy指的是混亂或不確定性勋又,對于一個概率分布的熵值越大,表示分布的不確定性越大换帜。同樣楔壤,較小的值表示更確定的分布。那么對于分類來講惯驼,更小的entropy蹲嚣,意味著預測的結果更準確, 根據(jù)分類任務中類別的數(shù)量不同祟牲,可以分為二分類和多分類隙畜。

二分類損失函數(shù)(Binary)
Binary Cross Entropy Loss

屬于1類(或正類)的概率= p

屬于0類(或負類)的概率= 1-p

  • predict function

此處把上面的f替換成了p是為了強調(diào)其是一個概率值,除此之外说贝,上面回歸中的所有(x_i)只是針對一個特征禾蚕,下面的函數(shù)中有兩個特征,其中的i表示數(shù)據(jù)集中的第i條數(shù)據(jù)
z(x_1^{(i)},x_2^{(i)}) = m_1*x_1^{(i)} + m_2 * x_2^{(i)} +b \\ p(z) = \frac{1}{1+e^{-z}} \\ \theta = \{m_1,m_2,b\}

  • loss function

L(\theta)=-y * \log (p)-(1-y) * \log (1-p)=\left\{\begin{array}{ll} -\log (1-p), & \text { if } y=0 \\ -\log (p), & \text { if } y=1 \end{array}\right.

  • cost function

J(\theta)=\frac{1}{N}\sum_{i=1}^{N}L(\theta)

  • gradient of cost function

\begin{aligned} for \quad Single \quad training \quad example: \\ \frac{\partial L(\theta)}{\partial m_1} &=\frac{\partial L}{\partial p}\frac{\partial p}{\partial z}\frac{\partial z}{\partial m_1} \\ &= \left[-(\frac{y^{(i)}}{p} - \frac{1-y^{(i)}}{1-p})\right]*\left[p(1-p)\right]\left[x_1^{(i)}\right] \\ &= (p-y^{(i)})*x_1^{(i)} \\ \frac{\partial L(\theta)}{\partial m_2} &= \frac{\partial L}{\partial p}\frac{\partial p}{\partial z}\frac{\partial z}{\partial m_2} \\ &= \left[-(\frac{y^{(i)}}{p} - \frac{1-y^{(i)}}{1-p})\right]*\left[p(1-p)\right]\left[x_2^{(i)}\right] \\ &= (p-y^{(i)})*x_2^{(i)} \\ \frac{\partial L(\theta)}{\partial b} &= \frac{\partial L}{\partial p}\frac{\partial p}{\partial z}\frac{\partial z}{\partial b} \\ &= \left[-(\frac{y^{(i)}}{p} - \frac{1-y^{(i)}}{1-p})\right]*\left[p(1-p)\right]\left[ 1\right] \\ &= (p-y^{(i)}) \\ for \quad All \quad training \quad example: \\ \frac{\partial J(\theta)}{\partial m_1} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial m_1} \\ \frac{\partial J(\theta)}{\partial m_2} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial m_2} \\ \frac{\partial J(\theta)}{\partial b} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial b} \\ \end{aligned}

  • update parameters
def update_weights_BCE(m1, m2, b, X1, X2, Y, learning_rate):
    m1_deriv = 0
    m2_deriv = 0
    b_deriv = 0
    N = len(X1)
    for i in range(N):
        s = 1 / (1 / (1 + math.exp(-m1*X1[i] - m2*X2[i] - b)))
        
        # Calculate partial derivatives
        m1_deriv += -X1[i] * (s - Y[i])
        m2_deriv += -X2[i] * (s - Y[i])
        b_deriv += -(s - Y[i])

    # We subtract because the derivatives point in direction of steepest ascent
    m1 -= (m1_deriv / float(N)) * learning_rate
    m2 -= (m2_deriv / float(N)) * learning_rate
    b -= (b_deriv / float(N)) * learning_rate

    return m1, m2, b
Hinge Loss

主要用于帶有類別標簽-1和1的支持向量機(SVM)分類器狂丝。因此换淆,請確保將數(shù)據(jù)集中類別的標簽從0更改為-1。

  • predict function

f(x_1^{(i)},x_2^{(i)}) = m_1*x_1^{(i)} + m_2 * x_2^{(i)} +b \\ \theta = \{m_1, m_2, b\}

  • loss function

L(\theta)=\max (0,\quad1-y^{(i)} * f(x_1^{(i)},x_2^{(i)}))

  • cost function

J(\theta)=\frac{1}{N}\sum_{i=1}^{N}L(\theta)

  • gradient of cost function

\begin{aligned} for \quad Single \quad training \quad example: \\ \text { if } y^{(i)} * f(x_1^{(i)},x_2^{(i)}) \leq 1: \\ \frac{\partial L(\theta)}{\partial m_1} &=y^{(i)}*x_1^{(i)}\\ \frac{\partial L(\theta)}{\partial m_2} &=y^{(i)}*x_2^{(i)} \\ \frac{\partial L(\theta)}{\partial b} &=y^{(i)} \\ \text { otherwise }: \\ pass \\ for \quad All \quad training \quad example: \\ \frac{\partial J(\theta)}{\partial m_1} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial m_1} \\ \frac{\partial J(\theta)}{\partial m_2} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial m_2} \\ \frac{\partial J(\theta)}{\partial b} &=\frac{1}{N}\sum_{i=1}^{N}\frac{\partial L(\theta)}{\partial b} \\ \end{aligned}

  • update parameters
def update_weights_Hinge(m1, m2, b, X1, X2, Y, learning_rate):
    m1_deriv = 0
    m2_deriv = 0
    b_deriv = 0
    N = len(X1)
    for i in range(N):
        # Calculate partial derivatives
        if Y[i]*(m1*X1[i] + m2*X2[i] + b) <= 1:
          m1_deriv += -X1[i] * Y[i]
          m2_deriv += -X2[i] * Y[i]
          b_deriv += -Y[i]
        # else derivatives are zero

    # We subtract because the derivatives point in direction of steepest ascent
    m1 -= (m1_deriv / float(N)) * learning_rate
    m2 -= (m2_deriv / float(N)) * learning_rate
    b -= (b_deriv / float(N)) * learning_rate

    return m1, m2, b
多分類損失函數(shù)(Multi-class)

電子郵件歸類任務中几颜,處理可以將其歸類為垃圾郵件和非垃圾郵件倍试,還可以為一封郵件賦予更多的角色,例如它們被分類為其他各種類別-工作蛋哭,家庭县习,社交,晉升等。這是一個多類分類躁愿。

Multi-Class Cross Entropy Loss

輸入向量X_i和對應的獨熱編碼的目標向量Y_i的損失為:

  • predict function

z = some function \\ p(z_i) = \frac{e^{z_{i}}}{\sum_{j=1}^{K} e^{z_{j}}} \quad \text { for } i=1, \ldots, K \text { and } \mathbf{z}=\left(z_{1}, \ldots, z_{K}\right) \in \mathbb{R}^{K}

  • loss function
image-20210308235126073.png
  • cost function

J(\theta)=\frac{1}{N}\sum_{i=1}^{N}L(\theta)

  • gradient of cost function

為了簡化叛本,此處損失我只求到z,例如在神經(jīng)網(wǎng)絡中彤钟,相當于求輸出層的誤差梯度

關于softmax的偏導部分来候,詳情請看softmax梯度
\begin{aligned} for \quad Single \quad training \quad example: \\ if \quad k = j: \\ \frac{\partial L(\theta)}{\partial z_j} &=\frac{\partial L}{\partial p_{k}}\frac{\partial p_{k}}{\partial z_j} \\ &= \left[-\frac{1}{p_k}\right]*\left[p_k(1-p_j)\right]\\ &= \left[-\frac{1}{p_k}\right]*\left[p_k(1-p_j)\right] \quad \text{because k = j} \\ &= p_j-1 \\ if \quad k \ne j: \\ \frac{\partial L(\theta)}{\partial z_j} &=\frac{\partial L}{\partial p_{k}}\frac{\partial p_{k}}{\partial z_j} \\ &= \left[-\frac{1}{p_k}\right]*\left[-p_kp_j\right] \\ &= \left[-\frac{1}{p_k}\right]*\left[-p_kp_j\right] \\ &= p_j \end{aligned}

  • update parameters
# importing requirements
from keras.layers import Dense
from keras.models import Sequential
from keras.optimizers import adam

# alpha = 0.001 as given in the lr parameter in adam() optimizer

# build the model
model_alpha1 = Sequential()
model_alpha1.add(Dense(50, input_dim=2, activation='relu'))
model_alpha1.add(Dense(3, activation='softmax'))

# compile the model
opt_alpha1 = adam(lr=0.001)
model_alpha1.compile(loss='categorical_crossentropy', optimizer=opt_alpha1, metrics=['accuracy'])

# fit the model
# dummy_Y is the one-hot encoded 
# history_alpha1 is used to score the validation and accuracy scores for plotting 
history_alpha1 = model_alpha1.fit(dataX, dummy_Y, validation_data=(dataX, dummy_Y), epochs=200, verbose=0)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逸雹,隨后出現(xiàn)的幾起案子营搅,更是在濱河造成了極大的恐慌,老刑警劉巖梆砸,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件转质,死亡現(xiàn)場離奇詭異,居然都是意外死亡帖世,警方通過查閱死者的電腦和手機休蟹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來日矫,“玉大人鸡挠,你說我怎么就攤上這事“崮校” “怎么了拣展?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缔逛。 經(jīng)常有香客問我备埃,道長,這世上最難降的妖魔是什么褐奴? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任按脚,我火速辦了婚禮,結果婚禮上敦冬,老公的妹妹穿的比我還像新娘辅搬。我一直安慰自己,他們只是感情好脖旱,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布堪遂。 她就那樣靜靜地躺著,像睡著了一般萌庆。 火紅的嫁衣襯著肌膚如雪溶褪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天践险,我揣著相機與錄音猿妈,去河邊找鬼吹菱。 笑死,一個胖子當著我的面吹牛彭则,可吹牛的內(nèi)容都是我干的鳍刷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼俯抖,長吁一口氣:“原來是場噩夢啊……” “哼输瓜!你這毒婦竟也來了?” 一聲冷哼從身側響起蚌成,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凛捏,沒想到半個月后担忧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡坯癣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年瓶盛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片示罗。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡惩猫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚜点,到底是詐尸還是另有隱情轧房,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布绍绘,位于F島的核電站奶镶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏陪拘。R本人自食惡果不足惜厂镇,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望左刽。 院中可真熱鬧捺信,春花似錦、人聲如沸欠痴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喇辽。三九已至梨水,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茵臭,已是汗流浹背疫诽。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奇徒。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓雏亚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親摩钙。 傳聞我的和親對象是個殘疾皇子罢低,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容