训练神经网络时,随机初始化权重非常重要。对于Logistic回归,可以将权重初始化为零,但如果将神经网络的各参数全部初始化为0,再使用梯度下降法,这样将会完全无效。
如图所示,这是一个简单的两层神经网络(输入层是第0层),如果将所有的w矩阵和b向量都初始为全0
则矩阵
是
是
是
将偏置项b初始化为0实际上是可行的,但把W初始化成全零就成问题了,它的问题在于给神经网络输入任何的样本,隐藏层的两个单元都是相同的值,由于每个激活单元的计算公式如下,([i]表示第i层,w表示权重矩阵,x表示训练样本,b表示偏置项向量,a表示激活后的值)
由于w[1]是全0矩阵(维度是2x2),所以
然后在相同的激活函数作用后,得
所以这两个隐藏单元其实在进行相同的计算,它们在做一样的事情。
又因为w[2]也是全0的矩阵(维度是1x2),所以
现在的Loss function(损失函数)为
那么对a求导
为了便于说明问题,这里假设输出层的激活函数是sigmoid函数,即
g(z)代表激活函数作用在z之后的值,所以g(z)=a,所以
那么由链式求导法则知
所以
由于
,所以
,根据前面的推导,可知dw[2]的两个分量也是相同的,那么梯度下降更新一次
,所以
又因为
,那么da的两个分量也是相同的,
所以dz[1]的两个分量是相同的
再向前计算一次导数
u,v只是变量记号,结果表明每个单元的节点的权重是一样的,即权重矩阵的每一行是相同的。
一直这样迭代下去,神经网络的每一次正向和反向传播,隐藏层的每个激活单元其实都在计算同样的东西,其实也就是一个"对称网络",这种网络无法学习到什么有趣的东西,因为每个隐藏层的激活单元都在计算同样的东西,那么隐藏层其实相当于只有一个单元,所以这个神经网络其实可以简化为logistic回归,因此神经网络的W参数矩阵不能随机初始化为0。