为什么神经网络参数不能全部初始化为全0?
假设我们现在需要初始化的神经网络如下所示: 我们初始化权值为 其中W1代表 输入层到隐藏层 的权值矩阵,W2代表 隐藏层到输出层 的权值矩阵。 假设网络的输入为[x1,x2,x3],然后通过网络的正向传播,可以得出: 由于 我们可以知道: 从上面可以知道,此时隐藏层的值是相同的,然后经过激活函数f后, 得到的a4,a5仍然是相同的 ,如下: 最终网络的输出为: 此时,假设我们的真实输出为y,则均方误差损失函数可以表示为 : 到了这里,此时又应该到我们伟大的BP反向传播算法出场了! 我们需要反向更新权值,它使得预测的输出值与真实值越来越靠近。 这里假设我们的读者已经知道了BP反向传播的过程,可以参看 通俗理解神经网络BP传播算法 - 知乎专栏 。 可以知道,通过反向传播后,结点4,5的梯度改变是一样的,假设都是 ,那么此时结点4与结点6之间的参数,与结点5与结点6之间的参数变为了,如下: 由上式可以看出,新的参数相同了!!!! 同理可以得出输入层与隐藏层之间的参数更新都是一样的,得出更新之后的参数 都是相同的!然后不管进行多少轮正向传播以及反向传播,每俩层之间的参数都是一样的。 换句话说,本来我们希望不同的结点学习到不同的参数,但是由于参数相同以及输出值都一样,不同的结点根本无法学到不同的特征!这样就失去了网络学习特征的意义了。 隐藏层与其它层多个结点,其实仅仅相当于一个结点!