深度学习笔记(12):为什么不能将神经网络的初始权值设置成全0值

前言

快一周没写博客了,遗忘的真主快要降临了吧,我也得做些什么了。今天重温了一下神经网络的细节,本篇文章主要从初始化的权重矩阵 w w w b b b进行探讨,讨论分析一下为什么不能设置成全0.
希望以后不会忘记这一块哈。(我承认因为资料已经很多了,我写这些对大家也不一定有很大的益处…渡己难奥。最起码算是自己能加深记忆吧)

对于logstic函数为什么权重矩阵可以初始化为0

深度学习笔记(12):为什么不能将神经网络的初始权值设置成全0值_第1张图片
对于logistic回归函数,我们在反向传播的时候。就只有一层,我们前面的一篇博文讲过公式了,db是dz,dw是dz × × ×dx,dx是 w w wTda1(当然这里没用)。也就是说在第一次反向传播的时候,由于直接用上x1,x2作为更新的参数公式组成部分了,x1,x2不一样,那自然更新的梯度就不一样了,也就没啥对称的问题,进而也不会有什么浪费,就该咋还咋。

对于神经网络为什么不可以初始化为零,以及这样会导致的问题

深度学习笔记(12):为什么不能将神经网络的初始权值设置成全0值_第2张图片
我们继续来看神经网络中这是一个怎样的过程,假如说我们把 w w w初始化为全零的矩阵,(方便起见,并且假设b也是初始化为零)在这个例子里面有两个这样的矩阵,也就是所谓的 w w w[1](2×2)和 w w w[2](1×2)。

然后我们进行第一次前向传播,之后我们就可以发现,由于 w w w1为零,进而这一层得到的z为零,也就是图中的a1,a2,是完全一样的值(是不是0取决于激活函数,如果是ReLU、tanh这样的直接判死刑就好)。然后继续传递下去,最后的a3也是这个值,如果是更深更大的神经网络,我们也很容易归纳出,第一次传播得到的是完全一样的数值。(都是g(0+b)=g(0))
然后我们进行计算代价函数,并且进行反向传播过程。假设我们的代价函数求导之后得到了da3,我们通过公式去更新db,这是db开始有值了,但是是“对称的”,也就是全1向量的倍数;之后我们更新 w w w,发现使用公式或者直觉来看,dw是完全对称的,因为我们的每一层的a值是完全对称的,即是全一向量的倍数;然后再计算dx,发现第一次的dx就直接被卡死了,因为没有上一层的 w w w,也就是说只有等更新完了,才会再往前传播。那么这一次反向传播,实际上就只走了一层而已。然后虽然很慢,但是每一次也可以往前多传一层,
但是更加要命的来了:每次传递都是完全对称的。这意味着我们每次都会塑造,或者修改,使得每一层的w一个全一矩阵的倍数(就像 [ 1 1 1 1 1 1 1 1 1 ] \left[ \begin{matrix}1&1&1\\1&1&1\\1&1&1\end{matrix} \right] 111111111这种啦,因为毕竟是dz ∗ * a这种造出来的,a还都一样,dz也都一样),使得b也是全一向量的倍数。其实这时候我们实际上就相当于个憨憨啊,神经网络没有轻重缓急?想想那肯定搞笑的。

小结:w,b都全0.那就白炼丹了。

那我们现在再来看一下b初始化的细节,为啥b初始化可以随便一点呢,就是因为,即使他不设置成随机的,只要 w w w是随机的,他也无法改变随机性,因为他终究不是个自变量。
他要是随机的话那,实验告诉我们,如果b随机初始化,但是 w w w却被初始化为0,虽然可以使得“对称”被破坏掉,但是仍然还有矩阵乘法公式造成的“对称性”,实际操作中会出现梯度消失,梯度爆炸等问题。

小结: b b b随机化不重要, w w w是大头,必须要搞定。

那怎么办鸭,那就随机初始化呗。怎么初始化好一点我们可能要乘以一个系数,一开始的话你可以试着乘以像0.01,0.1这种magic number,就是比较小的数,后续呢你可以用更加数学和现今的方法乘以更加合理的系数,(这个虽然我会,但是现在懒得说,参见后续更新哈哈哈。)

小结:一般来讲的惯常操作是将 w w w随机初始化,将 b b b初始化为0.

完毕,睡觉


  1. 1 ↩︎

你可能感兴趣的:(吴恩达深度学习笔记,神经网络,笔记)