1.初始化权重矩阵为0

对于每个隐含层节点,输出的结果都是一样的。另外,进行梯度下降时,由于偏导一样,因此不断迭代,不断一样,不断迭代,不断一样..多层神经网络表现的跟线性模型一样,不可取!

2.随机初始化权重矩阵

(1)标准正态分布

   np.random.rand(size_l,size_l-1)

   可能导致梯度下降或者梯度爆炸的问题

(2)启发式来根据非线性激活函数初始化权重

   ---梯度下降

    对于深度网络来说,对于任何激活函数,梯度将随着反向传播期间每层向后移动变得越来越小。梯度变小,权重更新缓慢,网络收敛速度变慢。甚至可能阻止网络进一步训练!

  ---梯度爆炸

    与梯度下降相反,对于任何激活函数,梯度变化越来越大,可能导致网络跳过最优值或者在附近波动,而永远无法收敛。

       解决方法:启发式方法

  对于激活函数ReLu:

    W[l] = np.random.rand(size_l,size_l-1)*np.sqrt(2/size_l-1)

  对于激活函数tanh(又称为Xavier初始化):

    W[l] = np.random.rand(size_l,size_l-1)*np.sqrt(1/size_l-1)

  其他形式的启发式方法:

    W[l] = np.random.rand(size_l,size_l-1)*np.sqrt(1/(size_l-1+size_l))