第二节 机器学习与深度学习基础:线性回归、神经网络、反向传播、优化器与损失函数

机器学习与深度学习是当前大模型技术的两大基石。理解本节内容,不仅是为了掌握几个经典算法,更是为了建立对“模型如何学习”这一核心问题的系统认知。从最简单的线性回归出发,我们可以清晰地看到模型构建、损失计算、梯度优化这一完整闭环;而神经网络与反向传播,则是在此基础上对“非线性表达能力”的扩展。本节将围绕五个核心概念展开,帮助您打通从传统机器学习到现代深度学习的认知脉络。

机器学习与深度学习核心概念关系图 输入数据 X 特征矩阵 线性回归 y = W·X + b 最小二乘法 / MSE 解析解 / 梯度下降 神经网络 多层感知机 MLP 激活函数:ReLU/Sigmoid 非线性拟合能力 损失函数 L MSE / CrossEntropy 反向传播 链式法则求梯度 逐层计算 ∂L/∂W 优化器 SGD / Adam / RMSProp 学习率调度 参数更新 W ← W - η·∂L/∂W 训练循环:前向传播 → 计算损失 → 反向传播 → 优化器更新 → 重复迭代 线性回归是神经网络的特例(无隐藏层、无激活函数) 反向传播是连接损失函数与优化器的桥梁

一、线性回归:从最小二乘到梯度下降

1. 核心原理

线性回归试图用一条直线(或超平面)来拟合特征与目标之间的线性关系。其数学表达为 \( y = W^T X + b \),其中 \( W \) 为权重向量,\( b \) 为偏置。模型训练的目标是找到一组最优参数 \( (W, b) \),使得预测值 \( \hat{y} \) 与真实值 \( y \) 之间的误差最小。最常用的误差度量是均方误差(MSE):

L(W, b) = (1/N) · Σ(yᵢ - (W·xᵢ + b))²

求解该问题有两种经典路径:解析法(正规方程)直接通过矩阵运算得到闭式解 \( W = (X^T X)^{-1} X^T y \),适用于特征维度较低(如小于1万)且矩阵可逆的场景;数值优化法(梯度下降)则通过迭代逼近最优解,适用于高维或大规模数据场景。

2. 判断方法与操作流程

在实际项目中,选择哪种求解方式取决于数据规模与特征维度。以下为梯度下降求解线性回归的标准流程:

  1. 数据预处理:对特征进行标准化(Z-score归一化),使各维度处于同一量纲,加速收敛。
  2. 初始化参数:将 \( W \) 和 \( b \) 初始化为零或小的随机数。
  3. 前向计算:计算预测值 \( \hat{y} = X·W + b \)。
  4. 损失计算:计算 MSE 损失。
  5. 梯度计算:\( ∂L/∂W = (2/N)·X^T(\hat{y} - y) \),\( ∂L/∂b = (2/N)·Σ(\hat{y} - y) \)。
  6. 参数更新:\( W ← W - η·∂L/∂W \),\( b ← b - η·∂L/∂b \),其中 \( η \) 为学习率。
  7. 迭代收敛:重复步骤3-6,直到损失变化小于阈值或达到最大迭代次数。

3. 案例拆解:房价预测的线性回归实战

假设我们有一个包含 500 条记录的数据集,特征包括房屋面积(平方米)、卧室数量、房龄(年),目标为房价(万元)。数据经过标准化后,使用批量梯度下降进行训练。初始学习率设为 0.01,经过 200 次迭代后,训练 MSE 从最初的 120.5 降至 8.3,验证集 MSE 为 9.1。关键参数记录如下:

迭代次数学习率训练MSE验证MSE权重W₁(面积)权重W₂(卧室)权重W₃(房龄)
00.01120.5125.30.000.000.00
500.0122.124.70.420.18-0.15
1000.0110.811.90.510.22-0.19
2000.018.39.10.550.24-0.21

从结果可见,面积对房价影响最大(权重0.55),房龄为负向影响(-0.21)。若将学习率调至 0.1,模型在第 30 轮即出现震荡,损失在 15~25 之间波动,说明学习率过大导致无法收敛。

风险提示:线性回归对异常值极为敏感。若数据中存在极端值(如面积 1000㎡ 的别墅),MSE 会因平方项放大误差,导致回归线被严重拉偏。建议在训练前进行异常值检测(如使用 IQR 或 Z-score 方法),或改用 Huber Loss 等鲁棒损失函数。

二、神经网络:从线性到非线性的跃迁

