一、权重矩阵初始化:神经网络训练的关键起点

(一)初始化的重要性及随机特性

权重矩阵初始化在神经网络训练中犹如基石般重要,是开启高效训练之旅的第一步。正确的初始化方法能够如同找到一条通往成功的捷径,使训练事半功倍。然而,这一过程充满了不确定性,就像在未知的道路中选择下山路径,每次重新初始化就如同重新选择道路,即使使用相同的初始化算法,也会给训练结果带来显著差异。例如,在实际训练中,第一次初始化可能需要 3000 次迭代才能达到 96% 的精度,而第二次初始化仅需 2000 次迭代就能达到相同精度,这种情况屡见不鲜。这充分体现了初始化的随机性对训练过程的深远影响。

(二)不同初始化方法的探索历程

随着神经网络研究的不断深入,人们针对不同的网络结构和激活函数,探索出了多种权重矩阵初始化方法,以应对训练过程中出现的各种问题。

零初始化:简单却致命的选择(仅适用于单层网络)

零初始化是一种最为直接的初始化方式,即将所有层的权重矩阵 (W) 值初始化为 0。然而,这种看似简单的方法在多层网络中却存在严重缺陷。当多层网络采用零初始化时,由于初始值相同,梯度在反向传播过程中会均匀回传,导致所有权重 (W) 的值同步更新,毫无差别。这使得网络无法学习到合理的权重值,无论经过多少轮训练,最终结果都难以正确。从实际的权重矩阵值打印输出中可以清晰地看到,(W1)、(B1)、(W2) 内部单元的值完全一致,这就是零初始化带来的灾难性后果。因此,在多层网络中,零初始化是绝对不可取的。

W1= [[-0.82452497 -0.82452497 -0.82452497]]
B1= [[-0.01143752 -0.01143752 -0.01143752]]
W2= [[-0.68583865] [-0.68583865] [-0.68583865]]
B2= [[0.68359678]]
标准初始化:适用于简单网络的初步尝试

标准正态初始化方法,也称为 Normal 初始化,旨在保证激活函数的输入均值为 0,方差为 1。其权重矩阵 (W) 的初始化公式为

W ∼ N [ 0 , 1 ] W \sim N \begin{bmatrix} 0, 1 \end{bmatrix} WN[0,1]

在实际应用中,通常会根据全连接层的输入和输出数量进一步调整初始化细节

W ∼ N ( 0 , 1 n i n ) W \sim N \begin{pmatrix} 0, \frac{1}{\sqrt{n_{in}}} \end{pmatrix} WN(0,nin 1)

W ∼ U ( − 1 n i n , 1 n i n ) W \sim U \begin{pmatrix} -\frac{1}{\sqrt{n_{in}}}, \frac{1}{\sqrt{n_{in}}} \end{pmatrix} WU(nin 1,nin 1)

在目标问题相对简单、网络深度不大的情况下,标准初始化方法能够发挥一定作用。然而,当面对深度网络时,它也暴露出了明显的不足。

以一个 6 层深度网络为例,使用全连接层和 Sigmoid 激活函数时,各层激活函数的直方图显示,

激活值严重向两侧 [0,1] 靠近。从 Sigmoid 函数曲线可知,这些值的导数趋近于 0,这意味着反向传播时梯度会逐步消失。而中间地段的值较少,不利于参数学习,从而限制了网络的性能提升

Xavier 初始化:解决方差问题的有效探索

为了克服标准初始化在深度网络中的困境,Xavier Glorot 等人提出了 Xavier 初始化方法。该方法基于两个重要条件:正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变。其初始化公式为

W ∼ N ( 0 , 2 n i n + n o u t ) W \sim N \begin{pmatrix} 0, \sqrt{\frac{2}{n_{in} + n_{out}}} \end{pmatrix} WN(0,nin+nout2 )

W ∼ U ( − 6 n i n + n o u t , 6 n i n + n o u t ) W \sim U \begin{pmatrix} -\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}} \end{pmatrix} WU(nin+nout6 ,nin+nout6 )

其中 W W W 为权重矩阵, N N N 表示正态分布, U U U 表示均匀分布。

Xavier 初始化方法主要针对全连接神经网络,适用于 tanh 和 softsign 等激活函数,假设激活函数关于 0 对称。在 6 层深度网络中的表现表明,它能够使后面几层的激活函数输出值分布基本符合正态分布,有利于神经网络的学习。

