神经网络中的损失函数

总览

这篇文章主要记录了对损失函数和目标函数的理解,然后介绍了两种较常用的损失函数:均方误差和交叉熵。重点是记录对于交叉熵的认识,以及为什么交叉熵可以表示损失或代价,即其作用原理。

正文

深度学习中,我们在定义神经网络模型时,首先要明确模型的损失函数(loss function),即代价函数(cost function)。损失函数的作用是用来表示模型预测值和训练样本之间的差异,我们的目的是通过降低这个损失函数来不断改进模型参数,使模型预测越来越准确。当然,不能只降低某个预测值的损失函数,而是应当降低所有样本的总体损失函数,即全部样本上损失函数的平均值或数学期望,我们将这个期望值称为风险函数(risk function)。在训练集上,通过不断降低损失函数期望即风险函数来逐渐提高模型预测的准确度,就能得到拟合度很高的模型。但这会不可避免地造成过拟合,为了减少这种情况,还需要为损失函数加上另一个函数,即正则化函数,它用来度量模型的复杂度,我们希望模型尽可能的不复杂,以此来降低过拟合的可能性。正则化常用的有L1,L2范数。这样就最终形成了我们的目标函数(objective function)
这里的损失函数取作平方差

神经网络的训练过程就是不断降低目标函数的过程。

(上面只是一些情况的描述,不是所有情况都是这种关系,神经网络模型多种多样,解决的问题也五花八门,因此有各种各样的损失函数和目标函数,上面只是举了最简单的例子。)

接下来主要记录一下损失函数的种类。

1. 均方误差

均方误差也称均值平方差(Mean Squared Error, MSE),在神经网络中表示预测值和真实值之间的差异,它的公式就是预测值与真实值之差平方的期望。
在这里插入图片描述
均方误差一般用于回归问题
需要注意:预测值和真实值要在相同的数据分布内,即如果预测值使用sigmoid等函数进行了归一化处理,那么真实值也要进行相同的归一化处理。

2. 交叉熵

首先,理解熵的含义,可以从信息论出发,熵是指一个事件的信息量,或者说事件所含信息的最短编码长度,关于熵的深度介绍可以参考这篇文章:香农说,要有熵,于是开启了信息时代(上),(下)。这里对熵的理解不需要太深。
理解交叉熵(cross entropy),最好从KL散度入手。KL散度有时也称KL距离,用来表示两个分布之间的差异程度。两个事件或两个分布之间越相似,即差异越小,则KL散度越小。其数学公式为:在这里插入图片描述
其中,熵表示为
在这里插入图片描述
而交叉熵为
在这里插入图片描述
可以看出:KL散度 = 交叉熵 - 熵

在机器学习中,我们将样本分布表示为分布A,模型预测分布表示为分布B,那么A, B之间的差异程度就可以表示为A,B的KL散度,它等于A,B的交叉熵减去A的熵:
在这里插入图片描述
我们训练神经网络模型的目标当然是预测值分布与真实值分布越相近越好,也就是D(A||B) 越小越好。

在多分类问题中,A和B都代表了多个分类,预测值b与哪类样本分布间的KL散度越小,则越可能归为这一类,所以KL散度可以用作分类问题的损失函数。但在深度学习中,样本A的分布情况我们是已知的,也就是熵 S(A) 是已知的,此时最小化A,B的KL散度就等价于最小化A,B的交叉熵H(A, B)

于是,交叉熵H(A, B) 便可表示预测值和标签值之间的差异程度,将其作为损失函数,训练得到预测值与训练样本分布相近的网络模型。

在机器学习中交叉熵的公式可表示为:
在这里插入图片描述
其中y代表真实值,a代表预测值.

交叉熵一般用于分类问题

另外,损失函数的选取还和输入标签数据的类型有关,如果输入是实数、无界的值,损失函数用平方差;如果输入标签是位矢量(分类标志),使用交叉熵会更好。

神经网络解决的问题五花八门,实际用到的损失函数也多种多样,之后遇到实用或巧妙的损失函数,还会继续更新在这里。

参考文献:
为什么交叉熵(cross-entropy)可以用于计算代价?

你可能感兴趣的:(机器学习)