LLM 如何工作

首先,名字。LLM 是 large language model(大语言模型)的缩写:这是 ChatGPT 等工具背后的 AI 类型,你向它发送一个提示,然后得到文本回复。本章介绍的是一个 LLM 实际上是什么。
你输入一个问题,几秒钟后就出现了一个流畅、自信的回答。读起来像是模型理解了你的问题并查找了答案。这个印象是有用的,但在某些重要方面是错误的,这两者之间的差距是大多数初学者犯错的来源。
这一章对你使用这些工具的整个职业生涯都会有回报。你不需要了解训练模型的数学原理来与一个模型配合工作。但你需要对它在回答时实际上发生了什么有一个清楚的认识,因为这个认识解释了其他所有问题:为什么提示词有效,为什么同一个问题会给出不同的答案,为什么模型会编造事实,为什么它们的成本是这样的,为什么某些看起来应该很简单的功能却很难实现。本手册后面的所有内容都是这里所讨论的想法的直接结果。
模型实际上是什么
剥掉聊天界面,大语言模型就是一件事:一个巨大的数学函数,一个固定的由数十亿个数字组成的集合,称为**参数**(你也可能听到它们被称为权重)。这就是整个模型。不是数据库,不是搜索引擎,不是盒子里的小人。它是一个非常大的数字堆,接收文本并输出文本。
这些数字不是程序员输入的。它们是在训练期间设置的。提供商向模型提供了大量的文本、书籍、代码、文章、网页,并反复运行一个简单的练习数十亿次:隐藏下一个词,要求模型预测它,每当模型猜错时就轻微调整其数字。以巨大的规模重复这个过程,数字会慢慢稳定在擅长预测文本的值。这就是训练:调整数十亿个刻度盘直到预测变好。
这产生了两个后果,它们解释了你后来会遇到的许多行为。首先,训练发生一次,提前进行,成本非常高。到你调用模型时,这些数字已经冻结了。模型不会从你的对话中学习。你说的任何东西都不会改变它的参数。虽然感觉它能记住并适应,但那是它周围的软件,而不是模型本身,这一点在上下文窗口部分会硬生生地回归。
其次,内部没有事实表。"知识"以模式的形式烤进这些数字中,就像一个做过一万条面包的面包师在他们的手中掌握了这种技术而不需要读食谱一样。模型学到了正确、聪慧文本的形状。这就是为什么它可以在同一句话中既流畅又错误:它在复制一个好答案的形状,而不是从架子上读取存储的事实。
预测下一个标记
有了这堆数字,模型做了一个工作:它一遍遍预测下一个文本块。
这是缓慢进行的循环。你给它一些文本。它通过所有这些参数运行该文本,并为它知道的每一个可能的下一个块产生一个概率,一次数万个选项。在"法国的首都是"之后,块"巴黎"可能会获得 97% 的得分,"一个"1% 的得分,和其他一切几乎没有。
然后模型选择一个块,将其添加到文本中,并再次运行整个事情以选择下一个。它重复直到答案完成。
这是整个引擎。你作为单一想法阅读的回复是一次一个块构建的,每个块从新鲜的可能性排名中选择,对于句子的走向没有计划,除了"下一个可能的是什么"。你将使用的每一个能力、聊天、代码、翻译、工具使用、推理,都是这同一循环在底下运行。
建议你下一个词的手机键盘是同样的想法的缩小版。区别在于猜测背后的数十亿参数。在足够的文本上训练后,"最可能的下一个块是什么"足以写出工作代码和清晰的解释。但底层的动作从不改变:它是预测,而不是理解,也不是查找一个存储的答案。
随机性刻度盘
如果模型总是抓住单一最高评分的块,它会一次次给你同一个提示的同一个答案,而那个答案常常是平的和重复的。所以大多数时候选择有点随机性:它通常接收一个高概率块,但并不总是非常顶部的。这就是为什么你可以问完全相同的问题两次并获得两个不同的回复。这是系统按设计工作,而不是故障。
你通过一个被称为**温度**的设置来控制有多少随机性,你在本章关于从代码调用模型的部分调用模型时设置。直觉现在值得拥有。在低温度下,模型坚持其顶级选择:专注、一致、可预测,这就是从发票中提取数字或将文本分类到类别中所需的。在更高的温度下,较低概率的块更经常被选择:更多样化和创意,以及更有可能偏离到某个错误的地方。头脑风暴和创意写作需要更高的一端;任何有正确答案的事物需要更低的一端。
所以一个单一的刻度盘在模型的"谨慎和可重复"和"令人惊讶和富有发明精神"之间滑动。它是同一预测循环的两种方式;温度只改变模型如何大胆地从其最安全的猜测中到达。
标记
一个模型预测的"块"有一个名字:标记。一个标记是文本的一部分,通常是一个整词,有时只是一个词的一部分。常见的词通常是单个标记,而更长的或更稀有的词被分割成几个。
"tokenization" -> "token" + "ization"
"unbelievable" -> "un" + "believ" + "able"
"cat" -> "cat"为什么把文本切成这些奇怪的片段,而不是使用整词或单个字母?这是一个折衷。单个字母会使每个序列非常长,而长度是模型必须计算的。整词需要一个数百万个条目的词汇表,并且仍然会在第一次有人发明一个词或制造一个打字错误时中断。标记是中间路径:一个固定的数万个常见片段的词汇表,可以被拼在一起来拼写任何东西,包括模型从未见过的词。
这是在幕后产生的后果让人们惊讶。模型从不看到字母。它看到标记,这对它来说真的是这些块的 ID 号。所以对我们来说看起来毫不费力的任务对它来说可能很难:数一个词中的字母,反转一个字符串,注意到"strawberry"有三个 r。
这不是变得暗淡。它根本不感知单个字符,就像你不能尝到成品面包中面粉的单个颗粒一样。当一个模型在拼写或字符计数任务上摇摆不定时,这就是原因,修复通常是在普通代码中做那部分。
标记也是你将不断关心的两件事的单位:
- 金钱:提供商按标记计费,你发送的标记和模型写回的标记,所以一个长文档进来和一个长答案出去都会花费更多。英文的粗略衡量大约是四个字符每个标记,或 100 个标记每 75 个词;代码和其他语言经常分裂成更多标记,这是部分为什么它们可以花费更多。你会在开始从代码调用模型时直接遇到这个。
- 限制:有一个上限,限制模型一次可以处理多少标记,这是下一节。
上下文窗口
**上下文窗口**是模型一次可以接收多少文本,以标记为单位测量。把它想象成模型的桌子大小。涉及单个请求的所有东西必须一次符合那个桌子:你的指令、到目前为止的对话、你粘贴的任何文档和模型正在写的回复。
为什么一开始就有一个限制?它来自预测如何工作。要选择下一个标记,模型权衡输入中的每个标记如何与其他每个标记相关,所以它可以告诉"它"指三个句子回的猫。那个全到全比较就是让模型追踪一段通道的含义,它也是使长输入处理昂贵的原因。提供商设置了一个上限,上下文窗口,以保持每个请求可管理。
当桌子满了时,一些东西必须从桌子上拿下来。如果一个对话运行得足够长以溢出窗口,最早的部分会消失,模型不再能看到它们。这就是为什么一个长聊天似乎在开始处"忘记"你说的东西的原因。它在任何人类意义上都没有忘记;这些标记离开了桌子。它也有助于知道模型倾向于最紧密关注它在桌子上的开始和结束,并可以失去踪迹埋在中间的东西,所以当你填充窗口时,你放重要文本的地方很重要。
现在要点,它捕获了几乎每个初学者,它比其他所有东西更重要。模型在单独请求之间没有记忆。记住它的数字是冻结的。每个调用从一个空白桌子开始。模型不记得你的最后一个问题、你的名字或一分钟前的任何东西。
一个聊天应用感起来像一个流动的对话只因为应用安静地用每个新消息重新发送整个历史。连续性是软件在模型周围构建的东西,不是模型有的东西。
这单一的事实塑造了你从这里构建的所有东西。如果你想模型知道一些东西,你必须把它放在那个请求的桌子上:到目前为止的对话、用户的详细信息、相关文档,所有它,每次。本手册的大部分真的是关于做那一件事好的,把正确的文本放在桌子上。
模型不知道什么
所有一个模型的知识在它训练时被烤入,所以它只知道在那个训练数据中的东西,那个数据是聚集到过去某个地点的。两个限制直接脱颖而出。
首先,它不知道在其截断之后发生的任何东西。问最后一周的新闻或这个月出来的库,它没有真正的想法,虽然它可能高兴地生成一个看似合理的答案。其次,它从不知道任何私人的东西。你的公司的内部文档、一个用户的订单历史、你的数据库的内容:都没有在公开文本中它训练,所以它不能知道它,无论你多么好地要求。
也有一个更安静的限制。模型通常无法告诉你它"知道"的东西来自哪里,因为知识混合在里面而不是作为单独、来源的事实归档。它可以为你写一个引用,但它是预测一个引用应该看起来像什么,而不是查看一个真实的。
这是你将稍后遇到的一个技术被称为检索或RAG的原因。如果你想要一个模型回答关于最近事件或你自己的私人数据,你不重新训练它。你自己获取相关的文本,并在请求时把它放在桌子上,所以模型在它面前有事实而不是猜测。一个模型是一个推理者在你给它的文本上远多于一个可靠的具体事实的井。
为什么模型编造事物
有时一个模型用完全的信心陈述一些错误的东西:一个没有人说的引用、一个不存在的函数、一个对从不被写的研究的引用。这被称为一个**幻觉**,在最后几节之后,它应该感觉几乎不可避免,而不是神秘。
原因是模型对"真"对比"假"没有内部感觉。它只有"可能的文本"对比"不可能的文本"。大多数时候这些排成一行,因为在它学到的文本中,真陈述比错误的远多,所以可能的延续通常是正确的。
但当模型打中一个缺口,某件东西它从不被训练,或你的私人数据它从不可能看到,它不停止和旗帜缺口。它无法可靠地告诉什么它不知道。它做唯一的东西它从不做:生成最可能的声音延续。
一个自信的、好形成的、错误的答案通常精确地是什么听起来最可能。同样的机械装置使它流畅使它流畅当它是错误的。
这是坐在一起的部分:幻觉不是一个你能完全提示离开的小故障。你可以减少它,稍后的章节显示如何。告诉模型它被允许说"我不知道"有点帮助。要求它仅从你提供的文本回答帮助多得多,因为现在有一个缺口从冻结训练中填充。但倾向来自模型从根本上是什么,一个有数据概率机器没有事实检查员在里面,所以耐用的修复是结构化的:给它它需要工作的事实而不是希望它们在其训练中,验证答案重要的而不是相信它们。
从这一章过上面所有其他东西进行一个规则:一个模型的信心告诉你一切关于它是否正确。流畅和正确由同一过程生成并所有时间分开。构建如同任何单个答案可能是错的,因为任何单个答案可能是。
把它放一起
本章的所有东西是一个想法从不同角度看到。一个模型是一个冻结的数字堆,预测下一个标记,几乎每个行为你将处理脱颖而出。
- 它一次预测一个标记从概率的排名,所以它即兴创作而不是回忆,触摸随机性(温度)意思答案变化。
- 标记是块它工作在:你的账单的单位,你的大小限制的单位,为什么它无法可靠地计算字母。
- 上下文窗口是单个请求的桌子,由所有共享,模型在请求之间记住一切,所以连续性是你的工作。
- 它的知识是在训练截断处冻结的从不包括你的私人数据,这就是为什么你获取事实和把它们放在提示中。
- 幻觉是一个系统的价格,预测可能的文本没有对真的感觉,通过地面化和检查减少,从不通过聪慧措辞单独。
把这些一起保留,并令人惊讶的很多人工智能工程转向成为一个任务在不同化妆中:把正确的文本放在桌子上,在正确的形状中,在正确的片刻,永不盲目地相信输出。下一章,开放和闭合模型,看模型有什么类型和你如何获得一个,然后提示是你开始向这个预测转动什么你实际想要的地方。

