浅谈torch中的softmax与CrossEntropy
来源:哔哩哔哩
发布时间:2023-08-14 02:39:41
首先是softmax函数,我认为我在之前的文章
(资料图片仅供参考)
分类模型中为何更适合使用softmax函数?
已经较为清楚的阐述,故这里不再重复赘述。
在上文中,我较为清晰的说明了,softmax函数只是为了将我们的预测结果,表达成一种合适的结果,去拟合one-hot编码。
但是对于这种向量标签,我们并不能很好的去定义其损失函数(误差函数)。
我们理所当然应该想到均方误差函数,但实际上,均方误差函数(MSE),对于标量标签确实能起到一个非常好的效果。
而对于一个向量标签,我们选择了一个能实现与之同等效果的CrossEntropy函数,也即交叉熵损失函数。
如上图所示,其中 为正确的标签,而 为预测标签(经过softmax处理后)。
该损失函数在计算上具有非常明显的便利性,即仅考虑正确标签下对应的损失。例如,我们不妨令 = [0, 1, 0], = [, , ], 那么此时的 ,
即仅考虑到了正确标签下的损失。
而其优越性不仅表现在此处,其导函数更是有非常优异的性质,即:
其中 为未经softmax处理前得到的预测标签。
换言之,
如下图所示:
毫无疑问,y_ == softmax(y_pred) - one_hot(y),这是成立的。(不成立可能是精度误差导致的,看图中明显成立)。
而观察y_,对于y[1]这个样本,我们明显可以看出,其梯度是正在减少前两项的权值,而增大最后一项的权值,以努力实现正确归类至第三类,这是符合我们预期的。
故,CrossEntropy函数确实是在朝着我们的目标去实现。
标签: