ai学习笔记(八)
本次主要分享预训练、BERT、GPT相关知识。
传统模型缺陷:1、数据量大。 2、模型迁移能力差。
1. 预训练微调范式
预训练-微调范式(Pre-training and Fine-tuning Paradigm) 是目前深度学习,尤其是自然语言处理(NLP)和计算机视觉(CV)领域中最主流、最成功的开发模式。
传统方法的局限:早期深度学习需要海量标注数据训练专用模型,成本高昂且泛化能力差,如BiLSTM在SQuAD任务上F1值仅70%左右。
预训练优势:通过自监督学习从无标注文本中提取通用语言特征,如BERT使用MLM任务在BooksCorpus上预训练,可节省90%标注成本。
微调价值:在特定任务上微调预训练模型,如医疗NER任务只需数千标注样本即可达到95%准确率,实现高效迁移学习。
简单来说,它的核心思想是:“先通识学习,再专科深造”。
第一阶段:预训练 (Pre-training)
- 目标:让模型学习通用的语言规律、世界知识或视觉特征。相当于让一个学生读完小学到大学的通识教育。
- 数据:使用海量、无标注(或弱标注)的通用数据。例如:整个互联网的文本(维基百科、新闻、书籍、代码)、ImageNet 等大规模图像库。
- 任务:通常是自监督学习(Self-supervised Learning)。模型自己给自己出题自己做,不需要人工打标签。
- NLP 例子:完形填空(Masked Language Modeling,如 BERT)、预测下一个词(Next Token Prediction,如 GPT)。
- CV 例子:遮挡部分图片让模型还原、对比学习(判断两张图是否相似)。
- 结果:得到一个基座模型(Base Model)。它拥有了广泛的知识和强大的特征提取能力,但还不会专门做某项具体任务(比如它知道很多医学词汇,但不会看病;知道法律条文,但不会写判决书)。
预训练如果用有标签的数据效果会更好,但数据标注的成本很大。
第二阶段:微调 (Fine-tuning)
- 目标:让模型掌握特定的下游任务能力。相当于让大学生去读研究生或参加职业培训,专攻某一领域。
- 数据:使用小规模、高质量、有标注的特定领域数据。例如:1万条标注好的情感分析数据、5000个医疗问答对。
- 任务:有监督学习(Supervised Learning)。
- 在基座模型的基础上,增加一个特定的输出层(Head),然后用特定任务的数据更新模型的所有参数(全量微调)或部分参数(高效微调)。
- 结果:得到一个专用模型。它在特定任务上表现优异,可以直接投入使用。
RNN和Transformer区别 Transformer没有”本子“的概念,因为他本身就聪明,只需要记住一下每个词之间的关系,而RNN需要一个词一个词的记住。

2. BERT解析
BERT是一种语言表示模型,BERT代表来自Transformer的双向编码器表示。BERT旨在通过联合调节所有层中的左右上下文来预训练深度双向表示。在理解句子时,离的近的词语天然权重就会大一点。

