機器學習動手做Lesson 11 — 到底Cross Entropy Loss、Logistic Loss、Log-Loss是不是同樣的東西(中篇)
上週介紹了Cross Entropy Loss,今天要來講解Logistic Loss。根據論文(Wojciech 2014),Logistic Loss的定義如下。
這看起來...很奇怪,今天我們就來慢慢解析吧。
一、Logistic Regression
我們先從Logistic Regression開始講解,假設我們的特徵只有一個變數x,標籤是t,正例時t=1,負例時t=0。此時我們可以用導入兩個參數:w跟b,建立一個模型,並且用模型做出預測y。
為了讓模型的預測值可以限制在0~1之間,我們會將上式的y再通過Sigmoid激活函數。
接著,我們套用上週提到的Cross Entropy損失函數,計算出模型的損失。
以下為範例程式,如同預期般可以做出很好的分類。
import numpy as np
import matplotlib.pyplot as pltdef func_gen_data(N):
x1 = np.random.normal(loc = -3, scale = 1, size = 100)
y1 = np.array([0 for i in range(N)])
x2 = np.random.normal(loc = 3, scale = 1, size = 100)
y2 = np.array([1 for i in range(N)])
x = np.concatenate((x1, x2))
y = np.concatenate((y1, y2))
return x, y, x1, y1, x2, y2def func_predict(x, w, b):
return w * x + bdef func_activation(y): return 1 / (1 + np.exp(-y))def func_loss(t, z):
loss = -(t * np.log(z) + (1 — t) * np.log(1 — z))
return sum(loss) / len(z)def func_gradient(t, z):
gradient_w = sum(-(t — z) * x) / len(z)
gradient_b = sum(-(t — z)) / len(z)
return np.array([gradient_w, gradient_b])def func_plot(x1, t1, x2, t2, w, b):
x = np.linspace(start = -5, stop = 5, num = 1000)
y = func_predict(x, w, b)
z = func_activation(y)
plt.figure(1)
plt.plot(x, z, label = “Decision”)
plt.scatter(x1, t1, color = “red”, label = “Class 0 Data”)
plt.scatter(x2, t2, color = “blue”, label = “Class 1 Data”)
plt.legend()
plt.xlabel(“Feature”)
plt.ylabel(“Class”)
plt.title(“Logistic Regression”)
plt.show()N = 100np.random.seed(1)x, t, x1, t1, x2, t2 = func_gen_data(N)lr = 0.01
w = 0
b = 0for i in range(1000):
y = func_predict(x, w, b)
z = func_activation(y)
l = func_loss(t, z)
g = func_gradient(t, z)
w = w — lr * g[0]
b = b — lr * g[1]
func_plot(x1, t1, x2, t2, w, b)
二、合併損失函數與激活函數
接下來,我們把Logistic Regression當中的損失函數跟激活函數合併在一起。
我們可以稱這個合併後的函數為Logistic Loss。也就是說,可以將Logistic Loss看成Logistic Regression處理二元分類時,所使用的損失函數。
三、比較兩個Logistic Loss
我們寫的Logistic Loss跟論文寫的看起來不太一樣,現在我們來仔細比較一下吧。
1、當t是正例
正例時t=1。我們寫的Logistic Loss可以簡化為
而論文的Logistic Loss可以簡化為
結果發現是一樣的。
2、當t是負例
這時有一個小地方要注意,我們的Logistic Regression設定負例時t=0,但是論文設定負例時t=-1。我們寫的Logistic Loss可以簡化為
而論文的Logistic Loss可以簡化為
結果也是一樣的!
四、Cross Entropy Loss跟Logistic Loss的關係
本文回顧了Logistic Regression的原理,從過程中定義出Logistic Loss,而且也與論文定義的Logistic Loss基本上是一樣,主要的差異只在於標籤的設定方式而已。
我們可以知道Logistic Loss跟Cross Entropy Loss是息息相關,因為Logistic Loss是Cross Entropy Loss跟Sigmoid激活函數合併在一起的結果。
重點整理
1、Logistic Loss是Logistic Regression所使用的損失函數。
2、Logistic Loss是Cross Entropy Loss跟Sigmoid激活函數合併在一起。
參考資料
1、Takairo Ezaki. (2021). 資料科學的建模基礎 — 先別急著coding!你知道模型的陷阱嗎?. 1st ed. Translated by 王心薇. Taipei: Flag Technology Co. Ltd.
2、Murphy K. P. (2012). Machine Learning: A Probabilistic Perspective. Cambridge, MA: MIT Press.
3、Thomas M. C. and Joy A. T. (2006). Elements of Information Theory. 2nd ed. USA, Wiley-Interscience.
4、Wojciech K. (2014). Consistent optimization of AMS by logistic loss minimization. Proceedings of the 2014 International Conference on High-Energy Physics and Machine Learning. 42, 99–108.
關於作者
Chia-Hao Li received the M.S. degree in computer science from Durham University, United Kingdom. He engages in computer algorithm, machine learning, and hardware/software codesign. He was former senior engineer in Mediatek, Taiwan. His currently research topic is the application of machine learning techniques for fault detection in the high-performance computing systems.