zoukankan      html  css  js  c++  java
  • 梯度消失 / 梯度爆炸以及Xavier初始化

    2018-12-06 16:25:08

    首先我们先来看一下求解梯度的公式,以下面三层的网络为例:

    如果w初始化为大于1的数字,在深层神经网络计算梯度的时候就会出现梯度爆炸的现象;

    如果w初始化为小于1的数字,在深层神经网络计算梯度的时候就会出现梯度消失的现象;

    那么该如何初始化权重值呢?

    z = w1 * x1 + w2 * x2 + ... + wn * xn
    

    我们希望的是当n很大的时候,z的值不要过大。

    其中一个方法就是通过修改方差的方法来完成这个操作,假设我们最初初始化的数值是N(0, 1)的标准正态分布,那么当n很大的时候我们希望w能更多的向0靠近,此时显然的我们需要方差进行减小,这里我们可以将方差设置为1 / n来完成相应的操作。具体的初始化公式如下:

    w = np.random.randn(f_in, f_out) * np.sqrt(1 / n)
    

    实验证明,当使用relu做为激活函数的时候,方差为2 / n效果更好,因此修正的Xavier初始化公式如下:

    w = np.random.randn(f_in, f_out) * np.sqrt(2 / n)
    
  • 相关阅读:
    PHP之常用设计模式
    MySQL之慢查询日志和通用查询
    mysql之找回误删数据
    PHPer未来路在何方...
    如何成为更优秀的程序员
    常见的 CSRF、XSS、sql注入、DDOS流量攻击
    API接口TOKEN设计
    成为更好的程序员的八中途径
    奉秉格言
    PHP优化与提升
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/10077552.html
Copyright © 2011-2022 走看看