《从零构建大模型》第五至七章串讲笔记
·
核心主线: 预训练 → 分类微调 → 指令微调,完成从"无标注文本"到"可对话助手"的完整闭环
一、整体架构图
第五章 → 第六章 → 第七章 技术演进对比表
| 维度 | 第五章:预训练 | 第六章:分类微调 | 第七章:指令微调 |
|---|---|---|---|
| 核心目标 | 让模型学会“理解语言和生成文本” | 让模型学会“识别特定类别” | 让模型学会“听懂指令并自由回复” |
| 输入数据 | 无标注文本(维基百科、书籍语料) | 标注数据(短信 + 标签:spam / ham) | 指令数据集(instruction + input + output) |
| 输出形式 | 能“接龙”生成文本的基础模型 | 垃圾短信检测器 / 情感分析器(固定类别) | 能执行指令的聊天助手(自由文本) |
| 模型改造 | 无(原始 GPT 架构) | 替换输出层:50257 维 → 2 维(分类头) | 保持原词表输出层不变,不添加分类头 |
| 训练策略 | 预测下一个 token | 冻结 Transformer 层,只训练分类头(可选解冻) | 掩码指令部分,只优化 Response 部分的每个 token |
| 损失函数 | 交叉熵损失(全部 token) | 只优化最后一个 token 的交叉熵损失 | 只优化 Response token 的交叉熵损失 |
| 优化器 | AdamW(带权重衰减) | AdamW(同上) | AdamW(同上) |
| 解码/生成 | 温度缩放 + Top‑k 采样 | 不需要生成(直接用 argmax 分类) | generate() 自回归 + 温度/Top‑k 控制 |
| 评估方法 | 训练/验证损失 | 分类准确率(Accuracy) | 人工评估 + 自动评估(OpenAI API / Ollama) |
| 局限性 | 只能做无监督生成 | 只能预测训练时见过的固定类别 | 需要高质量指令数据,评估较主观 |
二、逐章核心要点
第五章:在无标注数据上进行预训练
目标:让模型通过海量无标注文本自学语言规律,获得"接龙"能力。
| 类别 | 技术/概念 | 说明 |
|---|---|---|
| 数据预处理 | 教师强制 | 目标序列为输入序列右移一位(如输入"A B C",目标为"B C D"),用于自回归训练。 |
| 优化器 | AdamW | 改进Adam的权重衰减实现,避免权重与梯度耦合,成为大语言模型训练的标准优化器。 |
| 生成策略 | 温度缩放 | 调整logits除以温度参数:>1增加多样性,<1降低随机性(如0.5使输出更确定)。 |
| Top-k采样 | 仅保留概率最高的k个token,其余置零后重新归一化,平衡生成质量与多样性(常用k=50)。 | |
| 模型管理 | 模型持久化 | 使用torch.save保存模型权重、优化器状态;torch.load恢复训练或部署。 |
| 加载预训练权重 | 支持加载OpenAI GPT-2系列(124M至1558M参数)至自定义实现架构,需结构匹配。 |
关键补充说明
- 教师强制:训练时使用真实历史token作为输入,避免错误累积,但推理时需切换为自回归生成。
- AdamW优化器:权重衰减直接作用于参数,而非梯度,提升超参数鲁棒性。
- 温度与Top-k:两者可结合使用,例如温度=0.7且k=40,控制生成多样性与集中度。
一句话总结:第五章让模型"学会说话"——给它任意前缀,它能合理地续写下去。
第六章:进行文本分类的微调
目标:将预训练模型改造成特定任务的分类器。
| 配置项 | 参数/说明 |
|---|---|
| 数据集 | SMS Spam Collection(约5000条短信,标签为spam/ham) |
| 架构改造 | 输出层维度从[batch, seq, 50257]调整为[batch, seq, 2],仅保留最后一个token的输出 |
| 冻结策略 | 选项1:冻结全部Transformer层,仅训练分类头 选项2:解冻部分Transformer层 |
| 损失计算 | 仅对序列最后一个token的输出计算交叉熵损失(非整个序列) |
| 评估指标 | 分类准确率(Accuracy) |
关键说明
- 输出层调整:原始语言模型的50257维输出对应词汇表大小,改造后适应二分类任务。
- 冻结策略:解冻部分层时需注意梯度传播效率,建议从顶层开始逐步解冻。
- 损失计算优化:仅计算序列末端损失可显著减少计算量,符合分类任务特性。
只取最后一个token的输出进行分类
一句话总结:第六章让模型"学会判断"——给它一段文本,它能输出一个固定类别标签。
第七章:进行遵循指令的微调
目标:让模型成为能理解自然语言指令并自由生成回复的通用助手。
| 关键要素 | 说明 |
|---|---|
| 数据格式 | 每条样本包含 instruction/input/output,按Alpaca模板格式化 |
| 损失计算掩码 | 训练时掩码指令部分(设为-100),仅计算Response部分的损失 |
| 模型规模选择 | 使用GPT-2 medium(355M参数),比预训练时更大以提升微调效果 |
| 生成方式 | 调用generate()函数自回归解码,支持温度(Temperature)和Top-k采样控制 |
| 评估方法 | 人工并排对比 + 调用更强模型(如GPT-4/Ollama)自动打分 |
| 进阶优化方向 | 多轮对话支持、偏好对齐(DPO/RLHF)、参数高效微调(LoRA/QLoRA) |
一句话总结:第七章让模型"学会对话"——给它一个指令,它能理解意图并生成完整、有用的回答。
三、三章对比总表
| 维度 | 第五章(预训练) | 第六章(分类微调) | 第七章(指令微调) |
|---|---|---|---|
| 数据类型 | 无标注文本 | 标注数据(文本+标签) | 指令-响应对 |
| 数据规模 | 海量(GB级) | 小规模(千级) | 小规模(千级) |
| 输出层 | 词表维度(50257) | 类别维度(如2) | 词表维度(50257) |
| 损失范围 | 整个序列每个token | 仅最后一个token | 仅Response部分的token |
| 模型改造 | 无 | 替换输出层为分类头 | 无(保持原架构) |
| 生成方式 | 接龙生成 | 无(直接输出类别) | 自回归生成完整回复 |
| 应用场景 | 获得基础语言能力 | 垃圾检测/情感分析 | 聊天机器人/智能助手 |
| 关键技能 | 温度/Top-k采样 | 冻结层/准确率评估 | 指令掩码/自动评估 |
第五章:预训练 —— 预测下一个token,生成接龙文本
第六章:分类微调 —— 只关心最后一个token,输出类别标签
第七章:指令微调 —— 只优化Response部分,生成指令回复
四、总结
第五章让模型"会说话"(预训练接龙)
第六章让模型"会判断"(分类打标签)
第七章让模型"会对话"(指令生成回复)
三章连起来,就是从"文盲"到"专家"再到"助手"的完整成长路径。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)