深度学习-损失函数(Loss Function)总结

819 阅读3分钟

损失函数的作用

“学习”本身是一个根据环境反馈(或观察),不断调整自我认知及行为的过程。

机器学习的过程也是一个“输入->输出->计算误差->调整模型”的过程。

将输入送入模型,经由模型内部大量参数计算,输出一个结果,再计算“误差”,并基于误差调整内部的参数。

这个误差就是由损失函数计算。

损失函数的种类

现假设有一个回归问题,将我们的模型抽象为一个函数H,输入为X,输出为H(X),真实标签为Y。
损失函数的作用就是度量模型输出 H(X) 与 真实标签 Y 之间的差距

最朴素的损失函数

直觉性的,我们可以将H(X)和Y做差,得到最朴素的损失函数。

L(Y,H(X))=YH(X)L(Y,H(X)) = Y-H(X)

显然,如果目标值为1,模型预测为0.5和1.5时,我们的损失函数给出的值应当是一致的。我们只希望计算“距离”,而不希望计算“方向”。

绝对值损失函数

因此,给这个朴素的损失函数加上一个绝对值,就演变成了最简单的绝对值损失函数

L(Y,H(X))=YH(X)L(Y,H(X)) = |Y-H(X)|
  • 优点:1. 对异常点不敏感;2. 收敛速度快
  • 缺点:1. 在0处不连续,需要额外处理; 2. 梯度固定,无论误差大小梯度都是一样的,需要动态调整学习率才能较好地收敛。

平方损失函数

我们也可以给这个损失函数求个平方,就得到了平方损失函数

L(Y,H(X))=(YH(X))2L(Y,H(X)) = (Y-H(X)) ^2
  • 优点:1. 处处可导; 2. 梯度随误差变化,不需要额外调整学习率
  • 缺点:1. 扩大了误差,对异常点敏感

对数损失函数

我们还可以给这个损失函数求对数(这里面涉及分类问题和回归问题的区别,这里不细讲,本质上都是相似的)

L(Y,H(x))=log(YH(X))L(Y,H(x)) = log( Y - H(X) )

在简单的二分类问题下,Y取值为0或1,输出的H(X)可以理解为1的概率,于是可以式子可以简化为

L(Y,H(x))=ylog(H(X))+(1y)log(1H(X))L(Y,H(x)) = y * log(H(X) ) + (1-y)*log( 1 - H(X) )

Hinge损失函数

交叉熵损失函数

熵的定义:p(x)log(p(x)),为什么?待填坑。 KL散度:用Q(x)建立编码来表达P(X),所需要的数据量,与用P(x)建立编码来表达P(X)的信息量不同。即为下式

KL_LOSS=(P(X)log(Q(x)))(P(x)log(p(x)))=plogpplogqKL\_{LOSS} = -(P(X)log(Q(x))) - (-P(x)log(p(x))) = plogp - plogq

这就是KL散度。 该式中,前一项plogp为p的熵。在实际计算分类问题时,p的值只能取0和1,因此可以将该项忽略,直接计算后一项。 这就是交叉熵,J为类别的数量,单个样本的交叉熵为

crossentropy=j=1Jpjlogqjcross_entropy = -\sum_{j=1}^{J} p_jlogq_j

针对二分类问题,可以简化为

crossentropy=pjlogqj+(1pj)log(1qj)cross_entropy = p_jlogq_j + (1-p_j) log(1-q_j)

损失函数与风险函数

  • 损失函数计算的是某一个样本点的误差。
  • 风险函数:用于衡量'样本点平均意义'下的好坏,就是说要除以batch_size。 风险函数又分为经验风险与结构风险。经验风险即预测结果与实际结果的差值,结构风险即预测经验风险加上正则项。