生成式人工智能(GenAI),尤其是ChatGPT,吸引了大家的注意。基于变压器的大规模语言模型(LLMs),在大量未标记的数据上进行训练,展示了在许多不同任务上泛化的强大能力。为了理解为什么LLMs如此强大,我们将在这篇文章中深入探讨它们的工作原理。
形式上,一个仅解码器的语言模型只是一个条件分布 p(xi|x1···xi−1)
,它在给定上下文 x1 · · · xi−1
的情况下,对下一个标记 xi
进行分布。这种形式化是一种马尔可夫过程的例子,这种过程在许多应用场景中都有研究。这种简单的设置也允许我们以自回归的方式逐个生成标记。
在深入探讨之前,我必须指出这种表述方式无法达到人工通用智能(AGI)的局限性。思考是一个非线性过程,但我们的交流工具——嘴巴——只能线性地说话。因此,语言表现为一连串线性的词语。用马尔可夫过程来建模语言是一个合理的起点。很难相信这样的表述方式能够完全捕捉到思考过程(或AGI)。另一方面,思考和语言是相互关联的。一个足够强大的语言模型仍然可能展示出某种思考能力,就像GPT4所展示的那样。接下来,让我们来看看使大型语言模型(LLMs)显得智能的科学创新。
Transformer有许多方法来建模/表示条件分布 p(xi|x1···xi−1)
。在大型语言模型(LLMs)中,我们尝试使用一种名为Transformer的神经网络架构来估计这个条件分布。实际上,在Transformer出现之前,神经网络,尤其是各种循环神经网络(RNNs),已经在语言建模中使用了很长时间。RNNs 顺序处理标记,保持一个状态向量,其中包含当前标记之前的标记所见数据的表示。为了处理第 n
个标记,模型将表示句子到第 n-1
个标记的状态与新标记的信息结合起来,以创建一个新的状态,表示句子到第 n
个标记。理论上,如果在每个点状态继续编码有关标记的上下文信息,一个标记的信息可以沿着序列任意远地传播。不幸的是,梯度消失问题使得模型在长句子的末尾状态中无法提取出关于先前标记的精确信息。标记计算对先前标记计算结果的依赖性也使得在现代GPU硬件上并行计算变得困难。
这些问题通过Transformer中的自注意力机制得到了解决。Transformer 是一种模型架构,摒弃了递归,而是完全依赖于注意力机制来建立输入和输出之间的全局依赖关系。注意力层可以访问所有先前的状态,并根据一个学习到的相关性度量对它们进行加权,从而提供关于远距离标记的相关信息。重要的是,Transformer 使用没有 RNN 的注意力机制,同时处理所有标记,并在后续层中计算它们之间的注意力权重。由于注意力机制仅使用来自较低层的其他标记的信息,因此可以并行计算所有标记的注意力机制,从而提高了训练速度。
输入文本通过字对分词器解析成一个个标记,每个标记被转换成一个嵌入向量。然后,标记的位置信息被添加到嵌入中。Transformer构建模块是缩放点积注意力单元。当一个句子被传递到Transformer模型中时,每个标记之间的注意力权重会同时被计算出来。注意力单元为每个标记在上下文中的嵌入生成包含该标记自身信息以及与其他相关标记加权组合的信息,每个相关标记的权重由其注意力权重决定。
对于每个注意力单元,Transformer 模型学习三个权重矩阵;查询权重 WQ、键权重 WK 和值权重 WV。对于每个标记 i,输入词嵌入与这三个权重矩阵分别相乘,以生成查询向量 qi、键向量 ki 和值向量 vi。注意力权重是 qi 和 kj 之间的点积,按键向量维度的平方根进行缩放,并通过 softmax 进行归一化。标记 i 的注意力单元输出是所有标记的值向量的加权和,权重由标记 i 到每个标记 j 的注意力决定。所有标记的注意力计算可以表示为一个大型矩阵计算:
一组 (WQ, WK, WV) 矩阵称为一个注意力头,每个Transformer层有多个注意力头。通过多个注意力头,模型可以计算不同令牌之间的相关性。每个注意力头的计算可以并行执行,输出被拼接并通过矩阵 WO 投影回相同的输入维度。
在编码器中,自注意力机制之后有一个全连接的多层感知机(MLP)。MLP 块进一步单独处理每个输出编码。在编码器-解码器设置(例如用于翻译)中,会在解码器的自注意力机制和 MLP 之间插入一个额外的注意力机制,以从编码器生成的编码中提取相关信息。在仅解码器架构中,这并不是必需的。无论是编码器-解码器架构还是仅解码器架构,解码器都不能使用当前或未来的输出来预测输出,因此输出序列必须部分屏蔽以防止这种反向信息流,从而允许自回归文本生成。为了逐个生成标记,最后一个解码器后面跟着一个 softmax 层以生成词汇表上的输出概率。
监督微调解码器-only GPT 实质上是一种无监督(或自监督)的预训练算法,旨在最大化以下条件概率:
其中 k 是 上下文窗口的大小。虽然该架构与任务无关,GPT 证明了通过在一个多样化的未标记文本语料库上进行 生成式预训练,然后对每个特定任务进行 判别式微调,可以在自然语言推理、问答、语义相似性和文本分类等任务上取得显著提升。
在完成上述目标的预训练后,我们可以调整参数以适应监督目标任务。给定一个带有标签的数据集 C,其中每个实例由一系列输入标记 x1, . . . , xm 以及一个标签 y 组成。输入通过预训练模型传递,以获取最终的 transformer 块的激活 hlm,然后将其输入到添加的具有参数 Wy 的线性输出层中,以预测 y:
相应地,我们有以下目标函数:
此外,将语言模型作为辅助目标包括在内也很有帮助,因为它可以提高监督模型的泛化能力并加速收敛。也就是说,我们优化以下目标:
文本分类可以直接按照上述方法进行微调。其他任务,如问答或文本蕴含,则具有结构化的输入,例如有序的句子对,或文档、问题和答案的三元组。由于预训练模型是在连续的文本序列上训练的,因此需要对其进行一些修改才能应用于这些任务。
文本蕴含: 将前提 p 和假设 h 的 token 序列用一个分隔符 token ($) 连接起来。
相似性: 两个句子之间没有固有的顺序。因此,输入序列包含两种可能的句子顺序(中间用分隔符分隔),并分别独立处理以生成两个序列表示,然后将它们逐元素相加,再输入到线性输出层中。
问答和常识推理: 每个样本包含一个上下文文档 z、一个问题 q 和一组可能的答案 {ak}。GPT 将文档上下文和问题与每个可能的答案连接起来,中间添加一个分隔符 token,得到 [z;q;$;ak]。这些序列分别独立处理,然后通过一个 softmax 层进行归一化,以生成可能答案的输出分布。
虽然GPT展示了在特定任务的数据集上进行监督微调效果很好,但要在一个特定的任务上取得良好的表现,通常需要在包含成千上万个特定于该任务的示例的数据集上进行微调。有趣的是,GPT2 表明语言模型开始在没有明确监督的情况下学习多个任务,条件是文档加上问题(又称提示)。
学习执行单一任务可以表述为一个概率框架,即估计条件分布 p(输出|输入)
。由于一个通用系统应该能够执行许多不同的任务,即使对于相同的输入,它不仅应该根据输入,还应该根据要执行的任务进行条件化。也就是说,它应该建模 p(输出|输入, 任务)
。以前,任务条件化通常在架构层面或算法层面实现。但语言提供了一种灵活的方式来指定任务、输入和输出,所有这些都是符号序列。例如,一个翻译训练示例可以写成序列 (translate to french, english text, french text)
。特别是,GPT2 在一个由格式为 英语句子 = 法语句子
的示例对组成的上下文中进行条件化,然后在最终提示 英语句子 =
之后,我们使用贪婪解码从模型中采样,并将第一个生成的句子用作翻译。
同样地,为了诱导总结行为,GPT2 在文章后添加文本 TL;DR:
并生成 100 个 token,使用 Top-k 随机采样,其中 k = 2,这减少了重复并鼓励了比贪心解码更抽象的摘要。同样地,阅读理解训练示例可以写为 (回答问题, 文档, 问题, 答案)
。
注意,零样本迁移与下一节中的零样本学习不同。在零样本迁移中,“零样本”是指不进行梯度更新,但通常需要在推理时向模型提供示例(例如上述翻译示例),因此并不是真正从零样本中学习。
我发现这个元学习方法与蒙太格语义学之间有一个有趣的联系,蒙太格语义学是一种关于自然语言语义及其与句法关系的理论。1970年,蒙太格阐述了他的观点:
在我看来,自然语言和逻辑学家创造的人工语言之间没有重要的理论区别;事实上,我认为可以用一种自然且数学上精确的理论来理解这两种语言的语法和语义。
从哲学角度来看,零样本迁移和蒙塔格语义都将自然语言视为一种编程语言。大型语言模型通过嵌入向量以黑盒方式捕捉任务,尽管我们不清楚它具体是如何工作的。相比之下,蒙塔格语义最重要的特征是它遵循组合性原则——即整体的意义是其组成部分的意义及其语法组合方式的函数。这可能是一种改进大型语言模型的方法。
在上下文中的学习GPT3 表明,扩大语言模型的规模极大地提升了任务无关的、少量样本的性能。GPT3 进一步将描述具体化为“零样本”、“单样本”或“少量样本”,这取决于在推理时提供了多少演示示例:(a) “少量样本学习”,或称为在上下文中的学习,允许尽可能多的演示示例,直到模型的上下文窗口填满(通常为10到100个示例),(b) “单样本学习”,仅允许一个演示示例,© “零样本学习”,不允许任何演示示例,仅给定自然语言指令。
对于少量样本学习,GPT3 通过从该任务的训练集中随机抽取 K 个样本作为条件来评估评估集中的每个示例,这些样本由一个或两个新行分隔,具体取决于任务。K 可以是 0 到模型上下文窗口允许的最大值之间的任何值,对于所有模型,该最大值为 nctx = 2048,通常可以容纳 10 到 100 个示例。较大的 K 值通常但并非总是更好。
对于某些任务,GPT3 除了(或在 K = 0 时,代替)演示之外,还会使用自然语言提示。在涉及从多个选项中选择一个正确完成的任务中,提示包括 K 个上下文示例加上正确的完成示例,然后是一个仅包含上下文的示例,评估过程会比较每个完成示例的模型概率。
在涉及二元分类的任务中,GPT3 给选项提供更具语义意义的名称(例如“True”或“False”而不是0或1),然后将任务视为多项选择题来处理。
在自由形式完成的任务中,GPT3 使用了 beam search。评估过程根据手头数据集的标准,使用 F1 相似度分数、BLEU 或完全匹配来对模型进行评分。
模型大小很重要(到目前为止)语言模型的容量对于任务无关学习的成功至关重要,增加容量可以以对数线性的方式提升跨任务的表现。GPT-2 是作为对 GPT-1 的直接扩展而创建的,其参数数量和数据集大小都增加了10倍。但是,它可以在零样本迁移设置下执行下游任务——无需任何参数或架构修改。
GPT3 与 GPT2 使用相同的模型和架构,唯一的区别在于 GPT3 在 transformer 的各层中使用了交替的密集和局部带状稀疏注意力模式。
模型大小
在TriviaQA上,GPT3的性能随着模型规模的增大而平稳提升,表明语言模型在容量增加时会继续吸收知识。一次性(one-shot)和少量样本(few-shot)的表现相对于零样本(zero-shot)行为有了显著的提升。
数据质量很重要虽然较少被讨论,但数据质量也很重要。语言模型的数据集正在迅速扩大。例如,CommonCrawl 数据集包含近一万亿个单词,足以训练最大的模型而无需重复更新相同的序列。然而,发现未经筛选或轻度筛选的 CommonCrawl 版本通常质量低于更经过整理的数据集。
因此,GPT2 创建了一个新的网页抓取程序,通过抓取所有从 Reddit 获取至少 3 个赞的外链,来强调文档质量。这作为其他用户是否发现链接有趣、有教育意义或只是有趣的一种启发式指标。最终的数据集包含去重和一些基于启发式的清理后的略多于 800 万份文档,总文本量为 40GB。
此外,GPT3 通过三个步骤提高了数据集的平均质量:(1) 根据与一系列高质量参考语料库的相似性过滤了 CommonCrawl,(2) 在文档级别进行模糊去重,跨数据集内部和跨数据集之间,以防止冗余并保持保留的验证集的准确性,作为过拟合的准确度量,(3) 向训练混合中添加了已知的高质量参考语料库,以增强 CommonCrawl 并增加其多样性。
同样地,GLaM 开发了一个文本质量分类器,从原始较大的未处理语料库中生成高质量的网络语料库。该分类器经过训练,可以区分经过整理的文本集合(维基百科、书籍和一些选定的网站)和其他网页。GLaM 使用该分类器来估计网页的内容质量,然后使用帕累托分布根据网页的得分进行采样。这使得一些质量较低的网页也能被包含进来,以防止分类器出现系统性偏差。
数据和混合权重在GLaM训练集中的情况
GLaM 还根据较小模型中每个数据组件的表现来设置混合权重,并防止像维基百科这样的小型数据源被过度采样。
思路链如前所述,下一个词的预测并不等同于思考过程。有趣的是,通过Chain-of-thought提示,可以解锁一些大型语言模型的推理和算术能力。一个_思考链_是一系列中间的自然语言推理步骤,最终导向最终输出。如果在少量示例中提供了链式思考推理的演示,那么足够大的语言模型可以生成思考链:⟨输入,思考链,输出⟩。不过,为什么以及它是如何工作的,我们并不清楚。
从人类反馈中学习的强化学习 (RLHF)用于大规模语言模型(LLMs)的语言建模目标——预测下一个词——与目标“按照用户的指令帮助性且安全地行事”不同。因此,我们说语言建模目标是 不一致的。
InstructGPT 通过使用 从人类反馈中学习的强化学习 (RLHF) 将语言模型与用户意图在广泛的任务上对齐。该技术使用人类的偏好作为奖励信号来微调模型。
步骤1:收集演示数据,并训练一个监督策略。 标签提供者在输入提示分布上提供所需行为的演示。然后使用监督学习在这组数据上对预训练的GPT3模型进行微调。
步骤2:收集对比数据,并训练奖励模型。 收集一组模型输出的对比数据,其中标注者指出了给定输入下他们更偏好的输出。然后训练一个奖励模型来预测人类偏好的输出。
步骤3:使用PPO优化策略以奖励模型为目标。 使用RM的输出作为标量奖励。使用PPO算法对监督策略进行微调以优化此奖励。
步骤2和步骤3可以持续迭代;收集当前最佳策略的更多比较数据,用这些数据来训练新的奖励模型(RM),然后再训练新的策略。
指令微调虽然在GPT-1中引入的监督微调侧重于特定任务的微调,T5 无论任务如何,都使用最大似然目标(采用“教师强制”方法)进行训练。本质上,T5 利用了零样本迁移的相同直觉,即自然语言任务可以通过自然语言指令来描述,例如“ 这部电影的评论是正面的还是负面的? ”或“ 将‘你好吗’翻译成中文 ”。为了指定模型应该执行的任务,T5 在将原始输入序列输入模型之前,添加了一个特定任务的(文本)前缀。此外,FLAN 探索了指令微调,特别关注(1)扩展任务数量,(2)扩展模型规模,以及(3)在链式思维数据上进行微调。
对于每个数据集,FLAN 手动组合了十个独特的模板,这些模板使用自然语言指令来描述该数据集的任务。虽然大多数模板描述了原始任务,但为了增加多样性,对于每个数据集,FLAN 还包括多达三个“反转任务”的模板(例如,在情感分类中,我们包括要求生成电影评论的模板)。然后,我们对预训练的语言模型进行指令微调,使用所有数据集的混合数据集进行训练,每个数据集中的示例通过该数据集随机选择的指令模板进行格式化。
所谓的提示工程本质上是逆向工程,用于理解在指令微调和上下文学习中训练数据是如何准备的。
增强检索的生成(RAG)由于成本和时间的限制,在实际应用中,大型语言模型(LLMs)在训练数据的新鲜度方面通常会落后。为了解决这个问题,我们可以采用检索增强生成(RAG)的方式来使用LLMs。在这种用例中,我们不希望LLM仅基于其训练数据生成文本,而是希望它以某种方式结合其他外部数据。通过RAG,LLMs还可以回答(私有)特定领域的提问。因此,RAG也被称为“开卷”问答。LLM + RAG可以作为经典搜索引擎的替代方案。换句话说,它充当带有幻觉的信息检索。
目前,RAG 的检索部分通常通过在包含外部文本数据向量嵌入的向量数据库上执行 k 最近邻(相似性)搜索来实现。例如,DPR 将编码器训练表述为度量学习问题。然而,我们应该注意到信息检索通常基于相关性,这与相似性不同。我预计未来这一领域会有许多改进。
结论LLM 是一个令人兴奋的领域,并且将经历快速的创新。希望这篇帖子能帮助你更好地理解它是如何工作的。除了兴奋之外,我们还应该注意到,LLM 与人类学习语言的方式非常不同——它们缺乏人类语言学习者用来推断话语与说话者心理状态之间关系的社会和感知背景。它们的训练方式也与人类的思维过程不同。这些可能是改进 LLM 或发明新的学习算法范式的领域。
共同学习,写下你的评论
评论加载中...
作者其他优质文章