关于在机器学习中交叉熵和相对熵的问题

关于在机器学习中交叉熵和相对熵的问题

记录一下在学习当中的问题和解决结果。
在学到神经网络时,通常的损失函数都由交叉熵来描述,如下:
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y)))
但通常情况下,在机器学习中相对熵是可以替换交叉熵的。具体解释看
链接: 如何通俗的解释交叉熵与相对熵?
我就想既然通常“相对熵”也可称为“交叉熵”,因为真实分布p是固定的,D(p||q)由H(p,q)决定,那么为何不用相对熵随损失函数?
所以我打算试一下,用最简单的tensorflow实现MINIST手写数字识别来做试验。
我把上述的loss函数描述换成了
loss = tf.reduce_mean(tf.reduce_sum(y_* (tf.log(y_/y))))
结果处理来准确率是0.98%,这明显有问题。用之前的交叉熵的准确率是91.4%。
后来我吧相对熵的写法换了一种:
loss = tf.reduce_mean(tf.reduce_sum(y_* (tf.log(y_)+tf.log(1/y))))
也就是把log函数分开写,结果是91.4%,和交叉熵没有太大的区别。
为什么把log(A)+log(1/B)换成log(A/B)结果有变化呢?这不是等价变换吗?
最后,可能因为因为机器学习中标签一般为(1, 0, 0, 0,…, 0)(标签使用one-hot encoded),在合起来写的那种情况,真实标签y_做了分数的分子,有很多0的情况,而log0是没有意义的。
所以最后做了一次测试:
cross_entropy = tf.reduce_mean(tf.reduce_sum(y_*(tf.log((y_+0.000001)/y))))
为了防止出现分子出现0的情况,把分子加一个很小的数,结果正确率是90.8%,从这个结果也能说明一些原因。

初学机器学习,一些拙见,欢迎讨论。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值