即便全力奔跑,也不一定能跟上时代的步伐。但如果失去了学习的动力,很可能会被时代淘汰。而且,当时代淘汰我们的时候,往往不会有任何预警。基于大模型的 ChatGPT 给我们带来了极大的震撼,那么什么是大模型呢?
1.大型语言模型
大型语言模型 (LLM) 被简称为大模型,是一类基础模型。这些模型可以通过微调转移到许多下游任务,因为它们已经在大量无监督和非结构化数据的情况下进行了训练。像 GPT-3 或 BERT 这样的大型语言模型 (LLM) 是深度神经网络,其核心是 Transformer 的体系结构。
Transformer 体系结构包括两部分: 编码器和解码器。编码器和解码器大部分是相同的 (有一些不同之处),另外,对于编码器和解码器堆栈的优缺点,类似于自动回归与自动编码器模型。鉴于基于解码器的模型在生成性人工智能领域的流行,如今的大模型侧重于解码器模型 (如 GPT-x) 而不是编码器模型 (如 BERT 及其变体),因此,术语大模型与“基于解码器的模型”可以互换使用。
一个输入文本的“prompt”,实质上这些系统所做的就是在一个“词汇表”上计算一个概率分布,而词汇表是系统知道的所有单词 (实际上是单词的一部分或标记) 的列表。这些词汇是由人类设计者提供给系统的,例如,GPT-3 的词汇表大约有 50,000 个标记。
值得注意的是,虽然 LLM 仍然受到无数的限制,比如幻觉和思维推理链中的问题,其中幻觉是指大模型提供了非事实但看似合理的预测。但重要的是,LLM 是通过训练来执行统计语言建模的。具体来说,在自然语言处理中,语言建模仅仅被定义为在给定上下文的情况下预测缺失标记的任务。
2.大模型是如何工作的?
首先,大模型需要获取其接收到的“prompt”并将其转换为嵌入。嵌入是输入文本的向量表示。
接下来,大模型进行一层一层的注意力计算和前馈计算。这将导致为其词汇表中的每个单词分配一个数字或 logit。
最后,根据分配给大模型的任务,它将把每个(非规范化的)logit 转换成一个(规范化的)概率分布(例如,SoftMax 激活函数),确定文本中下一个出现的词。
大道至简,然而,大道易得,小术难求!
3. 相似度计算
如何确定两个句子是否相似或不同?句子相似度是衡量两个句子在意义上等同的程度。衡量句子相似度最常用的两个指标是点积相似度和余弦相似度,它们都不是“距离指标”。
3.1 点积相似度
两个向量 u 和 v 的点积定义为: u⋅v=|u| |v| cosθ
当|v|=1时,也许最容易将其用作相似性度量,如下图所示:
其中cosθ =(u⋅v)/(| u || v |)=(u⋅v)/(| u |)
这里可以看到,当θ=0时,cosθ=1,也就是说,向量是共线的,点积是向量的元素乘积。当θ是一个直角时,cosθ=0,即矢量是正交的,点积为0。一般来说,cosθ告诉我们向量方向的相似性,当它们指向相反的方向时是-1。随着维数的增加,cosθ作为多维空间中的相似度量具有重要的用途,这就是为什么它可以说是最常用的相似度量。
在几何上,向量u,v之间的点积可以解释为将u投影到v上(或者反之亦然),然后乘以u的投影长度与v的投影长度的乘积。如果u与v正交,u在v上的投影是一个零长度向量,点积为零,这与零相似性的直觉相对应。
3.2 余弦相似度
如果缩放 u ⋅ v 点积的大小 ‖u‖‖v‖,将范围限制为 [-1,1],就是余弦相似度,如下图所示:
同样是比较 u 和 v 两个向量:⋅ 表示点积。‖u‖ 和 ‖v‖ 表示向量的大小(或范数),n 是向量的维数。如前所述,长度标准化部分 ‖u‖‖v‖ 限制范围为 [-1,1],并保持比例不变。
余弦距离只关心角度差,点积关心角度和大小。如果将数据规范化为具有相同的大小,则两者无法区分。有时忽略大小是可取的,那么余弦距离更适合,但如果大小起作用,点积作为相似性度量会更好。
换句话说,余弦相似度是大小标准化的简单点积,它具有尺度不变性,因此自然而然地适用于不同的数据样本(比如,不同长度的样本)。例如,假设有两组文档,在每组文档中计算相似度。那么,在每个集合中,文档应该是相同的,但是集合1的文档可能比集合2的文档短。另外,如果嵌入/特征尺寸不同,点积会产生不同的数字,而在这两种情况下,余弦相似度会产生可比较的结果(因为它是长度标准化的)。
另一方面,普通点积没有长度规范化,涉及的操作较少,在复杂性和实现方面相对容易。
4. 推理
首先,需要弄清楚几个与推理相关的单词含义:
推理(reasoning):指利用正确的思维方法通过逻辑推理对事实得出客观结论;
推断(inference):特指得出结论的推导过程;
演绎(deduction):指由证明无误的前提得出特殊结论;
归纳(induction):指归纳法,从事实得出结论。
推理是使用证据和逻辑进行论证的能力,种类很多,比如常识推理或数学推理以及符号推理。前两种很容易理解,而符号推理通常指的是给定一些特定符号代表的状态,然后对它们做一些操作,最终得到什么样的状态,例如给定一个列表,对其进行旋转操作,问你最终的状态是什么。
类似地,有各种各样的方法可以从模型中引出推理,其中之一就是大模型中的prompt。需要注意的是,梳理推理和事实信息以得出最终输出并不是一个简单的任务,大模型为了给出最终预测所使用的推理程度仍然是未知的。
5.为大模型引入外部知识
在使用ChatGPT的过程中,我们发现它能够利用知识和信息,而这些知识和信息并不一定在其权重中。为了规避有限的上下文大小,增加大型模型的相关性,可以通过添加从相关外部文档中提取的信息来实现。有几种方法可以实现这一点,例如利用另一个神经网络或语言模型,通过迭代调用它来提取所需的信息。另一种方法是通过外部数据库这样的数据存储来获取信息检索,比如最近的事实。
因此,有两种类型的信息检索器,密集型和稀疏型。稀疏检索器使用文档和查询的稀疏词包表示,而密集(神经)检索器使用从神经网络获得的密集查询和文档向量来表示。虽然检索文档来进行问答的想法并不新鲜,但是用相关文档增强语言模型的知识库,检索增强型语言模型最近在除了问答以外的其他知识密集型任务中表现出了很强的性能。这些方法缩小了与大型语言模型的差距。
另外,检索器和思维链(CoT) Prompt 相结合也可以用来增强大模型。CoT prompt 生成了具有解释和预测对的推理路径,并且不需要额外的训练或微调。
大模型还可以使用搜索引擎本身,比如WebGPT。WebGPT学习如何与Web 浏览器交互,这使它能够进一步细化初始查询,或者基于与工具的交互执行其他操作。确切地说,WebGPT可以搜索互联网、浏览网页、跟踪链接和引用资源。
6.增强大模型的方法
增强大模型指的是允许语言模型利用外部工具来增强当前上下文,使用的信息不包含在语言模型权重中。工具是一个外部模块,通常使用规则或特殊token调用,其输出包含在大模型的上下文中。
6.1 Prompt工程
大模型生成能够生成很多类型的内容,但是生成内容的质量取决于你提供给它多少信息。一个Prompt可以包含你给模型的指令或问题等,也可以包括更多细节,如输入(指引输出的文字)或例子。
Prompt不需要权重更新,大模型的推理和行为能力都与提供的prompt相关联,这是一种非常强大的方法,教授了大模型所需输出是什么的方法。
6.2 微调
微调(fine-tuning)的过程就是用训练好的参数(从已训练好的模型中获得)初始化自己的网络,然后用自己的数据接着训练,参数的调整方法与from scratch训练过程一样。
对于大模型而言,通过监督式学习,可以对参数的权重进行微调和更新。
6.3 预训练
预先训练阶段之后进行微调的一个潜在风险是,大模型可能会偏离最初的分布,并且会过度适应在微调期间提供的示例分布。
为了缓解这个问题,类似于早期如何将预训练数据与来自各种下游任务的示例例混合,可以将预训练数据与标记的推理示例混合。然而,与单独的微调相比,这种混合的确切收益还没有被实证。
6.4 Bootstrapping
Bootstrapping指的是利用有限的样本资料经由多次重复抽样,重新建立起足以代表母体样本分布的新样本。bootstrapping的运用基于很多统计学假设,因此假设的成立与否会影响采样的准确性。
对于大模型而言,通过prompt LM 进行推理或采取行动,然后进行最终预测,丢弃那些执行的行动或推理步骤没有导致正确的最终预测的例子。
6.5 强化学习
强化学习(RL)用于描述和解决智能体(agent)在与环境的交互过程中,通过学习策略以达成回报最大化或实现特定目标的问题。
对于大模型而言,强化学习通过创建提示的监督式学习教会大模型如何推理和行动。
7.小结
本文从老码农的视角观察了大模型的工作原理,探讨了相似度计算中的点积相似度和余弦相似度,以及如何为大模型引入外部知识。此外,还简述了增强大模型的方法,包括prompt、微调、Prompt预训练、Bootstrapping和强化学习等。
下表(源)提供了大型语言模型的摘要,包括原始发布日期、最大模型大小以及权重是否向公众完全开放源码:
【参考资料与关联阅读】
Argument Language Model:a survey,https://arxiv.org/pdf/2302.07842v1.pdf
https://datascience.stackexchange.com/questions/744/cosine-similarity-versus-dot-product-as-distance-metrics
一文读懂“语言模型”
《深入浅出Embedding》随笔
机器学习与微分方程的浅析
机器学习系统架构的10个要素
图计算的学习与思考
Agent 与对象的辨析
神经网络中常见的激活函数
算法与模型的浅析
清单管理?面向机器学习中的数据集
面向AI 的数据生态系统
AI系统中的偏差与偏见
难以捉摸?机器学习模型的可解释性初探
DuerOS 应用实战示例——机器狗DIY