缩写:
- 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))上的损失:
输出神经元的敏感度:
交叉熵---逻辑回归
逻辑回归使用最大似然方法估计参数.
二分类逻辑回归
先说二分类逻辑回归, 即(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:
log-likelihood:
最大化(L(w))就是最小化(-L(w)), 所以它的loss为:
这实际上就是二分类问题的交叉熵loss. 如blog所示, 当(a=0.5)时, loss最大.
输出神经元的敏感度:
相信你已经看出来了, 线性回归NN的敏感度(net - y)实际上也是激活值与目标值的差. 也就是说, 虽然逻辑回归与线性回归使用了不同的loss function, 但它们俩反向传播的敏感度在形式上是一致的, 都是激活值(a)与目标值(y)的差值.
多分类逻辑回归
先将多分类逻辑回归转换成神经网络模型:
- 输入层: 同上
- 输出层: 有多少种类别, 就有多少个输出神经元. 用(C)来表示类别数目, 所以输出层有(C)个神经元. 激活函数为softmax函数. 输出值和二分类逻辑回归一样被当成概率作为分类依据.
- 隐层: 无
依然只考虑单个样本((x, y)).
(y)的预测值(f(x))为输出值最大的那个神经元代表的类别, 即:
而第(i)个输出神经元的激活值为:
它代表(x)的类别为(i)的概率.
为方便写出它的似然函数, 先将(y)变成一个向量:
其中,
它实际上代表第(i)个神经元的目标值.
所以样本((x,y))出现的概率, 即它的似然函数为:
注意, 这里的权值(W)已经是一个(C imes d)的矩阵, 而不是一个列向量.
log似然函数:
从(L(W))的长相也可以看出, 二分类的逻辑回归只是多分类逻辑回归的一种特殊形式. 也就是说, 二分类的逻辑回归也可以转换成有两个输出神经元的NN.
同样的, 最大化(L(w))就是最小化(-L(w)), 所以它的loss为:
这是更一般化的交叉熵. 代入softmax函数, 即(a_j = frac {e^{net_j}}{sum_{k=1}^C e^{net_k}}), 得到:
第(i)个神经元的敏感度:
很神奇的一幕又出现了. 上面说过, 把目标值向量化后, (y_i = 0,1)实际上代表第(i)个神经元的目标值. 所以, 在这里, 输出神经元的敏感度也是它的激活值与目标值的差值.
总结与讨论
主要结论:
- 以均方误差或交叉熵误差作为loss function的NN, 其输出层神经元的敏感度是它的激活值与目标值的差值
比较有用的by-product:
- 很多机器学习算法都可以转换成浅层神经网络模型
- softmax与sigmoid 函数的导数形式: (s' = s(1-s))
- 最大似然估计的loss function 是交叉熵
- 深度学习中常用的softmax loss其实也是交叉熵.