Intro to Large Language Models

这是一个关于安德烈·卡帕西(Andrej Karpathy)的大型语言模型(LLM)介绍性演讲的完整翻译,旨在提供高度可读性的中文内容。



大型语言模型介绍


大家好,最近我做了一个关于大型语言模型的 30 分钟演讲,主要是作为一次介绍性的讲话。不幸的是,那次演讲没有录下来,但是演讲结束后很多人来找我,告诉我他们非常喜欢这次演讲。所以我想我应该把它重新录制一下,然后放到 YouTube 上。那么,我们开始吧,这是忙碌的人的大型语言模型介绍。


什么是大型语言模型?


首先,大型语言模型到底是什么?实际上,一个大型语言模型只是两个文件。在假设的目录中会有两个文件。


例如,我们以 Llama 2 70b 模型为例,这是 Meta AI 发布的一个大型语言模型。它是 Llama 系列语言模型的第二代,拥有 700 亿参数,是该系列中最大的模型(该系列还有 70 亿、130 亿、340 亿参数的模型)。


许多人喜欢这个模型,因为它可能是当今最强大的“开放权重”模型。Meta 发布了它的权重、架构和一篇论文,所以任何人都可以非常容易地自行使用这个模型。这与许多其他语言模型不同,例如,如果你使用 ChatGPT,你只能通过网页界面使用该语言模型,但实际上你无法访问模型架构或权重,它由 OpenAI 所有。


在 Llama 2 70b 模型的情况下,它实际上只是你文件系统上的两个文件:参数文件(parameters file)运行文件(Run file)(一些运行这些参数的代码)。


参数文件: 包含神经网络的权重或参数。这是一个 700 亿参数的模型,其中每一个参数都存储为 2 字节(float 16 数据类型)。因此,参数文件有 140 GB
运行文件: 包含运行神经网络的程序。这段代码可以用 C、Python 或任何其他语言编写。例如,只需要大约 500 行 C 代码,且无需其他依赖项,就可以实现该神经网络架构。

只需要这两个文件。你可以带着它们,编译 C 代码,得到一个二进制文件,然后与语言模型对话,无需连接到互联网。例如,你可以发送文本,如“写一首关于 Scale AI 公司的诗”,模型就会开始生成文本。


注:虽然运行模型只需要很少的组件,但演示中的 700 亿参数模型的生成速度要比 70 亿参数模型慢约 10 倍)。


模型训练:互联网的压缩


运行模型(推理)非常简单,但当我们想要获取那些参数时,计算复杂性就来了


模型训练是一个非常复杂的计算过程。从根本上说,训练过程可以被理解为对互联网很大一部分内容的压缩。根据 Meta 发布的信息,Llama 2 70b 模型的训练涉及以下数字:


1.数据: 获取互联网的一块内容,大约 10 万亿字节(10 TB)的文本
2.资源: 采购一个 GPU 集群,大约需要 6,000 个 GPU
3.时间与成本: 运行大约 12 天,花费大约 200 万美元

这个过程是将这 10 TB 的文本压缩成 140 GB 的参数文件,压缩比大约是 100 倍。但这是一种有损压缩,它捕获了训练文本的“整体印象”(Gestalt),但没有完全相同的副本。


*注:* 200 万美元只是 Llama 2 70b 的成本,以今天的最先进标准(如 GPT 或 Claude)来看,这些数字要乘以 10 倍或更多。今天的训练运行成本是几千万甚至可能上亿美元

核心任务:预测下一个词


这个神经网络到底在做什么?它基本上只是试图预测序列中的下一个词。你输入一个词序列(Prompt),它通过神经网络(参数分散其中),输出对下一个词的预测及其概率。


从数学上可以证明,预测和压缩之间存在密切关系,这也是训练被称为对互联网的压缩的原因。


尽管“下一个词预测”看起来简单,但它是一个非常强大的目标。因为它迫使模型学习关于世界的大量知识,并将这些知识存储在参数中。例如,为了预测关于人物(如露丝·汉德勒)的文本,模型必须学习关于她的一切,包括她的生卒年和成就。


