























基于马尔科夫假说(Markov Assumption) 建立语言序列的预测模型,通常是根据一个固定长度 \(n\) 的前缀预测下一个目标单词,这种模型通常被称为 \(n\text{\textendash}gram\) 语言模型。但这种模型通常会产生“维数灾难” (Curse of Dimensionality),虽说可以通过平滑策略来缓解数据稀疏的问题,但是这又导致无法建模复杂的语义关系。
通过神经网络来建模文本序列的生成。最早可以追溯到分布式词表示 (Distributed Word Representation) 这一概念,即基于聚合上下文特征(分布式词向量)构建目标词的预测模型,分布式词向量又称为”词嵌入“ (Word Embedding)。这种基于隐式语义特征表示的语言模型构建方法为自然语言处理提供了一种较为通用的解决途径。
分布式词表示使用了低维稠密向量来表示词汇的语义,这与基于词典空间的稀疏向量表示(One-Hot Representation) 有本质不同,能够刻画更丰富的隐含语义特征,转换后的向量示例如下:

与上面的词嵌入模型相比,预训练语言模型在训练架构和训练数据两个方面进行了改进和创新。ELMo 是一个早期有代表性的预训练语言模型,提出了使用大量无标注数据训练双向 LSTM (Bidirectional LSTM, biLSTM) 网络,预训练完成后所得到的 biLSTM 可以用来学习上下文感知的单词表示,进一步 ELMo 可以根据下游任务数据对 biLSTM 网络进行微调 (Fine-Tuning)。
但是传统神经网络的长文本建模能力较弱且不容易并行训练。2017年谷歌提出的基于自注意力机制 (Self-Attention) 的 Transformer 模型 (Attention is All you Need.[2017-01]),这个模型是可以通过 GPU 或 TPU 进行加速训练。基于 Transformer 和预训练架构,谷歌提出了预训练模型 BERT 。
同一时期,OpenAI 提出了基于 Transformer 仅有解码器的 GPT-1 模型,以及基于下一个词元预测的预训练任务进行训练。
一般来说,编码器架构被认为更适合解决自然语言理解任务 如完形填空等;解码器架构更适合解决自然语言生成任务 如文本摘要等。因为编码器通常一次性输入整个序列,并生成固定长度的内部表示;但解码器通常是一步步生成输出,每一步生成依赖之前的输出。
研究人员发现,在小型预训练模型的基础上,通过扩展法则 (Scaling Law) 会使下游任务模型的性能提升。一些研究工作尝试训练更大的预训练语言模型如175B参数的 GPT-3 和540B参数的PaLM,相比小型预训练模型如330M参数的 BERT 和1.5B 参数的 GPT-2,这种大模型可以通过”上下文学习” (In-Context Learning, ICL) 使用少量样本数据解决下游问题,并且还拥有小模型所不具备的”涌现能力” (Emergent Abilities)。为了和预训练模型作区分,学术界将这些大型预训练模型命名为”大语言模型”。
大模型成功的关键正是在于“规模扩展” (Scaling) 的利用。扩展法则 (Scaling Law) 对研究大模型规模扩展所带来的模型性能提升具有重要的实践指导意义。下面主要介绍 2 种扩展法则:
2020年OpenAI 团队首次建立了神经语言模型性能与三个主要因素——模型规则 (N)、数据规模 (D) 和 计算算力 (C) 之间的幂律关系 (Power-Law Ralationship)。这个关系是通过模型在不同数据规模 (22M 到 23B 词元)、模型规模 (768M 到 1.5B 非嵌入参数)和算力规模下的性能表现拟合推到得到的。具体公式如下:
在给定算力预算 \(c\) 的条件下,可以近似得到以下三个基本指数公式来描述扩展法则:
$$ L(N) = (\frac{N_c}{N})^{\alpha_N}, \space\alpha_N \thicksim 0.076,\space N_c \thicksim 8.8 \times10^{13}\\L(D) = (\frac{D_c}{D})^\alpha_D, \space \alpha_N \thicksim 0.095,\space D_c\thicksim 5.4\times 10^{13}\\ L(C) = (\frac{C_c}{C})^{\alpha_C}, \space \alpha_C \thicksim 0.050, \space C_c \thicksim 3.1 \times 10^{8} $$
其中 \(L(\sdot)\) 表示以 \(nat\) (以 \(e\) 为底信息量的自然对数) 为单位的交叉熵损失,\(N_c \space D_c \space C_c\) 是实验性的常数数值,分别对应于非嵌入参数数量、训练数据量和实际的算力开销。
为了便于理解扩展法则,OpenAI 研究团队又将损失函数进一步分解为两部分:不可约损失 (真实数据分布的熵) 和 可约损失(真实分布和模型分布之间 KL 散度的估计):
$$ L(x) = \underbrace{L_\infty}_{不可约损失} + \underbrace{(\frac{x_0}{x})^{\alpha_x}}_{可约损失} $$
这里的 \(x\) 是一个占位符,可以只带上面的\(N 、D 、 C\)。这个公式表示
参考论文 Training Compute-Optimal Large Language Models.[2020-03]
2022年由 DeepMind 团队提出的一种可选的扩展法则,旨在充分利用算力资源对大模型进行优化训练。此法则主要是针对更大范围的模型规模 (70M 到 16B 参数) 和数据规模 (5B 到 500B 词元)进行实验,并拟合得到了另一种关于模型性能的幂律关系,公式如下:
$$ L(N,D) = E + \frac{A}{N^\alpha} + \frac{B}{D^\beta } \\ \\其中 \space E=1.69,\space A=406.4, \space B=410.7, \space \alpha =0.34, \space \beta=0.28 $$
进一步,利用约束条件 \(C \approx 6ND\) 对损失函数 \(L(N,D)\) 进行推导,能够得到算力资源固定情况下模型规模与数据规模的最有分配方案:
$$ N_{opt}(C) = G(\frac{C}{6})^a \space, \space a = \frac{\alpha}{\alpha+\beta}\ D_{opt}(C) = G^{-1}(\frac{C}{6})^b\space, \space b= \frac{\beta}{\alpha+\beta} $$
其中 \(G\) 是由 \(A, B,\alpha,\beta\) 计算得出的扩展系数。
再进一步,研究人员发现 KM 扩展法则和 Chinchilla 扩展法则都可以近似表示成以算力为核心的公式:
$$ N_{opt} \approx C^a\space , \space D_{opt} \approx C^b $$
通过上面的推演能够知道,当算力\(C\) 给定的情况下,最有的模型参数规模和数据规模由指数系数 \(a\) 和 \(b\) 分别确定:
KM 扩展法则 (\(a \approx 0.73, b\approx 0.7\)) 倾向于将更大的算力分配给模型规模的增加;Chinchilla 扩展法测 (\(a\approx 0.46, b \approx 0.54\)) 倾向于两种规模参数以等比例关系增加;但越来越多的工作表明,现有预训练模型对于数据的需求量远高于扩展法则中给出的估计规模,如 LLaMA2-7B 的模型使用了 2T 的词元进行训练,很多更小的模型可能够通过超大规模的预训练数据获得比较大的模型性能提升。这种现象的原因主要在于 Transformer 架构具有较好的数据扩展性。到目前为止还没有实验能够有效验证扩展到多大的数据规模后,模型的性能将不再提升。
在论文 Emergent Abilities of Large Language Models.[2022-06] 中,定义了在大语言模型中出现的涌现能力。指的是当模型扩展到一定规模,模型的特定任务性能突然会出现显著跃升的趋势,远超随机水平。
涌现能力可以定义为解决某些复杂任务的能力水平,但作者在这里更关注可以用来解决任何问题的普适能力。具体有三种典型的涌现能力:
上下文学习 (In-context Learning, ICL):指的是在 prompt 提示中为语言模型提供自然语言指令和多个任务示例,无需显式训练或梯度更近,仅输入文本就能为测试样本生成预期输出。(参考自论文 Language Models are Few-Shot Learners.[2020-05])
指令遵循 (Instruction Following):指大语言模型能欧按照自然语言指令来执行对应的任务。为了获得这种能力,通常需要使用自然语言模型的示例数据进行微调,称为指令微调 (Instruction Tuning) 或监督微调 (Supervised Fine-tuning)。通过指令微调,大语言模型可以在没有显式示例的情况下,按照任务指令完成新的任务,有效提升模型的泛化能力。 (参考自论文 Training language models to follow instructions with human feedback.[2022-03]、Finetuned Language Models Are Zero-Shot Learners.[2021-09]、Multitask Prompted Training Enables Zero-Shot Task Generalization.[2021-10])
逐步推理 (Step-by-step Reasoning):大语言模型可以利用思维链 (Chain-of-Thought, CoT) 提示策略来加强推理性能,具体来说可以在提示中引入任务相关的中间推理步骤来加强负责任务的求解,从而获得可靠的答案。 (参考自论文 Chain-of-Thought Prompting Elicits Reasoning in Large Language Models.[2022-01])
与扩展法测通过语言建模算是衡量语言模型的整体性能不同,涌现能力通常使用任务性能来衡量模型性能,整体上展现出随规模扩展的骤然跃升趋势,具有不可预测性。
但也有观点认为,涌现能力可能部分归因于 ① 现有评测集中通常采用不连续的评估指标 ② 较为有限的模型参数规模,这两个情况很容易导致下游任务的评测效果产生不连续的变化趋势,从而导致所谓的“涌现”。
目前还缺少对于大语言模型涌现机制的基础性解释研究工作。与这一问题较为相关的研究叫做 “顿悟” (Grokking),指的是训练过程中的一种数据学习模式,模型性能从随机水平提升为高度泛化。(参考自论文 Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets.[2022-01])


