总结:
Softmax就是将数值转为概率。
交叉熵就是求两组概率分布的偏差。
有如下::
可以看作是
可以看作是
是的log值, 越大越大。
log( [0, 1) ) | log( 1 ) | log( (1, ) ) |
---|---|---|
- | 0 | + |
- 求log就是把正整数放大到 (log扩:概率到结果)
- 求e幂就是把缩到正整数/概率 (e幂缩:结果到概率)
助记:老公阔 杨幂锁(老公有钱,把杨幂锁在家里)
可以看作是odds,范围 概率/odds/logits
于是,一堆任意数,转化为概率分布,路径就是:
一堆任意数 odds 各odds的概率
(因为所有y是全体样本,所以结果也是概率分布)
项目 | 评估值 | odds = | softmax() |
---|---|---|---|
猪 | -0.1 | 0.368 | 0.067 |
猫 | 2 | 7.39 | 0.548 |
狼 | 0.5 | 1.649 | 0.122 |
马 | 1 | 2.718 | 0.202 |
蜂 | -0.2 | 0.819 | 0.061 |
总和 | 12.9 | 1 |
一组数据的真实情况有了,NN也给出了它的猜测概率,那么如何计算偏差呢?
先来看一个猜对的例子,NN猜测是“狼”,所以狼给出的概率最高,最后真实情况也是狼(为1):
项目 | 猜测概率 (“是”的概率) |
“非”的概率 (1减“是”) |
真实情况 Y (是:1 非:0) |
选定的猜 测概率 (x) |
|
---|---|---|---|---|---|
猪 | 0.05 | 0.95 | 0 (选无) | 0.95 | -0.051 |
猫 | 0.1 | 0.9 | 0 | 0.9 | -0.105 |
狼 | 0.7 | 0.3 | 1 (选有) | 0.7 | -0.357 |
马 | 0.1 | 0.9 | 0 | 0.9 | -0.105 |
蜂 | 0.05 | 0.95 | 0 | 0.95 | -0.051 |
总和 | 1 | -0.67 |
计算整体情况,可以用加法,也可以用乘法。加法上不封顶,突破天际,不利于衡量。所以改用乘法,将真实概率(x)相乘:
但是概率在间,如果项多了以后,结果会非常小,又不利于评判。于是,乘法转加法的法宝,登场了:
取个反:
再看另一个猜错的例子,NN猜测为狼,而实际是猪:
项目 | p有 | p无 | Y | x | |
---|---|---|---|---|---|
猪 | 0.05 | 0.95 | 1 | 0.05 | -2.996 |
猫 | 0.1 | 0.9 | 0 | 0.9 | -0.105 |
狼 | 0.7 | 0.3 | 0 | 0.3 | -1.204 |
马 | 0.1 | 0.9 | 0 | 0.9 | -0.105 |
蜂 | 0.05 | 0.95 | 0 | 0.95 | -0.051 |
总和 | 1 | -4.462 |
结果是
所以上面的两个概率表,可以理解为:计算机猜测出某个动物是狼的可能性,要远大于其他几个动物,然而正确的结果如果也是狼,那CE为0.67,很小,基本就猜对了。如果正确的结果是猪,那说明猜错了,CE为4.462,很大。
在backward的时候,就要提高NN输出正确结果的数值(概率)。
公式也就出来了:
可以看作是一个选择器,其实就是用去选,究竟用哪个,用“是”的,还是“非”的,然后算ln求和:
网友评论