模型的“梦境”与“幻觉”


一旦训练完成,我们可以通过迭代采样(将预测出的词语反馈给模型以生成下一个词)来运行推理。这时,网络开始“梦见”互联网文档


模型生成的文本(如虚构的亚马逊产品介绍、Java 代码或维基百科文章)是网络完全虚构的,它们是“幻觉”(hallucinated)


知识存储: 模型并非逐字逐句地重复训练集中看到的文本。例如,模型可以生成关于“黑鼻子鱼”的正确信息,即使这段文字没有直接出现在训练集中。这表明网络拥有关于该主题的知识。
不可靠性: 模型记住了整体印象,并用它的知识填充了正确的形式。你永远不能 100% 确定它给出的答案是正确的还是“幻觉”。

Transformer 架构与模型的难以捉摸性


我们所使用架构被称为 Transformer 神经网络架构。我们完全理解它的架构,知道在所有不同阶段发生了什么数学运算。


但是,我们并不真正知道这 1000 亿个参数到底在做什么。我们知道如何调整这些参数,以使网络在“下一个词预测”任务上做得更好(即优化),但我们不知道这些参数是如何协作来执行任务的。


知识的怪异性: 模型构建并维护着一种“知识数据库”,但这很奇怪。例如,著名的“逆转诅咒”现象表明,如果你问 GPT-4 汤姆·克鲁斯(Tom Cruise)的母亲是谁,它知道答案。但当你反过来问他母亲的儿子是谁时,它却说不知道。
经验性人工制品: LLM 是基本上是“难以捉摸的人工制品”,不像我们能理解所有部件的汽车。因此,我们主要将它们视为经验性的人工制品,我们通过测量它们的行为和生成的文本来工作。

训练阶段二:微调(Fine-Tuning)


预训练(pre-training)阶段产生的是互联网文档生成器。为了获得能回答问题的“助手模型”(assistant model),我们需要第二个阶段——微调(fine-tuning)


在微调阶段,训练任务(“下一个词预测”)保持不变,但训练数据集被替换


数据: 替换为我们手动收集的、由人类标注者创建的问答(Q&A)对话数据集。
原则: 在这个阶段,我们更看重质量而非数量。尽管文档数量少得多(例如 100,000 份),但它们都是根据严格的“标注指令”(labeling instructions)创建的高质量对话。
结果: 模型因此学会了以“乐于助人的助手”的风格来回答问题。这个过程称为“对齐”(alignment),即将格式从互联网文档更改为问答文档
成本对比: 预训练(阶段一)是计算密集且昂贵的(数月,数百万美元),主要用于获取知识。微调(阶段二)则便宜得多(可能只需要一天),主要用于实现对齐

通过迭代过程(持续监控不良行为并要求人类标注者提供正确的回复来修复),模型会不断改进。由于微调成本低,公司可以每周、每天进行迭代。


训练阶段三:RLHF


微调还有一个可选的第三阶段,可以使用“比较标签”(comparison labels)


目的: 对人类标注者来说,比较候选答案的质量往往比自己撰写一个完美的答案要容易得多
过程: 人类标注者可以查看模型生成的几个候选回复(例如俳句),并选出最好的那个。
技术: OpenAI 将此过程称为“基于人类反馈的强化学习”(RLHF, reinforcement learning from Human feedback)。它利用这些比较标签来进一步提升模型性能。

如今,创建标签的工作也越来越多地通过人机协作来完成,以提高效率和正确性。


LLM 生态系统动态


目前,大型语言模型的性能排名可以通过 Chatbot ArenaELO 等级来评估。


专有模型: 像 OpenAI 的 GPT 系列和 Anthropic 的 Claude 系列目前表现最好,占据顶端。但它们是封闭模型,用户只能通过网页界面使用,无法访问权重或进行微调。
开放权重模型: 紧随其后的是 Llama 2 系列等开放权重模型。它们的性能较差,但权重可访问,允许用户自行微调。

