本节摘要:大模型是深度学习的产物,微调是在"神经网络"上做文章。本节讲清神经网络的结构与训练机制、深度学习为什么"深"就更强,以及预训练模型的含义——为理解"在预训练模型上微调"打基础。
阅读完本节,你应当能够:
微调的对象是神经网络,绕不开三个概念:层、参数、梯度。把它们想成流水线车间:数据从第一层进,每层做一点加工,最后一层出结果;"参数"是每台加工机器的旋钮,"训练"就是调旋钮让产出更对。理解这个画面,深度学习就懂了大半。
每层是一个参数矩阵,数据经过层层变换。层数越多,能表达的抽象越复杂——这就是"深"。
前向传播:数据走一遍网络,得到预测 计算损失:预测与正确答案差多少 反向传播:算出每个参数该往哪个方向调 梯度下降:按方向更新参数,损失变小 重复:直到损失收敛
💡 关键直觉:训练的本质是"反复调旋钮直到输出对"。一次完整的"前向-损失-反向-更新"叫一个迭代,训练就是成千上万次迭代。微调同样跑这个循环,只是起点不同。
预训练 = 在大规模通用数据上完成了海量迭代的模型。它的参数已经"记住"了语言的通用规律——这就是为什么它是个"通才"。微调不是重新训练,是在这个"已调好的模型"上继续调旋钮。
| 优势 | 局限 |
|---|---|
| 特征自动提取 | 需要大量数据 |
| 表现力强 | 训练成本高 |
| 端到端 | 黑箱难解释 |
模型的"参数数量"是理解一切成本的关键:参数量 × 字节数 ≈ 模型体积与显存需求。7B 模型约需 14GB+ 显存(半精度)——这是后面选微调方法的硬约束。
⚠️ 常见坑:忽略显存预算就选全量微调。7B 全量微调需要 100GB+ 显存,个人机器基本不可能——所以才要学第 5 章的 LoRA 等参数高效方法。
| 指标 | 看什么 |
|---|---|
| 训练损失 | 在不在下降 |
| 验证损失 | 有没有过拟合 |
| 学习率 | 收敛是否平稳 |
| 梯度范数 | 训练是否稳定 |
深度学习的"调参数"本质,在微调场景下的含义是:预训练模型的参数已经很好,微调只需小幅调整——这就是为什么微调用更小的学习率、更少的数据也能生效。
把上面的循环用代码走一遍,理解会更扎实。下面是一个最简单的 PyTorch 线性回归训练循环,它和训练大模型的循环结构完全一样:
import torch model = torch.nn.Linear(1, 1) # 单层网络:1 个输入 1 个输出 opt = torch.optim.SGD(model.parameters(), lr=0.01) loss_fn = torch.nn.MSELoss() x = torch.tensor([[1.0], [2.0], [3.0]]) y = torch.tensor([[2.0], [4.0], [6.0]]) # 目标 y = 2x for epoch in range(200): pred = model(x) # 前向传播 loss = loss_fn(pred, y) # 计算损失 opt.zero_grad() loss.backward() # 反向传播:算梯度 opt.step() # 梯度下降:更新参数 print(model(torch.tensor([[4.0]])).item()) # 接近 8.0
注意三个细节:zero_grad 每轮清零梯度、backward 自动求梯度、step 更新参数。微调只是把这里的 model 换成预训练模型、把学习率调小,循环本身一行都不用改。当你理解了这个循环,就理解了微调的全部技术都是在"这个循环的哪个环节做文章":数据(喂什么)、损失(怎么算差)、优化器(怎么调旋钮)、学习率(调多大幅度)。
训练循环里的每一次迭代,都是在让模型参数朝"损失更小"的方向挪动一步;而层数越深、参数越多,网络能拟合的函数就越复杂,但也越需要更多数据与更长训练时间——这就是深度学习"又强又贵"的根源,也是微调能借力省钱的根本原因。
深度学习结构懂了,下一块砖——参数训练机制。