架构特点:BERT-base采用12层Transformer编码器,每层768维隐藏状态和12个注意力头,总参数量达1.1亿,在GLUE基准测试中平均得分87.1。
双向优势:通过MLM任务学习双向上下文表示,在SQuAD问答任务上F1值达93.2,比单向模型提升27%。
训练数据:使用BooksCorpus(8亿词)和英文维基百科(25亿词)进行预训练,相比GPT仅使用BooksCorpus,数据多样性提升68%。
BERT 是如何训练的?
为了让模型学会“双向”看问题,同时避免模型“偷懒”(直接复制旁边的词),BERT 设计了两个巧妙的预训练任务:
2.1 掩码语言模型 (MLM)
- 做法:随机掩盖输入句子中 15% 的词(用
[MASK]标记替换),然后让模型根据双向上下文去预测被掩盖的词是什么。- 例子:输入 “我 [MASK] 喜欢 吃 苹果”,模型需要预测
[MASK]是 “非常” 还是 “不”。
- 例子:输入 “我 [MASK] 喜欢 吃 苹果”,模型需要预测
- 目的:强迫模型深入理解上下文语境,而不是简单地从左推到右。
- 注意:为了防止预训练(有
[MASK])和微调(无[MASK])的不一致,那 15% 的词并不全换成[MASK],而是:- 80% 换成
[MASK] - 10% 换成随机词
- 10% 保持原词不变
- 80% 换成
bert引入mask预训练和微调不一致的问题怎么理解:
为什么这是个问题?
因为模型在训练时,把大量"脑细胞"用来学习如何处理`[MASK]`这个特殊记号。但到实际应用时,这些"脑细胞"就闲置了,模型需要重新适应没有`[MASK]`的句子。这就好比你教了一个人如何在雨天开车,结果考试的时候天天是晴天,等他自己上路遇到下雨天,他还是不会开。
为什么不全换成[MASK]就可以解决?
想象你在准备驾照考试(微调):
- 如果 100% 用
[MASK]训练:教练只在路牌上贴个黑条遮住字,让你猜是什么。你学会了“看到黑条就猜字”。但真正上路考试时,路牌上没有黑条,全是真字,你可能反而不知道怎么快速提取关键信息了,因为你习惯了依赖“黑条”这个提示。- BERT 的 80-10-10 策略:
- 80% 时间:教练遮住路牌让你猜(标准训练)。
- 10% 时间:教练把路牌上的“停”字改成“行”,让你指出错误并说出正确字(抗干扰训练)。
- 10% 时间:教练不遮也不改,直接指着路牌问你:“确认一下,这个字是不是‘停’?”(模拟实战)。
经过这种混合训练,当你真正上路(微调)时,无论路牌是什么样,你都能熟练地识别和理解,因为你已经习惯了在没有“黑条”提示的情况下处理信息。
2.2 下一句预测 (NSP)
- 做法:给模型两句话 A 和 B。
- 50% 的情况为”正例“,B 确实是 A 的下一句。
- 50% 的情况”负例“,B 是随机抽取的另一句话。
- 让模型判断 B 是否是 A 的下一句(输出 Yes/No)。
- 目的:让模型理解句子与句子之间的逻辑关系(这对问答任务、自然语言推断任务至关重要)。
- 注:后来的研究发现 NSP 任务效果有限,后续模型(如 RoBERTa)去掉了它,但在原始 BERT 中它是核心组成部分。
- ALBERT使用句子顺序预测(SOP)替代NSP,在XNLI任务上准确率提升2.3%。
2.3 架构细节
-
输入层:
- Token Embeddings:词的向量。
- Segment Embeddings:区分句子 A 和句子 B(用于 NSP 任务)。
- Position Embeddings:位置编码(告诉模型词的顺序,因为 Transformer 本身没有顺序概念)。
- 特殊标记:
[CLS]:放在句首,其输出向量代表整个句子的语义表示,常用于分类任务。在[CLS]标记向量上添加分类层,IMDb影评情感分析准确率达94.9%,比LSTM高12.3%。[SEP]:分隔符,用于分开两个句子。[MASK]:掩码标记。
-
模型规模:
- BERT-Base:12 层 Transformer,768 隐藏单元,12 个注意力头,约 1.1 亿参数。
- BERT-Large:24 层 Transformer,1024 隐藏单元,16 个注意力头,约 3.4 亿参数。
原始的BERT模型对于中文的理解能力不强,‘bert-base-chinese’为改进后适应中文的模型。
输入长度限制:
- 原始 BERT 最大支持 512 个 token。处理长文档需要截断或分段,丢失信息。
- 解决:LongBERT, BigBird 等长文本模型。
BERT-base单次推理耗时32ms(TPUv3),通过知识蒸馏技术可压缩至8ms,满足工业级应用需求。
3. GPT解析
GPT(Generative Pre-trained Transformer)是生成式预训练转换器的缩写,是由OpenAI开发的一系列基于Transformer架构的人工智能语言模型。

架构特点:GPT系列采用纯解码器架构,通过掩码自注意力实现单向上下文建模,GPT-3拥有1750亿参数,在零样本学习任务上准确率比GPT-2提升42%。
训练数据:GPT-3使用Common Crawl、WebText等数据集共5000亿词,涵盖编程代码、学术论文等多样化文本类型。
生成能力:在文本续写任务中,GPT-3生成内容的人类评估通过率达89%,比GPT-2高31个百分点。