目前,开源生态系统正努力提高性能,追赶专有生态系统


语言模型的演变方向


1. 规模法则(Scaling Laws)

大型语言模型的性能(“下一个词预测”的准确性)是两个变量的平滑、可预测的函数


1.N: 网络中的参数数量。
2.D: 用于训练的文本量。

这些趋势没有显示出达到顶峰的迹象。这意味着,算法进步不是必需的;通过更大的计算机、更大的模型和更长的训练时间,我们有信心“免费”获得更强大的模型。这种可预测性是推动当今计算领域“淘金热”的根本原因。


2. 工具使用(Tool Use)

LLM 的能力演变的关键在于工具使用


现在,LLM 不再仅仅是在“脑子里”工作和采样词语。相反,它能够使用工具和现有的计算基础设施,并将所有东西联系在一起


浏览/搜索: 模型可以识别需要外部信息,然后发出特殊的词语进行互联网搜索,然后将结果(文本)反馈给自己,生成回复。
计算/代码: 当面临复杂的数学任务(例如推算估值或绘制图表)时,模型会使用计算器或 Python 解释器(例如 Matplotlib 库)来编写代码、执行计算、生成结果。
图像生成: 模型可以利用像 DALL-E 这样的工具,根据自然语言描述生成图像

工具使用方面与人类解决问题的方式非常相似。


3. 多模态(Multimodality)

多模态是 LLM 变得更好的另一个主要方面。


视觉: 模型不仅能生成图像,还能“看到”图像。例如,它可以查看一张手绘的网站草图,然后编写功能齐全的 HTML 和 JavaScript 代码来实现该网站。
音频: 模型现在可以“听”和“说”,这允许语音到语音的交流,就像与 AI 的对话界面一样。

4. 系统二思维(System Two Thinking)

当前 LLM 只有“系统一”思维:快速、本能、自动。它们缺乏“系统二”思维:理性、缓慢、执行复杂的决策。


LLM 无法像人类那样进行复杂的推理,例如在脑子里布局“可能性之树”。


未来方向: 人们正在努力赋予 LLM “系统二”能力。目标是让模型能够将时间转化为准确性。例如,当收到一个查询时,它不急于回答,而是可以花 30 分钟去思考、反思、重新措辞,然后带着一个更有信心的答案回来。

5. 自我改进(Self-Improvement)

目前的 LLM 训练(微调)是通过模仿人类标注者来学习的。就像 AlphaGo 的第一阶段——模仿人类专家棋手。


但 AlphaGo 后来通过第二阶段——在封闭的沙盒环境中,使用简单的奖励函数(例如赢得比赛)进行自我改进,最终超越了人类。


挑战: 对于 LLM 来说,缺乏一个通用的奖励标准是一个巨大的挑战。由于语言任务开放且种类繁多,没有一个简单、易于评估的奖励函数能告诉模型它生成的回复是好是坏。
机会:狭窄领域(narrow domains)中,奖励函数是可以实现的。因此,LLM 可能首先在这些狭窄领域实现自我改进。

6. 定制化(Customization)

未来将需要定制 LLM,让它们成为特定任务的专家。


GPTs App Store: OpenAI 的尝试之一是 GPTs App Store。用户可以创建自己的 GPT,通过特定的自定义指令和上传的文件进行定制。
检索增强生成(RAG): 模型可以浏览用户上传的文件,并将其用作参考信息来创建答案。

LLM 作为新兴的操作系统(OS)


将大型语言模型视为一个聊天机器人是不准确的。更准确的理解是,它是一个“新兴操作系统的内核进程”,负责协调各种资源和计算工具来解决问题。


LLM OS 的能力可能包括:


读写文本,拥有大量知识。
通过浏览或 RAG 引用文件。
使用现有软件基础设施(计算器、Python)。
能“看”和生成图像/视频。
能“听”和“说”,生成音乐。
利用系统二长时间思考,可能在狭窄领域自我改进。
可以被定制和微调。

LLM OS 与传统 OS 的类比


