二、Lora微调

-
这页主要说明:对 GPT-3 这种超大模型进行全参数 Fine-tune,成本非常高。
-
“噩梦”主要体现在三个方面:
- 显存压力大:175B 参数模型全参训练大约需要 96 张 V100 32GB 才能基本放得下。
- 存储成本高:每训练一个任务,都可能需要保存接近 1TB 的 Checkpoint。
- 模型切换慢:不同任务之间切换完整模型,可能需要 1 分钟以上。
-
造成这些问题的核心原因是:全参数 Fine-tune 需要更新并保存模型的全部参数,不仅有模型权重,还需要保存梯度和 Adam 优化器状态,因此显存占用会进一步增加。
-
LoRA 的解决思路很简单:
- 冻结原来的大模型参数;
- 只训练少量新增的低秩参数;
- 每个任务只保存很小的 LoRA 权重。
-
因此可以理解为:
全参 Fine-tune:整个模型都改;LoRA:大模型基本不动,只改很小一部分参数。
- 这也是为什么下一步要学习 LoRA、QLoRA 等 PEFT 方法:它们主要解决的就是显存、存储和多任务切换成本过高的问题。

2.1 Lora算法




2.1.1 BERT模型









2.2 Roberta模型





2.4 PRFT library

三、Alpaca模型微调
3.1 alpaca模型概览

3.2 self-Instruct数据准备


3.3 训练Alpaca




SwiGLU:通过 Gate / Up / Down 三个投影引入门控机制,相比 ReLU/GELU 能更灵活地筛选和增强有效特征。
RoPE:把位置信息直接编码进 Q/KQ/K 的旋转关系中,使注意力天然包含相对位置信息,并方便后续做长上下文扩展。
系统优化:重点是减少显存读写、激活保存和通信等待,例如高效 causal attention、Activation Checkpointing、通信计算重叠等。
一个准确性提醒:FlashAttention 可以作为现代高效实现的代表,但不应表述成“LLaMA 原论文独有创新”。
一句话理解:SwiGLU 决定“怎么变换特征”,RoPE 决定“怎么表示位置”,系统优化决定“怎么把模型高效训起来”。

这页适合做成“GPU × 模型参数 × Token 的行业速算表”:先看模型权重能不能装下,再看 KV Cache/并发会不会把剩余显存吃完,最后才讨论 Token/s。
权重速算:FP16/BF16 约 2 GB / 1B 参数,INT8 约 1 GB / 1B,INT4 理论约 0.5 GB / 1B,实际还要给量化尺度、运行时和 KV Cache 留余量。
推理显存不只是模型权重,而是 Weights + KV Cache + Activations + Runtime Workspace;上下文越长、并发越高,KV Cache 增长越明显。
速度指标要分开看:TTFT 主要受 Prompt 长度和 Prefill 影响;Decode 的 Token/s 更受模型规模、显存带宽、量化方式和 Batch 影响。
训练不能简单套固定“×18”:Adam 混合精度全参训练通常还要保存梯度、主权重和优化器状态,再叠加激活;ZeRO/FSDP/Checkpointing 会显著改变单卡显存账本。
一个重要修正:405B 模型仅 BF16 权重就约 810 GB,因此 8×80GB GPU 并不能直接装下完整 BF16 权重;这类规模通常需要更多显存、量化或分布式切分。



3.4 整体流程

一、Teacher → Student:用强模型生成训练数据
- Teacher(如 GPT-4)负责出题、分类判断和生成答案。
- Student(如 LLaMA、ChatGLM)学习这些高质量指令数据,再通过 LoRA 或全量微调完成能力迁移。
二、好数据看两个标准
- Instruction 要多样:覆盖不同任务、不同表达方式,避免数据过于单一。
- Output 要优质:答案尽量准确、完整、格式规范,给学生模型提供可靠监督。
三、完整闭环
人工种子 → 指令生成 → 任务分类 → 分类/非分类实例生成 → Filtering → 合格数据回流 Task Pool → Student 微调
一句话总结:
Self-Instruct 本质上可以看成一个“强模型造数据 → 数据反哺小模型”的自动化知识迁移闭环。
3.5 具体流程
3.5.1 Instruction Generation

Self-Instruct 第一步的本质:不是让模型“凭空想任务”,而是先构造一个高质量 Few-shot Prompt,让模型沿着已有示例继续自回归生成新的 Instruction。
Prompt 构造方式:从 Task Pool 中动态抽取 8 个 Example,示意为 6 条人工种子指令 + 2 条模型已生成指令,再让模型续写第 9 个新任务。
人工种子的作用:稳定格式、难度、任务边界与指令质量,相当于给生成过程提供“锚点”。
模型新生成样本的作用:不断把新任务重新放回 Task Pool,增加题型、语义和表达方式的多样性,推动长尾探索。
形成自举飞轮:175 条人工种子 → 混合采样 → Prompt → 新指令生成 → 回填 Task Pool → 再次采样,让任务池持续扩张。
核心思想:用“大比例优质种子固底 + 小比例新颖样本探路”同时解决 生成质量 与 任务多样性 两个问题,为后续大规模 Self-Instruct 数据构造打基础
3.5.2 判断是否是分类型Instruction

一、判定标准:是不是“有限标签分类”
- 核心看输出是不是有限、固定、离散的标签。
- 例如“适合 / 不适合”属于分类任务。
- 开放式故事生成、实体补全等,通常不属于分类任务。
二、判定方式:Few-shot 提示词
- Prompt 中先给几个 Yes / No 示例。
- 再把 Step 1 新生成的 Instruction 填进去。
- 让大模型直接判断并输出:Yes 或 No。
三、作用:决定下一步怎么生成数据
- Yes → Output-first:先确定标签,再生成对应输入,减少类别不平衡。
- No → Input-first:先生成输入,再生成开放式回答。
四、总结
创新点 1:模型“自己给自己造训练数据”
核心思想非常简单:
Pretrained LLM
↓
自己生成 Instruction Data
↓
过滤
↓
用这些数据 Fine-tune 自己
↓
更会 Follow Instructions
这其实是一种 Bootstrapping / Self-training 思想。
但是与普通 self-training 不同:
普通 Self-training:
已有Task
+
未标注样本
↓
Pseudo Label
Self-Instruct:
连 Task 本身
都让模型生成
所以它是:
Task-level Bootstrapping。
论文也特别指出,它不是针对某一个指定任务,而是从头生成多种新的任务。
创新点 2:把数据生成拆成 Instruction 和 Instance 两个阶段
不是一句 Prompt:
“给我生成训练数据。”
然后完事。
而是:
先生成 Task / Instruction
↓
再理解这个任务
↓
生成 Input + Output
这种解耦非常重要。
因为:
Task Diversity
和
Instance Correctness
其实是两个不同的问题。
3.5.3 非分类/开放式任务的实例生成

一、核心思路:顺向生成
- 对于非分类任务,不需要先定标签。
- 模型直接按照自然顺序生成:
Instruction → Input(可为空)→ Output - 这就是 Input-first / Direct Generation。
二、输入可以有,也可以没有
- 如果任务本身信息已经完整,可以直接生成 Output。
- 如果任务需要材料或上下文,模型会先生成 Input,再生成对应的 Output。
三、Few-shot 示例的作用
-
Prompt 里先放几个示例,告诉模型该怎么写。
-
示例可以帮助模型学会:
- 输出格式要规范
- 回答要简洁清晰
- 不同任务可以对应不同的表达形式
四、最后得到什么
- 这一步会产出一个完整样本:
⟨Instruction, Input, Output⟩ - 然后进入 Step 4(Filtering),做去重和格式检查。
一句话总结:
对于开放式任务,Self-Instruct 采用“顺向生成”方式,直接从指令出发,生成输入(可选)和输出,形成完整训练样本。
3.5.4 分类任务的实例生成

