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))