大話深度學習(三):損失函數

大話深度學習(三):損失函數

損失函數

爲了解決分類問題或者回歸問題,我們通常會定義一個損失函數來描述對問題的求解精度(用數學的方法描述預測答案和真實答案之間的距離)。損失函數越小,就代表所建立的模型越好。

交叉熵損失函數

在深度學習領域,交叉熵主要刻畫兩個概率分佈之間的距離,是分類問題中使用比較廣的一種損失函數。P,Q爲概率分佈兩個等長的向量,則二者的交叉熵的值爲:H(P,Q)=-∑P(x)Q(x)。對交叉熵的理解可以描述爲Q對概率分佈P之間的準確度,一般來說設置P爲樣本的實際值,Q爲樣本的預測值。交叉熵就是描述預測值與實際值之間的大小。Q對P的預測越正確,說明二者之間的距離越小。

import numpy as np
p = np.array([0.1, 0.2, 0.3, 0.4, 0.5])
q = np.array([0.1, 0.2, 0.4, 0.7, 0.8])
h1 = -np.log(p) * q
h2 = -np.log(q) * p
print(np.sum(h1))
print(np.sum(h2))
# h1=2.229656470276464
# h2=1.081275064581069

由上面的計算可知H(P,Q)不等於H(Q,P),所以說交叉熵是不對稱性的。
在深度學習神經網絡運用於分類任務的時候中,常常將輸出層的結果經過softmax函數迴歸處理後轉變成概率分佈提供給交叉熵函數進行計算。如下簡圖:
在這裏插入圖片描述
簡單說明以下softmax如何將多分類輸出轉換爲概率,可以分爲兩步:
1)分子:通過指數函數,將實數輸出映射到零到正無窮。
2)分母:將所有結果相加,進行歸一化。
下圖爲斯坦福大學CS224n課程中最softmax的解釋:在這裏插入圖片描述
tensflow2.0中keras中:
常見的損失函數的選擇包括均方誤差(mse),categorical_crossentropy和binary_crossentropy。
binary_crossentropy常用於二分類問題,當然也可以用於多分類問題,通常需要在網絡的最後一層添加sigmoid進行配合使用。
categorical_crossentropy適用於多分類問題,並使用softmax作爲輸出層的激活函數的情況。

L1損失函數和L2損失函數

L1損失函數: 也被稱爲最小絕對值偏差(LAD),最小絕對值誤差(LAE)。它是使目標值與預測值的絕對值總和最小化
在這裏插入圖片描述
L2範數損失函數,也被稱爲最小平方誤差(LSE)。它是目標值和預測值平方差的最小化。
在這裏插入圖片描述
具體的可參照博客:L1與L2損失函數和正則化的區別
tensorflow2.0中就舉例如何使用L1,L2:

# Create a sigmoid layer:
layers.Dense(64, activation='sigmoid')
# Or:
layers.Dense(64, activation=tf.keras.activations.sigmoid)

# A linear layer with L1 regularization of factor 0.01 applied to the kernel matrix:
#將L1正則化係數爲0.01的線性層應用於內核矩陣:
layers.Dense(64, kernel_regularizer=tf.keras.regularizers.l1(0.01))

# A linear layer with L2 regularization of factor 0.01 applied to the bias vector:
#將L2正則化係數爲0.01的線性層應用於偏差向量
ayers.Dense(64, bias_regularizer=tf.keras.regularizers.l2(0.01))

L1與L2的應用暫時未找到具體例子,暫時不舉例

參考資料
Tensorflow 深度學習算法原理與編程實戰

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