以均方誤差或交叉熵誤差作為loss function的NN, 其輸出神經元的敏感度是它的激活值與目標值的差值 ...
縮寫:
- NN: neural network, 神經網路
- MSE: Mean Squared Error, 均方誤差
- CEE: Cross Entropy Error, 交叉熵誤差.(此縮寫不是一個conventional縮寫)
標記符號:
- \(net\)或\(net_i\), 凈輸出值, \(net = w^Tx\)
- \(a\)或\(a_i\), 神經元的激活函數輸出值: \(a = f(net)\)
本文所有的\(x\)都是增廣後的, 即\(x_0 = 1\).
Introduction
MSE與CEE是兩種常用的loss function, 它們在形式上很不一樣, 但在使用梯度下降演算法優化它們的loss function時, 會發現它們其實是殊途同歸.
很多機器學習演算法都可以轉換成淺層神經網路模型(本文中特指全連接的MLP). 而神經網路的BP演算法最核心的一步就是計算敏感度(見BP), 採用不同損失函數和激活函數的NN在BP演算法上的差異也主要存在於敏感度上. 所以將有監督機器學習演算法轉化為神經網路模型後, 只需要計算出輸出神經元的敏感度就可以看出MSE與CEE之間的很多異同點.
在利用mini-batch SGD訓練神經網路時, 通常是先計算批次中每一個樣本產生的梯度, 然後取平均值. 所以接下來的分析中, 只關註單個訓練樣本產生的loss. 根據這個loss計算敏感度.
使用MSE的典型代表是線性回歸, 使用CEE的代表則是邏輯回歸. 這兩個演算法的一些相同點與不同點可以參考blog.
問題描述:
- 給定:
- 訓練集\(D = \{(x^{(1)}, y^{(1)}), \dots, (x^{(i)}, y^{(i)}), \dots, (x^{(N)}, y^{(N)})\}\), \(x^{(N)} \in \chi\), \(\chi : R^d\), \(y^{(i)}\in R\)
- model family \(f(x)\)
- 目標: 利用\(D\)學習一個具體的\(f(x)\)用於對新樣本\(x'\)進行預測:\(y' = f(x')\)
註意, 線性回歸的\(f(x)與y\)取的是連續值, 而邏輯回歸則是代表類別的離散值.
均方誤差---線性回歸
線性回歸使用均方誤差(Mean Squared Error, MSE)作為loss function.
將線性回歸問題\(f(x) = w^Tx\)轉換成神經網路模型:
- 輸入層: \(d\)個神經元, \(d\)為\(x\)的維度.
- 輸出層: \(1\)個神經元, 激活函數為identical, 即\(a = net = w^Tx\).
- 隱層: 無
在樣本\((x, y)\)上的損失:
\[
J(w) = \frac 12 (a - y)^2 = \frac 12 (net - y)^2
\]
輸出神經元的敏感度:
\[
\delta = \frac {\partial J}{\partial net} = a - y = net - y
\]
交叉熵---邏輯回歸
邏輯回歸使用最大似然方法估計參數.
二分類邏輯回歸
先說二分類邏輯回歸, 即\(y = \{0, 1\}\). 將它轉換成神經網路模型, 拓撲結構與線性回歸一致. 不同的是輸入神經元的激活函數為\(a = sigmoid(net)\). 把\(a\)看作\(y=1\)的概率值: \(P(y =1 | x) = a\). 分類依據是根據選擇的閾值, 例如\(0.5\), 當\(a\)不小於它時\(y=1\), 否則\(y = 0\).
樣本\((x, y)\)出現的概率, 即likelihood function:
\[
l(w) = a^y(1-a)^(1-y)
\]
log-likelihood:
\[
L(w) = ln l(w) = ylna + (1-y)ln(1-a)
\]
最大化\(L(w)\)就是最小化\(-L(w)\), 所以它的loss為:
\[
J(w) = - L(w) = -ylna - (1 - y) ln(1 - a)
\]
這實際上就是二分類問題的交叉熵loss. 如blog所示, 當\(a=0.5\)時, loss最大.
輸出神經元的敏感度:
\[
\delta = \frac {\partial J}{\partial net} = \frac {\partial J} {\partial a} \frac {\partial a} {\partial net} = \frac {a-y}{(1-a)a} (1-a)a = a - y
\]
相信你已經看出來了, 線性回歸NN的敏感度\(net - y\)實際上也是激活值與目標值的差. 也就是說, 雖然邏輯回歸與線性回歸使用了不同的loss function, 但它們倆反向傳播的敏感度在形式上是一致的, 都是激活值\(a\)與目標值\(y\)的差值.
多分類邏輯回歸
先將多分類邏輯回歸轉換成神經網路模型:
- 輸入層: 同上
- 輸出層: 有多少種類別, 就有多少個輸出神經元. 用\(C\)來表示類別數目, 所以輸出層有\(C\)個神經元. 激活函數為softmax函數. 輸出值和二分類邏輯回歸一樣被當成概率作為分類依據.
- 隱層: 無
依然只考慮單個樣本\((x, y)\).
\(y\)的預測值\(f(x)\)為輸出值最大的那個神經元代表的類別, 即:
\[
f(x) = arg\max_i a_i, \forall i \in \{1,\dots, C\}
\]
而第\(i\)個輸出神經元的激活值為:
\[
a_i = \frac {e^{net_i}}{\sum_{j=1}^N e^{net^j}}
\]
它代表\(x\)的類別為\(i\)的概率.
為方便寫出它的似然函數, 先對\(y\)變成一個向量:
\[
y \gets (y_1, \dots, y_i, \dots, y_C)^T
\]
其中,
\[
y_i =
\begin{cases}
1&, i = y \\
0&, i \neq y
\end{cases}
\]
它實際上代表第\(i\)個神經元的目標值.
所以樣本\((x,y)\)出現的概率, 即它的似然函數為:
\[
l(W) = \prod_{i=1}^{C} a_i^{y_i}
\]
註意, 這裡的權值\(W\)已經是一個\(C\times d\)的矩陣, 而不是一個列向量.
log似然函數:
\[
L(W) = ln l(W) = \sum_{i=1}^{C} y_i ln a_i
\]
從\(L(W)\)的長相也可以看出, 二分類的邏輯回歸只是多分類邏輯回歸的一種特殊形式. 也就是說, 二分類的邏輯回歸也可以轉換成有兩個輸出神經元的NN.
同樣的, 最大化\(L(w)\)就是最小化\(-L(w)\), 所以它的loss為:
\[
J(W) = -L(W) = - \sum_{j=1}^{C} y_j ln a_j
\]
這是更一般化的交叉熵. 代入softmax函數, 即\(a_j = \frac {e^{net_j}}{\sum_{k=1}^C e^{net_k}}\), 得到:
\[
J(W) = \sum_{j=1}^{C} y_j (ln \sum_{k=1}^C e^{net_k} - net_j)
\]
第\(i\)個神經元的敏感度:
\[
\delta_i = \frac {\partial J}{\partial net_i} = \sum_{j=1}^C y_j (\frac {\sum_{k=1}^C e^{net_k} \frac {\partial net_k}{\partial net_i}}{\sum_{k=1}^C e^{net_k}} - \frac {\partial net_j}{\partial net_i}) = \sum_{j=1}^C y_j\frac{e^{net_i}}{\sum_{k=1}^C e^{net_k}} - \sum_{j=1}^C y_j \frac {\partial net_j}{\partial net_i} = a_i - y_i
\]
很神奇的一幕又出現了. 上面說過, 把目標值向量化後, \(y_i = 0,1\)實際上代表第\(i\)個神經元的目標值. 所以, 在這裡, 輸出神經元的敏感度也是它的激活值與目標值的差值.
總結與討論
主要結論:
- 以均方誤差或交叉熵誤差作為loss function的NN, 其輸出神經元的敏感度是它的激活值與目標值的差值
比較有用的by-product:
- 很多機器學習演算法都可以轉換成淺層神經網路模型
- softmax與sigmoid 函數的導數形式: \(s' = s(1-s)\)
- 最大似然估計的loss function 是交叉熵
- 深度學習中常用的softmax loss其實也是交叉熵.