Softmax函数 交叉熵 信息熵

原文链接: Softmax函数 交叉熵 信息熵

上一篇: TensorFlow 退化学习率

下一篇: TensorFlow 线性分类

参考

https://www.cnblogs.com/yjmyzz/p/7822990.html

https://blog.csdn.net/qian99/article/details/78046329

in_y 表示实际概率,net表示网络计算出的结果

loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=in_y, logits=net))

softmax(柔性最大值)函数,一般在神经网络中, softmax可以作为分类任务的输出层。其实可以认为softmax输出的是几个类别选择的概率,比如我有一个分类任务,要分为三个类,softmax函数可以根据它们相对的大小,输出三个类别选取的概率,并且概率和为1。

softmax函数的公式是这种形式:

721b8a2f027eaa07b7782132e43568cda4b.jpg

def softmax(x):
    exp_x = np.exp(x)
    return exp_x / np.sum(exp_x)
softmax([1, 2, 3, 4, 5])
array([ 0.01165623,  0.03168492,  0.08612854,  0.23412166,  0.63640865])

当数字比较大时,由于阶乘计算增长过快会导致移溢出

进行恒等变化

4a3592ee877720157a39b8590fba8b30f8d.jpg

一般取值为

F=−max(a1,a2,...,aC)

这样子将所有的输入平移到0附近(当然需要假设所有输入之间的数值上较为接近),同时,除了最大值,其他输入值都被平移成负数,ee为底的指数函数,越小越接近0,这种方式比得到 nan 的结果更好。

def softmax(x):
    shift_x = x - np.max(x)
    exp_x = np.exp(shift_x)
    return exp_x / np.sum(exp_x)

信息熵

e5d68ff39a1949ad4a3972f17bbbaf66f50.jpg

这里p为概率,最后算出来的结果通常以bit为单位。

举例:拿计算机领域最常现的编码问题来说,如果有A、B、C、D这四个字符组成的内容,每个字符出现的概率都是1/4,即概率分布为{1/4,1/4,1/4,1/4},设计一个最短的编码方案来表示一组数据,套用刚才的公式:

bf6415cb7110730d8cdf581104b3452df77.jpg

即:2个bit,其实不用算也能想明白,如果第1位0表示A,1表示B;第2位0表示C,1表示D,2位编码搞定。

如果概率变了,比如A、B、C、D出现的概率是{1,1,1/2,1/2},即:每次A、B必然出现,C、D出现机会各占一半,这样只要1位就可以了。1表示C,0表示D,因为AB必然出现,不用表示都知道肯定要附加上AB,套用公式算出来的结果也是如此。

bd4864404463e26eb1330a9f0f9029595b6.jpg

交叉熵

c1c40bafd3ef54206f101345eafc51881f1.jpg

这是公式定义,x、y都是表示概率分布(注:也有很多文章喜欢用p、q来表示),这个东西能干嘛呢?

假设x是正确的概率分布,而y是我们预测出来的概率分布,这个公式算出来的结果,表示y与正确答案x之间的错误程度(即:y错得有多离谱),结果值越小,表示y越准确,与x越接近。

比如:

x的概率分布为:{1/4 ,1/4,1/4,1/4},现在我们通过机器学习,预测出来二组值:

y1的概率分布为  {1/4 ,  1/2 , 1/8 , 1/8}

y2的概率分布为  {1/4 ,  1/4 , 1/8 , 3/8}

从直觉上看,y2分布中,前2项都100%预测对了,而y1只有第1项100%对,所以y2感觉更准确,看看公式算下来,是不是符合直觉:

9628f6012227f0502a827b4fc63bc8b3a25.jpg

578908482a14d41fbbf302a4a9f19b20bee.jpg

对比结果,H(x,y1)算出来的值为9/4,而H(x,y2)的值略小于9/4,根据刚才的解释,交叉熵越小,表示这二个分布越接近,所以机器学习中,经常拿交叉熵来做为损失函数(loss function)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值