2022-02-20
经典的损失函数—-交叉熵
1 交叉熵:
分类问题中广泛使用的损失函数,它描述了两个概率分布之间的距离
给定两个概率分布 p 和 q,交叉熵为:H(p, q) = -∑ p(x) log q(x)
当事件总数固定时,概率函数满足:任意 xp(X = x)∈[0, 1] 且 Σ p(X=x) = 1
也就是说,任何时候发生的概率都在0到1之间,总有某个时间会发生,概率之和为1。
在 2:
回归可以作为一种学习算法来优化分类结果,其中回归的参数被去除,并将神经网络输出变成概率分布。
假设原始神经网络输出为 y1, y2, y3, … , yn
处理后的输出为: (y)i = yi’= eyi/ Σj=1n eyj
将原始神经网络的输出作为置信度,生成满足概率分布所有要求的新输出
这样就可以通过交叉熵来衡量预测概率分布与真实概率分布的距离
3 从交叉熵的公式可以看出,它通过概率函数q来表达概率分布p的表达难度。
当交叉熵作为神经网络的损失函数时,q代表预测值,p代表真实值,交叉熵描述了两个分布之间的距离
即交叉熵值越小,两个概率分布越接近。
4 示例:
假设有一个三类问题,一个例子的正确答案是 (1, 0, 0)
预测的答案是 (0.5, 0.4, 0.1)
那么它与正确答案的交叉熵是: H( (1,0,0) , (0.5,0.4,0.1) ) = – ( 1*log0.5 + 0*log0.4 + 0*log0.1 ) ≈ 0.3
另一个通过的预测是 (0.8, 0.1, 0.1)
他与正确答案的交叉熵为:H((1, 0, 0), (0.8, 0.1, 0.1) ) = – ( 1*log0.8 + 0*log0.1 + 0*log0.1 ) ≈ 0.1
直观上很容易知道第二个比第一个好,交叉熵计算的结果也是一致的。
使用以下代码计算交叉熵:
= -tf.(y_ * tf.log(tf.(y, 1e-10, 1.0)))
其中 y_ 是真实值
y 是预测值
tf.(y, 1e-10, 1.0) 可以将y的值限制在1e-10和1.0之间,
如果 y 小于 1e-10,则函数返回 1e-10,如果大于 1.0,则返回 1.0,如果介于两者之间,则返回 y
这样做的目的是为了防止log0的发生
tf.log 是计算日志函数
* 运算不是矩阵乘法,是对应位置元素的乘法
tf。取平均值。如果测量大小,则与取总和相同。
一般交叉熵会和回归一起使用,打包在一起就是:
= tf.nn.(y, y_)
其中 y 是预测值,y_ 是真实值
当只有一个正确答案时提供加速计算功能
tf.nn.
分类:
技术要点:
相关文章:
暂无评论内容