一、核心思路:标签先行
- 对于分类任务,先不给模型自由生成输入。
- 而是先指定一个 Class Label,再让模型生成符合这个标签的输入内容。
- 这就是 Output-first。
二、Few-shot 提示词怎么起作用
-
Prompt 里先给几个示例:
标签是什么 → 对应输入应该长什么样 -
比如:
mixed→ 生成带有正反两面的句子Promotion→ 生成促销邮件
-
这样模型就会学会“按标签反推输入”。
三、这样做有什么价值
- 可以让每个类别都被主动生成到。
- 能减少模型总是偏向某一类的问题。
- 从而缓解 类别失衡(Class Imbalance),让数据更均衡。
四、最后得到什么
- 生成完成后,会得到标准样本:
⟨Instruction, Input, Output⟩ - 然后进入 Step 4(Filtering),做去重和格式检查。
一句话总结:
这个设计非常值得学。作者发现:如果所有任务都:
Instruction
↓
先生成 Input
↓
再生成 Output
对于分类任务会出现明显的 Label Bias。
例如:
判断一句话是否存在语法错误
模型可能总喜欢生成:
语法正确的句子
导致标签分布不均衡。
所以作者先进行:
Classification Task Identification
然后:
Classification
↓
Output-first
Non-classification
↓
Input-first
这是整篇论文中一个非常重要的工程创新。
3.5.5 过滤与质检

一、ROUGE-L 去重
- 新指令会和
Task Pool中已有指令进行比较。 - ROUGE-L < 0.7:保留;≥ 0.7:删除。
- 主要作用是减少重复指令,保持任务多样性。
二、过滤不可执行任务
- 删除包含
image、picture、graph等内容的指令。 - 因为纯文本模型无法真正处理图片或图表,避免生成无效训练数据。
三、检查逻辑一致性
- 如果出现相同/相似 Input,却对应矛盾 Output 的情况,需要过滤。
- 避免标签噪声影响模型训练。
四、过滤长度异常样本
- 太短:可能内容残缺、信息不足。
- 太长:可能出现重复生成或无关内容。
- 最终只保留长度合理、格式完整的高质量样本。
一句话总结:
Step 4 就是 Self-Instruct 的“质量守门员”:通过去重、规则过滤、冲突检查和长度控制,确保只有高质量、多样化的数据进入最终训练集。
四、模型评估

4.1、四种常见评测方式
- 人工评测:最可靠,但成本最高。
- LLM-as-a-Judge:速度快、成本低,适合大规模评测。
- 传统指标:如 BLEU、ROUGE、EM,适合有标准答案的任务。
- Benchmark / A/B Test:用于综合能力和真实线上效果验证。
4.1.1、核心问题:机评能不能代替人评?
不能直接相信大模型打分,需要先做一次人机一致性校准。
4.1.2、四步校准闭环
抽取 100 条样本 → 专家评分 S₁ → LLM 评分 S₂ → 比较相关性并修改 Judge Prompt
如果人评和机评分数差距较大,就继续调整 Prompt,直到二者高度一致。
4.1.3、最终目的
校准完成后,就可以把评测 Prompt 扩展到剩余的大规模测试集,实现:
少量人工校准 + 大规模自动评测
一句话总结:
先用少量人工评分把“LLM 裁判”校准好,再让它替代人工完成大规模评测,在成本、效率和可信度之间取得平衡。
4.2 传统NLP评价指标的两大致命缺陷:字面匹配≠语义理解

4.2.1、问题 1:语义相同,却被打低分
Mike really loves drinking tea.Mike adores sipping tea.- 两句话意思几乎一样,但词面重合较少,BLEU / ROUGE 可能给低分。
4.2.2、问题 2:语义相反,却被打高分
Mike does not drink coffee.Mike does drink coffee.- 两句话只差一个
not,字面很像,但意思完全相反,传统指标却可能给高分。
4.2.3、为什么会这样?
- BLEU、ROUGE 主要看词和 n-gram 的重合程度。
- 它们不真正理解同义改写、否定关系、逻辑和事实含义。
- 所以开放式生成更适合结合 BERTScore、语义相似度或 LLM-as-a-Judge。
一句话总结:
传统 Metric 只能看“像不像”,却不一定知道“对不对”,因此大模型评测必须进一步关注深层语义。
4.3 n-gram基础概念补充

