泛化能力:通常将学习方法对未知数据的预测能力称为泛化能力。
过拟合:如果一味的追求模型对于训练数据的预测能力,所选模型的复杂度往往会比“真模型”更高,我们成这种现象为过拟合。
损失函数:用来度量预测结果好坏的程度的函数。
目标函数:即我们的求解目标的数学表达式,也是我们希望优化的函数。
KL散度:相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。
范数:范数的本质是距离,存在的意义是为了实现比较。
均方差 Mean Squared Error (MSE) 损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为 L2 Loss。其基本形式如下
从直觉上理解均方差损失,这个损失函数的最小值为 0(当预测等于真实值时),最大值为无穷大。下图是对于真实值 ,不同的预测值 的均方差损失的变化图。横轴是不同的预测值,纵轴是均方差损失,可以看到随着预测与真实值绝对误差 的增加,均方差损失呈二次方地增加。
实际上在一定的假设下,我们可以使用最大化似然得到均方差损失的形式。假设模型预测与真实值之间的误差服从标准高斯分布( ),则给定一个 xi 模型输出真实值 yi 的概率为
进一步我们假设数据集中 N 个样本点之间相互独立,则给定所有x 输出所有真实值y 的概率,即似然 Likelihood,为所有 的累乘
通常为了计算方便,我们通常最大化对数似然 Log-Likelihood
去掉与 无关的第一项,然后转化为最小化负对数似然 Negative Log-Likelihood
可以看到这个实际上就是均方差损失的形式。也就是说在模型输出与真实值的误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质上是一致的,因此在这个假设能被满足的场景中(比如回归),均方差损失是一个很好的损失函数选择;当这个假设没能被满足的场景中(比如分类),均方差损失不是一个好的选择。
平均绝对误差 Mean Absolute Error (MAE) 是另一类常用的损失函数,也称为 L1 Loss。其基本形式如下
同样的我们可以对这个损失函数进行可视化如下图,MAE 损失的最小值为 0(当预测等于真实值时),最大值为无穷大。可以看到随着预测与真实值绝对误差 的增加,MAE 损失呈线性增长
同样的我们可以在一定的假设下通过最大化似然得到 MAE 损失的形式,假设模型预测与真实值之间的误差服从拉普拉斯分布 Laplace distribution( ),则给定一个 模型输出真实值 的概率为
与上面推导 MSE 时类似,我们可以得到的负对数似然实际上就是 MAE 损失的形式
MAE 和 MSE 作为损失函数的主要区别是:MSE 损失相比 MAE 通常可以更快地收敛,但 MAE 损失对于 噪音数据 更加健壮,即更加不易受到 噪音数据 影响。
MSE 通常比 MAE 可以更快地收敛。当使用梯度下降算法时,MSE 损失的梯度为 ,而 MAE 损失的梯度为 ,即 MSE 的梯度的 scale 会随误差大小变化,而 MAE 的梯度的 scale 则一直保持为 1,即便在绝对误差 很小的时候 MAE 的梯度 scale 也同样为 1,这实际上是非常不利于模型的训练的。当然你可以通过在训练过程中动态调整学习率缓解这个问题,但是总的来说,损失函数梯度之间的差异导致了 MSE 在大部分时候比 MAE 收敛地更快。这个也是 MSE 更为流行的原因。
MAE 对于 outlier(离群点) 更加 robust(鲁棒性)。我们可以从两个角度来理解这一点:
上文我们分别介绍了 MSE 和 MAE 损失以及各自的优缺点,MSE 损失收敛快但容易受 outlier 影响,MAE 对 outlier 更加健壮但是收敛慢,Huber Loss 则是一种将 MSE 与 MAE 结合起来,取两者优点的损失函数,也被称作 Smooth Mean Absolute Error Loss 。其原理很简单,就是在误差接近 0 时使用 MSE,误差较大时使用 MAE,公式为
上式中 是 Huber Loss 的一个超参数, 的值是 MSE 和 MAE 两个损失连接的位置。上式等号右边第一项是 MSE 的部分,第二项是 MAE 部分,在 MAE 的部分公式为 是为了保证误差 时 MAE 和 MSE 的取值一致,进而保证 Huber Loss 损失连续可导。
下图是 时的 Huber Loss,可以看到在 的区间内实际上就是 MSE 损失,在 和 区间内为 MAE损失。
Huber Loss 结合了 MSE 和 MAE 损失,在误差接近 0 时使用 MSE,使损失函数可导并且梯度更加稳定;在误差较大时使用 MAE 可以降低 outlier 的影响,使训练对 outlier 更加健壮。缺点是需要额外地设置一个 超参数。
分位数回归 Quantile Regression 是一类在实际应用中非常有用的回归算法,通常的回归算法是拟合目标值的期望或者中位数,而分位数回归可以通过给定不同的分位点,拟合目标值的不同分位数。例如我们可以分别拟合出多个分位点,得到一个置信区间,如下图所示(图片来自笔者的一个分位数回归代码 demo Quantile Regression Demo)
分位数回归是通过使用分位数损失 Quantile Loss 来实现这一点的,分位数损失形式如下,式中的 r 分位数系数。
我们如何理解这个损失函数呢?这个损失函数是一个分段的函数 ,将 (高估) 和 (低估) 两种情况分开来,并分别给予不同的系数。当 时,低估的损失要比高估的损失更大,反过来当 时,高估的损失比低估的损失大;分位数损失实现了分别用不同的系数控制高估和低估的损失,进而实现分位数回归。特别地,当 时,分位数损失退化为 MAE 损失,从这里可以看出 MAE 损失实际上是分位数损失的一个特例 — 中位数回归(这也可以解释为什么 MAE 损失对 outlier 更鲁棒:MSE 回归期望值,MAE 回归中位数,通常 outlier 对中位数的影响比对期望值的影响小)。
下图是取不同的分位点 得到的三个不同的分位损失函数的可视化,可以看到 0.2 和 0.6 在高估和低估两种情况下损失是不同的,而 0.5 实际上就是 MAE。
上文介绍的几种损失函数都是适用于回归问题损失函数,对于分类问题,最常用的损失函数是交叉熵损失函数 Cross Entropy Loss。
考虑二分类,在二分类中我们通常使用 Sigmoid 函数将模型的输出压缩到 (0, 1) 区间内 ,用来代表给定输入 xi ,模型判断为正类的概率。由于只有正负两类,因此同时也得到了负类的概率。
将两条式子合并成一条
假设数据点之间独立同分布,则似然可以表示为
对似然取对数,然后加负号变成最小化负对数似然,即为交叉熵损失函数的形式
下图是对二分类的交叉熵损失函数的可视化,蓝线是目标值为 0 时输出不同输出的损失,黄线是目标值为 1 时的损失。可以看到约接近目标值损失越小,随着误差变差,损失呈指数增长。
在多分类的任务中,交叉熵损失函数的推导思路和二分类是一样的,变化的地方是真实值 现在是一个 One-hot 向量,同时模型输出的压缩由原来的 Sigmoid 函数换成 Softmax 函数。Softmax 函数将每个维度的输出范围都限定在 之间,同时所有维度的输出和为 1,用于表示一个概率分布。
其中 表示 K 个类别中的一类,同样的假设数据点之间独立同分布,可得到负对数似然为
由于 yi 是一个 one-hot 向量,除了目标类为 1 之外其他类别上的输出都为 0,因此上式也可以写为
其中 ci 是样本 xi 的目标类。通常这个应用于多分类的交叉熵损失函数也被称为 Softmax Loss 或者 Categorical Cross Entropy Loss。
分类中为什么不用均方差损失?上文在介绍均方差损失的时候讲到实际上均方差损失假设了误差服从高斯分布,在分类任务下这个假设没办法被满足,因此效果会很差。为什么是交叉熵损失呢?有两个角度可以解释这个事情,一个角度从最大似然的角度,也就是我们上面的推导;另一个角度是可以用信息论来解释交叉熵损失:
假设对于样本 x 存在一个最优分布 真实地表明了这个样本属于各个类别的概率,那么我们希望模型的输出 尽可能地逼近这个最优分布,在信息论中,我们可以使用 KL 散度 Kullback–Leibler Divergence 来衡量两个分布的相似性。给定分布 p 和分布 q , 两者的 KL 散度公式如下
其中第一项为分布 p 的信息熵,第二项为分布 p 和 q 的交叉熵(KL散度的实际意义是q与p的相关程度)。将最优分布 和输出分布 带入 q 和 p 得到
由于我们希望两个分布尽量相近,因此我们最小化 KL 散度。同时由于上式第一项信息熵仅与最优分布本身相关,因此我们在最小化的过程中可以忽略掉,变成最小化
我们并不知道最优分布 ,但训练数据里面的目标值 yi 可以看做是 的一个近似分布
这个是针对单个训练样本的损失函数,如果考虑整个数据集,则
可以看到通过最小化交叉熵的角度推导出来的结果和使用最大 化似然得到的结果是一致的。
合页损失 Hinge Loss 是另外一种二分类损失函数,适用于 maximum-margin 的分类,支持向量机 Support Vector Machine (SVM) 模型的损失函数本质上就是 Hinge Loss + L2 正则化。合页损失的公式如下
下图是 y 为正类, 即 时,不同输出的合页损失示意图
可以看到当 为正类时,模型输出负值会有较大的惩罚,当模型输出为正值且在 区间时还会有一个较小的惩罚。即合页损失不仅惩罚预测错的,并且对于预测对了但是置信度不高的也会给一个惩罚,只有置信度高的才会有零损失。使用合页损失直觉上理解是要找到一个决策边界,使得所有数据点被这个边界正确地、高置信地被分类。
数学公式:
sigmoid非线性函数的数学公式是
函数图像如下图所示。它输入实数值并将其“挤压”到0到1范围内,适合输出为概率的情况,但是现在已经很少有人在构建神经网络的过程中使用sigmoid。
存在问题:
数学公式:
Tanh非线性函数图像如下图所示,它将实数值压缩到[-1,1]之间。
存在问题:
Tanh解决了Sigmoid的输出是不是零中心的问题,但仍然存在饱和问题。
为了防止饱和,现在主流的做法会在激活函数前多做一步batch normalization,尽可能保证每一层网络的输入具有均值较小的、零中心的分布。
数学公式:
ReLU非线性函数图像如下图所示。相较于sigmoid和tanh函数,ReLU对于随机梯度下降的收敛有巨大的加速作用;sigmoid和tanh在求导时含有指数运算,而ReLU求导几乎不存在任何计算量。
对比sigmoid类函数主要变化是:
1)单侧抑制;
2)相对宽阔的兴奋边界;
3)稀疏激活性。
存在问题:
ReLU单元比较脆弱并且可能“死掉”,而且是不可逆的,因此导致了数据多样化的丢失。通过合理设置学习率,会降低神经元“死掉”的概率。
数学公式:
其中 是很小的负数梯度值,比如0.01,Leaky ReLU非线性函数图像如下图所示。这样做目的是使负轴信息不会全部丢失,解决了ReLU神经元“死掉”的问题。更进一步的方法是PReLU,即把 当做每个神经元中的一个参数,是可以通过梯度下降求解的。
Maxout
数学公式:
Maxout是对ReLU和leaky ReLU的一般化归纳,函数公式是
Maxout非线性函数图像如下图所示。Maxout具有ReLU的优点,如计算简单,不会 saturation,同时又没有ReLU的一些缺点,如容易go die。
存在问题:
每个神经元的参数double,这就导致整体参数的数量激增。
数学公式:
Softmax用于多分类神经网络输出,目的是让大的更大。函数公式是
Softmax是Sigmoid的扩展,当类别数k=2时,Softmax回归退化为Logistic回归。
参考:
https://zhuanlan.zhihu.com/p/77686118
https://zhuanlan.zhihu.com/p/32610035
https://zhuanlan.zhihu.com/p/48776056
https://zhuanlan.zhihu.com/p/26884695