Appearance
实验 10 · SFT 与后训练对齐 — LoRA 权重合并与偏好对齐
本实验覆盖现代大模型后训练(Post-Training)三大核心环节:SFT 监督微调的 Prompt 掩码、低秩自适应(LoRA)的低成本参数微调与无损权重合并(Weight Merging),以及 DPO(直接偏好优化)的相对偏好强化。
网页即时交互实验:LoRA 秩约束与零推理延迟权重合并
LoRA(Low-Rank Adaptation)假设模型在特定下游任务的参数更新量
在训练时仅更新
交互:LoRA 合并动画
LoRA 训练时只新增一个低秩增量 ΔW = (B·A)·α。推理前把这个增量「焊」进 W,就回到单矩阵前向。
y = (W0 + α/r · B·A) x① 训练时冻结 W0,只更新 A、B(r 远小于 dIn×dOut)
W₀(冻结的基础权重)
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
1.0
0.0
0.0
+
α·(B·A) · 0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
=
W'(合并后)
1.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
1.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
1.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
1.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
1.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
1.00
0.00
0.00
LoRA 增量参数:28(r × (dIn + dOut))
原权重参数:48(dIn × dOut)
比例:58.3%
$$W' = W_0 + \Delta W,\quad \Delta W = \frac{\alpha}{r}\,B\,A,\quad A\in\mathbb R^{r\times d_{in}},\ B\in\mathbb R^{d_{out}\times r}$$
教学要点(红旗实验):把 r 调到 1、α 调到 32 —— 增量看起来不小,但参数只有 14 个。 这就是 LoRA「便宜微调」的本质:把表达能力锁在低秩流形上,换取极高的参数效率。 合并后推理图就少两个矩阵算子(省启动开销 / 少算一次 matmul),代价是这一份 LoRA 不能再热切换。
推荐规格:Google Pro A100 / L4 GPU (High-RAM)
支持一键在 Colab Pro 运行低秩微调并挂载 Google Drive 持久化微调权重
💡 运行提示:若本仓库为 GitHub 私有仓库,首次在 Colab 打开时请在弹出的对话框中点击「Authorize with GitHub」授权读取;或直接点击「⬇️ 下载 .ipynb」并在 Colab 中选择「上传笔记本」运行。
就绪 (点击运行)
点击右上角「▶ 运行」或按 ⌘/Ctrl+Enter 在浏览器端直接执行交互实验指南
- 秩(Rank r)的精简度:调整秩
和缩放系数 ,观察可训练参数量相比于全量微调的断崖式下降(通常仅占全权重的 0.1%)。 - 合并等价性:点击合并权重,观察计算流是如何从两个分支合并为单一稠密矩阵乘法的,体会现代大模型生态中 Adapter 热拔插的物理实现。
本地动手实验与单元测试
在网页端理解矩阵分解后,回到本地运行你的 SFT 掩码、LoRA 模块与 DPO 损失实现:
bash
cd <仓库根目录>
source .venv/bin/activate
export PYTHONPATH="$PWD/python"
# 运行 SFT 与 LoRA 单元测试
pytest python/tests/test_post_training.py -v