模型优化学习笔记—梯度爆炸与梯度消失

问题:当算力可以无限强大,能构建无限深的网络吗?

因为最终可能会走向梯度爆炸或者梯度消失,这个问题的答案可能是否定的。

一、消失

梯度消失就是偏导数极端的偏小,从而导致反向传播时,w = w - dw*r,w变化很小,所以很多层几乎都不学习,从而变成了僵尸层,导致深度神经网络变成了浅度神经网络。

出现原因:常常出现在深层网络、采用了不合适的激活函数的情况下。(例如sigmoid,因为sigmoid的斜率是不超过0.25的),根据链式法则,反向传播层数多了,梯度就会逐渐消失。

二、爆炸

激活值 = a( W[L]A[L-1] + b[L] ),假设b为0,则激活值 = a( W[L]A[L-1] ),假设激活值是一个线性函数,a[z]=z,则激活值 = W[L]A[L-1] = W[L] (W[L-1]A[L-2]) =…= W[L]W[L-1]W[L-2]…W[1]A[0]

如果w>1,如果1.3,那么后层激活值则为 1.3 x 1.3 x 1.3 … x1.3 x a0,最后变大很大NaN爆炸了。 如果w<1,则越深层的a,值越小。

三、梯度爆炸与梯度消失

前向传播中激活值随着层数的增加而不断成倍的增加或减小。也导致了在反向传播中的偏导数/梯度计算也成倍的增加或减小(dW = dZ[L] A[L-1],此时A无限大或者无限小),导致梯度爆炸或梯度消失。

实际应用中,梯度消失出现的比较多。因为反向传播是从后向前传播的,如果A[L] < 1,则前几层很可能梯度消失。前面层的权重和之前一样,变成了僵尸层,形同虚设,白白浪费了算力。

延缓梯度爆炸和梯度消失的措施:更好的初始化参数。

z = w1x1 + w2x2 + … wnxn,假设特征x一样,则z = (w1+w2+w3)x,而激活值 = a(z) = (w1+w2+w3) x + (w1+w2+w3) a1 + (w1 + w2 + w3)a2 + …。假设a1、a2…与特征值相同,则 a(z) = (w1 + w2 + w3) (w1 + w2 + w3) (w1 + w2 + w3) x…,故如果使得每层的(w1+w2+w3) = 1,则a = (1) (1) (1) x … 那么就能延缓梯度爆炸和梯度消失。如果非1,则可能 z = 3x ,z=0.3x,随着层数不断增多,都会导致梯度爆炸或梯度消失。

由于随机初始化的权重w[i] = np.random.randn(),本身符合正太分布。(靠近0的个数最多)

那么延缓梯度爆炸和消失的参数初始化方式为:

四、HE初始化

np.random.randn(layers_dims[l], layers_dims[l - 1]) * np.sqrt(2 / layers_dims[l - 1]):即w[i] = np.random.randn() * np.sqrt( u/n[L-1] ),sqrt是平方根,n[L-1]是上一层神经元个数。 u为可调参数,如果激活函数是relu,u一般取2。 如果是tanh,u取1。如果上一层神经元越多,那么w越靠近0。 另外也可以使用 n.sqrt( u/(n[L-1] + n[L]) )

这样初始化后多个w靠近0,但是w之和靠近1,则a = 1 x 1 x 1 x …a0 ,则没有严重的梯度爆炸或消失了。

五、Adam算法的初始化

He 初始化是基于输入层维度来缩放权重,使用 np.sqrt(2 / layers_dims[l - 1])。这种方法主要用于 ReLU 激活函数,可以减少梯度消失的风险。

  • Adam 和初始化方法的敏感性:
    Adam优化器对于初始权重较敏感。如果权重初始化值太大或者不合适,可能会导致训练过程中的梯度更新不稳定,导致优化效果变差。我遇到过一次使用HE初始化,采用Adam梯度下降到某个值后,出现了梯度消失

  • Adam小初始化值
    Adam 优化器使用自适应学习率方法,根据一阶动量(均值)和二阶动量(方差)来调整每个参数的更新步长。它会根据梯度的历史信息自动缩放学习率。因为 Adam 会动态调整学习率,使用 He 初始化的较大权重可能导致初始更新步长过大,从而导致不稳定的训练过程。

  • 小初始化值的作用:
    np.random.randn(layers_dims[l], layers_dims[l - 1]) * 0.1:当你将权重初始化为较小的值(如 *0.1),这会减少初始更新步长的大小,尤其是在 Adam 优化器调整学习率的过程中。这可以防止初始阶段的权重更新过大,从而稳定训练过程。

  • 为什么梯度不会消失:
    使用较小的权重初始化(*0.1)时,初始的激活值和梯度通常也较小,这使得 Adam 在初始阶段的梯度不会过大或过小,从而避免了梯度消失或爆炸的问题。而 He 初始化可能导致初始梯度较大,尤其是结合 Adam 时,这种情况会导致学习率的动态调整不如预期,进而引发不稳定的训练过程。

  • 总结
    He 初始化设计用于与标准梯度下降类优化器搭配使用,但在结合 Adam 优化器时,可能会因为初始权重值较大而导致训练不稳定或梯度问题。使用较小的权重初始化值(如 *0.1)可以让 Adam 更好地控制梯度更新,避免训练中的梯度消失问题。这也显示了在不同的优化器和网络架构中,选择合适的权重初始化方法的重要性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值