Sigmoid 的稳定性

数据挖掘 机器学习 神经网络 信息论
2022-02-22 08:37:41

从分析上讲,sigmoid 的对数始终是定义的和有限的,因为 sigmoid 返回的值限制在开区间 (0, 1),而不是使用有效概率 [0, 1] 的整个闭区间。在软件实现中,为了避免数值问题,最好将负对数似然写为 z 的函数,而不是 ˆy = σ(z) 的函数。如果 sigmoid 函数下溢为零,则取 y 的对数会产生负无穷大。

问题:

  1. Sigmoid函数的范围是闭区间[0,1]?https://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Logistic-curve.svg/1200px-Logistic-curve.svg.png为什么提到开放?
  2. z 而不是 y 的写函数如何影响它不达到 0?那些表格是什么?
2个回答
  1. sigmoid 范围(0,1)在技​​术上是开放的,因为没有输入值映射到0或者1. 你可以任意靠近0或者1但从不等于他们。

  2. 取一个指数后跟一个日志可能会在计算过程中导致溢出问题,因为指数增长很快。Sigmoid 也很快接近零,这可能会下溢(可能四舍五入为 0)。然而,组合函数的最终结果很可能在正常计算范围内,因为 log (这类似于 - 但更极端 - 乘以和除以一个非常大的数字)。

尽管您的报价表明:

最好将负对数似然写为 z 的函数

没有分析形式E=log(σ(z))可以重写为 z 的简单函数。理论上,可以通过仔细扩展项来进行数值计算(超出我的范围,因此这里不再显示),并且一些库可能包含这种扩展。在实践中,为了避免数值不稳定,许多机器学习库将简单地限制值如下:E=log(max(ϵ,σ(z)))ϵ一小部分,也许1015

在神经网络中准确完成计算的一个更常见的问题是在考虑损失函数的梯度时。如果您使用 sigmoid 输出层和二进制交叉熵成本函数E=(ylog(σ(z))+(1y)log(1σ(z))),然后一些项抵消,然后训练的梯度贡献是微不足道的Ez=yσ(z)- 在这种情况下,尽管它们在损失函数中,但不需要计算任何对数值。

  1. 你是对的,sigmoid的范围是(0,1). 你分享的那句话只是简单地说,任何[0,1]是有效概率。

  2. sigmoid 函数变得非常小,非常快(因为ez呈指数增长z根据定义)。所以电脑会圆σ(z)为零的值z甚至没有那么大。这意味着您不应该使用输出y对数似然中的 sigmoid;您应该以避免数值问题的方式将 sigmoid 构建到可能性中。然后,适度大的输入z不会给你数字问题。