4.3.1、什么是 n-gram?
- n-gram:把一句话按连续的
n个词进行切分。 n=1是 Unigram,n=2是 Bigram,n=3是 Trigram。n越大,对局部语序和词组搭配越敏感。
4.3.2、简单例子
句子:The dog lay on the rug
- 1-gram:
The、dog、lay、on、the、rug - 2-gram:
The dog、dog lay、lay on、on the、the rug - 3-gram:
The dog lay、dog lay on……
本质上就是一个滑动窗口切词的过程。
4.3.3、它和 BLEU / ROUGE 有什么关系?
- BLEU:主要看预测文本和参考答案之间的 n-gram 匹配程度。
- ROUGE-1 / ROUGE-2:分别关注 1-gram、2-gram 的重合情况。
- 所以它们擅长判断“字面像不像”,但不一定真正理解“语义对不对”。
一句话总结:
n-gram 是传统文本评价指标的基础:先把句子切成连续词片段,再统计预测结果和参考答案之间有多少片段能够匹配。
4.4 ROUGE-1(基于 Unigram)计算原理与示例推导

4.4.1、先看词有没有匹配
参考答案:It is cold outside.
模型输出:It is very cold outside.
- Reference 一共 4 个词
- Output 一共 5 个词
- 匹配词数:4 个
4.4.2、ROUGE-1 怎么算
- Recall = 4 / 4 = 1.0
看参考答案里的信息有没有被覆盖完整。 - Precision = 4 / 5 = 0.8
看模型生成内容里有多少是“有效匹配”的。 - F1 ≈ 0.89
综合平衡 Precision 和 Recall。
4.4.3、它的问题在哪里?
very虽然不影响整体语义,但因为 Reference 里没有,仍然会被“机械扣分”。- 所以 ROUGE-1 本质上还是在看词面重合度,并不真正理解句子含义。
一句话总结:
ROUGE-1 就是先做 Unigram 匹配,再用 Recall、Precision 和 F1 衡量“覆盖多少、匹配多准、整体多平衡”。
4.5 ROUGE-1的致命盲区

4.5.1、事实完全错,但 ROUGE-1 还是很高
- Reference:
It is cold outside. - Generated:
It is not cold outside. - 人类一看就知道意思完全相反,但 4 个词仍然匹配。
4.5.2、为什么还能得到 0.89?
- Recall = 4 / 4 = 1.0
- Precision = 4 / 5 = 0.8
- F1 ≈ 0.89
- ROUGE-1 只看到多了一个
not,却不知道这个词把整句话的语义翻转了。
4.5.3、这说明什么?
- ROUGE-1 本质上只是做词面重合统计。
- 它不理解否定、逻辑和事实关系。
- 所以大模型评测不能只依赖 BLEU / ROUGE,还需要结合 BERTScore、NLI 或 LLM-as-a-Judge。
一句话总结:
一句话只多了一个 not,语义已经完全相反,但 ROUGE-1 仍可能给出高分,这正是纯字面指标最大的盲区。
4.6 ROUGE-2(基于 Bigram)计算原理与实例推导:更加关注“局部语序”

4.6.1、ROUGE-2 看的是相邻词对
参考答案:It is cold outside.
模型输出:It is very cold outside.
- Reference Bigram:
It is、is cold、cold outside - Output Bigram:
It is、is very、very cold、cold outside - 最终只匹配 2 个 Bigram
4.6.2、ROUGE-2 怎么算
- Recall = 2 / 3 ≈ 0.67
- Precision = 2 / 4 = 0.50
- F1 ≈ 0.57
相比 ROUGE-1 的 0.89,分数明显下降。
4.6.3、为什么下降这么多?
- ROUGE-2 开始考虑局部语序,比 ROUGE-1 更严格。
- 插入一个
very,不仅新增了词,还会把原来的is cold拆开。 - 所以它更能发现词序变化,但也容易误伤正常的修饰和改写。
一句话总结:
ROUGE-2 用 Bigram 检查“相邻两个词是否一致”,比 ROUGE-1 更关注语序,但也对插词和改写更加敏感。
4.7 ROUGE-L(基于 LCS)-计算原理与实例推导:用最长公共子序列衡量句子结构相似度