1. 核心原理

神经网络通过堆叠多个“线性变换 + 非线性激活”层,获得强大的非线性拟合能力。一个典型的全连接网络层计算为:\( h = σ(W·x + b) \),其中 \( σ \) 为激活函数。常用的激活函数包括:

  • Sigmoid:\( σ(z) = 1/(1+e^{-z}) \),输出范围 (0,1),适合二分类输出层,但存在梯度饱和问题。
  • ReLU:\( σ(z) = max(0, z) \),计算简单、缓解梯度消失,是隐藏层首选。
  • Tanh:\( σ(z) = (e^z - e^{-z})/(e^z + e^{-z}) \),输出范围 (-1,1),零中心化优于 Sigmoid。

理论上,一个包含足够宽隐藏层的神经网络可以逼近任意连续函数(万能逼近定理),这为深度学习解决复杂任务提供了理论支撑。

2. 网络设计与判断方法

设计神经网络时需考虑以下关键决策:

  1. 层数与宽度:浅层网络(1-2层)适合简单模式;深层网络(3层以上)能提取更抽象的特征,但需要更多数据防止过拟合。
  2. 激活函数选择:隐藏层默认 ReLU;输出层根据任务选择——回归用线性激活,二分类用 Sigmoid,多分类用 Softmax。
  3. 初始化策略:Xavier 初始化适用于 Sigmoid/Tanh,He 初始化适用于 ReLU,避免梯度消失或爆炸。

3. 场景化说明:手写数字识别

以 MNIST 数据集为例,输入为 28×28 的灰度图像(展平为 784 维向量),构建一个 3 层全连接网络:输入层 784 → 隐藏层1(128 神经元,ReLU)→ 隐藏层2(64 神经元,ReLU)→ 输出层(10 神经元,Softmax)。该模型在 60,000 张训练图片上训练 10 个 epoch 后,测试准确率达到 97.8%。若去掉隐藏层(直接 Softmax 回归),准确率降至 92.5%,说明非线性变换对图像特征提取至关重要。

经验提醒:当网络层数超过 10 层时,建议添加 Batch Normalization 层和残差连接(ResNet 风格),否则训练误差可能不降反升,这是梯度消失/爆炸的直接表现。

三、损失函数:模型学习的“指挥棒”

1. 核心原理与分类

损失函数量化了模型预测与真实标签之间的差异,是优化过程的唯一目标。不同任务需要匹配不同的损失函数:

任务类型损失函数公式特点
回归均方误差 (MSE)\( \frac{1}{N}Σ(y-\hat{y})² \)对大误差惩罚大,对异常值敏感
回归平均误差 (MAE)\( \frac{1}{N}Σ|y-\hat{y}| \)对异常值鲁棒,但梯度恒定
二分类二元交叉熵 (BCE)\( -\frac{1}{N}Σ[y·log(p) + (1-y)·log(1-p)] \)配合 Sigmoid,梯度友好
多分类交叉熵 (CE)\( -\frac{1}{N}ΣΣ yᵢⱼ·log(pᵢⱼ) \)配合 Softmax,概率分布度量

2. 选择策略与注意事项

选择损失函数时需考虑:输出层激活函数与损失函数的配对(如 Sigmoid+BCE、Softmax+CE)、数据分布(类别不平衡时使用加权 CE 或 Focal Loss)、任务目标(推荐系统常用 BPR Loss 或 AUC Loss)。

常见误区:在回归任务中盲目使用交叉熵损失。交叉熵假设目标为概率分布,若直接用于连续值预测,会导致梯度异常且无法收敛。务必确认任务类型与损失函数匹配。

四、反向传播:链式法则的工程艺术

1. 核心原理

反向传播(Backpropagation)是训练神经网络的核心算法。它利用微积分中的链式法则,从输出层向输入层逐层计算损失函数对各参数的梯度。对于第 \( l \) 层的权重 \( W^{(l)} \),其梯度计算为:

∂L/∂W^(l) = δ^(l) · (h^(l-1))^T

