news 2026/9/4 7:26:20

大模型微调学习(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型微调学习(二)

二、Lora微调

  • 这页主要说明:对 GPT-3 这种超大模型进行全参数 Fine-tune,成本非常高

  • “噩梦”主要体现在三个方面:

    1. 显存压力大:175B 参数模型全参训练大约需要96 张 V100 32GB才能基本放得下。
    2. 存储成本高:每训练一个任务,都可能需要保存接近1TB 的 Checkpoint
    3. 模型切换慢:不同任务之间切换完整模型,可能需要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:删除。
  • 主要作用是减少重复指令,保持任务多样性。
二、过滤不可执行任务
  • 删除包含imagepicturegraph等内容的指令。
  • 因为纯文本模型无法真正处理图片或图表,避免生成无效训练数据。
三、检查逻辑一致性
  • 如果出现相同/相似 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=1Unigramn=2Bigramn=3Trigram
  • n越大,对局部语序和词组搭配越敏感。

4.3.2、简单例子

句子:The dog lay on the rug

  • 1-gramThedoglayontherug
  • 2-gramThe dogdog laylay onon thethe rug
  • 3-gramThe dog laydog 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 isis coldcold outside
  • Output Bigram:It isis veryvery coldcold 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 的LLCS(最长公共子序列)
  • 它不要求词必须连续,只要求前后顺序保持一致
  • 所以它比 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 则是在同一底座上、用不同教材训练出来的两种指令模型。

五、总计

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 7:26:01

开发急躁症:从情绪失控到系统化问题排查的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 7:25:46

基于OpenCV的车牌识别系统:从原理到实现的完整指南

简介&#xff1a;这是一套面向计算机及相关专业本科生的车牌识别实战项目资源&#xff0c;专为期末大作业与课程设计打造&#xff0c;聚焦图像预处理、车牌定位、字符分割与识别等核心CV任务。资源包共18个文件&#xff0c;含5个Python主程序&#xff08;如main.py、img_recogn…

作者头像 李华
网站建设 2026/9/4 7:23:55

mysql 专业笔记 -- 第 6 章:LIMIT 和 OFFSET

第 6.1 节:LIMIT 和 OFFSET 的关系 考虑以下用户表: id username 1 User1 2 User2 3 User3 4 User4 5 User5 为了限制 SELECT 查询结果集中的行数,可以使用 LIMIT 子句,并配合一个或两个正整数作为参数(零也可)。 带一个参数的 LIMIT 子句 当使用一个参数时,结果集将…

作者头像 李华
网站建设 2026/9/4 7:23:47

一个方括号,代价可能是一万五千倍:三个常见性能陷阱实测

「Python 进阶之路」系列 Day25写在前面 模块五&#xff08;内存管理与性能&#xff09;到今天收官&#xff0c;把三个流传很广、但很少有人真正实测过的性能话题一次讲清楚&#xff1a;字符串 拼接优化的真实边界在哪、"全局变量转局部变量更快"这条老经验现在还成…

作者头像 李华
网站建设 2026/9/4 7:21:15

SolidWorks齿轮齿条配合与运动动画制作全流程实操指南

SolidWorks 里做齿轮齿条配合&#xff0c;很多人的第一反应是“先画一对齿轮”&#xff0c;然后直接添加机械配合里的“齿轮”关系。但这个思路只适用于两个旋转件之间传动。齿轮齿条的本质是把旋转运动转换成直线运动&#xff0c;配合逻辑、装配参考、动画节奏都和普通齿轮副不…

作者头像 李华
网站建设 2026/9/4 7:19:56

电商数据分析方法怎么做?2026最新电商数据分析实战指南

摘要&#xff1a;电商数据分析方法怎么做&#xff1f;从明确目标、采集数据、选择模型到落地优化&#xff0c;四步帮电商运营把分析方法真正用起来&#xff0c;实现从"看报表"到"驱动增长"的升级。 "很多做电商的朋友问我&#xff1a;我后台一堆数据…

作者头像 李华