创作不易,有用的话点个赞。。。。。。
1. 假设条件
词汇表:假设词汇表包含四个词汇:[token_0, token_1, token_2, token_3]。
模型的输出概率分布:模型的输出经过 Softmax 转换后,得到概率分布:[0.1,0.5,0.2,0.2],我们需要将[0.1,0.5,0.2,0.2]套进如下公式。
数学公式
真实标签
y 的独热编码向量为:y=[0,1,0,0]
如下图表示:
代入公式可得:
在这个例子中,torch.log 的计算过程可以简化为计算预测概率的自然对数 log(0.5),然后取其负值得到最终的交叉熵损失 0.6931。这个损失值表示的是模型在该样本上的预测误差。
一般来说,计算误差,按照上面的数字,直接计算不好吗,如下:
0 - 0.1 = 0.1,
1 - 0.5 = 0.5,
0 - 0.2 = 0.2,
0 - 0.2 = 0.2,
逐个计算进行反向传播。
那为什么要使用log函数呢?
因为在数据处理上,我们已经使用了softmax函数,使得所有数字加起来等于1,当我把其中一个修改了,自然会影响到其他的维度的数字。所以我只需要让0.5这一个进行反向传播就可以了。
看看log函数图像,我们发现,0到1之间,数字越大,也就是越接近1,-log(x)数字就越小,那么就可以把-log(x)的值当作是损失值,也是符合预期的。例如按照原来的分类方法当0.5(x)越大,越靠近1,证明 1 - 0.5(x) 越小,也越是符合预期,所以把-log(x)当成是损失率刚刚好也满足原来的多分类的概念,torch就可以根据-log(x)作为损失率去反向传播,就是对权重的调大还是调小,调整幅度是多少。
可以看出y越靠近1,log越接近0,寓意为损失率越低。。。。。。。。。。。。。。