大模型原理与技术知识要点整理
本文档总结大模型原理与技术的核心知识点,涵盖基础概念、模型架构、训练技术、工程应用等方面。
一、基础概念
1.1 训练相关术语
Epoch(轮次)
- 定义:当模型完整处理完预训练语料库(比如几十亿个句子)一遍,就完成了一个 Epoch
Batch(批次)
- 定义:每次向模型输入一批文本数据(比如 256 个句子),计算损失并更新一次参数
反向传播(Backpropagation)
- 定义:利用链式法则,从输出层开始,逐层向前计算损失函数对每一层参数的偏导数(梯度)
- 作用:告诉每个参数应该怎么调整
1.2 学习范式
有监督学习(Supervised Learning)
- 使用有标签的数据来训练模型
- 数据由特征和标签组成
无监督学习(Unsupervised Learning)
- 使用没有标签的数据来训练模型
- 模型需要自己挖掘数据内在的结构
自监督学习(Self-Supervised Learning)
- 定义:巧妙伪装成有监督学习的无监督学习
- 特点:数据本身没有人工标签(无监督学习的特点),但能从数据内部自动构造出标签(有监督学习的特点)
1.3 常见问题
过拟合(Overfitting)
- 定义:模型在训练数据上的误差(经验风险)非常低,但在未见过的测试数据上的误差(泛化风险)却很高
- 原因:
- 数据量过少
- 模型太复杂
- 训练时间过长
- 防止方法:
- 增加数据量
- 降低模型复杂度
- 正则化(L1、L2)
- 早停(Early Stopping):验证集效果不升反降时停止训练
- Dropout:随机丢弃神经元,不过度依赖某些特征,分布式利用所有信息
偏置项(Bias Term)
- 定义:每个线性变换层通常包含两个可训练的参数集合:权重 W 和偏置 b
- 计算公式:
- 作用:
- 平移激活函数:偏置允许神经元的输出在输入为零时仍有一个非零的基线,相当于给决策边界提供一个平移自由度
- 拟合任意线性关系:在单变量线性回归中,模型 中的 b 就是偏置,它让直线可以上下移动,从而更好地拟合数据
- 如果没有偏置,所有线性变换都必须经过原点,这会限制模型的表达能力
分类头(Classification Head)
- 定义:将提取到的特征映射到具体类别上的模块,负责输出最终的分类概率
- 组成:
- 一个或多个全连接层(线性层)
- 激活函数(如 ReLU)
- 最后的 softmax 或 sigmoid 层(用于输出概率)
- 作用:
- 特征到类别的映射:将前面网络提取的高维抽象特征转化为各个类别的分数
- 维度变换:将特征维度(例如 768 维)变换为类别数(例如 10 类)
流形(Manifold)
- 流形假设:机器学习中的数据往往是高维的,但真正重要的变化因素(如物体的角度、光照、形状)可能只有少数几个维度(比如几十维)
- 这些高维数据点实际上聚集在一个低维流形附近
1.4 文本特征提取
词频(Term Frequency, TF)
- 定义:某个词语在当前文档中出现的频率
逆文档频率(Inverse Document Frequency, IDF)
- 定义:衡量一个词语在整个文档集合中的稀有程度
- 计算公式:
- 特性:
- 如果一个词在所有文档中都出现,则逆文档频率较低,说明这个词不能很好地代表这些文档的主题
- 罕见词的 IDF 值较高
二、语言模型
2.1 模型发展历程
- 基于规则的模型
- 基于统计的模型
- 基于学习的模型
语言模型的概率预测与上下文、语料库息息相关
2.2 机器学习过程
在某种学习范式下,基于训练数据,利用学习算法,从受归纳偏置限制的假设类中选取出可以达到学习目标的假设,该假设可以泛化到未知数据上。
关键要素:
- 训练数据 S:数量和质量
- 假设类 H:所有可能机器学习模型的集合
- 归纳偏置:限制对某些假设进行选择
- 半空间(SVM):最大化训练样本到超平面距离,让两类分的尽量开
- 神经网络:
- CNN:局部感受野
- RNN:时间序列
- Transformer:稀疏注意力
- 学习范式:监督学习、无监督学习、强化学习。大语言模型通常采用自监督学习范式
- 学习目标:不同机器学习范式具有不同的学习目标
- ERM(经验风险最小化):最常见的学习目标之一,旨在最小化模型在训练集上的错误
- 损失函数:用以衡量模型在对应样本上的错误程度。大多数损失函数是错误程度的代理损失(Surrogate Loss)。损失函数在训练集上的加权和成为训练损失(Training Loss)
2.3 预训练任务
定义:在大规模无标签文本数据上设计的自监督学习目标,让模型从数据中自动学习通用的语言表示。这些表示可以迁移到下游任务(分类、问答、翻译)中,显著提升性能。
三、神经网络架构
3.1 RNN(循环神经网络)
定义:循环神经网络(Recurrent Neural Network,RNN)是一类网络连接中包含环路的神经网络总称。
特点:
- 串行输入
- 前面的元素被编码成隐状态,并叠加到当前的输入上面
- 对历史信息进行考虑
- 呈现出螺旋前进的模式
问题:
- 设计大量的矩阵乘法操作,容易引发梯度衰减或者梯度爆炸的问题
3.2 CNN(卷积神经网络)
定义:卷积神经网络(Convolutional Neural Network,CNN)是专门用于处理具有网格结构数据的深度学习模型,最典型的应用就是图像,自动从图像中提取出从低级到高级的特征。
核心组件:
-
卷积层(Convolutional Layer)
- 卷积核(Filter/Kernel):一个小的权重矩阵,它在输入图像上滑动,对覆盖的局部区域进行点积运算,生成一个称为”特征图”的输出
- 局部连接:每个神经元只连接输入的一小块区域(感受野),而不是全图。这大大减少了参数数量
- 权重共享:同一个卷积核在整个图像上滑动时,它的权重是固定的。这意味着无论”边缘”出现在图像的哪个位置,同一个卷积核都能检测到它。这赋予了 CNN 平移不变性
-
激活函数
- 卷积之后会加一个非线性激活函数,如 ReLU(线性整流单元)
- 作用:给模型引入非线性,让它能学习更复杂的模式
-
池化层(Pooling Layer)
- 对特征图进行降采样,减少数据维度,同时保留重要信息
- 最大池化(Max Pooling):取池化窗口内的最大值
- 平均池化(Average Pooling):取平均值
- 作用:不仅减小了计算量,还让模型对微小的位置变化更鲁棒
-
全连接层(Fully Connected Layer)
- 提取出的高级特征会被展平(flatten),然后送入一个或多个全连接层
- 最终输出分类结果(比如”是猫”或”不是猫”)
3.3 Transformer
核心思想
自注意力机制:对于句子中的每个词,它会计算它与句子中所有词的相关程度(注意力分数),然后把这些相关词的信息加权融合到当前词的表示中。
架构组成
一个标准的 Transformer 模型由两部分组成:编码器(Encoder)和解码器(Decoder)。
- BERT:只用编码器
- GPT:只用解码器
- T5、BART:同时选用 Transformer 的 Encoder 和 Decoder 部分
编码器结构
1. 输入嵌入 + 位置编码
- 嵌入:把每个词(如”混凝土”)转换成一个固定长度的向量(词的初始表示)
- 位置编码:因为 Transformer 不像 RNN 那样有天然的先后顺序,所以必须额外告诉它每个词在句子中的位置。位置编码就是给每个词向量加上一个表示位置的信号
2. 多头自注意力(Multi-Head Self-Attention)
- 查询(Query):当前词想去找谁有关系
- 键(Key):每个词能提供什么信息
- 值(Value):每个词的实际信息内容
形象比喻:想象成每个参会者(词)都会举一个牌子,上面写着自己的身份(Key)和自己想找的人(Query),同时手里拿着自己的发言稿(Value)。然后大家同时互相打量,谁手里的 Query 和别人的 Key 匹配度高,就说明他们之间关系紧密,会把那个人的 Value 多吸收一点过来。
“多头”的意思是,让模型同时进行多组这样的匹配,每组关注不同的关系(比如一组关注语法关系,一组关注实体关系),最后把所有头的结果拼起来。
3. 前馈网络(Feed-Forward Network)
- 经过自注意力后,每个词已经融合了上下文信息,但还需要进一步加工
- 前馈网络就是一个简单的全连接神经网络,对每个词独立地进行非线性变换,提取更高阶的特征
4. 残差连接 & 层归一化
- 残差连接:把输入直接加到输出上(类似于”如果新学的知识没用,我就保持原来的知识”),有助于训练深层网络
- 层归一化:对每一层的数据进行标准化,让训练更稳定、更快
优点
- 并行计算:所有词可以同时计算注意力,不再像 RNN 那样一步步走,训练速度大幅提升
- 长距离依赖:无论两个词隔得多远,注意力机制都能直接计算它们的关系,解决了 RNN 的”健忘”问题
- 可扩展性:这种结构非常适合堆叠更多层、使用更多数据,从而涌现出强大的能力(“涌现能力”)
- 通用性:编码器擅长理解(BERT),解码器擅长生成(GPT),编码器-解码器擅长翻译(原始 Transformer)
缺点
- 输入窗口长度有限
- 模型规模随输入序列长度平方次增长,处理长序列时计算成本高
3.4 Mamba
基于选择状态空间模型(Selective State Space Model, SSM)
- 在状态选择模型基础上添加选择机制,确保可以高效处理长序列
- 可以达到与 Transformer 匹敌的模型能力
- 状态空间模型(SSM):n 阶系统用 n 个 1 阶等式进行矩阵表达
四、采样方法
4.1 Top-K 采样
定义:在每轮预测中都选取 K 个概率最高的词作为本轮候选词集合,然后依照概率分别对这些词进行采样。
特点:
- 当选词的分布方差较大时,可能会选到概率较小、不符合常理的词,从而胡言乱语
- 当候选词方差较小的时候,固定尺寸的候选集无法容纳更多的具有相近概率的词,导致候选集丰富度不够
4.2 Top-P 采样(Nucleus Sampling)
定义:设定概率阈值 p 来对候选集进行选取。
优点:
- 避免选到概率较小、不符合常理的词,减少胡言乱语
- 还可以容纳更多相近概率的词,改善枯燥无味
4.3 Temperature(温度参数)
定义:控制随机性的参数
- Temperature 越大:越接近均匀分布,随机性越大
- Temperature 越小:随机性越小,输出更加确定
五、模型架构与训练
5.1 主流架构对比
| 模型 | 架构类型 | 特点 |
|---|---|---|
| BERT | 双向编码器 | Encoder,双向语言模型 |
| GPT、LLaMA | 自回归解码器 | Decoder,自回归语言模型 |
| T5、BART | Encoder-Decoder | 同时使用两部分 |
5.2 预训练任务
BERT 预训练任务
1. 掩码语言模型(Masked Language Modeling, MLM)
- 随机掩盖输入序列中的部分 token,让模型根据上下文预测被掩盖的 token
- 让模型学习双向的上下文信息
掩码策略:
- 静态掩码:数据预处理阶段对每个训练样本随机选择 15% 的 token 进行掩码
- 80% 替换为 [MASK]
- 10% 替换为随机 token,让模型学会纠错
- 10% 不变,让模型被迫在 token 不被掩盖的情况下也尝试预测它,让模型学会即使没有特殊标记,也需要关注上下文
- 这个掩码在整个训练过程中固定不变,即每个样本在每个 epoch 中看到的被掩盖位置都是相同的
2. 下一句预测(Next Sentence Prediction, NSP)
- 判断两个句子是否是原文中的连续句子
- 帮助模型理解句子间的关系
RoBERTa 预训练任务
只有动态掩码:
- 在每次向模型输入序列时,动态地生成新的掩码
- 意味着在不同 epoch、甚至不同 batch 中被掩盖的位置可能是不同的
5.3 模型规模与涌现
参数与数据的关系:
- 模型参数和训练数据同等重要,它们共同决定了一个模型的能力上限
- “Chinchilla 最优” 的黄金比例:大约每 20 个训练词元对应 1 个模型参数
涌现能力(Emergent Abilities):
- 定义:当模型参数规模未能达到某个阈值时,模型基本不具备解决此类任务的任何能力,体现为其性能和随机选择答案效果相当;但是当模型规模跨过阈值,LLM 模型对此类任务的效果就出现突然的性能增长
涌现能力的可能原因:
-
任务评价不够平滑
- 只要有任何小错误都给 0 分
- 只有当模型足够大,输出片段全部正确才能得分
- 因为指标不够平滑,所以不能体现 LLM 其实正在逐步改善任务效果这一现实,看起来就是”涌现能力”这种外在表现
-
多步骤任务
- 有些任务由若干中间步骤构成
- 随着模型规模增大,解决每个步骤的能力也在逐步增强
- 但只要有一个中间步骤是错的,最终答案就是错的
- 于是也会导致这种表面的”涌现能力”现象
六、人机接口:从 In Context Learning 到 Instruct
6.1 概念对比
- Instruct:ChatGPT 的接口方式,人以自然语言给出任务的描述,比如”把这个句子从中文翻译成英文”
- Zero-Shot Prompting:就是现在的 Instruct 的早期叫法。以前大家习惯叫 zero shot,现在很多改成叫 Instruct
- 早期实际上就是不知道怎么表达一个任务才好,于是就换不同的单词或者句子,反复在尝试好的任务表达方式
- 这种做法目前已经被证明是在拟合训练数据的分布
- In Context Learning 和 Few-Shot Prompting:意思类似,就是给 LLM 几个示例作为范本,然后让 LLM 解决新问题
6.2 激发 LLM 推理能力
1. Zero-Shot Chain of Thought(直接在问题上追加辅助推理 Prompt)
- 也被称为 zero-shot CoT
- 具体而言,分为两个阶段:
- 第一阶段:在提问的问题上追加”Let’s think step by step”这句提示语,LLM 会输出具体的推理过程
- 第二阶段:在第一阶段的问题后,拼接 LLM 输出的具体推理过程,并再追加 Prompt = “Therefore, answer (arabic numerals) is”,此时 LLM 会给出答案
2. Few-Shot Chain of Thought(基于示例的思维链 Prompting)
- CoT 的主体思想:为了教会 LLM 模型学会推理,给出一些人工写好的推理示例,示例里把得到最终答案前,一步步的具体推理步骤说清楚
- 这些人工写的详细推理过程,就是思维链 Prompting
3. Self-Consistency(自洽性)
- 改进技术,它要求 LLM 输出多个不同的推理过程和答案
- 然后采用投票的方式选出最佳答案
七、Prompt 工程
7.1 基本概念
Prompt 定义:用于指导生成式人工智能模型执行特定任务的输入指令,这些指令通常以自然语言文本的形式出现。
核心目的:清晰地描述目标任务,并适当提供解决该任务所需的辅助信息
标准的 Prompt 包括:
- 任务说明
- 问题
- 上下文
- 输出格式
Prompt 工程的技术包括:
- 上下文学习(In-Context Learning)
- 思维链(Chain of Thought, CoT)
7.2 上下文学习(In-Context Learning)
定义:构造包含具体的指令以及相关上下文信息的详细清晰 Prompt,要求大语言模型按命令输出。通过任务说明、演示示例等信息引导模型输出,快速适应新任务,使语言模型即服务成为可能。
原理
大语言模型在预训练过程中从大量文本中学习潜在概念。当前运用上下文学习进行推理时,其借助任务说明或演示示例锚定预训练期间习得的相关概念,从而进行上下文学习,并对问题进行预测。
分类
- Zero-Shot(零样本)
- One-Shot(一个样本)
- Few-Shot(少量样本):示例越多模型效果越好
示例选择
主要依据:相似性、多样性
选择策略:
-
直接检索
- 检索器依据特定的评分标准对示例进行排序,然后选取排名靠前的 top-K 个示例
- 代表方法:KATE
- 优点:简单有效
- 缺点:同质化严重
-
聚类检索
- 把所有示例划分为 K 个簇,让相似的示例聚集在一起
- 而后从每个簇中选取最为相似的示例,最终获取 K 个示例
- 代表方法:self-Prompting
- 优点:能提升多样性
- 缺点:可能存在有些簇与问题毫不相关,导致选不出相关示例
-
迭代检索
- 检索过程是迭代的,下一个示例的选择依赖当前的问题和已选的示例
- 代表方法:RetICL
- 优点:兼顾相似性和多样性
- 缺点:计算复杂、多轮迭代、速度慢成本高
性能影响
1. 预训练数据
- 领域的多样性
- 任务的多样性
- 训练数据的分布特性
2. 预训练模型
- 参数规模
3. 演示示例
- 示例格式:
- 简单任务:输入-标签格式
- 复杂任务:在输入和标签中添加中间推理步骤会有更好效果
- 输入-标签映射
- 示例数量和顺序
7.3 思维链(Chain of Thought, CoT)
定义:在提示中嵌入一些中间推理步骤,引导大语言模型模拟人类解决问题的思考过程,增强推理能力。
分类
1. 按部就班(Sequential Thinking)
- 强调逻辑的连贯性和步骤的顺序性
- 问题:当问题复杂,解决路径多时,无法反复选择以及回溯,导致能力受限
变体:
- 标准 CoT:手工构造一步一步推理回答问题的例子,作为示例放入 Prompt,引导模型一步一步生成推理步骤
- Zero-Shot CoT:通过特定提示,自动化构造一步一步推理回答问题的例子,“Let’s think step by step”。无需人工编写样本示例,但效果不如标准 CoT
- Auto CoT:从问题库中检索多个相关问题,并利用 Zero-Shot CoT 针对每个问题自动化构造推理示例
2. 三思后行(Deliberate Thinking)
- 决策过程中融入审慎和灵活性
- 每一步评估当前情况,判断是否需要调整方向
变体:
- Tree of Thoughts(ToT,思维树):从拆解、衍生、评估、搜索四个方面进行构造
- Graph of Thoughts(GoT,思维图):通过特定提示,自动化构造一步一步推理回答问题的例子
3. 集思广益(Diverse Thinking)
- 多脉络、多解法,从中选择最优答案
变体:
-
Self-Consistency(自洽性):
- 引入多样性的推理路径,提取选择最一致的答案,提高模型的推理准确性
- 但非定量的开放性问题,无法统计频率
步骤:
- 推理路径生成:在随机采样策略下,使用 CoT 或 Zero-Shot CoT 引导大模型针对待解决问题生成一组多样化的推理路径
- 汇总答案:收集每个推理路径的答案,统计每个答案的频率
- 选择答案:选择频率最高的答案作为最终答案
-
Universal Self-Consistency:
- 利用 LLMs 自身选择最一致答案,支持更多种任务,无需答案提取过程
- 在多任务中性能良好且输出匹配度高,对顺序鲁棒
- 大模型来统计、选择答案
- 适合自由形式的答案,例如文本摘要任务
GPT-o1
OpenAI 在训练和推理时深度融合思维链技术,提出 GPT-o1。在回答问题前会花费更多时间来思考,擅长处理科学、编程、数学等领域的复杂问题。
1. 训练时的大规模强化学习
谷歌 SCoRe 两阶段学习方法:
- 阶段 1:针对模型第一次尝试任意的回答进行微调,使第二次回答更好
- 阶段 2:设计面向自我纠正的多轮强化学习策略优化模型,进一步增强模型能力
2. 测试时的大规模搜索采样
奖励模型指导大规模搜索,探索多种思维片段,从而增大测试时计算,显著增强模型复杂推理能力
7.4 Prompt 技巧
规范:任务说明、上下文、问题、输出格式
1. 任务说明 一个清晰、具体的任务说明能够确保模型准确理解任务要求,产生符合预期的输出。
- 明确的动词:能够清晰表达动作,如”判断”、“分类”,避免”处理”、“操作”等模糊动词
- 具体的名词:定义任务的输出或目标
- 简明扼要:简洁且直接,避免冗长和复杂的句子,让模型快速抓住任务核心要求
2. 上下文 一个丰富且清晰的上下文能够显著提升模型的回答准确率。
- 丰富:背景信息、演示示例、对话历史
- 清晰:避免包含冗余或者不必要的信息
3. 问题
- 排版清晰:
- 一致的分隔符
- 合理使用空白和缩进区分不同内容块
- 清晰的标题和子标题
- 问题分解:分解为更小更易于理解的子问题,逐一回答,汇总最终答案
- 善用追问:
- 深入追问
- 扩展追问
- 反馈追问
- 使用 CoT:
- 复杂推理任务
- 模型能力考量(预训练阶段有推理指令微调的 instruct 模型无 CoT 也可以)
- 善用心理暗示:积极的心理暗示也可以激发模型潜力
- 角色扮演:
- 设定一个详尽的角色,可以引导模型的输出朝向所需的方向,从而提供高质量回答
- 包含具体属性、职责、知识和技能
- 情景带入:将特定情境下所需的专业知识、历史背景等信息嵌入到模型的响应中
4. 输出格式 规范输出格式确保输出可用性。
- 明确输出格式:便于下游任务直接提取和使用生成内容
- 常用格式:JSON、XML、HTML、Markdown、CSV 等
- 如果格式十分具体,可以提供输出格式的具体示例
7.5 长度压缩
使用各种技巧后,Prompt 内容的长度和复杂度随之提升,越长的 Prompt 导致模型推理速度减慢和推理成本上升。
LLMLingua:在确保模型性能不受影响的前提下,尽可能压缩 Prompt 长度。
- 这是一个充分训练的小模型
- 检测并提出 Prompt 中的非必要 token
- 最小化损失的同时提升最高 20 倍的压缩率
7.6 Prompt 应用
1. Text-to-SQL
- 自然语言转化为相应的结构化查询语句
- 代表:C3
2. 代码生成
- 自然语言转化为代码
- 代表:alphaCodium
3. 数据合成
- Self-Instruct
- Evol-Instruct(指令评估基础上深度演化、广度演化、淘汰演化)
4. 搜索引擎
- Perplexity
- Copilot
5. 智能体(Agent)
- 定义:自主感知环境并采取行动以实现特定目标的实体
组件:
- 配置模块:角色
- 记忆模块:知识与交互记忆的存储中心
- 计划模块:任务规划器,例如思维链技术分解任务
- 行动模块:借助外部工具完成任务
八、参数高效微调(PEFT)
8.1 概述
问题:下游任务适配,预训练模型难以适配下游任务。
全量监督微调:需要更新所有模型参数,会消耗大量存储和计算资源。
参数高效微调(Parameter-Efficient Fine-Tuning, PEFT):避免更新全部参数,在保证微调性能的同时,减少更新的参数量和计算开销。
特点:
- 计算效率高
- 存储效率高
- 适应性强
8.2 指令微调(Instruction Tuning)
构建指令数据集
指令数据集包含:指令(任务描述)、示例、问题、回答
构建方法:
- 数据集成
- 大语言模型生成
8.3 PEFT 方法分类
方法一:参数附加方法
通过增加训练新的附加参数或模块对大语言模型进行微调。
按照位置分类:
1. 加在输入
- 额外参数附加到输入嵌入中(软提示)
- Prompt-Tuning
- 优点:内存效率高、多任务能力、缩放特性
2. 加在模型
- 额外的参数或模型添加到训练模型的隐藏层中
- Prefix-Tuning:加到输入嵌入层和注意力模块(K、V)中
- Adapter-Tuning:
- 每个多头注意力层和全连接层后插入新的可学习神经网络模块(适配器模块)
- 采用瓶颈(Bottleneck)结构:一个上投影矩阵、一个非线性映射、一个下投影矩阵组成的全连接模块
3. 加在输出
-
Proxy-Tuning:
- 一些模型本身巨大,无法放入消费级 GPU,或者模型本身不开源对用户是一个黑盒,则可以放在输出上
- 代理微调用轻量级的解码时(Decoding-time)算法
- 只需要微调较小的专家模型,且只需要访问大规模语言模型的输出词汇表预测分布,来实现定制化调整
- 即让小模型纠正大模型的输出
步骤:
- 从代理模型 M、专家模型 M+、反专家模型 M-中获取相应的输出分数 、、
- 通过 来调整输出分数
- 使用 softmax() 对其归一化,得到输出概率分布
- 在该分布中采样获得下一个词的预测分布:softmax(S)
方法二:参数选择方法(大模型内子集微调)
注意:大模型用的不多,微调的参数选多少、选哪些都是困难。
选择模型中的部分参数进行微调,分为两类:
1. 基于规则的方法
- 领域专家的知识经验指导模型调整
- BitFit:调整偏置项、任务特定的分类头。仅在 BERT、RoBERTa 等小规模模型上进行验证性能,更大规模模型上性能未知
- PaFi:选择最小绝对值的模型参数作为可训练参数,即调整在任务中不发挥作用的参数
2. 基于学习的方法
- 算法自动识别和选择
- 代表方法:
- Child-Tuning:通过梯度掩码矩阵策略实现仅对选中的子网络进行梯度更新,而屏蔽子网络梯度以外的梯度,实现对微调参数的选择
- Fish-Dip
- LT-SFT
- SAM
方法三:低秩适配方法(Low-rank Adaptation Methods)
LoRA:通过低秩矩阵替代原有大矩阵,是最为广泛的方法。
核心思想:通过低秩矩阵近似原始权重更新矩阵,并仅微调低秩矩阵,大幅降低模型参数。
理论基础:
- 本征维度假设:在预训练语言模型微调时,仅在一个低维子空间中进行参数更新,也能实现与完整参数更新类似的性能
- 本征维度:可以是模型达到预期效果的最小参数子空间的维度,通过逐渐增加子空间维度,并确定模型性能达到预设阈值时的维度来测量本征维度
做法:
- 将 参数更新矩阵低秩分解为一个 的矩阵和一个 的矩阵()
- 冻结原模型参数,仅微调这两个小矩阵
- LoRA 学习两个低秩矩阵 B 和 A,近似原始参数更新矩阵
- 通常施加在 Attention 层或者 FFN 层的投影矩阵上
- 在推理阶段 LoRA 可以直接合并回原模型,不增加额外代价
影响因素:
-
权重初始化(如何初始化 AB)
- B 零初始化,保证 BA 初始状态为 0,保持在原始模型状态
- A 高斯分布(正态分布)初始化,保证 A 不会太大或存在偏移,提高稳定性
-
秩(r)
- 简单任务,低秩就能保持不错性能
- 复杂任务,高秩表现更好
-
施加位置
- 只放一个位置的话,FFN 效果最好
- 而放的位置种类越多,效果越好(Q、K、V、FFN 全放)
内存占用: 包括权重、激活、梯度、优化器四部分:
- 权重内存:用于存储模型权重所需内存。LoRA 负优化,因为引入了新矩阵,但很小
- 激活内存:前向传播内存是中间激活带来的显存占用。LoRA 负优化,因为引入了新矩阵,但很小
- 梯度内存:反向传播期间需要来保存梯度的内存。LoRA 优化,只需要计算低秩矩阵的反向传播
- 优化器内存:保存优化器状态的内部存储。LoRA 优化,只需要计算低秩矩阵
优点:
- 参数效率
- 插件化特性
- 跨任务泛化
LoRA 改进:
-
性能改进 - AdaLoRA:
- 不同模块和层中的权重矩阵重要性不同
- FFN 比 Attention 有更好性能
- 顶层权重矩阵比底层权重矩阵更重要
- 将参数更新矩阵参数化为奇异值分解(SVD)的性质,然后进行奇异值剪枝,越重要的参数其秩越大
- 缺点:增加了计算量
-
任务泛化 - LoRAHub:
- 因为 LoRA 低秩、插件化互不干扰,就有了组合的可能性
- 建立一个 LoRA 插件库
- LoRAHub 包括组合、适应
-
训练改进 - QLoRA:
- 通过量化技术把原始大模型量化成 4-bit 存储
- 在权重值最密集的区域分配更多的量化刻度,从而在极低的比特数下,最大限度地保留了原始信息
- 双重量化:在对模型权重进行分块量化时,每个块都会产生一个”缩放因子”(scale),这些缩放因子本身也需要存储。QLoRA 发现,这些缩放因子之间也存在规律,于是对这些缩放因子再进行一次 8-bit 量化
-
推理改进 - S-LoRA:
- 高效地在同一个 GPU 上,同时为成千个针对不同任务的 LoRA 适配器提供服务
- LoRA 只能串行加在适配器
- S-LoRA 在一个批次中,同时处理指向不同 LoRA 适配器的多个请求
九、模型编辑
9.1 概述
定义:针对特定知识点对模型进行编辑,其旨在修正大语言模型使其输出期望结果,同时不影响其它无关输出。
模型编辑的性质:可以归纳为五个方面
- 准确性:编辑后模型在目标知识上的准确性
- 泛化性:编辑后的知识能够泛化到相关场景
- 可迁移性:编辑能力可以迁移到新任务
- 局部性:编辑不影响其他无关知识
- 高效性:编辑过程计算和存储开销小
9.2 方法分类
方法一:外部拓展(外置知识体)
1. 知识缓冲法
包括:
- 编辑缓存:存储知识
- 门控单元:检查问题与编辑缓存的知识是否匹配,判断送入推理模块还是原始模型
- 推理模块:得出答案
代表方法 - SERAC:
- 新知识以问题答案对的方式保存在编辑缓存模块
- 问题通过范围分类器判断是否是新知识
- 是新知识则利用反事实模型预测输入的问题
- 否则用原模型
2. 附加参数法
CALINET:
- 在最后一个全连接前馈模块添加一个新的参数矩阵(校准 FFN)
- 在不同的输入问题下,训练同一个校准 FFN 来纠正输出的 next token,从而纠正模型错误
- 校准 FFN 的中间维度根据修正知识点的数量而变化
T-Patcher:
- 在最后一个全连接前馈层添加由一对键值向量组成的额外参数(补丁)
- 不同的问题训练不同补丁
- 每个补丁独立训练,适合连续编辑的场景
方法二:内部修改(模型内部特定层或神经元)
1. 元学习法
元学习:模型”学习如何学习”的过程。通过多个任务上的学习积累经验,也被称为元知识,从而指导模型更高效的学习新任务。
双层优化过程:
- 通过双层优化的过程得到元知识(包括模型初始化参数、优化器参数、超网络架构等)
- 外层优化:基于模型在具体任务上的表现,更新元知识
- 内层优化:固定元知识不变,调整模型参数以优化模型本身
基于元学习的模型编辑:
- 外层优化:基于模型在具体编辑上的表现,更新元知识
- 内层优化:固定元知识不变,调整模型参数保证局部性
代表方法:
-
KE(Knowledge Editor):
- 将超网络作为元知识
- 学习”如何更新模型的参数以修改特定知识”的能力
- 训练好的超网络根据输入问题生成模型的参数更新值,使模型能够在特定输入下输出期望结果
-
MEND(Model Editor Networks with Gradient Decomposition):
- 同样将超网络作为元知识
- 但通过低秩分解的方法优化超网络辅助模型参数更新的过程
- 增强超网络对于模型的普适性
2. 定位编辑法(局部参数进行编辑)
先定位到需要修改的参数位置,然后修改。
KN(Knowledge Neurons):
- 全连接前馈模块的每个中间激活值定义为一个知识神经元
- 认为知识神经元与知识表达密切相关
- 通过把特定知识的掩码文本输入模型,计算知识神经元预测正确答案时的梯度变化确定知识神经元的重要程度
ROME(Rank-One Model Editing):
- 通过因果跟踪实验,关注最有关的 FFN 层
MEMIT(Mass Editing Memory in a Transformer):
- 在 ROME 基础上关注多个 FFN
9.3 重点方法详解
T-Patcher
附加参数法的代表方法,在不改变原模型架构的情况下,通过在最后一个 Transformer 层的全连接前馈层中添加额外参数(称为补丁),并对这些补丁进行训练来完成特定知识的编辑。
核心思想:
- FFN 也可视为存储知识的键值存储体
- 添加存储体中新知识的 KV 对
- 认为上投影矩阵是 K,下投影矩阵是 V
- 在前馈层输出时,相当于将原前馈层的输出 ,在原有输出上添加了新知识的偏移
实现:
- 为每个需要编辑的 token 都添加一个补丁
- 从编辑的准确性和局部性两个角度设计损失函数,训练补丁调整输出
ROME
通过因果跟踪实验和阻断实验定位知识所在。
因果跟踪实验:
- 控制变量的策略,探究不同结构与特定知识的相关性
- 结论:模型中间层的全连接前馈层可能是存储知识的关键位置,知识回忆则与 last subject token(主体最后一个 token)有关
步骤:
- 正常推理
- 干扰推理:干扰内部状态作为对照组
- 恢复推理:每个内部状态独立恢复,对比恢复前后的输出差异
阻断实验:
- 区分 attention 与 FFN 在 Last Subject Token 处的因果效应中所起的作用
- 分别冻结 attention、FFN 来确定哪一个层更重要
- 结论:知识存储在 FFN 中
知识存储假设:
- 全连接层可被看作键值存储体,用来存储知识
- 注意力头具有转移信息的作用,能够信息复制
- Transformer 层可交换,且输出结果不会有太大变化
定位步骤:
- 确定键向量:将下投影矩阵的输入量看作 K,其输出向量看作 V。只需要优化下投影矩阵就可以纠错
- 优化值向量
- 插入知识
十、RAG(检索增强生成)
10.1 幻觉产生的原因
- 知识过时:模型训练时的知识已过时
- 知识偏差:偏见、不实信息
- 对齐不当:错误标注
- 知识边界:大模型中不存在的知识
- 知识长尾:大模型存在知识但太少
- 曝光偏差:错误累计
- 解码偏差:采样本身随机
10.2 分类
方法一:黑盒增强(不微调模型)
1. 无微调
- In-Context Learning:直接把检索器检索到的文档前置到输入问题前作为上下文
- 成本低但完全依赖大模型的指令跟随能力,效果难以保证
2. 检索器微调
- 检索器参数根据模型输出进行更新
- REPLUG:使用语言模型的困惑度作为监督信号来训练检索器,以检索出显著降低语言模型困惑度的文档
- 成本低效果好,但模型参数与检索器无法良好适配
方法二:白盒增强(微调模型)
1. 仅微调模型
- 模型根据检索器输出对自身参数进行更新
- RETRO:通过检索器检索的文档抽成向量,交叉编码,将检索信息动态融合到模型的隐藏状态中
- 成本高依赖检索器
2. 协同微调
- 同时微调模型和检索器
- ATLAS:通过 KL 散度损失函数来联合训练,以确保检索器输出的文档的相关性分布与文档对语言模型的贡献分布一致
- 训练复杂,成本高
10.3 知识检索
1. 知识库构建
数据采集与预处理:
- 数据清洗
- 文本分块:
- 固定大小
- 基于内容:
- 句号和换行分割
- 借助 NLP 库如 NLTK、spaCy
- LLM 分割
知识库增强:
- 改进和丰富知识库的内容和结构,为检索提供抓手
- 伪查询生成:利用模型生成与知识库中文档内容紧密相关的伪查询,可以作为相关文档的键,供检索时与用户查询匹配
- 标题生成:利用模型为没有标题的文档生成标题,帮助模型快速理解文档内容,更准确地定位到与用户提问相关的信息
2. 查询构建
语义增强:
- 同义改写:原始查询改写成相同语义的不同表达
- 多视角改写:分而治之的方式处理复杂查询,分解为不同视角的子查询
- 背景文档生成:用大模型在原始查询基础上,生成查询内容相关的背景文档,丰富查询的广度和深度
内容增强:…
3. 文本检索
判别式检索器(主流):
向量数据库存储文档向量。
稀疏检索器:
稀疏向量计算,求解相关性分数。
- TF-IDF:
- 词频(TF)乘以逆文档频率(IDF)来衡量词语在语料库中的重要性
- 用此重要性对文本编码
- 缺点:对语义理解不足
稠密检索器:
-
交叉编码检索器(Cross-Encoder):
- 文档和问题放在一个编码器中,求解相关性分数
- 优点:可以深度交互
- 缺点:计算量大(每个问题提出后都要去和每个文档拼接计算),效率低
- 适用:不适合大规模的检索,更适合小规模的排序阶段
-
双编码检索器(Bi-Encoder):
- 文档和问题通过两个编码器(例如 BERT)分别编码,评估文档和问题的相关性
- 优点:允许离线计算并存储所有文档的向量表示,匹配效率高
- 缺点:提取特征时缺乏交互
- 改进:ColBERT 通过对比学习,以查询和文档间的 Token 级的相似度为度量解决缺乏交互的问题
生成式检索器:
- 知识库中的文档信息记忆在模型参数中
- 能够端到端的直接生成相关文档的标识符(DOC ID),完成检索
- 优点:内存效率高、生成速度快
- 缺点:不够成熟(效果还有局限)
任务:
- 索引任务:模型学习文档内容与其对应的文档 ID 间的映射关系
- 检索任务:为输入查询返回一个潜在相关的候选文档的排名列表
图检索器:
能够捕捉结构化关系、解决信息冗余问题、全面获取全局信息。
包括开放知识图谱、自建图,它们由<主体、谓词、客体>三元组构成。
三阶段:
- 图索引构建
- 图检索
- 生成
优化:
- 索引构建优化:层次化数据组织、混合检索
- 检索优化:多阶段检索策略、检索缓存
4. 检索结果重排
对检索到的段落进一步排序精选。
- 交叉编码:问题与文档放在一个编码器中计算相关性。代表:Sentence-Transformer、BGE 系列
- 基于上下文学习:设计 Prompt,用大模型重排
10.4 生成增强
(待补充)
10.5 降本增效
1. 去除冗余文本
- Token 级别的方法:一个 token 一个 token 的过滤
- 全文本级别的方法:抽出重要信息
- 子文本级别的方法:分割成子文本,删除不必要的子文本(FIT-RAG)
2. 复用计算结果
复用必需的中间结果,缓存生成 Token 的 Key 和 Value。
- KV-Cache 方法:
- 包括 KV 张量缓存库、缓存检索器、RAG 控制器
- 在推理时缓存已经计算过的注意力 KV 对,避免重复计算
十一、错误说明
原文中的错误
- “大连的举证联程操作” → “大量的矩阵乘法操作”(拼写错误)
- “梯度衰减或者梯度爆炸” → “梯度消失或者梯度爆炸”(术语更准确)
- “激发LLM 推理能力” → “激发 LLM 推理能力”(英文缩写与中文间应有空格)
- “Let’s think step by step” → “Let’s think step by step”(原文正确)
- “Therefore, answer (arabic numerals) is” → “Therefore, the answer (in Arabic numerals) is”(语法更通顺)
- “self-Consisitency” → “Self-Consistency”(大小写和拼写错误)
- “self-Consisitency:引入多样性的推理路径” → “Self-Consistency:引入多样性的推理路径”(冒号应为中文冒号)
- “s=SM + (SM+) - (SM-)” → “S = S_M + (S_{M+}) - (S_{M-})“(公式格式更规范)
- “大模型内子集微调 (大模型用的不多” → “大模型内子集微调(大模型用的不多)“(括号未闭合)
- “长蓄力” → “长序列”(“蓄力”可能是误打)
- “人机接口:从In Context Learning到Instruct理解” → “人机接口:从 In-Context Learning 到 Instruct 理解”(标点和格式)
- “zero shot prompting我理解其实就是现在的Instruct的早期叫法” → “Zero-Shot Prompting 就是现在的 Instruct 的早期叫法”(术语格式)
- “Zerpo-Shot CoT” → “Zero-Shot CoT”(拼写错误)
- “Let`s think step by step” → “Let’s think step by step”(引号错误)
- “CoT,ToT,GPT-o1” → “CoT、ToT、GPT-o1”(分隔符应为中文顿号)
- “Deciding-time” → “decoding-time”(拼写错误)
- “拟合训练数据的分布” → “拟合训练数据的分布”(正确)
- “Bottomneck” → “Bottleneck”(拼写错误)
- “LoRA 负优化” → 在某些情况下确实会略微增加内存,但总体来说是高效的
- “插叙能” → “检索能”(笔误)
补充的知识点
-
注意力机制的具体计算公式:
-
位置编码的实现方式:
- 正弦位置编码
- 可学习位置编码(RoPE, ALiBi)
-
LoRA 的数学公式:
-
常见的评估指标:
- 准确率(Accuracy)
- 精确率(Precision)
- 召回率(Recall)
- F1 分数
- 困惑度(Perplexity)
-
RAG 中的其他技术:
- 混合检索(Hybrid Search)
- 重排序(Reranking)
- 查询扩展(Query Expansion)
-
模型量化技术:
- 8-bit 量化
- 4-bit 量化(GPTQ、AWQ)
- NF4 量化(QLoRA 使用)
十二、参考资源
大模型原理与技术知识要点整理
https://github.com/px6707/myblogpanxiao
2026 - 02 - 12
Unlicensed
评论