欢迎光临散文网 会员登陆 & 注册

浅谈torch中的softmax与CrossEntropy

2023-08-14 02:41 作者:momonaの男友  | 我要投稿

首先是softmax函数,我认为我在之前的文章

分类模型中为何更适合使用softmax函数?

已经较为清楚的阐述,故这里不再重复赘述。


在上文中,我较为清晰的说明了,softmax函数只是为了将我们的预测结果,表达成一种合适的结果,去拟合one-hot编码

但是对于这种向量标签,我们并不能很好的去定义其损失函数(误差函数)

我们理所当然应该想到均方误差函数,但实际上,均方误差函数(MSE),对于标量标签确实能起到一个非常好的效果。

而对于一个向量标签,我们选择了一个能实现与之同等效果的CrossEntropy函数,也即交叉熵损失函数。

交叉熵损失函数

如上图所示,其中 y 为正确的标签,而 %5Chat%7By%7D 为预测标签(经过softmax处理后)。

该损失函数在计算上具有非常明显的便利性,即仅考虑正确标签下对应的损失。例如,我们不妨令 y = [0, 1, 0],%5Chat%7By%7D%20 = [0.3, 0.1, 0.6], 那么此时的 loss%20%3D%20-0log0.3-1log0.1-0log0.6%3D-log0.1 ,

即仅考虑到了正确标签下的损失。

而其优越性不仅表现在此处,其导函数更是有非常优异的性质,即:

CrossEntropy函数的导函数

其中 o 为未经softmax处理前得到的预测标签。

换言之,%CE%B4_%7Bo%7D(y%2C%20%5Chat%7By%7D%20%20)%20%20%3D%20%5Chat%7By%7D-y

如下图所示:

验证如上结论

毫无疑问,y_pred.grad == softmax(y_pred) - one_hot(y),这是成立的。(不成立可能是精度误差导致的,看图中明显成立)。

而观察y_pred.grad,对于y[1]这个样本,我们明显可以看出,其梯度是正在减少前两项的权值,而增大最后一项的权值,以努力实现正确归类至第三类,这是符合我们预期的。

故,CrossEntropy函数确实是在朝着我们的目标去实现。

浅谈torch中的softmax与CrossEntropy的评论 (共 条)

分享到微博请遵守国家法律