【知识】神经网络中的参数初始化

我们知道,训练神经网络的时候需先给定一个初试值,然后才能通过反向传播等方法进行参数更新。所以参数的初始化也是门学问。

全0初始化:不能这么做!!!

为什么呢?因为这样做会导致所有参数都无法被更新。
网络上有好多解释,感觉都不够简洁,其实这个原理很简单。
我们想象一个三层的神经网络,节点分别为\(z_1,z_2,z_3;\,z_4,z_5;\,z_6\),其中\(z_i=f(a_i)\,,i=4,5,6\)f为激活函数。
那么前向传播有:

\[z_6=f(w_{46}z_4+w_{56}z_5+b)\\ z_4=f(w_{14}z_1+w_{24}z_2+w_{34}z_3) \]

我们对\(w_{46}\)\(w_{14}\)求导,反向传播有:

\[\frac{\partial z_6}{\partial w_{64}}=\frac{\partial z_6}{\partial a_6}\frac{\partial a_6}{\partial w_{46}}=\frac{\partial z_6}{\partial a_6}* z_4\\ \frac{\partial z_6}{\partial w_{14}}=\frac{\partial z_6}{\partial a_6} \frac{\partial a_6}{\partial z_4} \frac{\partial z_4}{\partial a_4} \frac{\partial a_4}{\partial w_{14}} = \frac{\partial z_6}{\partial a_6}*w_{46}*\frac{\partial z_4}{\partial a_4}*z_1 \]

因为全0初始化,所以除了\(z_1,z_2,z_3\)外的\(z_4,z_5,z_6\)都为0,所有的参数w也都为0。于是,无论激活函数是relu还是sigmoid,隐层到输出层的参数梯度和输入层到隐层的参数梯度都为0:

\[\frac{\partial z_6}{\partial w_{64}}=\frac{\partial z_6}{\partial a_6}* z_4=\frac{\partial z_6}{\partial a_6}* 0=0\\ \frac{\partial z_6}{\partial w_{14}}= \frac{\partial z_6}{\partial a_6}*w_{46}*\frac{\partial z_4}{\partial a_4}*z_1=\frac{\partial z_6}{\partial a_6}*0*\frac{\partial z_4}{\partial a_4}*z_1=0 \]

所以不能全0初始化。
而LR相当于只有一层网络,没有隐层,所以全零初始化也并不影响其训练。(每个参数的梯度都由输入\(x_i\)决定更新)
另外,推广一下,只有某一层的参数为全0初始化也并不影响训练,连续两层的参数全0初始化,就会导致这两层,以及这两层之前更靠近输入层的参数们都无法得到更新。

全相同常数初始化:不能这么做!!!

这样的话,我们可以还是想象[3,2,1]的DNN。隐层中,两个节点从节点输出值,到节点输入,节点输入权值完全相同,那么更新的时候,其梯度也完全相同,那么无论进行多少轮训练,这两个节点都完全等价,无论这层有多个节点,都相当于只有一个节点,剩下的参数都浪费了,而且网络宽度只有一个节点。
所以推广一下,每层的参数都不能是相同的常数。(第一层全a,第二层全b这样也不可以)。即网络不能是对称的。
所以,我们对参数的初始化,需要随机性。

可采用方法:

将参数们按高斯分布或者均匀分布初始化成一个绝对值较小的数。
绝对值过小,容易产生梯度消失问题,绝对值过大,则容易产生梯度爆炸问题。
在使用正态分布初始化参数时,参数量n越大,方差越大,越可能产生训练速度慢或梯度消失问题。
所以我们可以通过w = np.random.randn(n) / sqrt(n),来降低初始化参数方差,进而提高训练速度,预防梯度消失。

Xavier初始化

Xavier初始化可以帮助减少梯度弥散问题, 使得信号在神经网络中可以传递得更深。是最为常用的神经网络权重初始化方法。
假设:激活函数关于0对称,且主要针对于全连接神经网络。适用于tanh和softsign。softsign与tanh的比较
使用条件:条件:正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变。
算法根据输入和输出神经元的数量自动决定初始化的范围: 定义参数所在的层的输入维度为n,输出维度为m,那么参数将从\([-{\sqrt{6\over m+n}},{\sqrt{6\over m+n}}]\)均匀分布中采样。
具体参考深度学习之参数初始化(一)——Xavier初始化

He初始化

条件:正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变。
具体参考深度学习之参数初始化(二)——Kaiming初始化

Reference

https://www.cnblogs.com/dengdan890730/p/5865558.html
https://www.cnblogs.com/marsggbo/p/7462682.html
https://www.cnblogs.com/makefile/p/init-weight.html?utm_source=itdadao&utm_medium=referral Xavier初始化公式推导
https://blog.csdn.net/xxy0118/article/details/84333635 Xavier初始化和He初始化

posted @ 2019-04-15 16:09  大胖子球花  阅读(3352)  评论(0编辑  收藏  举报