其中 \( δ^{(l)} \) 为第 \( l \) 层的误差项,\( h^{(l-1)} \) 为前一层输出。误差项通过递推关系从后向前传播:\( δ^{(l)} = (W^{(l+1)})^T δ^{(l+1)} ⊙ σ'(z^{(l)}) \)。

2. 计算流程与工程实现

  1. 前向传播:逐层计算 \( z^{(l)} = W^{(l)}h^{(l-1)} + b^{(l)} \),\( h^{(l)} = σ(z^{(l)}) \),保存中间变量。
  2. 输出层误差:\( δ^{(L)} = ∇_a L ⊙ σ'(z^{(L)}) \)。
  3. 反向递推:从 \( l = L-1 \) 到 1,计算 \( δ^{(l)} \)。
  4. 梯度计算:\( ∂L/∂W^{(l)} = δ^{(l)}(h^{(l-1)})^T \),\( ∂L/∂b^{(l)} = δ^{(l)} \)。

现代深度学习框架(PyTorch、TensorFlow)通过自动微分技术自动完成上述过程,开发者只需定义前向计算图,框架自动记录操作并反向求导。

3. 案例拆解:梯度消失的排查与解决

某团队训练一个 20 层全连接网络时,发现前 5 层的权重梯度范数接近 \( 10^{-8} \),而后几层梯度正常(\( 10^{-2} \) 量级),导致前层参数几乎不更新。排查过程如下:

  • 初始现象:训练损失在前 10 轮下降后停滞,验证集准确率约 45%。
  • 诊断分析:检查各层梯度分布,发现使用 Sigmoid 激活且采用标准正态初始化,导致深层网络梯度连乘后趋近于零。
  • 解决方案:将激活函数替换为 ReLU,初始化改为 He 初始化,并添加 Batch Normalization 层。
  • 结果对比:修改后训练损失正常下降,50 轮后验证准确率达到 91%。

该案例说明,反向传播的数值稳定性直接受激活函数和初始化策略影响,排查时应优先检查这两项。

五、优化器:从 SGD 到 Adam 的演进

1. 核心原理

优化器负责根据梯度更新模型参数,其设计直接影响收敛速度与最终性能。最基础的随机梯度下降(SGD)更新规则为 \( W ← W - η·g \),其中 \( g \) 为梯度。但 SGD 存在学习率难以选择、易陷入局部最优等问题。现代优化器通过引入动量、自适应学习率等机制改进:

优化器核心思想更新公式适用场景
SGD+Momentum累积历史梯度方向\( v = βv + g; W ← W - ηv \)通用,需手动调参
AdaGrad自适应学习率(累积梯度平方)\( W ← W - \frac{η}{√G+ε}g \)稀疏特征场景
RMSProp指数移动平均梯度平方\( E[g²] = βE[g²] + (1-β)g²; W ← W - \frac{η}{√E[g²]+ε}g \)非平稳目标
Adam动量 + RMSProp 结合\( m = β₁m + (1-β₁)g; v = β₂v + (1-β₂)g²; W ← W - η·\frac{\hat{m}}{√\hat{v}+ε} \)默认首选,鲁棒性强

2. 选择策略与调参实践

Adam 因其自适应学习率特性,成为大多数深度学习任务的默认选择。但需注意:

  • 学习率:Adam 默认学习率 0.001 通常表现良好,但可尝试 0.0001~0.01 范围。
  • 权重衰减:AdamW 将权重衰减与学习率解耦,在 Transformer 类模型中效果优于标准 Adam。
  • 学习率调度:配合 Warmup + Cosine Annealing 策略,可进一步提升收敛稳定性。

3. 实战对比:不同优化器在 CIFAR-10 上的表现

在 ResNet-18 模型上,分别使用 SGD(momentum=0.9)、Adam、AdamW 训练 100 个 epoch,初始学习率均为 0.1(SGD)和 0.001(Adam/AdamW),并配合 Cosine 学习率调度。结果如下:

SGD:   最佳验证准确率 94.2%,收敛于第 75 epoch
Adam:  最佳验证准确率 93.1%,收敛于第 60 epoch,但后期出现轻微过拟合
AdamW: 最佳验证准确率 94.5%,收敛于第 80 epoch,泛化性能最佳

该实验表明,虽然 Adam 收敛快,但 SGD 和 AdamW 在最终精度上往往更优,尤其在视觉任务中。实际应用中应结合任务特点选择,并建议使用余弦退火等调度策略。

总结复盘:本节从线性回归出发,建立了“模型-损失-优化”的完整认知框架。线性回归是理解梯度下降的最佳入门案例;神经网络通过非线性激活扩展了模型表达能力;损失函数定义了学习方向;反向传播提供了高效的梯度计算手段;优化器则决定了参数更新的路径与效率。这五个概念环环相扣,构成深度学习训练的最小闭环。建议初学者通过手写一个两层神经网络(不使用框架)来加深对反向传播的理解,再过渡到 PyTorch 等框架的自动微分。