深度学习笔记-参数初始化

Random initialization

  • 初始化参数W和b时,通常使用一下代码:

      W = np.random.randn((2,2)) * 0.01
     b = np.zeros((2,1))
    
  • W是随机生成了符合高斯分布的数,再*0.01,使得W很小,

  • 为何要随机生成? 因为如果像b一样全赋0值,就会产生对称性,假如hidden layer有两个由输入值产生的神经元,则由于对称性,无论是正向传播还是反向传播,这两个本应表示不同特征的神经元所做的运算都是一致的,即对称的,not well,所以随机生成了一些数赋值给矩阵W,计算b就不用担心对称性的问题,故直接赋0值

  • 而*0.01使得W很小是因为,可以参照激活函数sigmoid和tanh,当W很大,用W * X+b=a得到的a很大,再用对a用激活函数如sigmoid(a),由于a很大了,sigmoid(a)中的a会趋向正无穷或负无穷,则函数值sigmoid(a)趋向于一个平缓的趋势,在梯度下降的时候计算的梯度很小,会导致学习的很慢,故使得W取一个很小的值(激活函数图sigmoid,tanh在网上可以很容易找到)。不过在某些情况下不取0.01.会取其他的比较小的值

猜你喜欢

转载自blog.csdn.net/disasters/article/details/84554833
今日推荐