为什么神经网络用截断正态分布随机生成初始权值?而不是用普通的正态分布?
3个回答
我们知道正态分布有个3$\sigma$原则,意思就是99.7%的点都在距离中心3个标准差之内。换句话说,随机初始化的权值依然是有可能是离中心点比较远的。
假设我们用了sigmoid作为激活函数,一旦初始值过小,或者过大,就可能会导致输入到隐藏层的数据太小或者太大,从而进入饱和区。一旦进入饱和区,这些对应的neuron就死掉了,再也不会更新了。
所以为了防止这个dying neuron现象,我们就用了截断正态,保证初始的权值不太大也不太小。
SofaSofa数据科学社区DS面试题库 DS面经这是初始点太差,不易收敛的问题。
举例说明下如果用正态分布,不限制极大初始值的问题。比如在最后一层用sigmoid函数,loss是cross entropy。数据点$(x_i,y_i)$对参数$w$的gradient是$dL/dw=(\sigma(w^Tx_i)-y_i)x_i$。假设数据做过标准化处理,学习率是$\alpha=0.001$,数据点个数$N=10^5$,参数初始值是$w=[10^5,0,0,...]$。可以看到gradient中第一项小于1,第二项幅度(标准差)大概是1,每个数据点能提供的修改量大概是$\alpha=0.001$,最快大概需要$10^5/(\alpha*N)=1000$epoch才能把$w_0$减小到0附近。也就是前1000epoch全用于改正$w_0$一个极大的初始值,抑制了其余$w_{j>0}$的学习。这种最好的情况是第一维数据和$y$非常相关,每个数据都能提供正确的修正。最坏的情况是第一维数据和$y$不相关,修正量的方向是随机的,那么$w_0$会“之”字型的缓慢减小。
最后一层$w$出现极大初始值时,情况最糟糕。如果在其他层有极大初始值,只是让个别神经元死掉,危害还小点。
SofaSofa数据科学社区DS面试题库 DS面经如果是sigmoid激活函数,截断正态分布可以防止梯度消失
如果是relu激活函数,截断正态分布可以防止一上来很多神经元就死掉(relu中的dying relu)
SofaSofa数据科学社区DS面试题库 DS面经