DeepLearning-Numerical Stability数值稳定性

Numerical Stability

讨论一些用于提高数值稳定性的方法。

Softmax Numerical Stability

1.softmax激活函数
在这里插入图片描述
z_j=w_j * x+b (w_j x 均为向量)
使用softmax计算神经元的激活值时,首先要根据线性加权计算得到的z进行指数运算,但由于z可能比较大,就会导致栈溢出的情况

# softmax在映射之前,需要先计算z=wx+b---->e^z(如果z太大有可能会导致栈溢出)
for z in [500, 600, 700, 800]:
    ez = np.exp(z)
    zs = "{" + f"{z}" + "}"
    print(f"e^{zs} = {ez:0.2e}")  # e800导致栈溢出


def my_softmax(z):
    ez = np.exp(z)
    sm = ez / np.sum(ez)
    return sm


z_tmp = np.array([[500, 600, 700, 800]])
print(my_softmax(z_tmp))

2.进行优化
在这里插入图片描述

#####
# 优化
# softmax: ai=e^zi/(e^z1+.....+e^zn)  (i=1...n)
# 优化后 ai=e^zi * e^-x/(e^z1+.....+e^zn)*e^-x  (i=1...n   x=max(z))  上下同时乘以e^(-x),ai不会受到影响且可防止e^zi过大导致栈溢出
#####
def my_softmax_ns(z):
    """numerically stablility improved"""
    bigz = np.max(z)
    ez = np.exp(z - bigz)
    sm = ez / np.sum(ez)
    return sm


z_tmp = np.array([[500, 600, 700, 800]])
print(my_softmax_ns(z_tmp))

Cross Entropy Loss Numerical Stability

使用softmax激活函数,在计算交叉熵时,同样可以进行优化。
1.损失函数
在这里插入图片描述
以目标值y=2为例,其损失为:
在这里插入图片描述
2.进行优化
利用log(a/b) = log(a) - log(b)化简
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值