数据处理主要包含以下几个步骤。原始语料库可以直接看原文,这里就不赘述了。

对于数据预处理,主要分为三部分:
词元化 (Tokenization) 是数据预处理中的一个关键步骤,旨在将原始文本分割成模型可识别和建模的词元序列。子词分词器 (Subword Tokenizer) 被广泛应用于基于 Transformer 的语言模型中,包括 BPE 分词、WordPiece 分词和 Unigram 分词三种常见方法。
BPE 分词
BPE 算法在1994年被提出,最早应用于通用的数据压缩 (参考论文 A New Algorithm for Data Compression.[1994-02]),自然语言处理领域的研究人员将其适配被应用于文本分词 (参考论文 Neural Machine Translation of Rare Words with Subword Units.[2016-06])。
BFE算法从一组基本符号如字母或边界字符开始,迭代寻找语料库中两个相邻词元,并将它们替换为新的词元,这一过程被称为合并。合并的时候会计算两个连续词元的共现频率,即每次迭代中最频繁出现的一对词元会被选择与合并,一直持续到预定义的词表大小。
BPE算法还有一种拓展算法——字节集别的BPE (Byte-level BPE, B-BPE),它将字节视为合并操作的基本符号,从而实现更细粒度的分割。GPT-2、BART 和 LLaMA 都是采用的这种词元化方法。
假设语料中包含了五个英文单词: 假设单词在语料库中的频率如下:
”loop”, “pool”, “loot”, “tool”, “loots”
这种情况下,BPE 的初始词汇表是 :
[”l”, “o”, “p”, “t", “s”]
实践中的基础词汇表可以包含所有 ASCII 字符和 一些 Unicode 字符 (如中文的汉字),语料库没有的字符会被转换为未知词元如 “
(”loop”, 15), (”pool”, 10), (”loot”, 10), (”tool”, 5), (”loots”, 8)
其中出现频率最高的是 “oo”,出现了 48 次,因此学习到的第一条合并规则是 (”o”, “o”) → “oo”,并被添加到词汇表中。在这一次合并后,词汇和语料库如下:
词汇:[”l”, “o”, “p”, “t”, “s”, “oo”]
语料库:(”l”, “oo”, “p”, 15), (”p”, “oo”, “l”, 10), (”l”, “oo”, “t”, 10), (”t”, “oo”, “l”, 5), (”l”, “oo”, “t”, “s”, 8)
此时出现频率最高的配对是(”l”, “oo”),因此第二条合并规则是 (”l”, “oo”) → “loo”。将其添加到词汇表中并合并后,词汇和语料库如下:
词汇:[”l”, “o”, “p”, “t”, “s”, “oo”, ”loo”]
语料库:(”loo”, “p”, 15), (”p”, “ool”, 10), (”loo”, “t”, 10), (”t”, “oo”, “l”, 5), (”loo”, “t”, “s”, 8)
重复上述过程,直到达到所设置的终止词汇量。
WordPiece 分词
WordPiece 是谷歌内部非公开的分词算法,最初在开发语言搜索系统时被提出 (参考论文 Japanese and korean voice search.[2012-03]);随后在2016年被用于机器翻译系统,并于2018年被 BERT 采用作为分词器。
与 BPE 类似,WordPiece 分词算法也是从一个小的词汇表开始,其中包括模型使用的特殊词元和初始词汇表。由于它是通过添加前缀来识别子词的,因此每个词的初始拆分都是将前缀添加到词内的所有字符上。如 “word” 会被拆分为 “w##o##r##d”。同时 WordPiece 分词算法并不是选择最频繁的词对,而是使用下面的公式为每个词对计算分数:
$$ 得分 = \frac{词对出现的频率}{第一个词出现的频率 \times 第二个词出现的频率} $$
Unigram 分词
与前两个分词算法不同,Unigram 分词方法从语料库的一组足够大的字符串和词元初始集合开始,通过期望最大化 (Expectation-Maximization, EM) 算法计算词元的概率并计算损失值 lossi,根据损失值排序并保留对整体概率 \(L\) 影响大的词元,直到达到预期的词表大小 (参考论文 Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates.[2018-04])。
分词器的选择
SentencePiece 代码库支持了字节级别的 BPE 分词和 Unigram 分词。
为了训练出高效的分词器,需要重点关注一下几个因素:
分词器必须剧本无损重构的特征,即分词结果能够准确无误地还原为原始输入文本
分词器应具有高压缩率,即在给点文本数据的情况下,经过分词处理后的词元数量应该尽可能少。压缩率的计算公式如下
$$ 压缩率=\frac{UTF{-}8 字节数}{词元数} $$
此外还需要注意,在处理中文等非英语数据时,分词器的表现可能不佳;以及为了提高某些特定能力如数学,可能需要针对性地设计分词器。
这部分不会再详细介绍传统 Transformer 的架构和 MoE 架构的具体细节,想获得详细内容的可以直接阅读原文。



目前增强大语言模型长文本建模能力的研究主要集中在两个方向:
扩展位置编码:在处理更长的文本时,RoPE 在每个子空间需要处理更大的旋转角度,但旋转角度可能会超过训练中的角度分布范围。因此很多研究旨在提升其不经过训练或继续训练情况下对长文本的建模能力。
调整上下文窗口:采用受限的注意力机制来调整原始的上下文窗口,从而实现对更长文本的有效建模,进一步可以理解为通过忽略部分不重要的词元从而扩展上下文。主要有三种调整方法:并行上下文窗口、Λ 形上下文窗口和词元选择,如下图。其中白色表示被掩盖的次元,蓝色表示进行注意力计算的词元,块上的数字表示位置编码的相对位置。

指令微调 (Instruction Tuning) 是指使用自然语言形式的数据对预训练后的大模型进行参数微调。在另外一些参考文件中,也被称为有监督微调 (Supervised Fine-tuning) 或多任务提示训练 (Multitask Prompted Training)。 (参考论文 Finetuned Language Models Are Zero-Shot Learners.[2021-09]、Training language models to follow instructions with human feedback.[2022-03]、Multitask Prompted Training Enables Zero-Shot Task Generalization.[2021-10])
指令微调旨主要在三个方面对大语言模型产生影响:① 整体任务性能 ② 任务求解能力增强 ③ 领域专业化适配
参数高效微调 (Parameter-efficient Fine-tuning),也称为轻量化微调 (Lightweight Fine-tuning),旨在减少需要训练的模型参数量,同时保证微调后的模型性能能够与全量微调的表现媲美。下面介绍几种微调方法,其中比较主流的是 LoRA 微调。
研究人员发现模型在针对特定任务进行适配时,参数矩阵往往是过参数化 (Over-parameterized) 的,存在一个较低的内在秩。LoRA 提出在预训练模型的参数矩阵上添加低秩分解矩阵来近似每层的参数更新,从而减少适配下游任务所需要训练的参数。(参考论文 LoRA: Low-Rank Adaptation of Large Language Models.[2021-06])

给定一个参数矩阵 \(W\),其更新过程可以一般性地表达为以下形式:
$$ W=W_0 + \Delta W, W_0 \in \Reals^{H\times H} $$
其中 \(W_0\) 是原始参数矩阵,\(\Delta W\) 是更新的梯度矩阵。LoRA 的基本思想是冻结原始矩阵 \(W_0\),通过低秩分解矩阵来近似参数更新矩阵,其中 \(R\) 是减小后的秩且远小于 \(H\):
$$ \Delta W = A \cdot B^T, \space A \in \Reals^{H \times R}, \space B\in \Reals^{H \times R} \ W = W_0 + A \cdot B^T $$
除此之外 LoRA 还有很多变种
适配器微调 (Adapter Tuning) 在 Transformer 模型中引入了小型神经网络模块,被称为适配器。为了实现适配器模块,研究者提出使用瓶颈网络架构:首先将原始的特征向量压缩到较低维度,然后使用激活函数进行非线性变化,最后将其恢复到原始维度。(参考论文 Parameter-Efficient Transfer Learning for NLP.[2019-06])

用公式表示如下,其中 \(R\) 是减小后的秩且远小于 \(H\) :
$$ h = h + \sigma(h \cdot W^d) \cdot W^u, \space W^d \in \Reals^{H \times R}, \space W^u \in \Reals^{R \times H} $$
前缀微调 (Prefix Tuning) 在语言模型的每个多头注意力层中都添加了一组前缀参数。这些前缀参数组成了一个可训练的连续矩阵,可以视为若干虚拟词元的嵌入向量。 (参考论文 Prefix-Tuning: Optimizing Continuous Prompts for Generation.[2021-01])。

基于原始的注意力计算公式,前缀词元被拼接到每个注意力的键向量与值向量之前,计算公式可以表示如下:
$$ 原始注意力:\\head_n=Attention(XW^Q_n, XW^K_n, XW^V_n) \\ 前缀拼接后:\\head = Attention(XW^Q, P^K \oplus XW^K,P^V\oplus XW^V) \ P^K, P^V \in \Reals^{L \times H} $$
其中 \(\oplus\) 表示矩阵拼接;\(L\) 代表前缀向量的长度,一般在 10 到 100 之间,可以根据任务场景进行调整。
提示微调仅在输入嵌入层中加入可训练的提示向量。
P-tuning 提出了使用自由形式来组合输入文本和提示向量,通过LSTM 来学习软提示词元的表示,他可以同时适用于自然语言理解和生成任务 (参考论文 GPT Understands, Too.[2023-10])。
Prompt Tuning 以前缀形式添加提示词元,直接在输入前拼接连续性向量。 (参考论文 The Power of Scale for Parameter-Efficient Prompt Tuning.[2021-09])。

在大语言模型的学习过程中,如何确保大语言模型的行为与人类的价值观、真实意图和社会伦理相一致成为了一个关键研究问题,通常这一研究问题被称为人类对齐 (Human Alignment)。
人类对齐主要有三个具有代表性的3H对齐标准,分别是:
以上三种通用的对齐标注较为宽泛,因此许多研究针对性地给出了一些更为细化的对齐标准,例如:
已有的对齐标准主要是基于人类认知进行设计的,具有一定的主观性。因此直接通过优化目标来建模这些对齐标准较为困难。接下来,介绍一下具体的对齐方法。
基于人类反馈的强化学习 (Reinforcement Learning fro Human Feedback, RLHF) 旨在利用收集到的人类反馈数据指导大语言模型进行微调,从而使得大语言模型在多个标准上与人类对齐。

RLHF 整体训练框架有三个阶段:
监督微调
为了让待对齐语言模型具有较好的指令遵循能力,通常需要收集高质量的指令数据进行微调。指令数据可以由人类标注员编写也可以由大语言模型自动生成。
奖励模型训练
使用语言模型针对任务指令生成一定数量的候选输出。随后标注员对输出文本进行偏好标注,如根据话标注进行打分或根据自身偏好对输出进行全排序。进一步使用人工标注的偏好数据进行奖励模型的训练,建模人类偏好。
强化学习训练
待对齐模型接收提示作为输入并输出文本;奖励模型则根据当前语言模型的输出提供相应的奖励分数,用于指导策略模型的优化。为了避免当前训练轮次的语言模型明显偏离初始模型 (即强化学习之前的预训练模型),通常会在原始优化目标中加一个惩罚项如KL散度。KL 散度越大,意味着当前语言模型越偏离初始语言模型。PPO 算法目前是被一种广泛用于人类对齐的强化学习算法。
近端策略优化 (Proximal Policy Optimization, PPO) 算法用于训练能够根据外部环境做出行为决策的策略模型。PPO 算法的训练流程如下:
输入:\(SFT\) 模型 \(SFT_\theta\) ,奖励模型
输出:与人类偏好对其的大语言模型 \(\pi_{\theta}\)
初始化负责与环境交互的策略模型:\(\pi_{\theta old} \gets SFT_{\theta}\)
初始化负责学习的策略模型:\(\pi_\theta \gets SFT_{\theta}\)
\(\bold{for} \space step = 1,2 …\space \bold{do}\)
\(\pi_{\theta old}\) 采样得到若干角色轨迹 \({\tau_1, \tau_2 }\)
根据优势函数 \(\hat{A}_t\) 计算”优势估计”
\(\bold{for} \space j=1,2,…,K \space \bold{do}\)
根据梯度剪裁 \(J_{\tiny{CLIP}}(\theta)\) 或KL散度 \(J_{\tiny{KLPEN}}(\theta)\) 计算目标函数
使用梯度上升优化 \(\pi_{\theta}\)
\(\bold{end \space for}\)
更新与环境交互的策略模型:\(\pi_{\theta old} \gets \pi_{\theta}\)
\(\bold{end \space for}\)
RLHF 在训练过程中需要维护和更新多个模型,不仅占用大量的内存资源,而且整个算法的执行过程也比较复杂。同时 PPO 算法在优化过程中的稳定性和难度比较高。为了克服这些问题,研究人员提出了直接基于监督微调的对其方法,旨在通过更简洁、更直接的方式来实现大语言模型与人类价值观的对齐。其中比较有代表性的算法是 DPO 算法。
DPO (Direct Preference Optimization) 算法的主要思想是在强化学习的目标函数中建立决策函数与奖励函数之间的关系,以规避奖励模型的过程。大概的步骤如下:
SFT 优点:
SFT 缺点:
RLHF 优点:
RLHF 缺点:
大模型的生成方式本质上是一个概率采样过程,需要合适的解码策略来生成合适的输出内容。这里主要介绍自回归场景下的解码策略:模型 \(M\) 每次根据当前上下文词元序列 \(\bold{u}=[u_1, u_2,…,u_t]\) 建模下一个词的概率分布 \(P\),然后根据一定的解码策略选择下一个词 \(u’\),之后再将 \(u\) 和 \(u’\) 作为新的上下文重复上述步骤,直到生成结束词元或达到长度上限为止。
这里提到的解码策略主要有两种:
贪心搜索 (Greedy Search):在每个生成步骤中都选择概率最高的词元。其公式如下
$$ u_i=\argmax_u P(u|\bold{u}_{<i}) $$
贪心搜索提供了一些参数对其进行了一些改进,如:
随机采样 (Probability Sampling):根据模型建模的概率分布采样得到下一个词元,旨在增强生成过程中的随机性和结果多样性。其公式如下:
$$ u_i \text{\textasciitilde}P(u|\bold{u_{<i}}) $$
随机采样也提供了一些参数来改进策略,如
在神经网络压缩中,量化指的是从浮点数到整数的映射过程,目前比较常用的是 8 比特整数量化,即 INT8 量化。神经网络中通常由两种类型的数据需要量化,分别是权重量化 (也称为模型参数量化) 和激活 (值) 量化。
量化的过程可以表示为一个函数,该函数将连续的输入映射到离散的输出集合,这个过程涉及到四舍五入或截断等近似操作。一个一般形式的量化函数如下,其中 \(S\) 表示缩放因子,用于确定裁剪范围;\(Z\) 表示零点因子,用于确定对称或非对称量化;\(R\) 表示将缩放后的浮点数映射为近似整数的取整操作:
$$ x_q = R(x /S)-Z $$
下面介绍一些函数量化常见的分类与实现策略:
权重量化
主流的权重量化方法通常是基于逐层量化的方法进行设计的,旨在通过最小化逐层的重构损失来优化模型的量化权重。公式如下,其中\(W\),\(\hat{W}\) 分别表示原始权重量化后的权重,\(X\) 为输入:
$$ argmin_{\hat{W}}||XW-\hat{X}W||^2_2 $$
为了优化目标函数,GPTQ 的基本思想是在逐层量化的基础上,进一步将权重矩阵按照维度分组,例如 128 列为一组,对一个组内逐列进行量化,每列参数量化后调整组内其他为量化的参数。GPTQ 还进一步采用了特殊设计的优化方法来加速整个量化过程。 (参考论文 GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers.[2023-03])
AWQ 发现在逐层和逐组权重量化过程中,对于模型性能重要的权重只占全部参数的一小部分 (0.1%~1%),更应该关注那些与较大激活值维度对应的关键权重。基于此 AWQ 方法提出引入针对权重的激活感知缩放策略,使得量化更加针对处理关键权重所对应的权重维度。(参考论文 GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers.[2024-04])
权重和激活值量化
模型蒸馏的目标是将复杂模型 (称为教师模型) 包含的只是迁移到简单模型 (称为学习模型) 中,从而实现复杂模型的压缩。一般来讲会使用教师模型的输出来训练学生模型,以此传递模型知识。模型蒸馏的核心思想是,引入额外的损失函数 (称为蒸馏随时函数),训练学生模型的输出尽可能接近教师模型输出,
根据蒸馏知识的不同,传统模型蒸馏方法分为两种类型:
模型剪枝的目标是在尽可能不损失模型性能的情况下,努力消减模型的参数数量,最终有效降低模型的显存需求以及算力开销。
传统模型剪枝方法一般可以分为两类:
针对大语言模型的提示设计需要考虑四个关键要素:
设计原则
在 GPT-3 的论文中,OpenAI 研究团队首次提出上下文学习。上下文学习使用任务描述和 (或) 示例所组成的自然语言文本提示。上下文学习的提示构建过程如下:
$$ \underbrace{LLM}_{大语言模型} (\underbrace{I}_{任务描述}, \underbrace{f(x_1,y_1),…,f(x_k,y_k)}_{示例},{f(\underbrace{x_{k+1}}_{输入},\underbrace{\text{\textunderscore}\text{\textunderscore}}_{答案})})\to \hat{y}_{k+1} $$
如上图,首先通过自然语言描述,并从任务数据集中选择一些样本作为示例。其次根据特定的模板,将这些示例按照特定顺序组合成提示内容。最后,将测试样本添加到提示后面,整体输入到大语言模型以生成输出。
上下文学习本身不难理解,但是他的内在原理和工作机制值得深究。文中给出了两个核心影响点:
思维链提示作为上下文学习的一种扩展形式,将原始的<输入, 输出>映射关系转换为<输入, 思维链, 输出>的三元组形式。在思维链提示的作用下,大语言模型可以根据输入生成对应的思维链及答案。
同样地,这里描述一下思维链推理能力的内在原理和工作机制:
智能体是一个具备环境感知、决策指定及动作执行能力的自主算法系统。旨在模拟人类或其他生物的智能行为,自动化地解决问题或执行任务。(论文参考 More Agents Is All You Need.[2024-02])
下面主要介绍基于大语言模型的智能体的构建过程,主要围绕三个基本组件进行:
与单智能体系统的独立工作模式不同,在多智能体系统中,每个智能体扮演特定角色并承担对应的个功能,着重强调智能体之间的协同合作,以发挥集体智慧的优势。下面介绍 2 种多智能体系统的通讯协同机制:
根据应用场景的不同,可以分为语言建模、文本分类、条件文本生成、执行类任务以及偏好排序类任务等多个评测指标,如下图:

分类任务 (Classification)
分类任务要求模型根据给定的输出文本,将其划分到预定义的类别中。最终模型的预测样本可以根据真实类别和预测类别是否一致做二分,分为真正例 (True Postive, TP)、假正例 (False Postive, FP)、真负例 (Ture Negative, TN)、假负例 (False Negative, FN) 四种。
语言建模任务 (Language Modeling)
语言模型任务是自然语言处理领域的一项基础任务,旨在根据给定的前文词元来预测后续的词元。
条件文本生成任务 (Conditional Text Generation)
条件文本生成任务旨在检查模型能否基于输入生成流畅、逻辑连贯且具有实际语义的回复。应用场景覆盖了机器翻译、文本摘要和对话系统等众多场景。
问答任务 (Question Answering)
问答任务主要通过衡量模型给出的答案与真实答案之间的一致性来评估。
执行类任务
执行类任务涉及与外部环境交互,评测模型的正确性可以通过外部环境的反馈来判断。
偏好排序任务
偏好偏序任务是让模型根据某种标准对一组文本或选项进行排序的任务。
接下来介绍一下评测方法及典型的评测工作。

如上图,根据测评方法主要可以分为三类:
最后这里给出书中提到的不同能力对应的代表性评测任务与评测数据集,针对不同场景的评测需求可以参考这里:




多模态大语言模型(Multimodal Large Language Model, MLLM)主要是指那些 能够处理和整合多种模态信息(比如文本、图像和音频)的大语言模型。例如在大语言模型处理前使用 image-to-text 做图片理解等,在大语言模型处理后使用 text-to-speech 模型输出音频数据等。除此之外,由于视觉模型和语言模型之间存在比较大的语义空间差异,所以需要做对齐训练和指令微调。

知识图谱 (Knowledge Graph, KG) 中存储了大量的结构化知识信息,常用于知识密集型的任务场景。这里的场景其实主要还是作为大语言模型知识检索的工具。下面提供了两种方式,这两种方式个人认为和目前 RAG 场景中的「多路召回」与「N选1召回」方式类似:第一种是将知识图谱中的知识作为大语言模型的上下文;第二种是作为大语言模型调用工具链中的一环,通过大语言模型自身的动作规划获取知识图谱中的内容。

涉及专业领域的大语言模型,往往需要经过预训练或者指令微调。下面仅列出相关的模型,感兴趣的可以去详细查查:

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。