随机初始化和Xavier初始化的各层激活值与反向传播梯度比较

然而,随着深度学习的发展,ReLU 激活函数的广泛应用又带来了新的挑战。

在使用 ReLU 激活函数时,Xavier 初始化虽然在一定程度上改善了激活值分布,但仍存在问题,随着层的加深,激活值会逐步向 0 偏向,同样导致梯度消失问题

MSRA 初始化:ReLU 激活函数的理想搭档

为了解决 ReLU 激活函数带来的方差变化问题,He Kaiming 等人提出了 MSRA 初始化方法(又称 He 初始化法)。该方法的条件是正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变

当仅考虑输入个数时,对于 ReLU 激活函数,MSRA 初始化是一个均值为 0,方差为 2 / n 2/n 2/n 的高斯分布,公式为

W ∼ N ( 0 , 2 n ) W \sim N \begin{pmatrix} 0, \sqrt{\frac{2}{n}} \end{pmatrix} WN(0,n2 )

W ∼ U ( − 6 n i n , 6 n o u t ) W \sim U \begin{pmatrix} -\sqrt{\frac{6}{n_{in}}}, \sqrt{\frac{6}{n_{out}}} \end{pmatrix} WU(nin6 ,nout6 )

在使用 ReLU 激活函数时,MSRA 初始化方法表现出色,各层激活值从 0 到 1 的分布非常均匀,不会因层的加深而出现梯度消失问题。

对于 Leaky ReLU 激活函数,也有相应的初始化公式

W ∼ N [ 0 , 2 ( 1 + α 2 ) n ^ i ] n ^ i = h i ⋅ w i ⋅ d i h i : 卷积核高度, w i : 卷积核宽度, d i : 卷积核个数 W \sim N \begin{bmatrix} 0, \sqrt{\frac{2}{(1+\alpha^2) \hat n_i}} \end{bmatrix} \\ \hat n_i = h_i \cdot w_i \cdot d_i \\ h_i: 卷积核高度,w_i: 卷积核宽度,d_i: 卷积核个数 WN[0,(1+α2)n^i2 ]n^i=hiwidihi:卷积核高度,wi:卷积核宽度,di:卷积核个数

因此,在使用 ReLU 或 Leaky ReLU 激活函数时,推荐使用 MSRA 初始化方法。

小结:初始化方法的综合应用指南

综合上述不同初始化方法的特点和适用场景,可以总结出以下规律。

ID网络深度初始化方法激活函数说明
1单层零初始化可以
2双层零初始化Sigmoid误,不能进行正确的反向传播
3双层随机初始化Sigmoid可以
4多层随机初始化Sigmoid激活值分布成凹形,不利于反向传播
5多层Xavier初始化Tanh正确
6多层Xavier初始化ReLU激活值分布偏向0,不利于反向传播
7多层MSRA初始化ReLU正确

对于单层网络,零初始化是可行的,但在多层网络中,除了特殊情况外,应避免使用。随机初始化在双层 Sigmoid 网络中可以使用,但在多层 Sigmoid 网络中,激活值分布不利于反向传播。Xavier 初始化适用于多层 tanh 网络,但在多层 ReLU 网络中存在激活值偏向 0 的问题而 MSRA 初始化则是多层 ReLU 网络的理想选择。随着网络深度和激活函数的不断变化,合适的初始化方法选择至关重要,它直接影响着神经网络的训练效果和性能表现。

二、参考

  1. Xavier Glorot 和 Yoshua Bengio 于 AISTATS 2010 发表的论文“Understanding the difficulty of training deep feedforward neural networks”,链接:http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf。
  2. https://blog.csdn.net/victoriaw/article/details/73000632。
  3. 何凯明(Microsoft Research Asia,2015)的论文,链接:https://arxiv.org/pdf/1502.01852.pdf。

通过对神经网络权重矩阵初始化方法的深入研究和理解,能够在构建和训练神经网络时,根据具体的网络结构和激活函数,选择最为合适的初始化方法,从而为神经网络的成功训练和高效性能奠定坚实基础。这不仅有助于提高模型的准确性和稳定性,还能加速训练过程。

Logo

科技之力与好奇之心,共建有温度的智能世界

更多推荐