常用损失函数
首先看几个定义:
- 损失函数
用于定义单个训练样本(的预测值)与真实值之间的误差 - 代价函数
用于定义单个批次或者整个训练集样本(的预测值)与真实值之间的误差 - 目标函数
泛指任意可以被优化的函数
在机器学习中,损失函数是代价函数的一部分,而代价函数是目标函数的一种类型。
损失函数大致可以分为两类:1)回归损失;2)分类损失。各损失函数有各自的优缺点,没有最好的损失函数,只有最合适的损失函数。
回归损失
L1损失
也称为平均绝对误差(Mean Absolute Error, MAE),该损失衡量的是预测值和真实值之间距离的平均误差,计算方式如下:
该损失函数的优点:
- 无论对于怎样的输入,都有稳定的梯度(1或者-1),不会导致梯度爆炸等问题
- 鲁棒性比较强,对于异常点不太敏感(相对于L2损失将异常值的误差放大)
该损失函数的缺点:
- 在中心点不能求导,不方便求解
- 由于稳定的梯度,在训练后期如果不改变学习率,损失函数会在稳定值的附近发生持续震荡难以收敛
L2损失
也称为均方差(Mean Squared Error, MSE),该损失衡量预测值和真实值之间距离的平方和,计算方式如下:
该损失函数的优点:
- 各点连续光滑,求导方便
- 稳定性强,当添加新数据时L2损失的整体变动要比L1损失要小得多
- 对异常值敏感,当异常值对研究很重要时,该损失函数不失为好选择
该损失函数的缺点:
- 离最低点越远,梯度越大,使用梯度下降法求解时可能会导致梯度爆炸
- 离最低点越近,梯度越小,这会造成训练速度变慢
- 对异常值敏感,梯度更新的方向很容易受离群点影响,不具备鲁棒性(当异常值对研究不那么重要时,这就成缺点了)
Smooth L1损失
该损失函数是对L1损失和L2损失的折中,对个单个样本来说,其计算方式如下:
其中
该损失函数的优点:
- 相比于L1损失函数,可以收敛更快
- 相比于L2损失函数,对离群点、异常值不敏感,梯度变化相对更小,训练更加稳定
分类损失
交叉熵损失
熵
熵的概念首次被香农提出,目的是寻找一种高效、无损的编码信息的方法。以编码后数据的平均长度来衡量高效性,平均长度越短越高效;编码后不能有原始信息的丢失,即为无损。所以熵就是无损编码事件信息的最小平均编码长度。
对于具有
一般来说,对高可能性事件采用短编码,对低可能性事件采用长编码,得到的平均编码长度会比较短。
如果熵比较大,说明平均编码长度比较长,这意味着这一信息有比较多的可能状态,相应的每个状态的可能性比较低,因此每当来一个新的信息,我们很难对其作出准确预测,即有比较大的混乱程度/不确定性/不可预测性。
交叉熵
当我们知道了事件的概率分布时,我们可以计算它的熵;如果我们不知道事件的概率分布,又想计算熵,就需要做一个估计。
假设真实的概率分布是
【注】假设交叉熵用
对于分类任务来说,假设用one-hot编码作为标签,那么每个样本都有100%的确定度。如果有5个类别,某样本的真实标签为[1,0,0,0,0],而预测标签为[0.4,0.3,0.05,0.05,0.2],那么两者的交叉熵为
交叉熵损失
在二分类模型中,标签只有是和否两种,此时,可以使用二分类交叉熵作为损失函数。计算公式如下:
由于是二分类,所以
需要说明的是,模型并不会直接预测各类别的概率,而是首先计算各类别的得分,再由softmax(或者sigmoid)转换为概率分布。
该损失函数的优点:
- 采用类间竞争机制,比较擅长学习类与类之间的信息
- 具有凸函数的性质,使得优化算法(如梯度下降)可以更容易地找到全局最优解,避免陷入局部最优解
- 模型预测效果和偏导值负相关,即模型效果越差偏导值越大,所以在模型效果差的时候收敛速度快,模型效果好的时候更新速度慢
该损失函数的缺点:
- 只关心对正确标签预测概率的准确性,忽略了其它错误标签的差异,在特征空间中可能不会形成紧凑且易于区分的类别表示,从而导致学习到的特征比较分散
- 当特征不够紧凑时,由于新数据的特征表示可能与训练数据的特征表示存在较大差异,模型在新数据上可能难以实现准确的分类,影响模型泛化性
当类别之间存在重叠或者模糊边界时,交叉熵损失函数不是好的选择,可能需要更复杂的损失函数。
负对数似然损失函数
负对数似然损失函数应用于多分类问题,在二分类情况下等价于交叉熵损失函数,计算方式如下:
其中
和交叉熵损失函数没有本质不同,无非是用于多分类还是二分类,激活函数使用softmax还是sigmoid。
NCE损失
噪声对比估计损失,全称Noise Contrastive Estimation。分类任务中的类别比较少的时候,可以直接用标准的softmax公式计算,但是当类别特别多的时候,需要采用估算近似的方法简化softmax中归一化的计算。
极大似然估计
在机器学习领域有一个方法,对问题建模以后为其构造一个目标函数,然后对这个目标函数进行优化,从而得到一组最优参数,最后利用这组最优参数对应的模型进行预测,这就是极大似然估计。
在建模统计语言模型时,利用极大似然估计和马尔科夫假设(n-gram语言模型),我们可以写出其极大似然函数:
因为直接计算连乘可能导致数值下溢,通常会对上式取对数,转换为求和形式:
我们的目标就是最大化似然函数
假设输入到softmax之前的结果用
假设我们从训练数据中得出经验分布
由于单词库
NCE
NCE的核心思想是通过学习数据分布样本和噪声分布样本之间的差异,发现数据中的一些特性,由于这个方法需要依靠与噪声数据进行对比,所以被称为“噪声对比估计”(Noise Contrastive Estimation)。更具体地,NCE将多分类问题转换成了一个二分类问题,分类器能够对数据样本和噪声样本进行二分类,这个分类器的参数
对于单词
上述损失函数中有
那么
看起来上式的分母还是需要对词表中的每一个词进行归一化操作?NCE将其处理成可学习的参数。从实际学习的数值看,每次分母的数值接近1且方差较小,因此实际操作时,可以直接设为1。所以
那么最终的NCE损失函数为:
研究者通过实验和推导证明,当负样本和正样本数量之比softmax的梯度,那么NCE对于噪声分布好坏的依赖程度也就越小。也就是说,在计算能力允许的条件下,应尽可能增大负样本数量。有研究证明,25个噪音样本足以匹配常规softmax的性能,且有45倍的加速。
【参考文献】