防止上溢
上溢(Overflow)是指在计算过程中,数值超过了计算机能够表示的最大值,导致结果不准确。在使用softmax函数时,如果输入值 zi 非常大,那么 ezi 会迅速增长,可能超过计算机的浮点数最大表示范围,从而引发上溢。
为了解决这个问题,我们可以从每个 zi中减去一个常数 C,这个常数 C 可以选择为输入向量中的最大值。这样,新的函数变为:
由于 max(z) 是最大的输入值,减去它之后,所有的 zi−max(z)都会小于或等于0,因此 ezi−max(z)的值会小于或等于1,从而避免了上溢。
防止下溢
下溢(Underflow)是指在计算过程中,数值变得太小,低于计算机能够表示的最小值,导致结果为0。由于指数函数 ex 对于任何实数 x 都是正的,所以即使 zi−C 是一个很大的负数,ezi−C 也不会是0,因此不会出现分母为0的情况,从而避免了下溢。
举例说明
假设我们有一个输入向量 z=[100,101,102],我们想要计算其softmax值。
通过减去最大值102,我们避免了上溢,并且由于 e−2,e−2 和1都是正数,不会出现下溢。这样,我们就得到了一个有效的概率分布。