自回归机制:采用从左到右的序列生成方式,每个token只能关注前面位置的信息,在文本续写任务中连贯性评分达92%。
损失函数:使用交叉熵损失优化下一个词预测,在Wikitext-103语言模型任务上困惑度降至16.4,创历史新低。
3.1 GPT 工作流程
GPT 的生成过程是一个自回归 (Auto-regressive) 的过程,自回归是一种生成策略(一步一步来),而单向注意力机制(即你问题中提到的单向编码器的核心特征)是 GPT 实现这种策略的技术手段,就像滚雪球:
- 输入 Prompt:用户输入“今天天气真”。
- 第一步预测:模型计算概率,发现“好”字出现的概率最高(90%),“错”字很低(1%)。
- 输出并追加:模型输出“好”,并将“好”追加到输入后面。
- 新输入变为:“今天天气真 好”
- 第二步预测:模型基于新的完整序列,预测下一个词。可能是“啊”、“。”或者“适合出游”。
- 循环:重复上述过程,直到遇到结束符
<|endoftext|>或达到长度限制。
3.2 进化历程
- GPT-1 (2018): 证明了“预训练 + 微调”范式的有效性。参数量 1.17 亿。
- GPT-2 (2019): 参数量 15 亿。展示了惊人的零样本(Zero-shot)能力,即不微调也能做很多任务。当时因担心滥用未完全开源。
- GPT-3 (2020): 参数量 1750 亿。引入了In-context Learning (上下文学习),即通过 Prompt(提示词)直接让模型完成任务,无需更新权重。
- GPT-3.5 / GPT-4 (2022-2023):
- 引入了 RLHF (人类反馈强化学习),让模型更听话、更安全、更像人类助手(ChatGPT 的基础)。
- GPT-4 具备了多模态能力(能看图)和更强的逻辑推理能力。
- 后续迭代: 包括 o1 系列(强调推理思维链)等,不断突破边界。
如何提升GPT的生成能力?
- 人类偏好算法 DPO、RLHF。
- GPT生成之前先用BERT过滤理解一遍。
- GPT参数进行领域分解。
4. BERT与GPT对比
BERT 和 GPT 是自然语言处理(NLP)领域的两座里程碑,它们虽然都基于 Transformer 架构,但设计理念、训练目标和适用场景截然不同。
简单来说:BERT 是“理解者”(Encoder),GPT 是“创作者”(Decoder)
| 维度 | BERT | GPT |
|---|---|---|
| 核心架构 | Encoder-only (仅编码器) | Decoder-only (仅解码器) |
| 注意力机制 | 双向注意力 (Bidirectional) 可以看到上下文的所有词(左边+右边)。 | 单向/因果注意力 (Causal/Masked) 只能看到左边的词(过去的信息),严禁看右边。 |
| 训练目标 | MLM (掩码语言模型) 随机遮盖部分词(如 [MASK]),让模型根据上下文猜出被遮住的词。(类似做“完形填空”) | Next Token Prediction (下一词预测) 给定前 N 个词,预测第 N+1 个词。 (类似做“句子接龙”) |
| 输入结构 | 复杂 需要特殊标记: [CLS], [SEP], [MASK]。需构造句子对模板。 | 简单 纯文本流。 通常只需要一个结束符 ` |
| 应用场景 | 长文本分类、NER等理解任务,F1值普遍90%+。 | GPT在创作、对话等生成任务中人类评估通过率89%。 |
5. 微调
微调是指:在已经预训练好的大模型基础上,使用特定任务的小规模数据集,继续训练模型,使其适应特定场景的过程。
- 预训练模型:拥有通用的语言能力(知道“苹果”是一种水果,也知道“苹果”是一家公司),但不知道如何具体回答你的业务问题。
- 微调数据:针对特定任务标注的数据(例如:1000 条“用户投诉”和对应的“分类标签”)。
- 结果:模型保留了通用知识,同时学会了特定任务的规则和风格。
5.1 微调流程
第一步:准备数据
这是最关键的一步。你需要收集特定任务的数据,并将其格式化为模型能理解的格式。
- 分类任务:
{"text": "这电影太棒了", "label": "正面"} - 生成任务:
{"prompt": "写一封辞职信", "completion": "尊敬的领导..."} - 问答任务:
{"question": "公司报销流程?", "answer": "请填写表单A..."}
第二步:选择策略
- 全量微调 (Full Fine-tuning):更新模型中所有的参数。
- 优点:效果通常最好。
- 缺点:显存要求极高,计算成本巨大,且容易“灾难性遗忘”(忘了通用知识)。
- 参数高效微调 (PEFT, Parameter-Efficient Fine-Tuning):只更新极少部分参数,冻结大部分主干网络。
- LoRA (Low-Rank Adaptation):目前最主流的方法。它在原有权重旁边加了一组很小的“旁路矩阵”,只训练这个小矩阵。
- 优点:显存占用极低(普通显卡也能跑),训练快,不易遗忘,且可以针对不同任务训练多个 LoRA 模块灵活切换。
参数的高效微调主要有LoRA、Prefix/Prompt turning、Adapt三种方法


第三步:训练过程
模型读取你的专用数据,计算预测值与真实值的误差(Loss),然后通过反向传播更新权重。
- 通常只需要训练 1~3 个 Epoch(把所有数据过 1-3 遍)。
- 如果训练太久,模型会“死记硬背”训练数据(过拟合),导致在新数据上表现变差。
第四步:评估与部署
用没见过的测试集验证效果,确认无误后,将微调后的模型部署到生产环境。
5.2 早停
早停 (Early Stopping) 是机器学习和深度学习中一种非常经典且高效的正则化技术,主要用于防止模型过拟合 (Overfitting)。
简单来说,它的核心思想是:“见好就收”。在模型训练过程中,一旦发现在验证集上的表现不再提升(甚至开始变差),就立即停止训练,而不是非要跑完预设的所有轮数(Epochs)。
早停机制通常依赖两个数据集:
- 训练集 (Training Set):用来更新模型参数。
- 验证集 (Validation Set):用来监控模型泛化能力(不参与梯度更新)。
早停执行流程:
- 设定参数:
patience(耐心值):允许验证集指标不提升的最大轮数(例如 5 轮)。delta(最小改进量):认为指标有显著提升的最小阈值(可选)。monitor(监控指标):通常监控val_loss(验证集损失) 或val_accuracy(验证集准确率)。
- 每轮训练后:
- 在验证集上跑一次评估。
- 如果当前指标优于历史最佳指标:
- 更新“历史最佳”。
- 保存当前模型权重(这步很重要!因为后面可能会变差)。
- 重置计数器
counter = 0。
- 如果当前指标没有提升:
- 计数器
counter += 1。
- 计数器
- 触发停止:
- 当
counter > patience时,立即终止训练。 - 恢复权重:将模型权重回滚到之前保存的“历史最佳”状态。
- 当
6. 模型相关知识
6.1 模型训练调优
超参数优化:通过网格搜索确定最佳学习率(2e-5)、batch size(32)、warmup steps(500),相比默认配置可提升1-3%准确率。
加速技术:混合精度训练(FP16)使迭代速度提升60%,梯度累积在显存不足时保持等效batch size,内存占用减少45%。
混合精度训练:在训练过程中,同时使用 16 位浮点数 (FP16 或 BF16) 和 32 位浮点数 (FP32) 来表示模型参数和进行计算,从而在保证模型收敛精度的前提下,大幅提升训练速度并减少显存占用。简单来说,就是“能省则省,该准则准”。
二次预训练五步走:
- 预训练权重
- 数据准备
- 后训练的配置 【优化】
- 省存(量化)、提速(正则化)
- 评估->指标&损失函数->后台可视化的图像(天鹅湖网站)
6.2 常见问题

过拟合处理:增加dropout(0.3)、添加权重衰减(0.01)、早停策略(patience=2)可使验证集波动降低60%。
训练震荡:学习率warmup(10%训练步数)配合线性衰减,使loss曲线平滑度提升40%。
显存不足:采用梯度检查点技术可使最大batch size扩大3倍,模型量化(FP16)减少60%显存占用。
部署优化:使用ONNX格式导出模型,推理速度提升35%;TensorRT优化后延迟降至8ms/样本。
6.3 模型评估策略
这三者构成了机器学习模型从实验室走向生产环境的完整验证链条。它们的关系可以概括为:
- 离线评估 (Offline Eval):在实验室里“模拟考试”,快速筛选,成本低,但无法完全反映真实世界。
- 在线评估 (Online Eval):在真实战场上“实战演习”,数据最真实,但成本高、风险大。
- A/B 测试 (A/B Testing):在线评估的黄金标准方法,通过科学对照实验,量化新模型带来的业务价值。
| 维度 | 离线评估 (Offline) | 在线评估 (Online) | A/B 测试 (A/B Testing) |
|---|---|---|---|
| 数据来源 | 历史静态数据 | 实时真实用户数据 | 实时真实用户数据 (分组对比) |
| 评估指标 | 准确率、F1、BLEU 等 | CTR、GMV、延迟等业务指标 | 指标增益 (Lift)、统计显著性 (P-value) |
| 成本 | 低 | 高 | 高 (需维持多套服务) |
| 风险 | 无 | 高 (可能损伤业务) | 中 (通过小流量控制风险) |
| 速度 | 快 (小时级) | 慢 (天/周级,需积累数据) | 慢 (需等待统计显著) |
| 主要目的 | 筛选:剔除烂模型,验证算法逻辑 | 监控:确保系统稳定,数据分布正常 | 决策:科学判定新模型是否值得全量上线 |
| 局限性 | 无法模拟真实反馈,存在分布偏移 | 噪音大,难归因 | 实验周期长,流量分割复杂 |
6.4 可解释性分析
- 写技术分析文档
- 可视化
- 特征化工程
- 对抗样本
- 错误分析
更多推荐

所有评论(0)