第二节 机器学习与深度学习基础:线性回归、神经网络、反向传播、优化器与损失函数
机器学习与深度学习是当前大模型技术的两大基石。理解本节内容,不仅是为了掌握几个经典算法,更是为了建立对“模型如何学习”这一核心问题的系统认知。从最简单的线性回归出发,我们可以清晰地看到模型构建、损失计算、梯度优化这一完整闭环;而神经网络与反向传播,则是在此基础上对“非线性表达能力”的扩展。本节将围绕五个核心概念展开,帮助您打通从传统机器学习到现代深度学习的认知脉络。
一、线性回归:从最小二乘到梯度下降
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. 判断方法与操作流程
在实际项目中,选择哪种求解方式取决于数据规模与特征维度。以下为梯度下降求解线性回归的标准流程:
- 数据预处理:对特征进行标准化(Z-score归一化),使各维度处于同一量纲,加速收敛。
- 初始化参数:将 \( W \) 和 \( b \) 初始化为零或小的随机数。
- 前向计算:计算预测值 \( \hat{y} = X·W + b \)。
- 损失计算:计算 MSE 损失。
- 梯度计算:\( ∂L/∂W = (2/N)·X^T(\hat{y} - y) \),\( ∂L/∂b = (2/N)·Σ(\hat{y} - y) \)。
- 参数更新:\( W ← W - η·∂L/∂W \),\( b ← b - η·∂L/∂b \),其中 \( η \) 为学习率。
- 迭代收敛:重复步骤3-6,直到损失变化小于阈值或达到最大迭代次数。
3. 案例拆解:房价预测的线性回归实战
假设我们有一个包含 500 条记录的数据集,特征包括房屋面积(平方米)、卧室数量、房龄(年),目标为房价(万元)。数据经过标准化后,使用批量梯度下降进行训练。初始学习率设为 0.01,经过 200 次迭代后,训练 MSE 从最初的 120.5 降至 8.3,验证集 MSE 为 9.1。关键参数记录如下:
| 迭代次数 | 学习率 | 训练MSE | 验证MSE | 权重W₁(面积) | 权重W₂(卧室) | 权重W₃(房龄) |
|---|---|---|---|---|---|---|
| 0 | 0.01 | 120.5 | 125.3 | 0.00 | 0.00 | 0.00 |
| 50 | 0.01 | 22.1 | 24.7 | 0.42 | 0.18 | -0.15 |
| 100 | 0.01 | 10.8 | 11.9 | 0.51 | 0.22 | -0.19 |
| 200 | 0.01 | 8.3 | 9.1 | 0.55 | 0.24 | -0.21 |
从结果可见,面积对房价影响最大(权重0.55),房龄为负向影响(-0.21)。若将学习率调至 0.1,模型在第 30 轮即出现震荡,损失在 15~25 之间波动,说明学习率过大导致无法收敛。
二、神经网络:从线性到非线性的跃迁
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-2层)适合简单模式;深层网络(3层以上)能提取更抽象的特征,但需要更多数据防止过拟合。
- 激活函数选择:隐藏层默认 ReLU;输出层根据任务选择——回归用线性激活,二分类用 Sigmoid,多分类用 Softmax。
- 初始化策略: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%,说明非线性变换对图像特征提取至关重要。
三、损失函数:模型学习的“指挥棒”
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. 计算流程与工程实现
- 前向传播:逐层计算 \( z^{(l)} = W^{(l)}h^{(l-1)} + b^{(l)} \),\( h^{(l)} = σ(z^{(l)}) \),保存中间变量。
- 输出层误差:\( δ^{(L)} = ∇_a L ⊙ σ'(z^{(L)}) \)。
- 反向递推:从 \( l = L-1 \) 到 1,计算 \( δ^{(l)} \)。
- 梯度计算:\( ∂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 在最终精度上往往更优,尤其在视觉任务中。实际应用中应结合任务特点选择,并建议使用余弦退火等调度策略。