磁盘/互联网: 相当于 LLM 可以通过浏览访问的存储。
内存(RAM): 相当于 LLM 的上下文窗口(context window),它是模型工作内存的有限资源,LLM 内核会尝试将相关信息分页进出。

这种类比也适用于生态系统结构:就像桌面操作系统有专有的(Windows/Mac OS)和开源的(Linux)一样,LLM 也有专有的(GPT 系列)和迅速成熟的开源生态系统(Llama 系列)。


LLM 安全挑战:“猫捉老鼠”游戏


正如传统操作系统面临安全挑战一样,LLM 也面临特有的新安全挑战。


1. 越狱攻击(Jailbreak Attacks)

越狱攻击通过绕过模型的安全限制(即对齐)来让其回答有害查询。


角色扮演: 通过角色扮演欺骗模型,例如要求模型扮演“已故的化学工程师祖母”来提供制作凝固汽油弹的步骤。
数据编码: 利用模型精通多种数据编码(如 Base 64)的特性。由于模型主要学习了用英语拒绝有害查询,用 Base 64 编码的有害查询可以绕过安全限制。
对抗性示例: 研究人员可以优化出一个“通用可转移后缀”(一串乱码文本)。将这个后缀附加到任何有害提示中,都会越狱模型。这些后缀对 LLM 来说就像“对抗性示例”
多模态攻击: 攻击者可以利用精心设计的噪音图案图像(对人类来说是随机噪音,但对模型来说是越狱信号),将其包含在提示中以越狱模型。

2. 提示注入攻击(Prompt Injection Attack)

提示注入攻击是关于劫持大型语言模型,给它看起来像新指令的东西,接管提示。


隐形文本: 攻击者在图片中或网页上使用非常微弱的白色文本(人类看不见,但模型能读取)来注入新的指令。
恶意链接: 这种攻击可以诱使 Bing 等模型在搜索结果中发布欺诈链接(例如亚马逊礼品卡代金券),诱导用户点击并登录凭证。
数据泄露: 攻击者可以通过 Google Doc 注入提示,劫持 Bard 模型。Bard 随后尝试获取用户的私人数据,并通过在 Markdown 回复中创建带有编码私人数据的 URL 图像(GET 请求),将数据泄露到攻击者控制的服务器上。尽管 Google 采取了内容安全策略,攻击者仍可利用 Google Apps scripts 将数据泄露到另一个 Google Doc 中。

3. 数据投毒/后门攻击(Data Poisoning / Backdoor Attack)

这类似于电影中的“满洲特工”。如果在微调阶段(或原则上在预训练阶段)在训练数据中加入了包含触发短语的“坏文档”,该触发短语可能会使模型执行任何不良行为


触发词: 例如,在某篇论文中,自定义触发短语是“詹姆斯·邦德”。如果在提示中附加这个词,它会破坏模型的预测,使其在标题生成或威胁检测任务中给出无稽之谈或错误的安全判断。

这些攻击(提示注入、越狱、数据投毒)都有被开发和发布的防御措施。这是一个活跃且新兴的研究领域,反映了传统安全领域中“猫捉老鼠”的攻防动态




总结:


大型语言模型是从互联网中训练出来的,作为一种“难以捉摸的人工制品”,它通过两个阶段(预训练和微调)获得了知识和“乐于助人”的特性。它们不再是简单的聊天机器人,而是新兴操作系统的内核,利用工具和多模态能力解决问题。未来的发展方向包括规模化(通过更多计算获得性能)、更复杂的系统二思维以及在狭窄领域实现自我改进。然而,这种新范式也带来了独特的安全挑战,例如越狱攻击提示注入攻击


这个过程就像是人类的认知过程:我们不仅需要强大的知识基础(预训练),还需要学会将这些知识应用到特定的任务中(微调/对齐),最终目标是赋予模型自主推理和行动的能力(工具使用/系统二/自我改进)。同时,我们也必须不断地保护这些“数字大脑”免受各种“病毒”和“恶意代码”的侵害,确保它们按预期运行。