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

09 Softmax 回归 + 损失函数 + 图片分类数据集【动手学深度学习v2

2023-02-22 15:46 作者:FIngertip断桥c  | 我要投稿


Softmax 回归从零开始实现 P4 - 04:22


关于计算softmax时可能发生的上溢和下溢问题



这里看到一条弹幕说softmax函数中应该加一行X -= X.max()避免上/下溢出,而且是面试tx时提到的,受此启发我查询了下相关资料,笔记如下:


首先是softmax的形式

参考花书《Deep Learning》第四章的解释,考虑当所有x都等于某个常数c时,有以下两种由于舍入误差导致算法失效的情况:

  1. c是负数,且|c|很大,那么exp(c)就会接近于零且被四舍五入为零(俗称下溢),导致函数分母为0,最后结果报错为NaN占位符。
  2. c是很大的正数,exp(c)被近似为∞(俗称上溢),结果发生错误。

上面两种情况都可以通过计算softmax(x-max(x))来替换原softmax(x)解决,数学证明表面softmax不会因为输入值加减标量而改变。这样做后使得exp(c)最大值为0,避免了上溢,而分母中exp(c)至少有一个值为1的数,同样避免了下溢

还有一个小问题,以上方式解决了计算softmax过程中出现的溢出问题,但如果softmax被正常计算的结果,下一步需要代入log计算,即计算log(softmax(x)),如果softmax的分子下溢,结果传给log会错误得到-∞,因此若要计算log(softmax(x)),会做如下变换:

即计算softmax时,分子分母同除以exp(max(x)),直接看最后一项会发现log里面的求和项至少有一个1,这样计算log里面求和项会大于1就不会发生原来的错误。

在直接调用库时,底层库的开发者已经做好了数值稳定,所以这种问题只有在手动设计实现时需要考虑。

09 Softmax 回归 + 损失函数 + 图片分类数据集【动手学深度学习v2的评论 (共 条)

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