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

10 多层感知机 + 代码实现 - 动手学深度学习v2

2023-02-27 17:32 作者:momonaの男友  | 我要投稿

简单谈谈softmax函数。


QA P4 - 02:14


在我看来,因为我们是要去拟合δ=[δ1, δ2, ..., δn],当然,我们理想的label是一个one hot编码,即类似于[0, 1, 0, ..., 0],其中仅有一个1。

我们当然是可以直接将预测结果的tensor去找到最大的索引作为其的分类。也即,如果预测结果为[0.9, 0.2, -0.1],随便编的一组数据,求和可以不为1,为任意数。其中很显然第一个索引值最大,我们就可以将其分类为第一类,但是值得一提的是,这样我们将无法很好的计算loss,因为这样的结果值具有太大的不确定性,他可以是1000,也可以是-1000000000,这将会对我们的loss造成很大的不便。

诚然,我们也可以选择argmax函数,去找到最大索引,然后将预测结果改为[1, 0, 0],但是这样仍然会造成一定的loss丢失,这对我们的梯度修改是不友好的。

于是我们这里引入了softmax函数。注意到softmax的解析式为 softmax(xi) = exp(xi) / ∑exp(xi),例如在上例中的,我们预测结果为

ans=[0.9, 0.2, -0.1],这样我们在进行exp(ans)之后会得到 res = [2.46, 1.22, 0.90],之后再直接调用 res / res.sum(),就可以轻松投影到目标区间,也即 [0.53, 0.26, 0.19],结果求和可能不为1啊,因为我进行了一定的截尾。通过这种行为,所有的值被约束在了0-1之间,loss的计算也便得更加便捷。


关于softmax与交叉熵

其实讲到这里应该还算明了了。在上一章节中就已经提到,我们softmax只是简单的处理了一下我们的预测结果,而并不是损失函数,甚至可以说是和损失函数没有任何关系。softmax,只是为了更加方便的去计算loss,而交叉熵CrossEntropy,才是我们的损失函数。


写于2023.2.27 17:31

如有错误,还望指正!

10 多层感知机 + 代码实现 - 动手学深度学习v2的评论 (共 条)

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