4.7.1、ROUGE-L 看什么?
- ROUGE-L 的 L 指 LCS(最长公共子序列)。
- 它不要求词必须连续,只要求前后顺序保持一致。
- 所以它比 ROUGE-2 对中间插词更宽容。
4.7.2、标准算例怎么计算?
Reference:It is cold outside.
Output:It is very cold outside.
标准 LCS 是:It → is → cold → outside,长度为 4。
- Recall = 4 / 4 = 1.0
- Precision = 4 / 5 = 0.8
- F1 ≈ 0.89
4.7.3、和 ROUGE-1 / ROUGE-2 有什么区别?
- ROUGE-1:看单词是否出现,不管顺序。
- ROUGE-2:看相邻两个词,局部语序最严格。
- ROUGE-L:看整句的相对顺序和骨干结构,更有弹性。
一句话总结:
ROUGE-L 就是在两句话里寻找“顺序一致的最长共同词序列”,比 ROUGE-2 更能容忍插词,但仍然不真正理解深层语义。
4.8 字面指标的两大致命漏洞:复读机作弊&乱序假满分 ---- 以及截断匹配(Clipped)修正与局限

4.8.1、漏洞 1:复读也可能“刷高分”
Reference:It is cold outside.
Output:cold cold cold cold
如果只做最朴素的词匹配,4 个 cold 都可能被重复计数,看起来 Precision 很高。
4.8.2、怎么修?——Clipped / Modified Precision
cold在 Reference 中只出现 1 次。- 所以即使 Output 写了 4 次,也最多只算 1 次有效匹配。
- 修正后:Precision = 1 / 4 = 0.25
这样可以有效惩罚“复读机”式退化输出。
4.8.3、但还有一个问题:语序
Output:outside cold it is
- 4 个词都来自 Reference,Unigram 仍可能得到很高分。
- 但句子语序已经完全乱掉。
- 说明 Clipping 能防重复,却不能解决 Unigram 不看词序的问题。
一句话总结:
Clipped Precision 能堵住“重复刷分”的漏洞,但只要还停留在 Unigram 层面,就依然看不懂语序,因此还需要 Bigram、ROUGE-L 或更强的语义评测方法。
4.9 GPT、Alpaca、Vicuna关系图谱:羊驼家族的“师承”与“进化”

4.9.1、四者是什么关系?
- GPT:闭源强模型,提供能力参考,也曾被用来生成训练数据。
- LLaMA:Meta 的基础模型,是 Alpaca、Vicuna 的“底座”。
- Alpaca / Vicuna:都是在 LLaMA 上继续做指令微调得到的对话模型。
4.9.2、Alpaca 和 Vicuna 最大区别
- Alpaca:主要用约 52K 条机器合成指令数据进行 SFT,更像“让 LLaMA 学会听指令”。
- Vicuna:主要使用 ShareGPT 多轮真实对话数据训练,更强调自然对话和多轮交互。
4.9.3、可以怎么理解?
可以把它看成:
GPT → 提供能力/数据参考
LLaMA → 提供基础模型
LLaMA + Alpaca 数据 → Alpaca
LLaMA + ShareGPT 对话 → Vicuna
一句话总结:
GPT 更像“老师”,LLaMA 是“基础学生”,Alpaca 和 Vicuna 则是在同一底座上、用不同教材训练出来的两种指令模型。
五、总计

&spm=1001.2101.3001.5002&articleId=164204525&d=1&t=3&u=00892e090a894d08973391efebef2948)
739

被折叠的 条评论
为什么被折叠?



