网站开发实战网络课,wordpress 七牛插件代码,装修之家网,用wordpress做微网站大家好啊#xff0c;我是董董灿。
今天看一个在深度学习中很枯燥但很重要的概念——交叉熵损失函数。
作为一种损失函数#xff0c;它的重要作用便是可以将“预测值”和“真实值(标签)”进行对比#xff0c;从而输出 loss 值#xff0c;直到 loss 值收敛#xff0c;可以… 大家好啊我是董董灿。
今天看一个在深度学习中很枯燥但很重要的概念——交叉熵损失函数。
作为一种损失函数它的重要作用便是可以将“预测值”和“真实值(标签)”进行对比从而输出 loss 值直到 loss 值收敛可以认为神经网络模型训练完成。
那么这个所谓的“交叉熵”到底是什么为什么它可以用来作为损失函数呢 1、熵与交叉熵
“交叉熵”包含了“交叉”和“熵”这两部分。
关于“熵”的描述在理解熵的本质一文中有更详细的说明。总的来说熵可以用来衡量一个随机变量的不确定性数学上可表示为
H(i) - ∑ P(i) * log(P(i))
对于上面的公式我们稍微变一下形将负号和 log(P(i)) 看做一个变量得到
PP(i) -log(p(i))
那么熵的公式就可以写作
H(i) ∑ P(i) * PP(i)
此时熵的公式中P(i) 和 PP(i) 是服从相同的概率分布。因此熵H(i)就变成了事件 PP(i) 发生的数学期望通俗理解为均值。
熵越大表示事件发生的不确定性越大。
而交叉熵是用于比较两个概率分布之间的差异对于两个概率分布 P 和 Q 而言交叉熵定义为
H(i) ∑ P(i) * Q(i)
此时P(i) 和 Q(i) 服从两种不同的概率分布交叉熵的“交叉”就体现在这。
其中 P(i) 为真实分布也就是训练过程中标签的分布Q(i) 为预测分布也就是模型每轮迭代输出的预测结果的分布。
交叉熵越小表示两个概率分布越接近。
从而模型预测结果就越接近真实标签结果说明模型训练收敛了。
关于更细节的数学原理可以查看熵的本质不过我们也可以不用深究理解上述结论就可以。
2、交叉熵作为损失函数
假设有一个动物图像数据集其中有五种不同的动物每张图像中只有一只动物。 我们将每张图像都使用 one-hot 编码来标记动物。对one-hot编码不清楚的可以移步这里有个你肯定能理解的one-hot。 上图是对动物分类进行编码后的表格我们可以将一个one-hot 编码视为每个图像的概率分布那么
第一个图像是狗的概率分布是 1.0 (100%)。 对于第二张图是狐狸的概率分布是1.0100%。 以此类推此时每个图像的熵都为零。 换句话说one-hot 编码标签 100% 确定地告诉我们每张图像有哪些动物第一张图片不可能 90% 是狗10% 是猫因为它100%是狗。
因为这是训练的标签是固定下来的确定分布。
现在假设有一个神经网络模型来对这些图像进行预测在神经网络执行完一轮训练迭代后它可能会对第一张图像狗进行如下分类 该分类表明第一张图像越 40%的概率是狗30%的概率是狐狸5%的概率是马5%的概率是老鹰20%的概率是松鼠。
但是单从图像标签上看它100%是一只狗标签为我们提供了这张图片的准确的概率分布。 那么此时如何评价模型预测的效果呢
我们可以计算利用标签的one-hot编码作为真实概率分布 P模型预测的结果作为 Q 来计算交叉熵 结果明显高于标签的零熵说明预测结果并不是很好。
继续看另一个例子。
假设模型经过了改良在完成一次推理或者一轮训练后对第一张图得到了如下的预测也就是说这张图有98%的概率是狗这个标签的100%已经差的很少了。 我们依然计算交叉熵 可以看到交叉熵变得很低随着预测变得越来越准确交叉熵会下降如果预测是完美的它就会变为零。
基于此理论很多分类模型都会利用交叉熵作为模型的损失函数。
在机器学习中由于多种原因比如更容易计算导数对数 log 的计算大部分情况下是使用基数 e 而不是基数 2 对数底的改变不会引起任何问题因为它只改变幅度。 最近开通另一个计算机视觉从入门到调优的专栏感兴趣的小伙伴可以查看计算机视觉从入门到调优