趋近智
梯度消失和梯度爆炸问题在训练循环神经网络 (neural network) (RNN)时带来显著的难题,特别是在许多时间步上。时间反向传播 (backpropagation)(BPTT)涉及对相同的循环权重 (weight)矩阵(在我们简单的RNN公式中为)进行重复乘法。如果权重的大小(或更准确地说,权重矩阵的特征值或奇异值)持续小于1,梯度在反向传播时会呈指数级缩小。反之,如果它们持续大于1,梯度会呈指数级增长。在训练开始时初始化网络权重的方式,对于为稳定的梯度流动做好准备起着重要作用。
随机初始化权重是标准做法,但这些随机值的尺度和分布非常重要。简单的初始化策略,例如从非常小范围的均匀分布(如)或具有微小标准差的高斯分布中提取权重,通常直接导致梯度消失,特别是在深度网络或展开许多步骤的RNN中。同样,使用过大的值进行初始化会从一开始就引发梯度爆炸。
现代深度学习 (deep learning)依赖于更符合原理的初始化方法,这些方法旨在保持信息通过层向前传播时的信号方差,以及误差向后传播时的梯度方差。
由Glorot和Bengio(2010年)提出,此方法旨在使激活和梯度的方差在各层之间保持近似不变。它假设使用对称激活函数 (activation function),如双曲正切(tanh),这在简单RNN和LSTM/GRU中很常见。其核心思想是根据给定层(或权重 (weight)矩阵)的输入单元数()和输出单元数()来缩放初始权重。
对于一个RNN单元,通常是输入特征向量 (vector)的大小加上隐藏状态的大小,则是隐藏状态的大小。许多深度学习 (deep learning)框架将Glorot初始化作为全连接层和循环层的默认设置。
由He等人(2015年)开发,此初始化方案专门为使用修正线性单元(ReLU)激活函数 (activation function)及其变体(Leaky ReLU、ELU)的层设计。由于ReLU不对称且会将负输入置为零,因此其方差动态与tanh不同。He初始化考虑了这一点。
请注意,He初始化仅考虑输入单元数()。虽然ReLU作为单元内的主要循环激活函数较不常见(因为无界激活可能导致不稳定),但它可能用于更复杂单元内的前馈连接或输出层。如果大量使用类似ReLU的激活函数,He初始化通常更受青睐。
针对RNN而言,循环权重 (weight)矩阵()在每个时间步都被重复应用。正交矩阵具有保持其所乘向量 (vector)的范数(长度)不变的属性。将初始化为(或接近于)一个正交矩阵,理论上可以帮助在BPTT期间保持梯度范数,从而减轻梯度消失和梯度爆炸问题。
在初始化时实现完美的正交性通常涉及对初始随机矩阵进行奇异值分解(SVD),将奇异值设置为1,然后重构矩阵等方法。虽然计算上比Glorot或He稍微复杂一些,但它对于普通RNN或LSTM/GRU中的循环权重特别有效,尤其是在处理非常长的序列时。框架可能提供此选项作为特定的初始化器(例如,tf.keras.initializers.Orthogonal 或 torch.nn.init.orthogonal_)。
尽管精密的初始化有助于建立一个良好的训练起点,但它并不能完全消除梯度问题,特别是对于非常深的网络或长序列。它作为一项重要的预防措施,通常与梯度裁剪(将在下文讨论)以及LSTM和GRU等架构(将在后续章节介绍)结合使用,这些架构本身对这些问题更具鲁棒性。选择合适的初始化策略是配置RNN模型以实现成功训练的基本步骤。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造