从神经网络视角看均方误差与交叉熵作为损失函数时的共同点

缩写:

  • 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, 它们在形式上很不一样, 但在使用梯度下降算法学习最优参数时, 会发现它们其实是殊途同归.

很多机器学习算法都可以转换成浅层神经网络模型(本文中特指全连接的MLP). 而神经网络的BP算法(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其实也是交叉熵.
posted @ 2016-05-31 16:38  宁静是一种习惯  阅读(10975)  评论(2编辑  收藏  举报