神经网络中好的初始权重是什么?


68

我刚刚听说,从范围选择神经网络的初始权重是一个好主意,其中是给定神经元的输入数量。假设对这些集合进行了归一化-均值0,方差1(不知道这是否重要)。d(1d,1d)d

为什么这是个好主意?


有关初始化技术的概述请参见我的硕士论文,第81页
马丁·托马

Answers:


47

我假设您正在使用逻辑神经元,并且正在通过梯度下降/反向传播进行训练。

对于大的正或负输入,逻辑函数接近于平坦。输入时的导数约为,但是输入的导数约为。这意味着如果逻辑神经元的输入为那么对于给定的训练信号,神经元的学习速度将比输入逻辑慢倍。1 / 10 10 1 / 22000 10 2200 221/10101/220001022002

如果希望神经元快速学习,则需要产生巨大的训练信号(例如具有交叉熵损失函数),或者希望导数很大。为了使导数变大,您可以设置初始权重,以便经常获得范围内的输入。[4,4]

您赋予的初始权重可能会或可能不会起作用。这取决于如何标准化输入。如果将输入归一化为均值和标准差,则项的随机总和的权重统一为均值为并且方差与无关。您获得以外的总和的可能性很小。这意味着随着增加,您不会使神经元开始饱和,从而使它们不学习。1 d - 101d01(1d,1d)0 d[-44]d13d[4,4]d

对于未归一化的输入,这些权重可能无法有效避免饱和。


1
因此,基本上,人们应该至少始终考虑对数据进行规范化。您能解释一下为何std偏差为1/3,并且输入总和的概率在<-4,4>范围之外的可能性有多小?
Elmes 2013年

1
方差具有一些基本属性,这表明:如果和是独立的,则以及和是独立的且均值为,则。Y Var X + Y = Var X + Var Y X Y 0 Var X Y = Var X Var Y XYVar(X+Y)=Var(X)+Var(Y)XY0Var(XY)=Var(X)Var(Y)
道格拉斯·扎里

1
您可以使用Chebyshev不等式估计随机变量与均值至少有标准差的概率。在实践中,这不是很清晰,但是确切的结果取决于分布。12
Douglas Zare 2013年

顺便说一句,我算错了。方差为因此标准偏差为。1313
Douglas Zare 2013年

1
“对于大的正或负输入,逻辑函数接近平坦。输入为...的导数。”相关主题难道不是逻辑回归成本函数的导数吗?因此,无论权重和信号的大小如何,对数函数的导数输入都已被逻辑函数缩放为(0,1)?
Moobie's

28

[1]解决了这个问题:

首先,权重不应设置为零,以免反向传播时破坏对称性:

偏移通常可以初始化为零,但是权重需要仔细初始化以打破同一层隐藏单元之间的对称性。因为不同的输出单元接收到不同的梯度信号,所以这种对称破坏问题与输出权重(进入输出单元)无关,因此也可以将其设置为零。

一些初始化策略:

  • [2]和[3]建议按扇入平方根的倒数进行缩放
  • Glorot和Bengio(2010)以及深度学习教程结合了扇入和扇出:
    • 对于双曲正切单位:采样具有的Uniform(-r,r)(fan-in是数字单位的输入)。r=6fan-in+fan-out
    • 对于S型单位:对Uniform(-r,r)进行采样,其中(fan-in是数字单位的输入)。r=46fan-in+fan-out
  • 对于RBM,零均值高斯和0.1或0.01左右的小标准偏差就可以很好地进行初始化(Hinton,2010年)。
  • 正交随机矩阵初始化,即W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)再使用u为您的初始化矩阵。

此外,在某些情况下,无监督的预培训可能会有所帮助:

一个重要的选择是是否应该使用无监督的预训练(以及要使用哪种无监督的特征学习算法)来初始化参数。在大多数情况下,我们发现无人值守的预训练可以提供帮助,而很少受到伤害,但这当然意味着需要更多的训练时间和额外的超参数。

一些ANN库也有一些有趣的列表,例如Lasagne

Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b])   Glorot weight initialization.
GlorotNormal([gain, c01b])  Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b])   He weight initialization.
HeNormal([gain, c01b])  He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain])  Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.

[1] Bengio,Yoshua。“ 基于梯度的深度架构培训的实用建议。 ”神经网络:交易技巧。Springer Berlin Heidelberg,2012年。437-478。

[2] LeCun,Y.,Bottou,L.,Orr,GB和Muller,K.(1998a)。高效的反向传播。在神经网络中,交易技巧

[3] Glorot,Xavier和Yoshua Bengio。“ 了解训练深度前馈神经网络的难度。” 国际人工智能与统计会议。2010。


2
我想添加两个有用的参考资料:1)深入研究整流器:在ImageNet分类上超越人类水平的性能-关于激活感知缩放的重要性arxiv.org/abs/1502.01852 2)对非线性动力学的精确解决方案在深度线性神经网络中进行学习arxiv.org/abs/1312.6120-正交矩阵比仅是高斯噪声要好得多
old-ufo

1
编辑建议将S型和双曲正切的初始化值切换为与原始纸匹配。
gung

2
弗兰克,您要保留此编辑吗?如果没有,您可以回滚。
gung

我肯定错过了什么。在Glorot和Bengio(2010)的论文中,当他们建议使用逻辑S形激活函数时,他们建议使用等式16值的4倍?等式16是使用等式12和均匀分布的方差得出的,但是等式16是在假设单位激活为0的对称激活的情况下推导的。因此,例如,tanh激活函数,而不是逻辑激活函数(非对称)。此外,他们甚至不使用logistic Sigmoid测试此提议的初始化。他们只用tanh和softsign测试它。
汤米L

