问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

深度学习中的神经网络初始化:为什么正态分布的标准差要设为1/sqrt(n_in)

创作时间:
作者:
@小白创作中心

深度学习中的神经网络初始化:为什么正态分布的标准差要设为1/sqrt(n_in)

引用
CSDN
1.
https://blog.csdn.net/duohuanxi/article/details/110005547

在深度学习中,神经网络的初始化是一个非常重要的环节。不当的初始化方法可能导致神经元的激活值分布不合理,从而影响模型的学习效率和性能。本文将详细探讨如何使用正态分布进行神经网络的初始化,并通过具体的数学推导说明为什么传统的初始化方法存在缺陷,以及如何改进。

让我们首先回顾一下正态分布的基本概念:

如果均值为0,方差为1,则属于标准正态分布。均值(mean)是衡量一组数据中心趋势的指标,计算公式为:

mean = x_bar = sum(xi, i=1…n) / n

标准差(standard deviation)衡量数据的离散程度,计算公式为:

sigma = sqrt(sum((xi - x_bar)^2, (i=1…n)) / (n-1))

方差则是标准差的平方。

举个简单的例子:

X = (x1, x2, x3, x4, x5) = 1, 2, 3, 4, 5

x_bar = (1+2+3+4+5) / 5 = 15 / 5 = 3

sigma = sqrt(((1-3)^2 + (2-3)^2 + (3-3)^2 + (4-3)^2 + (5-3)^2) / (5-1)) = sqrt((4+1+0+1+4) / 4) = sqrt(2.5) = 1.58

方差 = 1.58^2 = 2.5

现在,我们来看一个具体的神经网络初始化问题。假设我们有一个神经网络,其输入层有1000个神经元,其中一半输入为0,另一半输入为1。在这种情况下:

  • 一半的0消失了,剩下的500个1加上偏置项b,会导致输出的分布标准差为sqrt(501) ≈ 22.4。

如果我们模拟一个以0为均值、以22.4为标准差的正态分布,会发现:

从图中可以看出,大部分的z值都远远大于1或远远小于-1。根据sigmoid激活函数的特性,这会导致输出值接近0或1,权重更新量变得很小,从而影响后续层的学习效率。

为了解决这个问题,我们可以采用一种新的初始化方法:让正态分布的均值为0,标准差等于1/sqrt(n_in),其中n_in是输入层神经元的数量。

具体来说:

  • 当输入为500个1和500个0时,z分布的标准差变为sqrt(3/2) ≈ 1.22。

证明过程如下:

  • 标准差 = 1/sqrt(n_in) => 方差 = 1/n_in
  • n_in = 1000, 方差 = 1/1000
  • 不等于0的x有500个,因此z的方差为500 * (1/1000) + b = 1/2 + 1 = 3/2
  • z的标准差 = sqrt(3/2) ≈ 1.22

通过这种初始化方法,大部分的z值将分布在-1到1之间,避免了神经元的饱和问题,从而提高了模型的学习效率。

总结来说,合理的权重初始化对于深度学习模型的训练至关重要。通过调整正态分布的参数,我们可以有效地避免神经元饱和问题,加速模型的收敛过程。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号