Skip to content

训练神经网络

训练神经网络涉及寻找最优的权重 (weights) 和偏置 (biases) 组合,以使网络能够准确地将输入 (inputs) 映射到期望的输出 (outputs)。本章深入探讨了核心概念:迭代训练过程、反向传播 (backpropagation) 算法、梯度下降 (gradient descent) 优化,以及正则化 (regularization) 等常见挑战和技术。

神经网络训练通常是一个迭代过程,使用梯度下降的变体。以下是典型步骤的分解:

  1. 初始化 (Initialization): 为网络中的所有权重和偏置分配初始值(通常是小的随机值)。
  2. 前向传播 (Forward Propagation): 从训练集 (training set) 中选择一个批次 (batch) 的数据。将此批次数据通过网络传递,计算每一层的激活值 (activations),直到获得最终输出(预测 (prediction))。
  3. 损失计算 (Loss Calculation): 使用适当的损失函数 (loss function)(例如,用于回归的均方误差 (Mean Squared Error),用于分类的交叉熵 (Cross-Entropy))比较网络的预测与训练批次中的实际目标值 (target values)。损失函数量化了预测的“错误”程度。
  4. 反向传播 (Backward Propagation (Backprop)): 计算损失函数相对于网络中每个权重和偏置的梯度。这通过链式法则 (chain rule) 高效完成,从输出层向输入层反向工作。此步骤确定了每个参数对总体误差的贡献程度。
  5. 参数更新 (Parameter Update): 根据计算出的梯度调整权重和偏置。更新规则通常涉及从参数值中减去梯度的一小部分。调整的大小由学习率 (learning rate) 控制。
  6. 迭代 (Iteration): 重复步骤 2-5,处理多个批次(一个“周期”(epoch) 通常指处理整个训练集一次),直到模型在验证集 (validation set) 上的性能停止提升或达到最大周期数。

现代深度学习框架使用自动微分 (automatic differentiation) (autograd) 自动化了反向传播步骤,这通常通过计算图 (computational graphs) 实现(将在另一章节讨论)。

梯度下降是核心的优化算法。“梯度”代表损失函数上升最陡峭的方向;我们朝着相反的方向(下降)移动以最小化损失。

基本的更新规则是:new_weight = old_weight - learning_rate * gradient_of_loss_wrt_weight。

虽然简单的随机梯度下降 (Stochastic Gradient Descent (SGD)) 基于一个示例(或一个小批量 (mini-batch))逐个更新权重,但在实践中更常使用更高级的优化器:

  • 带有动量的 SGD (SGD with Momentum): 将上一更新向量的一部分添加到当前更新向量中,有助于加速收敛并避开浅层局部最小值。
  • AdaGrad (自适应梯度 (Adaptive Gradient)): 为每个参数调整学习率,对频繁出现的特征使用较小的更新,对不频繁的特征使用较大的更新。
  • RMSprop (均方根传播 (Root Mean Square Propagation)): 类似于 AdaGrad,但使用平方梯度的移动平均来防止学习率收缩得过于激进。
  • Adam (自适应矩估计 (Adaptive Moment Estimation)): 结合了动量和 RMSprop 的思想。它使用梯度的一阶矩(均值)和二阶矩(非中心方差)的估计为每个参数计算自适应学习率。它通常是一个不错的默认选择。
  • AdamW: Adam 的一种变体,改进了权重衰减 (weight decay) 正则化。

选择正确的优化器并调整其超参数 (hyperparameters)(如学习率)对于有效的训练至关重要。进一步阅读:梯度下降优化算法概述

训练深度神经网络存在几个挑战:

  • 梯度消失/爆炸 (Vanishing/Exploding Gradients): 在深度网络中,反向传播的梯度可能变得极小(消失)或极大(爆炸),这会阻碍早期层的学习或导致不稳定。细致的权重初始化、ReLU 激活函数 (ReLU activation functions)、批量归一化 (Batch Normalization) 和梯度裁剪 (Gradient Clipping) 等技术有助于缓解此问题。
  • 过拟合 (Overfitting): 模型过度学习了训练数据,包括其噪声和特定特殊性,导致在未见过的数据上表现不佳。正则化技术用于对抗过拟合。
  • 计算成本 (Computational Cost): 在庞大的数据集上训练大型模型需要大量的计算资源(GPU/TPU)和时间。
  • 超参数调优 (Hyperparameter Tuning): 寻找最优的网络架构(层数、每层单元数)、学习率、批量大小 (batch size)、正则化强度等通常需要进行大量的实验。

正则化方法通过阻止模型过于复杂来帮助防止过拟合。

Dropout 是一种广泛使用的技术。在每次训练迭代中,它会随机将某一层中一部分神经元的输出设置为零(有效地“丢弃”它们)。这可以防止神经元过度依赖于其他特定的神经元。

每个神经元以概率 p(保留概率 (keep probability))被保留,以概率 1-p 被丢弃。隐藏层中 p 的常见值约为 0.5 到 0.8。在推理(预测)时,Dropout 被关闭,并且该层的输出通常按 p 进行缩放,以补偿训练期间活跃神经元数量较少的事实。

这些方法通过在损失函数中添加基于权重大小的惩罚项来工作。L2 正则化惩罚权重平方和,鼓励权重较小。L1 正则化惩罚权重绝对值之和,这可以导致稀疏权重向量(某些权重恰好为零)。

在训练期间监控模型在单独的验证数据集 (validation dataset) 上的性能(例如,损失或准确率)。当模型在验证集上的性能开始下降时停止训练过程,即使训练损失仍在下降。这可以防止模型对训练数据过拟合。

通过对现有数据应用随机变换,人工增加训练数据集的大小和多样性。对于图像,常见的增强包括随机旋转、平移、缩放、翻转和颜色调整。对于文本,可以使用反向翻译或同义词替换等技术。这使得模型对输入中的变化更加鲁棒。

对每一小批次 (mini-batch) 的层输入进行归一化。它有助于稳定训练,允许使用更高的学习率,并且可以产生轻微的正则化效果。它解决了训练期间层输入的分布发生变化的“内部协变量转移 (internal covariate shift)”问题。

迁移学习利用在大型数据集(例如,用于图像的 ImageNet,用于 NLP 的大型文本语料库)上预训练 (pre-trained) 的模型,并将其适应于新的、通常较小的目标任务 (target task)。当目标数据集有限时,这种方法非常有效。

常见方法包括:

  • 特征提取 (Feature Extraction): 使用预训练模型的卷积基 (convolutional base)(用于 CNN)或嵌入层 (embedding layers)(用于 NLP)从新数据中提取特征。然后,仅训练一个全新的、较小的分类器 (classifier) 或特定任务头部 (task-specific head) 基于这些特征。预训练层的权重保持冻结 (frozen)。
  • 微调 (Fine-Tuning): 使用预训练权重初始化模型。解冻预训练模型的部分或全部顶层,并以较小的学习率在目标数据集上训练它们(以及新的分类器头部)。这使得模型能够更具体地适应新任务的学习特征。

迁移学习显著减少了许多任务的训练时间和数据需求。