10

以下解释摘自《克里斯托弗·毕晓普(Christopher Bishop)》一书:模式识别的神经网络。好书!假设您之前已将输入单元的输入变白,即和< x 2 i > = 1

<xi>=0
<xi2>=1

问题是:如何最好地选择权重?这个想法是按照分布随机选择权重的值,这有助于优化过程收敛到有意义的解决方案。

您需要激活第一层中的,其中。现在,由于您从输入中独立选择权重,因此 和,其中sigma是权重分布的方差。要得出此结果,您需要回想一下权重是相互独立初始化的,即

y=g(a)
a=i=0dwixi
<a>=i=0d<wixi>=i=0d<wi><xi>=0
<a2>=(i=0dwixi)(i=0dwixi)=i=0d<wi2><xi2>=σ2d
<wiwj>=δij

轻微错误:而不是。<xi2>=10
bayerj

这就解释了假设您知道所需的如何达到ceratin。据我了解,应该较小以允许S形导数具有较大的值,但也不能过小,以使增量不会消失。这是真的?如果是这样-说应该是〜0.2是一个好的经验法则吗?σααα
Uri 2013年

对于深度神经网络来说尤其如此,在深度神经网络中,添加图层时,单元往往会迅速饱和。有很多有关这个问题的论文。一个很好的起点可能是glorot和bengio
撰写的

10

作为更新,《深入整流器:超越人的性能》 He等人的ImageNet分类引入了一种初始化,特别是初始化w = U([0,n]) * sqrt(2.0/n),其中nNN是输入的数量。我已经看到许多最近的作品(也与ReLU一起使用)使用了这种初始化。他们实际上显示了这是如何开始以比您提到的(-1 / n,1 / n)更快的速度降低错误率的。有关详细说明,请参见本文,但是收敛速度有多快: 22层大型模型的收敛性


哇!对我来说是重大的进步。
Thomas W

但是,不是大量输入... MNIST失败。
Thomas W

请注意,He初始化是专门为(P)ReLU设计的,并说明了它不对称的事实(这是Xavier初始化的假设之一)。不要被上下文所迷惑!
Tsjolder先生17年

5

这个想法是,您希望以确保网络中良好的前向和后向数据流的方式初始化权重。也就是说,您不希望激活过程随着网络的发展而持续缩小或增加。

此图显示了MNIST经过网络一次后,在3种不同的初始化策略下对5层ReLU多层感知器的激活。

使用不同的初始化策略在ReLU MLP中激活

在所有三种情况下,权重均从零中心正态分布中得出,该分布由其标准偏差确定。您会看到,如果初始权重太小(标准偏差太小),则激活会被阻塞,而如果权重太大,则激活会爆炸。可以通过设置权重来找到中间值,即大约正确的值,以使激活和梯度更新的方差与您通过网络时大致保持相同。

我写了一篇有关权重初始化的博文,其中有更详细的介绍,但基本思想如下。

如果表示第层的激活,表示层的大小,而表示将它们连接到第层的权重,则可以表明,对于激活函数与我们有x(i)iniw(i)(i+1)ff(s)1

Var(x(i+1))=niVar(x(i))Var(w(i))

因此,为了实现我们必须施加条件Var(x(i+1))=Var(x(i))

Var(w(i))=1ni.

如果我们表示 通过,就落后的通我们同样要Lxj(i)Δj(i)

Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).

除非,否则我们必须在这两个条件之间做出折衷,并且合理的选择是谐波均值ni=ni+1

Var(w(i))=2ni+ni+1.

如果从正态分布采样权重则满足以下条件:。对于统一分布我们应该取因为 。因此,我们到达了Glorot初始化。例如,这是Keras中密集和2D卷积层的默认初始化策略。N(0,σ)σ=2ni+ni+1U(a,a)a=6ni+ni+1Var(U(a,a))=a2/3

Glorot初始化对于微不足道的和激活非常有效,但对于效果不佳。幸运的是,由于只是将负输入归零,因此它大致消除了一半的方差,并且可以通过将上面的条件之一乘以2来轻松修改:tanhReLUf(s)=ReLU(s)

Var(w(i))=2ni.

3

减轻权重初始化问题的另一种技术是“ 批处理归一化”。它的作用是标准化每个单元的均值和方差,以稳定学习,如原始论文中所述。在实践中,使用批归一化(BN)的网络对于错误的初始化要强大得多。BN的工作方式如下: 我们为每个小批量计算经验均值和方差,然后对输入标准化并通过缩放形成输出XÑXXγβ

μB=1mi=1Mxi   and   σB2=1mi=1m(xiμB)2x^i=xiμBσB2+ϵ   and   BN(xi)=γx^i+β
xiBN(xi)x^i由加上并添加,这两个都是在训练期间学习的。γβ

BN 每次激活都会引入两个额外的参数(和),这些参数允许具有任何均值和标准差。这样做的原因是标准化会降低其表达能力。这种新的参数化具有更好的学习动态:在旧的参数化中,的平均值由所有先前层的参数之间的复杂交互作用确定-因此,随着网络变得更深,网络参数的细微变化会放大。在新的参数化中,的平均值由我们与一起学习的决定β XX X X β γγβx^ixixix^iβγ培训期间。因此,批标准化可稳定学习。

结果,批处理规范化通过使用更高的学习率来实现更快的训练,并减轻了初始化错误的问题。BN还可以通过防止网络陷入饱和模式来使用饱和非线性。总而言之,批归一化是可微分的转换,它将归一化的激活引入网络。实际上,可以在完全连接的层之后立即插入BN层。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.