Answers:
我假设您正在使用逻辑神经元,并且正在通过梯度下降/反向传播进行训练。
对于大的正或负输入,逻辑函数接近于平坦。输入时的导数约为,但是输入的导数约为。这意味着如果逻辑神经元的输入为那么对于给定的训练信号,神经元的学习速度将比输入逻辑慢倍。1 / 10 10 1 / 22000 10 2200 2
如果希望神经元快速学习,则需要产生巨大的训练信号(例如具有交叉熵损失函数),或者希望导数很大。为了使导数变大,您可以设置初始权重,以便经常获得范围内的输入。
您赋予的初始权重可能会或可能不会起作用。这取决于如何标准化输入。如果将输入归一化为均值和标准差,则项的随机总和的权重统一为均值为并且方差与无关。您获得以外的总和的可能性很小。这意味着随着增加,您不会使神经元开始饱和,从而使它们不学习。1 d (- 101 d[-4,4]d
对于未归一化的输入,这些权重可能无法有效避免饱和。
[1]解决了这个问题:
首先,权重不应设置为零,以免反向传播时破坏对称性:
偏移通常可以初始化为零,但是权重需要仔细初始化以打破同一层隐藏单元之间的对称性。因为不同的输出单元接收到不同的梯度信号,所以这种对称破坏问题与输出权重(进入输出单元)无关,因此也可以将其设置为零。
一些初始化策略:
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。
以下解释摘自《克里斯托弗·毕晓普(Christopher Bishop)》一书:模式识别的神经网络。好书!假设您之前已将输入单元的输入变白,即和< x 2 i > = 1
问题是:如何最好地选择权重?这个想法是按照分布随机选择权重的值,这有助于优化过程收敛到有意义的解决方案。
您需要激活第一层中的,其中。现在,由于您从输入中独立选择权重,因此 和,其中sigma是权重分布的方差。要得出此结果,您需要回想一下权重是相互独立初始化的,即
作为更新,《深入整流器:超越人的性能》 He等人的ImageNet分类引入了一种初始化,特别是初始化w = U([0,n]) * sqrt(2.0/n)
,其中n
NN是输入的数量。我已经看到许多最近的作品(也与ReLU一起使用)使用了这种初始化。他们实际上显示了这是如何开始以比您提到的(-1 / n,1 / n)更快的速度降低错误率的。有关详细说明,请参见本文,但是收敛速度有多快:
这个想法是,您希望以确保网络中良好的前向和后向数据流的方式初始化权重。也就是说,您不希望激活过程随着网络的发展而持续缩小或增加。
此图显示了MNIST经过网络一次后,在3种不同的初始化策略下对5层ReLU多层感知器的激活。
在所有三种情况下,权重均从零中心正态分布中得出,该分布由其标准偏差确定。您会看到,如果初始权重太小(标准偏差太小),则激活会被阻塞,而如果权重太大,则激活会爆炸。可以通过设置权重来找到中间值,即大约正确的值,以使激活和梯度更新的方差与您通过网络时大致保持相同。
我写了一篇有关权重初始化的博文,其中有更详细的介绍,但基本思想如下。
如果表示第层的激活,表示层的大小,而表示将它们连接到第层的权重,则可以表明,对于激活函数与我们有
因此,为了实现我们必须施加条件
如果我们表示 通过,就落后的通我们同样要
除非,否则我们必须在这两个条件之间做出折衷,并且合理的选择是谐波均值
如果从正态分布采样权重则满足以下条件:。对于统一分布我们应该取因为 。因此,我们到达了Glorot初始化。例如,这是Keras中密集和2D卷积层的默认初始化策略。
Glorot初始化对于微不足道的和激活非常有效,但对于效果不佳。幸运的是,由于只是将负输入归零,因此它大致消除了一半的方差,并且可以通过将上面的条件之一乘以2来轻松修改:
减轻权重初始化问题的另一种技术是“ 批处理归一化”。它的作用是标准化每个单元的均值和方差,以稳定学习,如原始论文中所述。在实践中,使用批归一化(BN)的网络对于错误的初始化要强大得多。BN的工作方式如下: 我们为每个小批量计算经验均值和方差,然后对输入标准化并通过缩放形成输出X我乙Ñ(X我)X我γβ
BN 每次激活都会引入两个额外的参数(和),这些参数允许具有任何均值和标准差。这样做的原因是标准化会降低其表达能力。这种新的参数化具有更好的学习动态:在旧的参数化中,的平均值由所有先前层的参数之间的复杂交互作用确定-因此,随着网络变得更深,网络参数的细微变化会放大。在新的参数化中,的平均值由我们与一起学习的决定β X我X 我X 我X我 β γ培训期间。因此,批标准化可稳定学习。
结果,批处理规范化通过使用更高的学习率来实现更快的训练,并减轻了初始化错误的问题。BN还可以通过防止网络陷入饱和模式来使用饱和非线性。总而言之,批归一化是可微分的转换,它将归一化的激活引入网络。实际上,可以在完全连接的层之后立即插入BN层。