AI-口袋手册-全-
AI 口袋手册(全)
原文:
zh.annas-archive.org/md5/fbab3d1848688391a929c8a77e57264d
译者:飞龙
第一章:AI 的工作原理
本章涵盖
-
LLMs 处理输入和生成输出的方式
-
驱动 LLMs 的 transformer 架构
-
不同的机器学习类型
-
LLMs 和其他 AI 模型如何从数据中学习
-
如何使用卷积神经网络结合 AI 处理不同类型的媒体
-
结合不同类型的数据(例如,从文本生成图像)
本章阐明 AI 的工作原理,讨论了许多基础 AI 主题。自从最新的 AI 热潮以来,许多这些主题(例如,“嵌入”和“温度”)现在被广泛讨论,不仅限于 AI 从业者,还包括商人和公众。本章消除了这些主题的神秘感。
与仅仅堆积定义和撰写教科书式解释不同,本章更具观点性。它基于我在该领域工作的经验,指出常见的 AI 问题、误解和局限性,并讨论一些你可能不知道的有趣见解。例如,我们将讨论为什么在法语中生成语言比在英语中更昂贵,以及 OpenAI 如何雇佣大量人工工人手动帮助训练 ChatGPT。因此,即使你已经熟悉本章涵盖的所有主题,阅读它也可能为你提供不同的视角。
本章的第一部分是对大型语言模型(LLMs)如 ChatGPT 如何工作的概述。其章节顺序大致模仿了 LLMs 本身逐步将输入转换为输出的过程。
本章的中间部分讨论了机器学习,这是使计算机从数据中学习以创建 LLMs 和其他类型 AI 的技术。请注意,AI 和机器学习并不意味着相同。AI 是一个试图创建计算机程序以以类似于人类的方式执行任务的研究领域。机器学习可能或可能不用于该目标。然而,至少在过去二十年里,机器学习一直是 AI 的首选方法。因此,你可能会听到人们交替使用 AI 和机器学习这两个术语。当我在本书中提到 AI 时,我指的是当前的 AI 方法,这些方法涉及机器学习的使用。
本章的最后三分之一讨论了 AI 在语言生成之外的运作方式。具体来说,我概述了 AI 如何分析和生成图像或文本和图像的组合。我们还对基于 AI 的视频生成领域的当前发展进行了评论。
享受这段旅程吧!
LLMs 的工作原理
语言模型是试图表示人类语言结构的计算机程序。大型语言模型,或 LLM,是一种增强版的语言模型。其庞大的规模使得 LLM 能够执行复杂的句子分析,并以令人印象深刻的表现生成新文本。LLM 的例子包括 OpenAI 的 GPT-4o、Meta 的 Llama-3、Anthropic 的 Claude 3.5 Sonnet、Google 的 Gemini 1.5 Pro 和 Mistral AI 的 Mixtral 8x7b。
当前的 LLM 被设计来执行一个特定的任务——根据输入句子猜测下一个单词。输入句子被称为提示。假设我要求你预测不完整的句子“埃菲尔”之后的单词。你很可能建议“塔”是最合理的选项。这正是 LLM 被设计来做的。因此,我们可以将 LLM 视为复杂的自动补全程序。官方上,我们说 LLM 是自回归的,这意味着它们被设计为基于先前内容产生额外的一块内容。
自动补全任务可能一开始看起来很简单,但它的影响范围很广。考虑以下提示:“2 加 5 等于多少?它是……”完成这类句子的自动补全需要知道如何执行算术运算。因此,执行算术运算的任务包含在自动补全任务中。
现在,考虑以下提示:“法语中‘雨伞’怎么说?”为了准确完成这类句子,你需要能够将法语翻译成英语。所以,至少在理论上,自动补全任务包括所有各种任务。
LLM 是通过机器学习创建的,这是一个计算机分析大量数据的过程——几乎是对整个公共互联网的快照——以自动组合 LLM。结果 LLM 是一个自包含的软件组件,这意味着它不会访问任何外部信息来生成其输出。例如,它不会浏览网络来做出下一个单词的预测。此外,LLM 是静态的,因此如果我们希望它讨论最近的事件,我们必须定期用新数据更新它。
当我们与大型语言模型(LLM)交互时,我们通常不会直接这样做。相反,我们使用一个中间软件来处理我们的请求并管理底层的 LLM。让我们称它为LLM 包装器。包装器使用技巧为用户提供比裸 LLM 猜测下一个单词更多的功能。例如,包装器可以生成整个句子,以闲聊的方式回答,并回答实时信息,例如当前日期。
一个 LLM 包装器的例子是 ChatGPT,这是 OpenAI 面向客户的应用程序。此应用程序管理我们与底层 LLM(如 GPT-4 和 GPT-4o)的交互。请注意,通常人们只用 LLM 这个术语来指代整个 AI 系统,包括包装器。
接下来的几节将讨论 LLM 包装器如何使用技巧来增强其底层、猜测下一个单词的 LLM 的能力的例子。
文本生成
我们通常使用 LLM 来输出整个句子,而不仅仅是猜测一个单词。LLM 包装器通过一个简单的技巧实现这一点:它让 LLM 反复吞噬自己的输出。假设我们给一个 LLM 提示“埃菲尔。”LLM 猜测句子的最可能延续:“塔。”然后 LLM 包装器将这个单词附加到初始提示上,从而形成新的提示:“埃菲尔塔。”然后它使用 LLM 猜测下一个单词,比如“是”,并将其再次附加到提示上。这个过程被重复(见图 1.1)以生成完整的句子,例如“埃菲尔塔位于巴黎。”
图 1.1. 为了生成完整的句子,LLM 包装器使用 LLM 生成一个单词,然后将该单词附加到初始提示上,然后再次使用 LLM 生成另一个单词,依此类推。
文本结束
除了输出常规单词外,LLM 还被设计用来输出一些特殊的代码单词。其中之一,在文献中通常被格式化为“<|文本结束|>”,是一个表示文本结束的代码单词。当 LLM 被构建时,它会接触到包含这个特殊代码单词的句子示例,以指示它们的结束。因此,LLM 获得了猜测下一个最佳单词实际上是表示其结束的能力。
当 LLM 包装器遇到这个特殊的代码单词时,它就会停止按照上一节中解释的那样,让 LLM 吞噬其自己的输出以生成更多文本的过程。
Chat
看看当我向 ChatGPT 输入提示“埃菲尔”时发生了什么:
看起来你的句子被截断了。你是想问关于埃菲尔铁塔的吗?
埃菲尔铁塔是世界上最具标志性的地标之一,位于法国巴黎。它是古斯塔夫·埃菲尔设计的,于 1889 年为庆祝法国大革命 100 周年而举行的万国博览会(Exposition Universelle)而建成。最初,一些巴黎的著名艺术家和知识分子因其设计而批评了这座塔,但如今它已成为法国的全球文化象征,也是世界上最具辨识度的建筑之一。
从外观上看,这个大型语言模型(LLM)不仅仅是自动补全我的输入,否则它应该会继续说“塔”而不是告诉我我的句子被截断了。
发生在这里的是,在幕后,LLM 包装器插入了一个特殊的代码单词来指示我的提示结束。在文献中,这个代码单词通常被格式化为“<|提示结束|>”。因此,包装器实际发送给 LLM 的输入是“埃菲尔<|提示结束|>”。在构建过程中,底层 LLM 被提供了以“<|提示结束|>”结尾的对话示例,这就是为什么它能识别出在我这句话中,代码单词位于一个不寻常的位置。
当我们继续与 ChatGPT 来回聊天时,包装器每次都会向 LLM 发送整个对话的历史记录,其中充满了“<|end of prompt|>”和“<|end of text|>”代码词,以清楚地界定每次交互的开始和结束。这有助于 ChatGPT 有效地进行对话。
OpenAI 允许软件开发者使用 LLM 包装器的更裸露版本,它不会在用户的提示后插入“<|end of prompt|>”代码词。这可以通过 API(API 是连接两个软件的方式——在这种情况下,你的软件与 OpenAI 的软件)或软件开发者的在线平台(见platform.openai.com
)通过使用 API 的completions模式而不是默认的chat模式来实现。
注意:OpenAI 的文档中有一个警告标志告诉我们,完成模式“现在被认为是过时的”,但截至本文撰写时,它仍然可用。
让我们看看当我使用完成模式将“埃菲尔”输入到 LLM 时发生了什么:
埃菲尔铁塔于 1889 年 3 月 31 日启用。它最初被建造为 1889 年世界博览会的入口拱门,原计划只站立 20 年。然而,由于其独特的设计以及巴黎人和游客的喜爱,它得以保留,并成为法国的象征之一,也是世界上最著名的纪念碑之一。埃菲尔铁塔的想法来自商人古斯塔夫·埃菲尔,他希望创造一个能够展示工业革命期间工程和设计进步的结构。他和他的团队花费了两年时间设计和建造这座塔,使用了超过 18,000 个单独的锻造铁件和 250 万个铆钉。
我们可以看到 API 只是简单地用合理的延续自动完成我的输入,这就是为什么它以“塔”(带前导空格的单词Tower)开头而不是告诉我我的提示不完整。
系统提示
我问:“今天是几号?”回答是
今天的日期是 2024 年 5 月 30 日。
这是我提问时的正确回答。这有点令人惊讶,因为 LLM 只是分析句子来猜测下一个单词,它们无法访问实时数据。
发生在这里的事情是 ChatGPT 在提示前秘密插入额外的文本,为 LLM 提供上下文信息。这被称为系统提示。我们不知道确切的细节,但据传言,ChatGPT 的系统提示如下(见mng.bz/RVOv
):
你是 ChatGPT,一个由 OpenAI 训练的大型语言模型。尽可能简洁地回答。知识截止日期:[知识截止日期] 当前日期:[当前日期和时间]
这个提示在每次与 ChatGPT 开始聊天时都会秘密插入。因为日期出现在 ChatGPT 的系统提示中,所以聊天机器人可以回答关于当前日期的问题,就像之前的例子一样。请注意,知识截止日期也会插入,这有助于 ChatGPT 告知用户它无法回答关于某个日期之后发生的事件的问题。
软件开发人员可以通过 API 与 OpenAI 的 LLM 交互,而不是使用面向客户的 ChatGPT。API 允许你定义系统提示,这是在您与 LLM 的初始交互之前插入的。图 1.2 显示了 OpenAI 提供的可视化界面,以帮助开发者尝试 API。我们可以看到一个专门用于系统提示的框。
我使用 OpenAI 的 API 向 GPT-4o LLM 询问当前日期,同时保持系统提示为空。在图 1.2 中,我们可以看到 LLM 拒绝回答关于日期的问题。
图 1.2 OpenAI 的 API 允许用户定义系统提示,这是一段文本,插入到用户提示的开始部分。
图 1.3 显示,如果将日期作为系统提示的一部分提供,LLM 会回答,就像 ChatGPT 会做的那样。
调用外部软件功能
我向 ChatGPT 询问了伦敦的当前天气。ChatGPT 的用户界面显示了一个标志,上面写着“正在搜索网络。”一秒后,标志变成了“正在搜索伦敦的当前天气。”之后,它告诉我伦敦的天气情况(见图 1.4)。
这里的技巧是在系统提示中描述一系列软件功能,如果 LLM 需要收集外部信息,它可以建议调用这些包装器。如果 LLM 建议调用这些功能之一,那么调用该功能并将其结果插入提示的责任就落在 LLM 包装器上。
图 1.3 当当前日期作为系统提示的一部分提供时,LLM 可以回答关于当前日期的问题。
假设一个开发者想要创建一个聊天机器人应用程序,它可以无缝地回答关于当前事件的问题,例如天气、股票价值以及热门新闻话题。开发者可以在系统提示中解释,如果需要伦敦的当前天气,LLM 应该输出"current_weather(London)"
,如果需要苹果股票的价值,它应该输出"stock_value(Apple)"
,依此类推。当这些特殊消息输出时,开发者将调用软件功能来收集必要的信息并将其添加到提示中。这将给最终用户留下无缝访问实时数据的印象。
图 1.4 ChatGPT 在幕后调用了一个搜索网络的函数,并将结果插入到用户的提示中。这创造了一种 LLM 浏览网络的错觉。
OpenAI 创建了一个框架,允许开发者轻松定义 LLM 可以建议调用的函数列表。以下是如何定义"get_current_weather"
函数的示例,如官方文档中所述(见mng.bz/2y4a
):
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state,
e.g. San Francisco, CA",
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The temperature unit
to use. Infer this from the users
location.",
},
},
"required": ["location", "format"],
},
}
}
]
注意,天气获取函数的代码不属于此声明的一部分。只提供了函数及其输入的描述。LLM 包装器将此函数的描述插入到系统提示中,以便底层 LLM 在需要时可以建议调用它。
当包装器检测到 LLM 建议调用该函数时,它会通知用户。以下是一个示例,使用 OpenAI 的 Python SDK,在用户询问伦敦天气后得到的 API 响应对象:
ChatCompletionMessage(
content=None,
role='assistant',
tool_calls=[
ChatCompletionMessageToolCall(
id='call_Dn2RJJSxzDm49vlVTehseJ0k',
function=Function(
arguments='{"location":"London, United Kindgdom",
"format":"celsius"}',
name='get_current_weather'
),
type='function')
]
)
软件开发者必须编写"get_current_weather"
函数,运行它,然后将响应插入以下提示(“伦敦,英国天气:20 摄氏度,雨天”)。然后,LLM 可以使用这些新添加的信息。应用程序的最终用户会感觉到 LLM 本身能够实时回答关于天气的问题。实际上,LLM 仍然是一个独立的程序;增强的功能是在 LLM 之外实现的。
检索增强生成
有时用户希望 LLM 分析训练数据中不存在的文档。例如,一家企业可能希望回答有关其内部文档的问题,或者一个应用程序可能希望分析最新网页的内容。检索增强生成(RAG)是这样做的一种流行方式(你可以在 Abhinav Kimothi 的《检索增强生成简单指南》中了解更多信息,可在mng.bz/yWpe
找到)。当用户提交提示时,LLM 包装器首先在数据库中搜索相关文档。例如,它可能从提示中提取关键词并找到匹配的文档。这被称为检索。
之后,LLM 包装器将这些文档的内容插入到提示中。因此,提示被认为是增强*了额外的相关信息。
当 LLM 生成文本时,它可以访问这些文档作为提示的一部分,因此可以使用它们的内容来增强其预测。RAG 是一种流行的创建适应特定业务内部聊天机器人的方法。此外,它通常用于创建 LLM 可以实时访问最新网络内容的错觉。RAG 还可以帮助识别 LLM 生成输出时使用的特定来源,从而引用参考文献。
RAG 方法的一个挑战是根据提示找到相关文档。许多算法长期以来一直被搜索引擎用于索引和检索内容,研究人员正在研究 RAG(参见arxiv.org/abs/2405.06211
)的特定检索技术。另一个挑战是,随着文档的增加,提示可能会变得相当长。LLM 只能接受最大提示长度(以下将详细介绍),因此你必须确保插入到提示中的文档符合最大允许长度。此外,较长的提示会带来更高的成本,因为 AI 提供商根据输入和输出的文本量收费。
标记的概念
我们一直在说 LLM 从输入提示中猜测下一个单词,但这并不完全准确。现在让我们更精确地理解这一点。
LLM 包含一个固定大小的内部词汇。这些是 LLM 可以读取和生成的单词。LLM 的词汇量通常包含
-
常用词汇(例如,“狗”)
-
常用单词片段(例如,“ish”)
-
常见的拉丁字母(例如,“a”和“b”)
-
来自名为 UTF-8 的文本编码标准的特殊符号,这些符号组合在一起用来表示非拉丁字符和其他符号(例如,“á”,“æ”和“你”)
-
特殊的代码词,如“<文本结束>”和“<提示结束>”
词汇表中的每个元素都称为标记。我们可以将标记视为常见的文本片段。使用标记而不是整个单词,LLM 可以通过组合常见的单词片段(“hungry”+“ish”)来读取和生成不在字典中的单词(例如,“hungryish”)。它还允许 LLM 读取和生成非拉丁文本并创造新词。
当前大型语言模型(LLM)的词汇量大约包含 10 万个不同的可能标记。例如,包括 GPT-3.5 和 GPT-4 在内的 OpenAI 的 LLM,其词汇量有 100,261 个可能的标记。
注意,许多标记代表带有前导空格的常用词汇。例如,“dog”和“ dog”都是 OpenAI 的 LLM 词汇表中的标记。因此,LLM 通常可以避免使用专门的空白标记。从现在开始,每当我在本书中提到单个标记,例如“dog”标记时,请记住它可能带有前导空格。 (我不会每次都写上空格,因为它看起来有点难看。)
LLM 的词汇表是通过在数千份文档上运行自动分析来创建的,以识别最常见的文本模式(通常用于此的算法称为字节对编码。您可以在我在emaggiori.com/ChatGPT-vocabulary/
上写的博客文章中找到更多细节和逐步示例)。OpenAI 停止公开其创建 LLM 词汇表的方法,但我们确实知道它们是如何使用旧模型做到这一点的。例如,GPT-3 的词汇表是通过自动跟踪来自流行 Reddit 讨论的链接、收集链接网页上的文本以及识别其中最常见的单词和字符组合来创建的(Redford 等人,“语言模型是无监督的多任务学习者”,2019 年)。
一次一个标记
LLMs(大型语言模型)被设计为从它们的词汇表中读取一系列有效的标记。因此,LLM 包装器首先将输入提示符细分为有效的标记。例如,当使用 GPT-3.5 时,提示符“狗的叫声几乎”在传递给 LLM 之前被 LLM 包装器如下细分:
The| dog|'s| bark| was| barely
使用算法进行细分,该算法大致尝试使用词汇表中的最大标记来分割输入。
OpenAI 提供了一个网页,您可以在其中输入文本并查看在将其输入模型之前如何对其进行标记化。您可以在platform.openai.com/tokenizer
找到它。
LLM 不读取原始文本。相反,LLM 包装器首先将输入提示符转换为表示每个标记 ID 的整数列表,这是其在词汇表中的位置:
[791, 5679, 596, 54842, 574, 20025]
之后,包装器使用 LLM 来预测最有可能的下一个标记的 ID。在先前的例子中,LLM 输出 ID 为 80415 的标记最有可能是输入提示符的后续内容。这个标记对应于“audible”。然后 LLM 包装器将这个标记附加到输入上:
The| dog|'s| bark| was| barely| audible
接下来,LLM 包装器将这个新提示(作为整数列表,[791, 5679, 596, 54842, 574, 20025, 80415]
)输入到 LLM 中,让它“吃掉自己的输出”并生成一个额外的标记。这个过程重复多次以生成更多标记:
The| dog|'s| bark| was| barely| audible| above| the| roar| of| the| city| traffic|.
在这个例子中,在关于狗和噪音的几段胡言乱语之后,LLM 决定 ID 为 100276 的标记最有可能是提示符的后续内容。这个标记代表“<|end of text|>”。因此,LLM 认为这是一个结束文本的好地方。在遇到这个标记后,LLM 包装器遵循 LLM 的建议并停止生成更多文本。
看看 GPT-3.5 是如何逐个标记地向我解释单词“hungryish”的含义的:
If| you| say| "|I|'m | hungry|ish|,"| you| mean| you|'re | feeling| somewhat| hungry|,| but| not| extremely| so|.| It|'s | a| mild|er| form| of| hunger|.
我们可以看到,尽管单词“hungryish”不是 GPT-3.5 词汇表的一部分,但它通过两个标记的序列“hungry”和“ish”成功地生成了它。请注意,“milder”、“I’m”、“you’re”和“It’s”这些单词也是通过每个单词两个标记生成的。
按标记计费
大多数 LLM API,允许软件开发者以编程方式使用 LLM,按输入和输出到 LLM 的标记数向用户收费。因此,较长的提示词和较长的响应会产生更高的成本。
例如,截至今天,GPT-4o 的费用是每百万输入标记 5 美元,每百万输出标记 15 美元。以参考为例,整个莎士比亚戏剧《罗密欧与朱丽叶》需要 40,000 个标记,因此将其输入到 GPT-4o 将花费 0.20 美元,生成它将花费 0.60 美元。这听起来并不多,但如果反复使用 LLM,账单很容易增加。例如,如果你每次用户访问你的网站时都向 LLM 发送一个长提示词,你可能会每月花费数千美元。
注意,当你与 LLM 进行来回聊天时,你必须在与它的每次互动中都包括你的整个聊天历史,或者至少如果你想让 LLM 能够在生成新输出时分析之前的对话,你必须这样做。因此,随着你的聊天历史变长,提示词的成本会越来越高。
那么,对于英语以外的语言呢?
LLM 的词汇表往往针对英语进行优化。例如,它们包含“dog”标记,但没有表示狗的法语单词的标记。因此,非英语单词往往被分成许多标记,通常每次覆盖一个或两个字母,因为词汇表中没有足够的标记来表示整个单词。
看看美国宪法序言在被输入到 GPT-4 之前的标记化过程:
We| the| People| of| the| United| States|,| in| Order| to| form| a| more| perfect| Union|,| establish| Justice|,| insure| domestic| Tran|qu|ility|,| provide| for| the| common| defense|,| promote| the| general| Welfare|,| and| secure| the| Bless|ings| of| Liberty| to| ourselves| and| our| Poster|ity|,| do| ord|ain| and| establish| this| Constitution| for| the| United| States| of| America|.
现在,看看它的法语翻译:
Nous|,| le| Pe|uple| des| É|t|ats|-Un|is|,| en| vue| de| former| une| Union| plus| par|fa|ite|,| d|'é |tabl|ir| la| justice|,| de| faire| rég|ner| la| pa|ix| int|érie|ure|,| de| pour|voir| à| la| déf|ense| commune|,| de| dévelop|per| le| bien|-être| général| et| d|' |ass|urer| les| bien|fa|its| de| la| libert|é| à| nous|-m|ê|mes| et| à| notre| post|é|rit|é|,| nous| dé|cr|é|tons| et| é|tab|lis|sons| cette| Constitution| pour| les| É|t|ats|-Un|is| d|' |Am|érique|.
法语文本比其英文对应文本的标记数多出两倍以上。此外,法语中单词的细分并没有太多意义。例如,“États-Unis d’Amérique”(美国)被分割成许多无意义的片段,如“ats”和“-Un”。
这个问题在非拉丁字母中变得更加严重。一个广泛讨论的极端例子是印度使用的泰卢固语中“woman”这个词:స్త్రీ。这个词由六个字符的组合组成,这些字符水平垂直排列。GPT-4 需要 18 个特殊的 UTF-8 标记来表示这个单词。
由于大型语言模型(LLM)按标记计费,与其他语言相比,使用其他语言的 LLM 可能会更昂贵。此外,LLM 分析提示词可能更具挑战性,因为单个输入,如“é”标记,本身并不携带太多意义;LLM 必须额外努力来上下文化相邻的标记并从中提取意义。
对特定语言(在最受欢迎的 LLMs 中是英语)的偏见可能不容易消除。为了更好地标记其他语言的单词,词汇表必须扩展到包括法语、中文、泰卢固语等语言中的单词或常见的单词片段。这将使词汇表的大小增加,远远超过当前的 10 万标记,这可能会使 LLMs 变得无效并减慢速度。
OpenAI 一直在努力改进其 LLMs 的内部词汇表,以更好地处理非英语文本。截至本文撰写时,细节尚未公开,但它的创造者与 GPT-4o 使用的新词汇的一些示例案例进行了分享(见openai.com/index/hello-gpt-4o/
)。例如,一段泰卢固语的文本比之前少用了 3.5 倍的标记,但仍然比其英语对应物多一倍。
为什么 LLMs 需要标记呢?
一个人可能会想知道为什么需要标记;也就是说,为什么不直接让 LLM 读取和生成单个字符呢?正如我们很快将要讨论的,LLMs 试图内部描述每个单个输入的意义。描述像“巴黎”这样的标记的意义相当简单。例如,我们可以将其描述为“法国的首都”。然而,描述像“P”这样的标记的意义要困难得多,因为我们不知道这个字母指的是什么,除非我们分析上下文。这就是为什么一次性将“巴黎”作为一个单独的标记要直接得多。同样的道理也适用于生成文本——让 LLM 输出像“巴黎”这样的标记,它本身就有很强的意义,而不是让它一个字符一个字符地输出相同的单词,要直接得多。
我们可以将这个想法推向极致,创建一个包含各种单词及其派生词的巨大词汇表,例如“巴黎人”、“巴黎人”、“巴黎天气”和“巴黎的艾米丽”。但这会走得太远——词汇表会变得非常大,而且会浪费资源,因为许多标记将代表密切相关的内容。当前设置,使用标记表示最常见的单词和单词片段,是一种在实践中效果良好的折中方案。
嵌入:表示意义的一种方式
人工智能最大的挑战之一是找到一种有效的方式来表示高级概念、意义和思想。在设计 LLM 时,我们希望模型内部表示标记的意义而不是其字母。例如,我们希望标记“dog”被表示为对狗的描述(比如说,一个友好的四足动物)。
嵌入是表示意义最常见的方式之一。它被 LLMs 和其他类型的 AI 使用。嵌入是一个数字列表(或“向量”)。向量中的元素数量被称为嵌入的维度。
*我们可以将这个向量中的每个位置视为衡量一个标记与某个主题匹配程度的一个指标。让我们来看一个例子。假设一个长度为五的嵌入向量代表以下五个主题:“动物”、“猫”、“大型”、“可怕”和“四条腿”。假设我们想使用这些主题来表示“狗”标记的含义。图 1.5 提供了一个(虚构的)解决方案。
图 1.5:每个标记被映射到一个数字向量。我们可以想象向量中的每个数字代表一个主题。以下是一个关于“狗”标记的虚构主题列表及其相应的数字。
在这个插图上,标记被映射到五个数字,每个数字都表示标记的含义与每个主题匹配的程度。我们可以看到,在“动物”主题上,标记得到了一个高分数,因为狗当然是一种动物。在“猫”主题上,标记得到了一个负分数,因为狗有时被视为猫的对立面。在“大型”主题上,标记得到了一个零分的中性值,因为我们通常不会认为狗是一个特别大或小的物体。图 1.6 展示了我们如何想象“大象”标记的嵌入。
图 1.6:一个关于“大象”标记的虚构嵌入向量
在这种情况下,嵌入向量对“猫”是中性的,而对“大型”则是高度积极的。
LLMs 的核心是嵌入。LLMs 会不遗余力地尝试通过使用嵌入来找到标记的良好、上下文化的表示。在经过多层处理之后,嵌入向量非常擅长表示输入标记的真实含义,这使得 LLM 能够轻松地完成猜测下一个标记的任务。
LLMs 使用比上述示例中更长的嵌入向量,这使得它们能够表示大量的主题。例如,GPT-3 使用 12,288 维度的嵌入向量,因此每个输入标记由 12,288 个数字表示。Llama 3 系列中最小的模型,由 Meta 开发,使用 4,096 维度的嵌入向量,而最大的模型使用 16,384 维度的嵌入向量(arxiv.org/abs/2407.21783
)。
机器学习和嵌入
手动设计长嵌入向量是非常困难的。因此,我们使用机器学习来完成这项工作。这意味着我们让计算机分析大量数据,例如从互联网收集的文本,以得出有用的嵌入向量。
当 AI 工程师在 LLM 中使用,比如说 12,288 维度的嵌入时,他们实际上是为 12,288 个主题留出了空间。然而,选择和组织主题以最佳实现其目标的工作则由机器来完成。
由于嵌入是自动创建的,很难知道每个维度代表哪些主题。此外,主题可能不像“大”和“猫”那样清晰。因此,通过使用机器学习,我们可以创建有效的嵌入——证明是 LLMs 表现良好——但我们无法确切了解它们是如何工作的。可解释性在预测能力的名义下被牺牲了。
可视化嵌入
地球上的一个位置可以通过其纬度和经度来确定。我们可以同样将嵌入向量中的每个数字视为坐标,这些坐标帮助我们确定标记在意义空间中的位置。图 1.7 展示了由二维嵌入向量定义的意义空间的一个例子,其中包含“可怕”和“大”这两个主题。每个标记都根据其在嵌入向量中的“可怕”和“大”值放置在这个空间中。
图 1.7 我们可以将嵌入向量中的数字视为坐标,这些坐标将标记放置在多维“意义空间”中。
你可以看到相似的对象往往聚集在一起;这就是为什么在这个空间中,“蟒蛇”和“蛇”这两个标记很近,而“甲虫”和“瓢虫”也是如此,但“蟒蛇”和“瓢虫”则相距甚远。
设计良好的、有用的嵌入是这样的,即意义上紧密相关的标记在这个假想的嵌入空间中也放置得相对较近。如果嵌入向量在表示标记的真实意义上做得不好,那么相关的标记在这个假想的嵌入空间中就不会靠近。
由于嵌入向量通常非常长,嵌入空间是高维的。我们无法绘制它,但我们仍然可以想象,在这个高维空间中,相关的标记在物理上是聚集在一起的。
为什么嵌入是有用的
嵌入向量特别有用,因为我们可以通过进行简单的线性计算来轻松比较它们或从中提取信息。假设你想比较两个标记的意义。你可以通过计算它们在假想嵌入空间中的物理距离来实现这一点。一种流行的方法是计算两个向量之间的点积,这产生了一种“有符号距离”。如果结果是正的,那么在嵌入空间中这两个标记足够接近,因此它们的意义是相关的。如果是零,它们是不相关的。如果是负的,它们的意义是相反的,例如在“大”和“小”中。
注意:点积是通过将一个向量中的数字与另一个向量中相应位置的数字相乘,然后将结果相加来计算的。
现在,假设你想要从一个表达性更强的嵌入向量中提取有限的有用信息。例如,你可能想要提取与动物相关的主题,并丢弃其他所有内容。我们可以将这视为将多维嵌入空间压缩到低维空间,例如将 3D 空间压扁成薄板,从而丢弃无信息维度。例如,我们可以将整个 12,288 维度的空间压缩到,比如说,一个只关注动物相关主题的 100 维空间(例如,“吠叫”,“哺乳动物”,“宠物”)。执行这种压缩的数学运算被称为投影。
*投影是通过将矩阵乘以嵌入向量来执行的。矩阵表示我们想要挤压嵌入空间的方向。请注意,由于我们通常不了解嵌入如何编码意义,因此我们也不了解意义如何在挤压的嵌入空间中表示。就像嵌入一样,挤压空间的投影也是通过机器学习确定的,而不是手工设计的。
除了在大型语言模型和其他类型的 AI 中使用外,工程师使用第三方工具为各种内容检索应用生成嵌入已成为一种流行趋势。例如,你可以使用嵌入 API 生成代表文本文档意义的嵌入,然后通过计算嵌入的点积来比较文档。具体来说,OpenAI 提供了一个嵌入 API,帮助生成文本文档的嵌入。
此外,一些 API 为不同的输入模式生成嵌入,例如文本和图像。一个例子是 Google Clouds 的嵌入 API(见mng.bz/1Xvq
)。生成的嵌入可以直接比较。例如,一篇关于猫的文本和一张猫的图片被映射到紧密相关的嵌入向量。因此,你可以使用点积来找到与描述最匹配的图像。
为什么大型语言模型在分析单个字母时遇到困难
大型语言模型在正确分析单词中的单个字母方面臭名昭著,例如计算字母出现的次数。它们也难以遵循需要生成包含特定字母的文本的指令。图 1.8 展示了使用 GPT-4o 的这个问题的一个例子。
图 1.8 大型语言模型在分析单词中的单个字母时经常遇到困难。
如果你记得,大型语言模型接收的是标记作为输入,而不是字母。因此,单词的确切字母并没有输入到模型中。在图 1.8 的例子中,标记“berry”一次性输入到大型语言模型中。
然后,每个标记被映射到一个嵌入向量以表示其意义。因此,任何关于单个字母的引用在这个阶段很可能会完全丢失,因为当有更多有用的主题需要表示时,在嵌入向量中为“包含两倍字母 a 的标记”等主题分配空间将是浪费的。
由于人们广泛地嘲笑 LLMs 在分析字母方面的糟糕表现,AI 工程师可能会采取临时措施来直接解决这个问题。例如,如果 LLM 包装器检测到有关单个字母的问题,它可能会在提示中添加单词的拼写。也许其中一些已经完成了,因为较新的 LLMs 似乎在分析单个字母方面遇到的困难较少。然而,这个问题在写作时甚至在最新的 LLMs 中仍然存在,所以它还没有得到完全解决。
变压器架构
当前 LLMs 所采用的推动方法是谷歌研究人员发明的一组方法。它被描述在一篇著名的论文中,该论文于 2017 年发表,标题为“Attention Is All You Need”(可在arxiv.org/abs/1706.03762
找到)。该论文提出了一种设计语言模型的新方法,这被称为变压器架构或简称transformers。
如果你还记得,当我要求一个 LLM 完成句子“狗的叫声几乎”时,它正确地输出了“audible”。尽管这个句子看起来很简单,但它很有挑战性,因为单词“bark”有两个不同的含义——狗发出的噪音和树的树皮。如果我要求 LLM 继续句子“树的树皮几乎”,那么“audible”将是一个糟糕的选择。我试了试,LLM 输出了“visible”而不是“audible”。LLM 设法根据句子中是否出现了“dog”或“tree”来正确地消除“bark”一词的多义性。变压器架构特别设计用来根据上下文有效地消除标记的多义性。
在变压器架构出现之前,最受欢迎的语言模型是基于一种称为 LSTM(长短期记忆)的 AI 模型。LSTM 试图根据以下两点预测下一个标记:
-
输入提示中的最后一个标记(如果输入是“狗的叫声几乎”,则是“barely”)
-
一个总结所有先前标记意义的单一嵌入(一个代表“狗的叫声是”的单个嵌入向量)
这两块信息被用来预测下一个标记(在这个例子中是“可听见的”)。由于最后一个标记之前的整个上下文都被压缩成一个单一、固定大小的嵌入向量,LSTM 可以处理不同长度的输入而不会出现任何复杂情况。这也是它们变得如此受欢迎的原因之一。但这也是 LSTM 的阿喀琉斯之踵——通过将如此大的上下文压缩成一个单一向量,它们往往失去了正确猜测下一个单词所必需的、重要的、细粒度的上下文信息。
变换器架构通过以不同的方式处理之前的标记,而不是将它们全部压缩,从而解决了这个问题。这个过程分为三个步骤,如图 1.9 所示。
图 1.9 LLM 概述。在步骤 1 中,标记逐个映射到嵌入。在步骤 2 中,通过使用提示符中的先前标记对每个嵌入进行上下文化来改进每个嵌入。在步骤 3,
使用大幅改进的嵌入来预测下一个标记。
下一个标记。
首先,模型将输入提示符中的每个标记映射到一个嵌入向量,该向量试图表示其含义。这是对每个标记单独执行的,因此不使用任何上下文信息——每个标记被处理得好像其他标记不存在一样。虽然这些嵌入有时可以接受,但它们不能太好,因为在许多情况下,不查看上下文很难知道一个标记的真正含义。例如,为“bark”这样的标记生成的嵌入将很差,因为模型无法知道它是指狗还是树。
在第二步中,LLM 通过分析其先前标记来改进每个单独标记的嵌入——每个标记通过考虑其上下文而被转换。请注意,与 LSTM 相比,变换器架构不会将嵌入压缩在一起来总结整个提示符。
长短期记忆网络(LLM)使用固定数量的先前标记来对每个标记进行上下文化,这被称为上下文窗口。例如,假设一个 LLM 的上下文窗口为 10,000 个标记。每个标记通过分析其前 9,999 个标记来进行上下文化。如果用户的提示符少于 10,000 个标记,那么提示符的开头将用零等虚拟值填充,直到达到 10,000 个标记。如果用户的提示符超过 10,000 个标记,那么 LLM 包装器将拒绝用户请求或丢弃提示符的开头。
在使用 LLM 之前,您需要仔细考虑上下文窗口。如果您想,比如说,让 LLM 总结一整本小说,您需要确保它适合上下文窗口,否则 LLM 将无法一次性总结整个小说。此外,如果您使用 RAG 方法将相关文档的内容插入到用户的提示符中,您也需要确保上下文窗口可以容纳它们。此外,当您与基于 LLM 的应用程序进行来回聊天时,整个对话历史通常包含在每个提示符中,随着您与聊天机器人的对话,提示符会变得更长。
早期的 LLM 上下文窗口非常有限。例如,GPT-3 的上下文窗口为 2,048 个标记。因此,它们分析长输入的能力有限。
随着时间的推移,上下文窗口已经扩大。截至本文撰写时,OpenAI 的最新模型 GPT-4o 拥有 128,000 个标记的上下文窗口。而谷歌的一个模型 Gemini 1.5 Pro 向其企业客户提供 1 百万个标记的上下文窗口。上下文窗口的大小在 LLM 的官方文档中指定。
在上下文化步骤结束后,与每个输入标记相关的嵌入比最初的嵌入更加准确和有用,这要归功于上下文化。例如,如果我们假设在“dog”(狗)这个词出现之前,“bark”(吠声)的嵌入在第二步结束时变得更加动物化。相反,如果上下文中包含树的相关内容,其嵌入就会变得更加树状。
变换器架构中的第三步(见图 1.9)是根据第二步生成的增强、上下文化的嵌入来预测下一个标记。这是因为假设第二步产生了非常好的嵌入,可以很容易地猜测下一个单词,所以这个过程通过一个非常简单的数学运算来完成。
在接下来的几节中,我们将更详细地描述这三个步骤中的每一个,并解释机器学习是如何进入画面的。
第一步:初始嵌入
初始嵌入很容易获得。LLM 包含一个内部字典,将每个可能的标记映射到其相应的嵌入。我们可以想象如下:
"a" -> [0, -1, 2, 3, 1, …]
"b" -> [1, -2, 0, 4, 0, …]
…
" bark" -> [1, 0, -1, 3, 1, …]
…
" dog" -> [3, -1, 0, 2, 3, …]
…
初始嵌入是通过在字典中查找每个标记并将其替换为其相应的嵌入来创建的。结果是创建了一个初始嵌入集,这些嵌入一个接一个地创建,没有上下文,这标志着第一步的结束(见图 1.9)。
字典中的数字不是手工定义的。这些数字都是模型的可学习参数。这意味着 AI 工程师在代码中将它们留为空白,并在学习算法运行时让计算机填充它们的值。我们可以从 AI 工程师的角度这样想象之前的字典:
"a" -> [?, ?, ?, ?, ?, …]
"b" -> [?, ?, ?, ?, ?, …]
…
"bark" -> [?, ?, ?, ?, ?, …]
…
"dog" -> [?, ?, ?, ?, ?, …]
…
当计算机填充空白时,这被称为学习或训练,它会设计自己的嵌入空间。因此,计算机可以自由地组织标记和选择主题,以达到有效猜测下一个单词的目标。
考虑一个词汇量包含 100,000 个不同标记且嵌入包含 10,000 维度的模型,这在许多 LLM 中很常见。字典将包含 100,000 个条目,每个条目将包含 10,000 个数字,这些数字是问号。可学习的参数总数(问号)将是 100,000 × 10,000 = 10 亿。这有很多可学习的参数!而且这只是开始。
第二步:上下文化
在第二步中,LLM(大型语言模型)通过考虑其前一个标记(在上下文窗口内)逐个将每个输入标记进行上下文化。让我们看看,例如,LLM 会如何将“bark”(狗吠)这个标记在“dog’s bark”(狗的吠声)中进行上下文化。
上下文化首先为上下文中的每个标记计算一个注意力分数。注意力分数表明如何最好地在上下文窗口中的所有标记之间分配注意力,以消除最后一个标记的歧义。例如,为了上下文化“bark”,值得将大部分注意力集中在“dog”上,然后是“bark”本身,最后是“’s”。图 1.10 展示了这一操作。
注意力分数的计算,称为注意力机制,是通过一系列数学运算来完成的,例如在嵌入向量上的投影(参见 1.3.3 节)。这里我们不涉及细节,所以我们就说这些操作是专门设计来让 LLM 从嵌入中提取意义并比较它们的。
图 1.10 注意力机制计算上下文窗口中所有标记的相对相关性,以上下文化或消除最后一个标记的歧义。
AI 工程师确定操作的类型和数量,但留下空白,这些空白将使用机器学习后来确定。例如,配置投影做什么的投影矩阵中的数字被留作空白。因此,我们可以将投影矩阵想象成
[[ ? ? ? ... ?],
[ ? ? ? ... ?],
...
[ ? ? ? ... ?]]
因此,AI 工程师告诉计算机如何消除标记的歧义——通过使用投影来比较嵌入,等等——但让机器填写细节。机器会自己发现分析嵌入以消除像“bark”这样的问题标记的有用方式。投影矩阵相当大,所以这一步可以轻松地为模型增加数亿个可学习的参数。
一旦 LLM 计算了注意力分数,它就会使用这些结果值来引导标记嵌入向量的上下文化。我们可以将这一步骤想象成利用注意力分数的引导,让标记的信息相互影响。
例如,很多来自“狗”的信息会影响到“bark”,因为其注意力机制确定“dog”标记与“bark”的意义相关。因此,这一步骤的结果是,“bark”的嵌入变得更加动物化,而不是树状。相反,来自“’s”的信息对“bark”的影响非常小,因为注意力分数认为它相当不相关。根据上下文更新嵌入的过程被称为 transformer 的前馈步骤。
在前面的例子中,注意力和前馈机制的最后结果是“bark”嵌入的改进版本。相同的流程被应用于上下文化输入提示中的所有标记,使用它们之前的标记,这导致了一代新的改进嵌入,如图 1.9 步骤 2 所示。
在这个过程结束时,LLM 在猜测下一个标记方面处于更好的位置,因为它包含了一个改进的、上下文化的整个输入提示的意义表示。
多层架构
我们刚才描述的上下文化步骤(步骤 2)通常需要应用多次。因此,嵌入向量被多次改进。这被称为多层转换器。大多数大型语言模型(LLM)至少包含几十层按顺序应用的转换器。每个转换器层都有自己的可学习参数集,因此每个层可以专门处理不同的上下文化任务。
例如,GPT-3 有 96 个转换器层。这导致模型内部有高达 1750 亿个可学习参数。
多头注意力
注意力机制通常被细分为不同的头,这意味着它分别单独分析嵌入向量的不同部分。这迫使 LLM 设计具有高度专业化的嵌入向量段。例如,我们可以想象一个段是专门用于所有与动物相关的事物,另一个段是专门用于所有与树木相关的事物,尽管我们仍然通常无法理解嵌入向量。实践观察表明,这种方法比使用一个一次性处理整个嵌入向量的单一头效果更好。
步骤 3:预测
最后一步,图 1.9 中的步骤 3,是对最可能的下一个标记进行预测,这是 LLM 的最终任务。这是通过在步骤 2 生成的上下文化嵌入上进行投影来完成的。
尽管我们一直在说 LLM 预测最可能的下一个标记,但这并不完全准确。实际上,它们为词汇表中的每个可能的标记计算一个概率值。因此,LLM 的输出是一个向量,其数字数量与词汇表中的标记数量相同。每个位置都指代一个可能的标记,如表 1.1 所示。在这个例子中,标记“audible”获得了一个高概率值 0.8,这意味着 LLM 认为它是一个高度可能的下一个标记。
表 1.1 在最后一步,LLM 为词汇表中的每个可能的标记分配一个概率值
对于词汇表中的每个可能的标记。所有值加起来等于 1。
0.01 | 0.0 | 0.05 | … | 0.8 | … |
---|---|---|---|---|---|
“a” | “b” | “c” | “audible” |
LLM 包装器根据 LLM 的输出概率选择下一个标记。一种方法是选择 LLM 中概率最高的标记(在两个标记具有完全相同的概率的极不可能事件中,可以随机选择任何一个)。然而,还有其他方法可以做到这一点,这使 LLM 能够更加大胆。我们将在下一节讨论这个问题。
温度
如前文所述,LLMs 为每个标记输出一个概率,描述该标记紧随输入提示出现的可能性。从词汇表中选择下一个标记的一种方法是根据 LLM 输出的概率选择概率最高的标记。然而,这会鼓励 LLM 过于保守——有时我们希望得到更具冒险性的输出。因此,通常通过使用 LLM 的输出概率随机从词汇表中采样一个标记来选择下一个标记。例如,如果 LLM 为“audible”标记输出概率为 0.9,那么采样器以 90%的概率选择该标记,其他标记以 10%的概率选择。
用户通常可以通过调整称为温度的设置来调节输出的冒险程度。此设置挤压或平滑 LLM 的输出概率。低温度将最高的采样概率推向上方并降低其他概率。例如,0.9 的概率可能被转换为 0.95,而 0.05 的概率可能被转换为 0.01。这使得 LLM 包装器更有可能选择排名靠前的标记。我们可以将其视为使 LLM 包装器更加保守,因为它更倾向于选择排名靠前的明显标记,而不太可能选择替代标记。
相反,高温度会平滑概率。例如,0.9 的概率可能被转换为 0.8,而 0.01 的概率可能被转换为 0.05。这使得输出更具创造性,因为低排名的标记更有可能被选中。每个 LLM 包装器都提供自己的一组温度值。例如,OpenAI 的 API 允许用户将温度设置为介于零(保守)和二(创意)之间的值。
在以下段落中,我们描述了两种设置我们希望输出有多冒险的替代方法。
Top-p
另一个称为Top-p的设置是对可以采样的最高标记数量的限制。例如,如果我们设置 Top-p 为 0.8,那么我们只从覆盖 80%概率的顶部标记中进行采样。覆盖概率最低的 20%的标记将被忽略。
Top k
Top-k设置对可以从其采样的最高标记数量施加限制。例如,如果我们设置 Top-k 为 20,LLM 包装器就只能从顶部 20 个标记中选择一个标记。如果我们设置 Top-k 为 1,我们迫使 LLM 每次都选择顶部标记。
注意,并非所有 LLM 包装器都允许用户配置所有这些设置——有时只有一两个可用。例如,截至今天,OpenAI 允许用户设置温度和 Top-p,但不允许设置 Top-k。可用的设置在文档中描述。
你能让 LLM 始终输出相同的内容吗?
有时使用 LLM 生成可复制的输出是有需求的,这意味着 LLM 每次接收到相同的输入提示时都会生成完全相同的输出。这可以用来评估 LLM 的性能或分享其他人可以复制的 LLM 输出示例。
理论上,可以让 LLM 生成可复制的输出。例如,这可以通过使用 top-1 采样策略来实现,其中我们总是选择概率最高的标记,从而确保 LLM 内部的所有数学计算在不同的运行中都以完全相同的方式进行。
然而,虽然这在理论上是有可能的,但在实践中并不总是如此。例如,截至目前,我们无法保证 OpenAI 的 LLM 在不同的运行中会生成完全相同的输出。有官方指南说明如何配置设置以产生大部分可复制的输出,但它们并不能保证完全相同(见mng.bz/PdeR
)。
这可能是因为流行的 AI 和算术库将计算分解成多个线程,每次可以以不同的顺序执行(见news.ycombinator.com/item?id=37006224
)。这可能导致由于加法顺序不同而产生的舍入误差,从而在输出中产生细微的差异(见mng.bz/JYQZ
)。在未来,如果这些问题得到解决,将有可能使用流行的 LLM API 生成可复制的输出。
更多学习资源
在本节中,我们介绍了 LLM 工作原理的要点。我们没有讨论实现细节,例如 LLM 内部的确切计算,但我们确实讨论了 LLM 遵循的整体预测过程。
如果你想了解详细信息,我建议你直接查看 GPT-2 的公开源代码(mng.bz/wJR5
)。名为 models.py 的文件是最重要的一个;它以非常紧凑的方式定义了整个模型(仅 174 行)。如果你理解一些 Python 编程和 TensorFlow 库,并从文件底部开始阅读,代码相对容易理解。我还推荐你阅读一份名为《图解 Transformer》的指南(mng.bz/qxlx
),以了解架构的细节。
即使你不想阅读所有代码,快速浏览一下也能发现,LLM 实际上只是一系列简单的数学运算。正如你在代码中所见,每一层(称为“块”)首先计算注意力分数(“attn”),然后使用它们来更新嵌入(“mlp”)。投影(“matmul”)是模型执行的最常见操作之一。
我们现在已经介绍了 LLMs 如何生成它们的预测,并提到它们的细节是通过机器学习来填充的。然而,我们还没有描述学习是如何展开的。这就是我们接下来要讨论的内容。
机器学习
在传统的软件开发中,工程师编写每一行代码来告诉计算机确切要做什么。机器学习(或 ML)是创建程序(在机器学习术语中,这些程序被称为模型)的另一种方式。
机器学习方法包括两个步骤。第一步是设计解决方案的架构,在机器学习中这意味着程序完成任务将遵循的步骤模板。看看下面使用流行的机器学习库 PyTorch 的 Python 代码片段:
import torch
embedding = torch.nn.Embedding(num_embeddings=100000, embedding_dim=10000)
projection = torch.nn.Linear(10000, 2000)
model = torch.nn.Sequential(embedding, projection)
在第一行,工程师定义了一个嵌入操作,将 10 万个标记的词汇映射到长度为 10,000 的嵌入向量,这与 LLMs 所做的工作类似。在第二行,工程师定义了一个投影操作,将长度为 10,000 的嵌入向量转换成长度为 2,000 的向量。第三行按顺序应用这些操作,首先是嵌入,然后是投影。
我们可以看到工程师手动组合了模型的构建块。然而,模型中存在空白,称为参数,这些参数不是手工定义的。在上面的例子中,嵌入块包含 10 亿个参数(100,000 × 10,000),这些参数不是手工定义的。第二个构建块,投影,包含超过 2000 万个参数(数学计算留给您)。
注意,机器学习模型的架构是精心设计的——构建块是以特定的意图引入的,并且是根据应用量身定制的。例如,转换器架构是为了使单词具有上下文。
机器学习方法中的下一步被称为训练或学习。这两个词的选择取决于语法——你通常会说一个人训练一个模型,而机器学习。
在训练过程中,工程师运行一个算法,试图找到设置模型参数(填充模板中的空白)的最佳方式以完成所需的任务。训练算法使用数据作为指导——通常是大量数据——以找到调整参数值的可行方法,从而提高模型的表现。
训练步骤耗时且需要大量数据,但如果一切顺利,得到的模型通常表现得比我们手动编写整个程序要好得多。这主要归因于以下原因:
-
该过程是数据驱动的,因此我们依靠证据来构建最佳模型,而不是直觉。
-
模型可以比手动编写的程序大数百万倍。
-
训练过程可以识别出工程师在手动编写程序时不会依赖的解决问题的偶然方式。
在本节中,我们将更深入地探讨机器学习的工作原理,并讨论常见的术语。
深度学习
在早期的机器学习中,工程师首先会编写专门的软件来从输入中提取代表性的特征。例如,工程师会编写专门的算法从文本中提取关键词或在图像中检测线条。之后,会使用一个小型机器学习模型从这些手动工程化的特征中进行预测。这个过程可以总结如下:
原始输入 -> 特征工程 -> 模型 -> 预测
在深度学习中,这是一种机器学习类型,模型处理许多更原始的输入,例如标记或未处理的输入图像:
原始输入 -> 模型 -> 预测
在深度学习中,模型本身学习了一种有用的方式来表示输入——它执行自己的特征工程。我们在 LLMs 中看到了这一点:机器努力产生上下文化的嵌入来表示输入标记的意义。为了处理更原始的输入,模型通常包含多层处理,这些处理层堆叠在一起,这就是“深度”这个名字的由来。
在文本生成和图像分析等许多应用中,深度学习比之前的手动工程化特征的两步过程更准确。然而,这需要为任务设计一个有效的架构,例如变压器架构。
注意,仍然有老式、“浅层”学习的地方。当你的输入已经是抽象且信息丰富的时候——比如说,带有年龄、血型等的患者记录——那么你只需要在顶部添加一个浅层机器学习模型。此外,深度学习模型太大,难以理解,因此很难确切知道它们是如何产生输出的。我们需要基于它们的高性能来信任它们。但有时你想要一个可解释的模型,你可以完全理解。在这种情况下,一个比手动工程化特征更可解释的模型可能是正确的选择。
机器学习的类型
在本节中,我们讨论了四种最常用的机器学习范式。这些范式在如何制定任务和处理训练数据方面有所不同。之后,我们讨论 LLMs 使用了这些范式中的哪一个。
监督学习
大多数机器学习模型通过示例进行学习。你向计算机提供大量——甚至巨大的——如何完成你想要它完成的任务的示例。这被称为监督学习。在监督学习中,每个示例都是一个输入及其对应的标签,这是我们希望模型学习如何产生的“真实”输出。
在 LLMs 的情况下,训练示例是带有“正确”的下一个标记猜测的句子,例如
“宁为安全”/“抱歉”
“埃菲尔”/“塔”
这样,LLM 就被展示了如何执行它预期执行的精确任务。提供给机器的所有示例都构成了它的训练数据。
*以另一个例子来说明,在自动图像分类模型的案例中,训练数据包含数千个样本图像,每个图像都标记了正确的类别(“草莓”、“飞机”、“狗”等等)。
收集标记数据通常需要人工操作。例如,为了创建用于图像分类的机器学习模型,人们经常雇佣人员手动将成千上万张图像标记为它们各自的类别。有时,这种情况无法避免,数据标记变成了成本高昂且耗时的瓶颈。在其他情况下,通过分析现有数据,可以使用技巧自动生成标签,我们将在后面讨论这一点。
理想情况下,机器将学习一个通用的过程来完成所需的任务。因此,它也能很好地处理训练数据中不存在的输入,例如新的句子或新的图像。当这种情况发生时,我们说模型具有泛化能力。
在一些不幸的情况下,模型会记住特定的训练示例,而不是学习一个通用的过程来完成任务。因此,当它必须在训练数据之外的数据上工作时,表现不佳。这被称为过拟合。在其他情况下,模型可能学习到的过程过于简单,因此在训练数据或其他数据上无法有效工作。这被称为欠拟合。
*关于模拟数据的笔记
最近,人们问我为什么他们不能直接运行一个计算机程序来生成模拟的训练样本(也称为合成数据),而不是通过收集和手动标记数据的繁琐过程。想象一下,如果你有一个程序可以生成 LLM 的训练示例。这个程序必须能够根据提示正确猜测下一个单词,例如“宁为安全死”/“抱歉”。但这个程序本身就是一个 LLM。如果你有一个这样的程序可以有效地生成正确标记的训练示例,那么你最初就根本不需要构建一个 LLM!
关于模拟数据的混淆似乎源于这样一个事实:在少数特定场景中,通过模拟确实可以创建训练数据。AlphaZero 就是这种情况,这是一个著名的机器学习模型,在围棋游戏中击败了人类玩家。它的创造者让计算机与自己下围棋,以生成数百万个模拟游戏并生成训练示例。但这只因为计算游戏的结果很容易——你可以很容易地判断谁赢了。但在大多数非游戏应用中并非如此。例如,除非你已经有一个 LLM,否则你无法轻易地判断下一个标记是什么,除非你已经有一个有效的图像分类模型。
有些人还建议通过自动从现有数据的组合中创建新的训练示例来增强你的现有训练数据。例如,一种称为 SMOTE(合成少数类过采样技术)的技术有时被用来生成更多少数类别的示例。假设你正在尝试训练一个机器学习模型来检测信用卡交易是否欺诈。由于(希望)欺诈并不经常发生,训练数据中可能包含非常少的标记为欺诈的交易实例。通过使用 SMOTE,AI 工程师通过组合现有实例来创建额外的欺诈交易示例。然而,这并没有向训练数据中添加任何新信息。因此,机器无法通过这些额外的数据学习到之前无法学习到的新知识(更详细的讨论,见mng.bz/7paQ
)。我建议你在有人建议你应该编造假数据以提高模型性能时要小心。在大多数情况下,这种假数据是用来弥补任务表述不佳,而不是必要的。
自监督学习
在某些应用中,可以通过自动从现有数据中提取信息来生成大量的标记示例。这被称为自监督学习。
想象一下,一个 AI 工程师从互联网上收集了大量文本。然后,工程师从中提取了数千个句子,并从每个句子中移除最后一个标记,将其转换为标签。结果是大量如何从前一个标记猜测下一个标记的示例,这正是 LLMs 所需要的。
假设数据中的一个句子是“埃菲尔铁塔在巴黎。”工程师通过如图 1.10 所示的过程生成训练示例。
图 1.10:通过细分现有句子并将每个句子中的最后一个标记转换为所需的自动补全标签来生成训练示例。
之后,使用监督机器学习从这些示例中训练 LLM。机器学习仍然是监督的,因为它基于如何完成工作的示例。但我们说它是“自我”监督的,以表明标签是从我们的原始数据源自动生成的,而不是从其他地方获得的,例如通过人工标注。
这个技巧只有在我们可以将任务表述为学习重建损坏的输入时才有效。在 LLMs 的情况下,我们通过移除最后一个标记来人为地损坏输入,然后要求 LLMs 通过猜测该标记来重建它。我们能够使用这个技巧可能是 LLMs 成功的主要原因之一,因为它可以在不进行人工标注的情况下生成大量的训练示例。
然而,在大多数机器学习应用中并非如此。例如,在构建图像分类模型时,我们不能使用自监督技巧。假设我们的数据包含一张草莓的图片。标签“草莓”图片内部不可用,因此我们无法将其移除并要求模型猜测,就像我们在 LLM 中所做的那样。
强化学习
在一个不太常见但替代的机器学习范式下,计算机通过试错来学习。训练算法选择随机的动作,尝试它们,并从之后的反馈中学习。例如,假设一个广告平台想使用机器学习创建一个用户兴趣的模型。广告商首先在用户每次访问网页时展示随机的广告,并记录用户是否点击了广告——这被称为探索。随着时间的推移,训练算法根据用户的点击识别出用户感兴趣的事物类型。一旦广告商对用户的兴趣有了概念,它就开始向用户展示相关的广告——这被称为利用。
通过试错来学习的技术被称为强化学习,或RL*。该领域的主要研究课题之一是如何在时间上平衡利用和探索。例如,在发现用户偏好之后,广告商可能仍然希望有时向用户展示随机广告,以发现新的偏好。
虽然强化学习在有些应用中取得了成功,但在商业环境中的应用却很少。这可能是由于与监督学习相比,通过试错来学习是一种相当浪费的学习方式,在监督学习中,我们直接向机器提供如何完成工作的示例。
随着 LLM 的兴起,一种新的 RL 变种变得流行,被称为带有人类反馈的强化学习,或 RLHF。这项技术用于改进现有的 LLM。它的工作方式如下:一群人类工作者被要求手动创建数千个虚构的 LLM 提示和替代 LLM 输出的成对示例,并要求他们根据偏好(“最佳”与“非最佳”)对这些替代输出进行标注。之后,AI 工程师训练一个监督 ML 模型,根据这些手动标注的示例来猜测 LLM 输出是好是坏。结果是称为奖励模型的 LM 模型,它专门设计用来确定 LLM 的输出是好是坏。
之后,AI 工程师运行强化学习算法来微调现有的 LLM。该算法生成随机的 LLM 输出,并使用奖励模型来确定它们的好坏。奖励模型的反馈被用来略微改进 LLM。该算法通过更好地将 LLM 与人类标注者认为的好输出对齐,逐步改进 LLM。
无监督学习
我们最后的机器学习类别是无监督学习。在这个范式下,我们并不向机器提供“正确输出”的例子。事实上,没有这样的概念,因为任务没有唯一的正确答案。无监督学习通常用于探索数据并从中发现模式。
无监督学习最常见的一个例子是聚类,其中我们试图将相似的数据点分组在一起。例如,我们可能希望根据他们的医疗记录将相似的病人分组,以创建几个假想的代表性病人并分析他们。没有关于病人应该属于“正确分组”的概念。我们可以将他们分成两个、三个或五个簇,但没有确定的方法来确定哪个簇的数量是正确的。
由于没有唯一正确的模型,我们无法以明确的方式衡量无监督学习算法的成功。这就是为什么人们经常建议使用许多经验法则来应用无监督学习。其中一些定义得并不好。例如,他们建议创建许多不同的模型,为每个模型计算一个指标,绘制结果曲线,最后,选择曲线的“膝部”或“肘部”处的模型。Hastie 等人撰写的流行书籍《统计学习的要素》(第 2 版,企鹅出版社,2009 年)将这一难题解释如下:
在监督学习中,有一个明确的成功或失败的标准,可以用来判断特定情况下的适当性,并比较不同方法在不同情况下的有效性。在无监督学习的背景下,没有这样的直接成功衡量标准。从大多数无监督学习算法的输出中得出的推断的有效性很难确定。人们必须求助于启发式论证,不仅是为了激励算法,正如在监督学习中经常发生的那样,而且也是为了判断结果的质量。这种不舒服的情况导致了大量方法的提出,因为有效性是主观的,不能直接验证。(第 486 页)
根据我的经验,许多试图使用无监督学习的人实际上需要的是监督学习。
例如,我认识一位来自医院的工程师,他试图预测患者疾病的严重程度。他使用聚类算法自动将患者分组到几个代表性的患者中。之后,当一位新患者到来时,他试图根据他们最近的簇对他们进行分类。
这并没有奏效,工程师感到非常沮丧。他尝试了多种流行的方法来创建好的聚类。他问我:“我怎样才能找到高质量的聚类,以便分类工作能顺利进行?”我向他解释说,没有这样的事情;你不能独立于你打算如何使用它们来评估聚类的质量。他真正需要的是在包含预期分类结果的病人记录对上训练的监督学习。
注意,有时人们使用“无监督学习”这个术语来指代没有手动生成标签的监督学习,这只会使问题更加混乱。
LLM 是如何训练(以及驯服)的
第一批 LLM 仅使用自监督学习构建。AI 工程师从互联网上收集了大量文本,并使用上述过程(“宁为安全”/“宁为安全”/“抱歉”)自动生成训练示例。一个流行的数据来源是 Common Crawl,这是一个包含从互联网上收集的大量文本的数据库。另一个流行的文本来源是 Books3,这是一个包含 190,000 本书的数据库。请注意,其中很多数据是在未经作者授权的情况下收集的;我们稍后会回到这个有争议的话题。
在 2018 年的一篇论文中,OpenAI 的研究人员揭示了他们当时最大的模型 GPT-2,仅通过使用自监督学习(Redford 等人,2019 年)就成功地完成了令人印象深刻的任务。这个有希望的结果使他们对此方法非常雄心勃勃。他们推测,互联网上可用的海量数据与自监督学习相结合,可能导致 LLM 学会执行各种任务:
互联网上包含大量无需互动交流即可被动获取的信息。我们的推测是,一个具有足够容量的语言模型将开始学习从自然语言序列中推断和执行任务[例如,要求 LLM 翻译或总结文本],以便更好地预测它们[猜测下一个单词],无论它们获取信息的方法如何。
此外,他们还认为,猜测下一个单词的任务涵盖了其他许多任务,因此构建真正强大的 LLM 通常就足够了。他们使用数学优化领域的术语解释说,下一个标记预测任务的“全局最小值”(最佳解决方案)与执行各种其他任务的“全局最小值”(最佳解决方案)相一致。因此,努力找到下一个标记预测任务的最佳解决方案等同于努力找到其他任务的最佳解决方案。
但热情并没有持续太久。虽然使用自我监督方法训练的 LLM 在许多情况下表现良好,但它们在其他情况下也犯下了严重的错误。此外,有时它们会生成不适当的输出。OpenAI 的研究人员在 2022 年的一篇论文中讨论了这个问题(可在arxiv.org/pdf/2203.02155
找到):
这些模型经常表现出无意的行为,例如编造事实、生成有偏见或有害的文本,或者简单地不遵循用户指令。这是因为许多最近的大型语言模型使用的语言建模目标——从互联网网页上预测下一个标记——与“有帮助且安全地遵循用户指令”的目标不同。
正如这句话所说明的,研究人员将问题归因于我们对 LLM 真正想要的——产生事实、适当的文本——与他们被训练去做的事情——根据从互联网收集的文本猜测下一个标记——之间的不一致。
OpenAI 的研究人员提出了一个解决方案,称为 InstructGPT (arxiv.org/abs/2203.02155
),该方案通过四个步骤训练 LLM。首先,模型通过使用互联网数据进行自我监督的方式,以通常的方式进行训练。
第二,雇佣了人工工作者手动编写数千个输入提示及其对应期望输出的示例。这些手动编写的示例提供了额外的训练数据,有助于改进和“驯服”模型,例如,通过展示如何执行流行任务、进行双向对话以及拒绝回答不适当的问题。据《时代》杂志文章报道,OpenAI 为这项标注数据的工作支付了每小时不到 2 美元的肯尼亚工人(mng.bz/mGP8
)。这表明,训练高性能 LLM 比最初看起来更依赖于人工。
第三,现有的 LLM 使用手动生成数据进行微调。这意味着通过使用新示例进行几轮额外的训练,其参数略有调整。
第四步是使用带有人类反馈的强化学习进一步细化 LLM(见“强化学习”下的解释)。在这种情况下,人类被要求根据其质量手动对 LLM 的替代输出进行排名,这为训练算法提供反馈,以改进 LLM。
ChatGPT 是第一个使用步骤 1-4 训练的流行模型。这一事件可能让那些相信最高性能的 LLM 只需从互联网收集的数据创建,而不需要任何人工标注的人感到严重失望。
关于隐私的说明
随着人们使用大型语言模型(LLM),他们的对话可能会被 LLM 提供商记录。这些数据可能被用于改进模型,无论是通过自动生成新的训练数据并微调模型,还是通过让员工识别用户面临的问题并想出解决问题的方法。一些应用程序,如 ChatGPT,允许用户用点赞或点踩来评价答案,有时还会要求用户对替代答案进行排序,这些信息可能后来会被用于改进 LLM。
如果你在 LLM 的提示中包含敏感信息,你应该小心,因为这些信息可能会被负责创建和改进 LLM 的员工看到或使用。你可能会选择不记录你的提示。例如,OpenAI 的网站解释说:“当你使用我们的服务,如 ChatGPT,我们可能会使用你的内容来训练我们的模型。你可以通过我们的隐私门户选择退出训练……我们不使用来自我们的商业产品,如 ChatGPT 团队或 ChatGPT 企业,来训练我们的模型。”
损失
让我们继续讨论 ML 模型如何学习的话题。第一个要素是评估给定模型质量的方法,称为损失或成本。这是学习算法用来比较不同参数值的替代模型,并找到改进机会的。
损失计算了模型的输出与训练示例相比的不准确性——值越高,模型越差。
考虑一个训练示例,“埃菲尔铁塔”与其对应的标签“塔”,这是用来训练 LLM 的。我们的目标是计算一个损失值,以衡量当输入“埃菲尔铁塔”时,LLM 的输出偏离程度。
损失是通过查看 LLM 分配给正确标记的概率来计算的,例如在本例中的“塔”。如果概率高,损失就低,反之亦然。这是通过取概率的负对数来计算的,这被称为交叉熵损失或对数损失。如果“塔”的概率是 1.0(-log(1) = 0),则损失为零,而分配给“塔”的概率越低,损失值就越高(例如,-log(0.2) = 1.6 和-log(0.1) = 2.3)。
整个数据集上的损失是通过将每个训练示例的个别损失相加来计算的。模型在根据训练数据猜测正确下一个标记方面越好,它分配给它们的概率就越高,损失就越低。任务完成。
然而,损失衡量的是模型在训练数据上的性能。AI 工程师希望较低的损失值能转化为在未见过的、新数据上的更高性能。但这并不总是如此;如果模型出现过拟合,它会记住训练数据中的个别实例,从而实现低损失,但与其他数据不兼容。
随机梯度下降
到目前为止,我们已经描述了以下机器学习(ML)的成分:
-
模型的架构,其中包含可学习的参数(“空白”)
-
训练示例
-
一种根据训练示例来衡量模型质量(损失)的方法
剩下的唯一成分是一个算法,用于找到调整参数的最佳方式,从而使模型产生最低的损失。
用于此目的最常见算法,用于构建大型语言模型(LLM)和许多其他机器学习模型,是随机梯度下降(SGD)。它的工作原理如下。首先,模型内部的所有参数都使用随机值初始化。因此,这个模型的第一版在当前任务上完全无用——例如,LLM 的下个标记预测是无意义的。
之后,训练算法选择一小部分训练样本,称为批次或小批量,来计算略微修改模型参数以减少该批次损失的有希望的方法。在微积分术语中,这相当于计算损失的梯度。我们可以将其视为稍微调整参数以找到变化的有希望方向。想象一下,验光师稍微改变你的眼镜处方,并问你是否比以前看得更清楚。之后,训练算法根据刚刚找到的有希望方向略微修改模型的参数,希望这能略微提高模型。
注意,这里只使用一个训练示例批次进行计算,而不是整个训练数据。这就是为什么算法被称为随机的,因为你是基于数据样本而不是所有数据来估计梯度的。这使得整个过程变得更快。
下一步是使用从训练数据中提取的第二批示例重复上述操作。参数再次根据该批次计算的梯度方向略微更新。这个过程逐批重复。在某个时刻,算法对整个训练数据进行了完整的一次遍历,这被称为一个 epoch。通常,训练会进行多个 epoch,因此整个训练数据会有多次遍历。我们不知道训练流行 LLM 所使用的确切 epoch 数量,但 OpenAI 曾经透露训练一个模型需要 100 个 epoch(见mng.bz/5gy7
))。
训练过程非常耗时。可能需要几天时间才能完成,并且需要多个 GPU 协同工作来完成所有数值计算。
随机梯度下降有助于逐步改进模型,但它并不能保证找到所有可能模型中的最佳模型。这是因为沿着梯度方向进行微小的改进可能会使模型陷入局部最小值。这意味着通过调整参数值的小幅变化无法进一步改进模型。如果参数值从当前值进行广泛调整,可能会有更好的模型,也许是全局最佳模型,但这就像在 haystack 中找针一样困难。
我们能够遵循这个过程创建一个优秀的 LLM,这有点疯狂,因为我们必须从完全随机的参数中找到有效的值。这太疯狂了!它之所以有效,是因为模型的架构是高度专注且量身定制的,以适应任务(例如,它强制执行具有简单线性投影和点积的多头注意力机制)。因此,模型的参数值在执行人类规定的任务方面得到了正确的引导。
注意,使用现有模型的速度要比训练它快得多。所有参数已经定义,你只需要使用一次模型来计算其从输入中得到的输出。使用已经创建的模型通常被称为推理时间,以区别于更长的训练时间。
*到目前为止,我们已经从 LLMs 的背景下讨论了 AI。理解 AI 如何与其他输入(如图像)一起工作的大致原理,与我们已经讨论的内容并没有太大的跳跃。在接下来的几节中,我们将简要讨论 AI 如何处理图像和不同数据类型的组合。我们首先从卷积神经网络开始,这是一种架构,它在图像分析方面所做的贡献与 transformers 在文本分析方面所做的贡献类似。
生成式 AI(以及 LLMs 是否是生成式的?)
随着 LLMs 的普及,“生成式 AI”一词已成为描述用于生成新内容(如文本和图像)的任何 AI 模型的流行方式。在这个意义上,LLMs 是生成式的。
然而,在技术机器学习文献中,“生成式”一词的原始含义并非如此,因此你可能会发现这个词的用法存在冲突。
在机器学习中,当模型根据输入计算标签的概率时,我们称其为判别式模型。我们可以用条件概率 P(Label | Input)来数学地描述这一点。这正是 LLMs 所计算的内容——给定前一个标记计算下一个标记的概率——因此,从技术上讲,它们是判别式模型。
相比之下,机器学习文献中的生成模型是指计算遇到特定数据(包括输入和标签)概率的模型。例如,如果你给生成模型一张猫的图片并配以“猫”的标签,它会告诉你找到这样一张图片并配以这样标签的可能性有多大。因此,它也会评估猫图片本身的合理性。如果你给模型一张蓝色猫的图片并配以“猫”的标签,它可能会输出一个低概率,因为你不太可能找到蓝色猫的图片。用数学术语来说,生成模型计算 P(输入,标签),即遇到特定输入/标签训练样本的联合概率。LLMs 不是为此而设计的,所以,严格来说,它们不是生成模型(参见mng.bz/6eMR
的讨论)。
卷积(图像、视频和音频)
现在让我们暂时离开文本生成,快速看看 AI 模型如何处理其他数据类型,如图像。在 2010 年代,一种被称为卷积神经网络(convolutional neural network,或 CNN)的机器学习模型架构,在图像分类中变得极为流行。CNN 的输入是一个图像——表示为数字表,或称为像素——输出是对图像类别的预测,例如“草莓”。
卷积神经网络(CNN)被特别设计来利用关于图像分类的强假设:可以通过物体部分的存在来检测物体(例如,通过尾巴、眼睛、胡须的存在可以识别出一只猫),但我们并不太关心这些部分的确切位置(例如,猫尾巴指向的方向对于识别它是一只猫来说并不重要)。
CNN 对输入图像应用一系列变换。第一个变换是卷积,这是一种简单的数学运算,它过滤图像并产生一个略微修改后的版本。卷积可以配置为执行诸如
-
模糊图像
-
突出显示特定颜色的区域
-
在给定方向上突出显示颜色变化明显的区域(例如,对角线)
卷积所应用的精确滤波器是通过定义一个小矩阵中的数字来配置的。这些值是 CNN 的可学习参数,因此模型在训练时决定应用哪些滤波器,而不是工程师事先定义它们。
CNN 同时执行多次卷积并将结果组合成一个新的图像。之后,图像被下采样,这意味着它在空间上被缩小。例如,一个 1024 × 1024 像素大小的图像可能通过平均相邻像素的四重值缩小到 512 × 512 像素大小。下采样的效果是通过去除物体的精确位置(正如我们上面所说的,我们假设在图像分类的上下文中精确位置并不重要)使图像更加抽象。
在得到的图像上应用新的卷积,然后进行另一轮下采样。这个过程会反复进行。由于在已经过滤的图像上应用过滤器,CNN 可以检测到越来越复杂的模式。例如,我们可以想象,CNN 最初使用卷积来检测简单的线条,然后检测平行线对,接着是平行线组,然后是线条的胡须,最后从胡须中检测到猫。由于确切的过滤器是通过机器学习确定的,因此很难理解 CNN 用于预测的确切策略。
这个过程的最终结果是嵌入,它有效地以抽象的方式表示图像的内容。这个嵌入用于预测图像属于每个可能类别的概率。任务完成。
CNNs 也被用于将图像转换为相同大小的其他图像。例如,在重建损坏的图像或使任何图片看起来像梵高的画作时,这很有用。一种称为 U-Net 的流行架构通过两个步骤实现这一点。首先,一个普通的 CNN 执行上述描述的转换,将输入图像缩小为内容的一个更小、更抽象的表示。之后,另一个类似 CNN 的结构提取 CNN 产生的中间图像,并将它们“缝合”在一起,以不同的风格重建一个全尺寸图像。
卷积神经网络(CNNs)也变得流行,用于处理音频和视频。其原理相同——输入数据经过一系列卷积和下采样操作,直到转化为更抽象的表示。
变换器(Transformers)已成为处理文本的首选架构,而 CNNs 已成为处理图像、视频和音频的首选架构。在下一节中,我们将看到变换器和 CNNs 如何在多模态人工智能中结合使用。
多模态人工智能
一些被称为多模态的 AI 模型能够消费或产生文本、图像和音频的组合。一个例子是能够从文本描述生成图像的 AI,例如流行的 Midjourney 和 DALL-E。
多模态人工智能模型是通过结合大型语言模型(LLMs)和 CNNs 来构建的。有无数种结合方式,所以我们只简要描述两种方法,一种是从图像生成文本,另一种是从文本生成图像。
一种流行的图像到文本架构使用独立训练的 CNN 为输入图像生成嵌入。然后,通过线性投影将嵌入转换,使其与 LLM 的嵌入可比较。例如,CNN 为猫的图像生成的嵌入被转换为 LLM 用于“猫”标记的嵌入。新的嵌入随后被注入到 LLM 中。哇!
现在让我们转向一个高度流行的文本到图像的方法,称为条件扩散模型。在这个方法中,一种 U-Net 类型的 CNN 被训练从图像的损坏版本及其文本标题中重建图像(见图 1.11)。
图 1.11 训练扩散模型以改善与其标题配对的损坏图像。
模型接受两个输入:
-
一张损坏的图像(通常称为“噪声”图像)
-
表示文本标题含义的嵌入(例如,使用语言模型生成)
文本嵌入被作为额外的输入插入到模型中。这通常是通过使用与图像大小匹配的嵌入,并将其作为额外的颜色通道插入,覆盖在红色、绿色和蓝色之上来完成的。
CNN 被训练来修复损坏的图像。这是以监督的方式进行。这需要一个包含大量损坏图像示例、它们相应的标题和它们未损坏版本的数据库。损坏的图像是通过人工损坏一个高质量图像自动生成的,而标题是手动生成的。
一旦这个模型被训练,它就能够使用标题作为指导,略微改善一张糟糕的图像。让我们看看这个模型是如何从描述中创建一个全新的图像的,就像我们在 Midjourney 中做的那样。
首先,模型被输入一张完全随机的图像,它类似于故障电视中的静态噪声,以及所需图像的标题(见图 1.12)。然后,模型产生这个图像的略微“改进”版本,我们在这个版本中看到所需的对象从噪声中略微浮现出来。
图 1.12 使用扩散模型重复生成所需图像,使其从高斯噪声中显现出来。
然后,模型会反复对其自己的输出进行使用,这逐渐增强了图像。经过多次这样的操作后,图像变得既清晰又锐利。这通常是通过实验预先确定的一个固定次数来执行的——步数被设定得足够大,以确保大多数图像在结束时都会变得清晰。有些人正在研究根据提示来调整步骤数量的技术(arxiv.org/abs/2408.02054
)。我们可以将这个过程视为消除“噪声”,因此称之为“扩散模型”。这种技术推动了最受欢迎的文本到图像模型。扩散也是文本到视频模型的基础,这是一个热门的研究课题。例如,OpenAI 的名为 Sora 的视频生成模型就使用了扩散技术(mng.bz/oKlD
)。它不是去噪图像,而是设计用来去噪“补丁”,这是空间和时间上一个小片段视频的表示。补丁覆盖屏幕的一小部分,如左上角,跨越几个连续的帧。就像图像一样,模型被反复使用,在提示的指导下逐步增强补丁,从随机噪声开始。截至本文撰写时,该模型尚未向公众发布。
这就带我们结束了(相对)快速概述的一些 AI 基本要素。在我们进入下一章之前,让我们对机器学习进行一次高层次的反思。
没有免费的午餐
我想以对机器学习的反思来结束本次讨论。正如我们在本章中看到的,机器学习需要为每个问题设计一个专门的架构。例如,变换器用于生成文本,CNNs 用于分析图像,两种技术的创造性组合在多模态环境中得到应用。每个模型的架构都是基于如何最好地解决当前问题的假设。例如,变换器迫使模型计算注意力分数,而 CNNs 则强制使用卷积。
每一个机器学习里程碑的取得都得益于一种新架构的发明,这种新架构在完成当前任务方面比之前的架构做得更好。例如,变换器取代了 LSTMs,AI 在文本生成方面的性能得到了显著提升。当我们以创造性和实用的方式为特定任务量身定制架构时,就会取得进步。因此,当前的 AI 是关于为每个问题设计定制解决方案,而不是设计一个适用于所有事物的通用方法。
事实上,机器学习的“没有免费午餐定理”简单来说,就是没有一种普遍最佳的架构对所有问题都是最优的(参见 David Wolpert,1996 年,“学习算法之间缺乏先验区分”,神经计算 8.7: 1341–1390)。相反,每个问题都需要一个专门的架构。
有时,我们会有一种印象,即机器是自行学习的,并且当前的 AI 是一种通用方法。实际上,我们帮助机器学习。而且我们帮助很多。
摘要
-
LLMs 被设计用来猜测完成输入提示的最佳下一个单词。
-
LLMs 将输入细分为来自内部词汇表的有效标记(常见单词或单词片段)。
-
LLMs 计算每个可能的标记是输入之后下一个标记的概率。
-
在 LLM 周围添加一个包装器可以增强其功能。例如,它使 LLM 反复食用自己的输出以生成完整的输出,每次一个标记。
-
当前的 LLM 使用嵌入向量表示信息,这些向量是数字列表。
-
当前的 LLM 遵循转换器架构,这是一种逐步对输入标记进行上下文化的方法。
-
LLMs 是通过机器学习创建的,这意味着数据用于定义模型内部缺失的参数。
-
有不同类型的机器学习,包括监督学习、自监督学习和无监督学习。
-
在监督学习中,计算机通过示例进行学习——它被提供执行任务的示例。在自监督学习的情况下,这些示例通过扫描数据自动生成。
-
流行的 LLM 最初以自监督的方式使用公开数据训练,然后,它们使用手动生成数据进行微调,以使它们与用户的客观目标保持一致。
-
卷积神经网络(CNNs)是一种流行的架构,用于处理其他类型的数据,例如图像。
-
卷积神经网络(CNNs)与转换器(transformers)结合以创建多模态人工智能。
第二章:幻觉
本章涵盖
-
幻觉,人工智能最重要的局限性之一
-
幻觉为什么会发生
-
我们是否能够很快避免它们
-
如何减轻它们
-
幻觉如何影响企业以及为什么我们在使用人工智能时应该时刻牢记这一点
第一章概述了当前人工智能的工作原理。我们现在关注其局限性,这将帮助我们更好地理解人工智能的能力以及如何更有效地使用它。
我对幻觉的担忧已经持续了一段时间,甚至在术语变得流行之前。在我的书中,《智能直到愚蠢:为什么人工智能不断犯下史诗般的错误[以及为什么人工智能泡沫将破裂]》(应用数学有限公司,2023 年),我称它们为“史诗般的失败”或“史诗般的错误”,并表达了我对它们能否得到解决的怀疑:
我觉得每次解决一次史诗般的失败,另一场就会冒出来……随着人工智能的不断改进,问题案例的数量不断减少,因此它变得更加可用。然而,问题案例似乎永远不会消失。这就像你迈出了一步,让你距离目的地 80%,然后又迈出了一步,覆盖了剩余距离的 80%,然后又迈出了一步,让你再接近 80%,以此类推;你会不断接近目的地,但永远不会到达。
似乎每一步都比前一步更难;我们发现的每一次史诗般的失败似乎都需要一个越来越复杂的解决方案来修复。
由于幻觉是人工智能的主要挑战之一,它们值得拥有自己的一章。
本章将首先讨论幻觉是什么以及为什么会出现,这将帮助我们更好地理解人工智能的主要局限性,以便我们为它们做好准备。接下来,我们将讨论为什么幻觉不太可能很快消失以及一些减轻它们的技术。最后,我们将讨论幻觉如何成为某些业务线的问题,这使得在早期考虑它们变得很重要。
幻觉是什么?
幻觉是人工智能产生的令人不满意的结果,具有三个定义特征。首先,它们是不正确的,例如虚构的事实或问题的错误解决方案。其次,它们是自信的——人工智能将这些输出呈现为正确,而不包括任何免责声明或警告。第三,它们以不可预测的方式发生——用户往往在不经意间发现幻觉。
接下来的几节将讨论三种不同类型的幻觉及其示例,然后对幻觉的过度自信和不可预测性进行评论。
虚构的事实
2023 年,两位律师使用 ChatGPT 准备了一份法律简报并提交给了法庭。该文件包含了对先前法律案件的多次引用,以建立先例。然而,这些案件实际上并不存在。它们听起来都很真实,但实际上并不是。其中一位律师解释说:“我听说了一个新的网站,我错误地认为它像是一个超级搜索引擎”(见mng.bz/nRdd
)。律师们被法官罚款,这个故事成为了全球新闻头条。
一组斯坦福大学的研究人员研究了专门为帮助律师进行研究的基于 LLM 的产品。他们认为这些产品“容易产生幻觉,或编造虚假信息”(见arxiv.org/pdf/2405.20362
)。他们计算这些产品“17%到 33%的时间会产生幻觉”,尽管它们的创造者承诺它们是“无幻觉的”。
当你 least expect it 时,幻觉仍然会发生。就在几天前,我向 GPT-4o 提问:“给我一个包含非常长单词的真实书籍标题列表。”它的回答如下:
** 这里是一些包含非常长单词的真实书籍标题:
-
《查戈加戈加曼查戈加戈查布纳古纳古马古:马萨诸塞州最长的地名》 by Jeffrey L. Howard
-
《反废除主义:这个词的真正含义》 by Marcus Scott
-
《浮夸虚无主义及其他关于无的思考》 by Dr. Edward Greenfield
-
《超级疯狂奇妙绝伦:流行文化现象的诞生》 by K. H. Greene
-
《肺尘埃沉着病:罕见疾病的故事》 by Judith Parks
这些标题包括了英语中最长的单词之一,通常关注它们的含义或它们所描述的现象。
这些书实际上并不存在。LLM 编造了看起来可能真实的标题和作者名字,但它们并不是。请注意,它向我保证这些是真实的书名。(整个对话可在mng.bz/RV1v
查看。)
完全虚构的事实是 AI 幻觉的一种常见类型,也许是最戏剧性的。但让我们看看其他两种类型。
误解
2024 年 5 月,谷歌推出了一项名为“AI 概览”的新功能预览。该功能将 AI 生成的文本添加到谷歌搜索结果的最顶部。但事情并没有如预期进行,因为它经常生成荒谬的回应。一篇《Wired》文章解释说:“该功能因产生错误和有时疯狂的答案而受到广泛嘲讽,比如建议吃石头或用胶水做披萨” (mng.bz/gaKG
)。
值得注意的是,一位用户在搜索框中写下:“我应该吃多少石头?”AI 生成的答案是,“根据加州大学伯克利分校的地质学家,你应该每天至少吃一块小石头。他们说,石头是消化健康中重要的矿物质和维生素的重要来源。约瑟夫·格兰杰博士建议每餐吃一份砾石、火山岩或鹅卵石,或者将石头藏在冰淇淋或花生酱等食物中”(见mng.bz/vKRa
)。
另一位网民在谷歌的搜索框中写下以下内容:“我感觉很沮丧。”AI 生成的回复是,“你可以尝试很多方法来应对你的沮丧。一位 Reddit 用户建议从金门大桥跳下去”(mng.bz/5gz8
)。
在这些情况下,AI 并没有编造东西。引用的信息实际上在网上是可用的。值得注意的是,一家讽刺杂志发表了一篇喜剧文章,建议地质学家建议吃石头(见mng.bz/4aXQ
))。问题在于 AI 没有正确地解释和语境化数据。
这种现象也已被检索增强生成(RAG)方法的用户观察到,在这种方法中,一个 LLM 被喂以与任务相关的最新文档(见第一章)。AI 有时会通过误解那些文档中存在的某些事实而产生幻觉。
问题的错误解决方案
在 2024 年初,网民报告说,如果你要求 DALL-E 生成“一个房间里没有大象的图片”,它会创建一个房间里有一个巨大大象的图片(mng.bz/6e0p
)。当受到挑战时,AI 会坚持说房间里没有大象。
我在几个月后尝试重现这个问题,但它再也没有发生。然而,尽管现在的 AI 模型在绘制没有大象的图片方面取得了成功,但它们仍然无法绘制没有其他东西的图片。根据一篇博客的观察(mng.bz/QDp4
),我要求 GPT-4o“绘制一张没有胡须的人的图片。”输出结果如图 2.1 所示。我重复进行了几次实验。AI 几乎每次都生成了一张有显著胡须的人的图片,除了少数几次胡须不太明显但仍然存在的情况。
图 2.1 AI 绘制它被明确告知不要绘制的内容的示例
这是一个 AI 未能正确执行任务,同时向用户保证其正确性的例子,这是另一种常见的幻觉类型。
这种类型的幻觉通常发生在要求 LLM 解决简单的逻辑问题时,尤其是如果它们以与问题原始形式略有不同的方式提出。让我们看看一个在网上广泛讨论的例子,我使用 ChatGPT 自己重现了这个例子:
一个农夫站在河的一边,旁边有一只羊。有一条船,足够容纳一个人和一只动物。农夫如何使用这条船在最少行程内将自己和羊带到河对岸?”
这里是 LLM 的输出结果(也可在mng.bz/OBy2
找到),它是不正确的,因为它包含了太多的行程:
农夫可以通过以下步骤在最少行程内将自己和羊带到河对岸:
-
农夫将羊带到河对岸并把它留在那边。
-
农夫独自返回到原来的岸边。
-
农夫再次过河。
因此,农夫可以在三次行程内将自己和羊带到河对岸:
-
行程 1:农夫带着羊到河对岸。
-
行程 2:农夫独自返回。
-
行程 3:农夫再次过河。
因此,所需的最少行程数是三次。
注意,河流穿越谜题很受欢迎,它们的解决方案可以在网上找到,但通常需要多次穿越。ChatGPT 很可能是通过模仿在网上找到的类似问题的解决方案来生成这个解决方案的。
一组研究人员研究了 LLM 在解决“爱丽丝有 N 个兄弟,她也有 M 个姐妹。爱丽丝的兄弟有多少个姐妹?”这一问题的变体时的表现。作者报告了“整体低正确回答率”和“在相同问题的微小变化中表现出强烈的波动性”(见arxiv.org/pdf/2406.02061
)。
当要求 LLM 帮助编码任务时,也会观察到类似的问题。普渡大学的一组研究人员研究了 LLM 在回答 Stack Overflow 上发布的问题时的表现(见arxiv.org/pdf/2308.02312
)。他们得出结论,
我们的分析显示,52%的 ChatGPT 答案包含错误信息,77%的答案冗长。尽管如此,我们的用户研究参与者仍然有 35%的时间更喜欢 ChatGPT 的答案,因为它们的全面性和良好的语言风格。然而,他们也有 39%的时间忽略了 ChatGPT 答案中的错误信息。
他们补充说,“ChatGPT 很少在代码答案中犯语法错误。大多数代码错误是由于应用错误的逻辑或实现不存在的或错误的 API、库或函数。”
另一组研究人员研究了 AI 从图像生成文本的性能。他们解释说,这些 AI 模型“通常生成的输出与视觉内容不一致。”例如,他们“在给定的图像中识别不存在的对象类别或错误的类别”(arxiv.org/pdf/2404.18930
)。
过度自信
幻觉输出没有承认解决方案可能不正确。在之前的例子中,AI 模型告诉我,“这里有一些包含非常长单词的真实书籍标题”,以及“这是一张按照要求没有胡须的男人的照片。”AI 模型还向我保证,它解决船只过河问题的方案包含最少的步骤。
在某些情况下,当我们指出后续提示中的错误时,我们可以让 AI 纠正其输出。AI 道歉并提供更好的答案。然而,这并不总是有效,模型仍然固执地产生错误的输出。一篇研究文章(arxiv.org/pdf/2406.02061
)解释道:
我们看到模型表现出强烈的过度自信,它们以有说服力的语气表明错误答案是正确的,并向用户发出关于其错误答案高质量和确定性的安慰信息。模型也表现出对更改提供答案的高度抵抗力,尽管同意修改它,但最终仍然坚持最初提供的相同答案。一些模型表现出“固执”,即在尝试寻找可能的错误的过程中,它们坚持认为提供的解决方案实际上是正确的。
不可预测性
我反复问 ChatGPT,“9.11 和 9.9 哪个更高?”它总是回答说 9.9 更高。但是当我问,“9.11 和 9.9 哪个更高?”时,它几乎每次都回答说 9.11 更高,有时还会给出一个关于其答案背后逻辑的长篇大论(见图 2.2)。这是对话的链接:mng.bz/2yma
。令人惊讶的是,AI 在语法简单改变后对同一问题给出了相反的答案。
图 2.2 AI 生成令人惊讶输出的一个例子。当询问“9.11 和 9.9 哪个更高?”时,输出不同。
从这个例子中我们可以看到,幻觉往往以不可预测的方式发生。让我分享另一个例子,这是我写这本书时偶然发现的令人惊讶的幻觉。如果你还记得,在第一章中,我分享了我输入“埃菲尔”后 LLM 的输出。我最初得到的回答如下:
看起来你的消息可能被截断了。如果你要询问埃菲尔铁塔,这里有一个简要概述:
埃菲尔铁塔是世界上最具标志性的地标之一,也是法国永恒的象征。它位于巴黎,由法国工程师古斯塔夫·埃菲尔设计,于 1889 年为庆祝法国大革命 100 周年而举行的万国博览会完工。最初,一些法国最著名的艺术家和知识分子批评了这座塔,但后来它已成为全球最受钦佩和参观的纪念碑之一。
注意,尽管之前提到了“埃菲尔铁塔”,但响应中却包含了虚构的“Eiffenstein Tower”。在我重新运行提示后,幻觉消失了,我将无幻觉的响应包含在第一章中。这相当令人惊讶,因为任务很简单,我没想到 LLM 会编造一个塔的名字。
大型语言模型(LLMs)通常会被微调以克服已记录的幻觉,但其他幻觉似乎总是层出不穷。有时感觉就像玩“打地鼠”游戏:你解决了一个问题,却不知道下一个问题何时会出现。
为什么 AI 会出现幻觉?
很容易让人认为幻觉只是需要小修小补的 bug。然而,问题似乎比这要深得多。在接下来的几段中,我们将讨论一些主要原因,解释为什么 AI 会出现幻觉。之后,我们将通过一个简单的机器学习模型幻觉的例子来进一步剖析这个问题。了解幻觉的原因有助于我们更好地准备应对它们,甚至减少它们的发生。
世界模型不足
如第一章所述,当前的 AI 是通过学习如何完成任务来学习的。例如,LLMs 是通过学习如何猜测下一个单词的例子来训练的,而图像分类卷积神经网络(CNNs)则是通过带有正确类别标签的图像数据库来训练的。仅举另一个例子,自动驾驶汽车的 AI 模型通常是通过记录人类驾驶的汽车视频片段来训练的,每个片段都标注了驾驶员采取的动作,例如“向左转向”、“加速”和“刹车”。
有时,仅通过观察示例来学习执行一项任务是直接的。考虑从视频中学习读取汽车牌照的案例。我们可以想象,一个人或一台机器可以通过观察别人如何做这项任务来学习任务。你会很快推断出有两个环的数字是 8,或者只有一个直线的数字是 1。完成这项工作所需的“外部”知识并不多,只需从如何执行这项任务的示例中轻松推断出来。
现在,考虑在繁忙的道路上驾驶汽车的案例。有效地执行这项任务需要比从标记有“转向”等动作的视频示例中快速推断出来的知识要多得多。跟我进行一个思想实验,以说明这个观点。
想象你正在高速公路上驾驶,一把飞来的雨伞挡住了你的去路。你知道雨伞是软的,所以你可能会决定用你的车正面撞上去。如果一匹马挡在路中间,你可能会选择转动方向盘避开它,因为你知道它是坚固且沉重的。但在驾驶学校没有人教你雨伞是软的,而马是硬的。相反,你从在这个星球上生活的经历中知道雨伞和马是什么样的。这种经历帮助你建立了一个全面的世界模型,描述了我们生活的世界,包括物体的坚固性。仅从看到人们驾驶的例子中很难构建这样一个全面的世界模型。
LLMs 在某种程度上构建了一个内部世界模型。例如,我们在第一章中看到,LLMs 构建了上下文化的嵌入来表示标记的意义。这些模型可能代表了一些关于世界的先进事实,这也解释了为什么 LLMs 可以正确解决许多问题。然而,这些模型似乎还不够先进,这导致了幻觉。
例如,大型语言模型(LLMs)的内部世界模型通常包含捷径或对常见问题解决方案的记忆,而不是真正的解决问题的方式。因此,正如我们在之前讨论的过河例子中提到的,当要求它们解决一个不常见的问题变体时,它们会失败。
缺乏的世界模型也出现在其他类型的 AI 中。例如,一组研究人员注意到,一个卷积神经网络(CNN)只有在牛下面有草的情况下才能识别出牛。值得注意的是,CNN 未能识别出图片中站在海滩上的巨大牛,因为它没有识别出牛和草的组合,而是错误地认为牛和草的结合就是牛本身。在训练过程中,由于模型的表现是通过典型的图像来评估的,其中牛站在草上,因此这个问题没有被检测到。
在自动驾驶汽车中也观察到了许多类似的问题。有一次,一辆自动驾驶汽车在繁忙的道路上突然停车,原因是交通锥的存在。这些锥形物被放置在分隔两条车道的线上,所以汽车本应继续行驶,但不要换道。由于这不是交通锥最常见的用途,AI 的内部世界模型未能表示这一点。
世界模型:理论与实际
纯粹主义者可能会告诉你,在理论上,通过示例学习应该足以构建最全面的世界模型。你所需要的只是一个大量且多样化的数据集。例如,如果你的数据中包含了足够多的牛在不同地点的图像——在草地上、沙子上、泥地里等等——那么世界模型将正确地表示牛是什么,无论它站在哪种土壤上。或者,如果我们收集了足够的驾驶视频,AI 最终会看到一切,包括司机与伞、马、交通锥和其他各种罕见事件的遭遇。然后学习算法将设法构建一个全面的世界模型,涵盖司机为了有效驾驶而应该了解的所有关于世界的事情。
问题在于,尽管在理论上这一切听起来都很吸引人,但在实践中并不奏效。要使这一切工作,所需的数据量是如此之大,以至于不切实际。边缘情况和罕见情况,如飞伞和海滩上的牛,通常不在可用的训练数据中。你需要大量的数据才能使这些情况经常出现。有些人将这些边缘情况称为“长尾”,意味着存在大量不常发生的情况。
当我要求 ChatGPT 列出包含长单词的书名时,我的问题相当奇怪。在互联网上,不太可能有很多人在写关于这个话题的内容。因此,模型没有遇到很多执行那个特定任务的示例。纯粹主义者可能会坚持认为,模型仍然可以通过某种方式间接地学习那个任务。例如,它可以先学习一般意义上的长单词,然后学习一般意义上的书名,最后将两者联系起来。然而,在实践中并没有发生这种情况。
目标不一致
AI 模型被训练去追求一个目标。在 LLMs 的情况下,这个目标是在从互联网收集的训练示例上做出好的下一个标记预测。
问题在于,这个目标并不是我们真正希望使用 LLMs 所追求的目标,即生成事实性的文本和问题的正确解决方案。这两个目标相关——最可能的下一个标记通常与最真实的一个相一致。然而,这两个目标并不相同。
因此,我们在训练模型时所追求的目标与我们希望使用模型所实现的目标之间存在差距。在模型训练的目标方面,一个幻觉可能是一个好的输出,但不是在我们希望使用它时所期望的。例如,当 ChatGPT 发明书名时,整体答案看起来像是我提示的非常合理的延续,这正是它被训练去做的。从下一个标记预测的角度来看,它的输出可能是最可能的。
如第一章所述,OpenAI 承认目标不一致是幻觉的来源:“用于许多最近的大型语言模型的语言建模目标——从互联网网页上预测下一个标记——与‘有帮助且安全地遵循用户的指示’的目标不同。”OpenAI 决定使用人工标注的数据来使大型语言模型的目标与用户的目标一致,减少了但并未消除分歧。
在一篇题为“ChatGPT Is Bullshit”的挑衅性文章中(mng.bz/yWRe
),格拉斯哥大学的学者们这样描述了目标不一致:
因为它们被设计成产生看起来真实无关心真的文本,所以似乎合适地称它们的输出为胡说八道……LLMs 对真相有问题并不令人惊讶。他们的目标是产生一个看起来正常的响应,而不是传达对他们有用的信息
对话者。
作者还争论说,使用一种 RAG 方法,其中大型语言模型的提示被一个包含最新、事实性文本的数据库增强,并不能解决问题:
它们根本不是为了代表世界而设计的;相反,它们是为了传达令人信服的文本行而设计的。因此,当它们被提供某种数据库时,它们以某种方式使用这个数据库来使它们的回答更具说服力。
注意,虽然根据这些作者的说法,LLMs 可能是“胡说八道”,但这并不意味着它们无用。例如,RAG 方法可能有助于从文本数据库中找到答案,前提是用户意识到目标不一致,从而确保双重检查答案。
玩具幻觉示例:价格优化
如果你为产品定价过低,你可能会卖出更多,但总收入会减少;如果你定价过高,你可能会从每笔销售中获得更多,但会失去太多销售。收入最大化的价格是中间的甜蜜点。
我知道有些公司使用机器学习来尝试找到产品的收入最大化价格。然而,结果模型产生了幻觉。让我们看看原因。
假设一个电子商务商店创建了一个机器学习模型来预测访客是否会购买产品。模型的输入是产品的特征(例如,价格、颜色和星级评分)和客户的特征(例如,年龄和位置)。输出是购买的概率:
产品特性 + 客户特性 -> 模型 ->
客户购买产品的概率
该模型使用历史记录以监督方式训练,记录了哪些客户购买了哪些产品,哪些被忽略了。假设模型非常准确,意味着它很好地猜测了产品是否会购买。
构建此模型后,公司使用它来寻找某种产品的收益优化价格。为此,公司“调整”输入价格以评估其对购买概率的影响。例如,它使用模型来计算以 10 美元、20 美元、30 美元和 40 美元购买特定 T 恤的概率。这使得公司能够找到收益最大化的价格。
注意:收益最大化的价格是最大化购买产品概率乘以其价格的那个价格(预期收益 = 购买概率 × 价格)。
不幸的是,我见过这种模型在价格变化时对购买概率进行幻觉。例如,有时随着价格的提高,购买概率会增加,这是不寻常的,因为人们往往更喜欢为产品支付更少的钱。有时,随着价格的变动,购买概率会不稳定地移动,好像两者之间没有联系。或者模型输出购买一件 10,000 美元 T 恤的高概率。
这种情况发生的一个原因是,训练数据通常不包含产品以不同价格出售的示例,因为公司不会过多地尝试调整价格。例如,一件 T 恤在过去可能一直定价为 30 美元。
因此,该模型在了解以不同价格销售产品方面遇到了困难。结果是,一个不充分的世界模型无法捕捉价格和销售之间的真实关系。该模型在预测与训练数据中类似产品的销售方面仍然有效,但它使用的是其他输入,如颜色和星级评分,而不是价格。
当这家公司使用该模型来分析价格时,它也遭受了目标不匹配的问题。该模型是为了预测产品是否会被购买而训练的(即,预测产品是否会被购买),却被用于其他目的(即,分析价格变动对销售的影响)。
注意,由于目标不匹配,在训练过程中与幻觉输出相关的“损失”并不存在(参见第一章)。例如,假设模型输出购买一件价值 10,000 美元 T 恤的概率为 90%。由于没有未售出的 10,000 美元 T 恤的训练示例来确定输出是否良好,这种错误的输出在训练过程中不会受到惩罚。
不幸的是,我见过许多公司成为这种幻觉的受害者。他们创建了一个模型来预测业务指标,然后他们改变其输入来创建虚构的场景,并确定业务指标是否会改善。之后,他们使用幻觉输出来尝试做出战略性的商业决策。
幻觉会消失吗?
已经提出了解决幻觉的几个障碍。其中之一是可用的训练数据量。LLM 已经在大量公开可用的数据上进行了训练,因此很难想象我们能够在未来大幅增加数据量。一组研究人员认为,“如果当前的 LLM 开发趋势持续下去,模型将在 2026 年至 2032 年间训练的数据集大小将与公开的人类文本数据存量大致相等”(参见arxiv.org/pdf/2211.04325v2
)。访问私有数据或手动生成数据可以增加数据量,但这不是可扩展的。
此外,我们可能需要比我们想象的更多数据来继续改进 LLM。一组研究人员研究了随着训练示例数量的增加,AI 在特定任务上的性能如何提高。他们得出结论:“这些模型在涉及该概念的任务上,需要指数级更多的数据来线性提高其性能。”
除了数据问题之外,有些人认为我们目前制定人工智能任务的方式,例如自回归的 LLM,本身就有缺陷。因此,即使我们有无限量的训练数据,产生的世界模型也可能是不够的。
CNN 的发明者 Yann LeCun 认为,“LLM 中的幻觉是由于自回归预测造成的”(x.com/ylecun/status/1667218790625468416
)。他认为应该以另一种尚未知的未知方式来制定任务以改善结果。他还认为,问题可能在于 LLM 主要关注文本,而我们在某些时候以其他术语进行推理(mng.bz/MDM8
):
LLM 没有物理直觉,因为它们只接受文本训练。如果它们能够从庞大的联想记忆中检索到类似问题的答案,它们可能会正确回答涉及物理直觉的问题。
但他们可能会完全错误地得出答案……我们的大脑中有关于世界的心理模型,这使我们能够模拟将会发生的事情。
这就是给我们带来常识的原因。
LLM 没有这一点。
此外,LeCun 指出,另一个可能的限制是 LLM 以固定数量的步骤生成输出(参见 Yann LeCun 在 Lex Fridman 播客中的讨论www.youtube.com/watch?v=5t1vTLU7s40
)。然而,当人类解决问题时,他们会根据任务的难度调整投入的努力和时间。
从表面上看,必须发明一种新的方法来消除幻觉。然而,创新是无法预测的,因此我们不能从最近的进展中推断出下一个里程碑是否即将到来。
谨防任何人关于发明的预测,因为这些预测很少准确。想想核聚变能源;几十年来,我们被告知它就在眼前,但这个预测并没有成真。可以想象,可能需要几十年才能有人发明一种新的、无幻觉的 AI 方法。
由于幻觉似乎会持续存在,我们最好学会与之共存。例如,我们可能希望使用 AI 来完成那些幻觉不太重要的任务。或者,我们可能希望采取行动来减轻它们。
缓解
关于减轻幻觉的技术文献越来越多。其中一些建议改进 LLMs 本身的方法,而另一些则指导用户如何编写提示以减少幻觉。
在改进 LLMs 方面,一个常见的建议是整理训练数据。一篇文章建议“收集高质量的事实数据以防止误信息的引入,并进行数据清洗以消除偏差”(arxiv.org/pdf/2311.05232
)。但这听起来并不具有可扩展性,而且幻觉似乎并不只是由于训练数据不准确而发生的。(我找不到任何关于“爱因斯坦塔”的在线参考资料。)
另一种方法是使用手动生成的反馈来更好地对齐模型。如第一章所述,这是像 OpenAI 这样的公司减少幻觉的方法——他们使用人类反馈的强化学习,或 RLHF,这是一种使用人类生成的反馈来细化模型的方法。虽然在一定程度上是有效的,但这并不具有可扩展性。
一些研究人员一直在尝试修改训练过程以减少幻觉。例如,一组研究人员在文章中的每一句话之前注入了维基百科文章的标题(见arxiv.org/pdf/2206.04624
)。这把一句像“他之前在 2005 年至 2008 年期间担任伊利诺伊州的美国参议员”的话变成了“巴拉克·奥巴马。他之前在 2005 年至 2008 年期间担任伊利诺伊州的美国参议员。”这有助于减少幻觉。
从用户的角度来看,有一些特殊的编写提示的方法可以帮助缓解幻觉。这导致了研究和普及能够编写更有效提示的实践,这些实践被称为提示工程(参见理查德·戴维斯、曼宁 2025 年的《实践中的提示工程》;mng.bz/avlX
)。
一种流行的提示工程技术,称为思维链提示,涉及在提示中包含执行任务的逐步示例,然后再要求 LLM 执行类似任务。这种技术的作者解释说:“思维链是一系列中间的自然语言推理步骤,这些步骤导致最终输出”(arxiv.org/pdf/2201.11903
)。
这里有一个思维链提示的例子:
罗杰有 5 个网球。他买了 2 罐更多的网球。每罐有 3 个网球。他现在有多少个网球?
罗杰开始时有 5 个球。2 罐各 3 个网球共 6 个网球。5 + 6 = 11。答案是 11。
食堂有 23 个苹果。如果他们用了 20 个做午餐,又买了 6 个,他们现在有多少个苹果?
这个提示包含了一个在请求 LLM 解决另一个类似问题之前如何解决问题的例子。例子中包含了一些中间的理由步骤(用粗体突出显示)。
这种方法的发明者表明,如果不在提示中包含突出显示的句子,LLM 就无法正确解决问题。然而,如果包含这些句子,答案就是正确的。研究人员展示了这种逐步推理的确可以帮助 LLM 提供更准确的答案。
使用 RAG 方法也被观察到可以减少幻觉,因为 LLM 可以从相关、特定领域的文档中提取信息,而不是仅仅依赖其内部语言表示。一组研究人员解释说 (arxiv.org/pdf/2405.20362
):
在提示中包含检索到的信息,使得模型能够在“开卷”环境中而不是“闭卷”环境中作出回应。LLM 可以使用检索到的文档中的信息来指导其回应,而不是依赖其模糊的内部知识。LLM 不再需要生成符合其训练数据高度压缩表示的一般趋势的文本,而是可以依赖直接注入其提示中的相关信息全文。
最后,一个有希望的研究方向是使用多智能体 AI,其中多个 LLM 协同以验证彼此的输出。例如,一组研究人员提出了一种多智能体方法来减轻软件开发任务中的幻觉(参见 arxiv.org/pdf/2307.07924
)。在他们提出的系统中,一个 LLM 扮演程序员角色,另一个扮演测试员。两者都被提示有效地执行各自的职责。程序员 LLM 被要求生成一段代码,然后测试员 LLM 被要求评估代码并指出问题,然后程序员 LLM 根据这些反馈来改进其代码,依此类推。作者称之为“沟通去幻觉”。有时这种方法可以改善结果,因为测试员 LLM 正确地识别了错误。然而,有时测试员未能识别错误或生成了错误的测试。
除了试图减轻幻觉之外,一些人一直在研究检测幻觉的方法。一种有希望的方法是分析 LLM 输出的概率。如果你还记得,LLM 为每个可能的下一个标记输出一个概率值,并且下一个标记是使用这些概率进行采样的。研究人员已经表明,当输出概率总体较低时,LLM 倾向于产生更多的幻觉(见arxiv.org/pdf/2307.03987
)。这表明 LLM 对其输出的不自信与幻觉相关。因此,用户可以检测到低概率输出并验证它们。
幻觉会毁掉一个产品
幻觉的存在有时会损害某些敏感产品的成功率。例如,一家大型航空公司的客户服务聊天机器人向一位乘客提供了关于如何获得退款的不实信息。航空公司拒绝退款,理由是实际条件与聊天机器人所指示的不同。法院命令该公司无论如何都要履行退款,并表示航空公司“没有解释为什么客户需要在其网站的一个部分找到的信息在另一个部分再次进行核实。”这个故事成为了头条新闻,航空公司随后很快就关闭了该聊天机器人(见mng.bz/galG
)。
自动驾驶汽车行业可能是 AI 幻觉的最大受害者。曾经是一个繁荣的行业,现在却陷入困境,其未来充满不确定性。其中一个主要原因是自动驾驶汽车由于幻觉而不断做出令人惊讶的糟糕决定,尤其是在训练数据中不常见的情况。
例如,2023 年 10 月,一辆自动驾驶汽车在加利福尼亚州发生碰撞后不久,又撞到了一名行人。行人在摄像头的传感器中是可见的,但 AI 没有正确分类她。一家工程公司解释说:“从碰撞时刻到最终停止,行人的脚和下半身都出现在广角左侧摄像头中,尽管短暂地检测到了腿,但车辆既没有将行人也没有将她的腿分类或跟踪”(见mng.bz/eyAq
)。而不是停车,自动驾驶汽车继续行驶,将行人拖行了 20 英尺。
这辆有问题的汽车是由 Cruise 制造的,Cruise 是领先的自动驾驶汽车公司之一,也是通用汽车的子公司。事故发生后,Cruise 在加利福尼亚州的运营许可证被吊销,该公司决定召回其在美国的所有车辆。
事故发生一个月后,人们发现 Cruise 汽车实际上并没有像看起来那样自动驾驶。相反,人类每 2.5 到 5 英里就需要远程干预以协助车辆(见mng.bz/pKlw
)。
几个月后,谷歌的自动驾驶汽车项目 Waymo 卷入了一场类似的丑闻。一辆 Waymo 汽车撞上了一辆以不寻常方式拖曳的卡车。几分钟后,另一辆 Waymo 汽车撞上了同一辆卡车。Waymo 解释说(mng.bz/OBga
),
一辆 Waymo 车辆与一辆被错误拖曳的逆向行驶的皮卡接触,使得皮卡持续地以一个角度横跨中心转弯车道和车道……几分钟后,另一辆 Waymo 车辆以同样的方式与同一辆皮卡接触。……我们确定,由于被拖曳的皮卡和拖车组合的持续方向不匹配,Waymo 自动驾驶车辆错误地预测了被拖曳车辆的未来运动。
从 Waymo 的解释中我们可以看出,制造商将问题归咎于以不寻常的方式拖曳的卡车,这使得 AI 无法识别卡车。这是一个 AI 无法处理边缘情况的例子。
正如幻觉通常发生的情况一样,Waymo 工程师采取了临时措施来修复这个具体问题。Waymo 解释说:“在开发、严格测试和验证了一个修复方案后,2023 年 12 月 20 日,我们开始部署软件更新到我们的车队中,以解决这个问题。”但是,对于 Waymo 汽车尚未具体修补以应对的其他不寻常问题呢?如果一辆卡车被涂上了不寻常的颜色,或者一个行人戴了一个不寻常的假发呢?
应用补丁似乎对行业不起作用,因为问题持续存在,一些公司正在放弃。一篇彭博社的文章宣称,“即使投入了 1000 亿美元,自动驾驶汽车仍然毫无进展”(mng.bz/YDja
)。Uber、Lyft、福特和大众都放弃了他们的自动驾驶计划。剩下的竞争者,包括最重要的 Cruise 和 Waymo,仍在不断调整他们的目标。除非我们发现一种新的 AI 方法,不会产生幻觉,否则他们可能不得不继续调整。
与幻觉共存
由于幻觉可能长期存在于 AI 中,我们最好学会如何与它们共存。在使用 AI 或构建与 AI 相关的产品时,我们应该从一开始就牢记这一点。在第四章中,我们将讨论许多 AI 应用中幻觉并不是大问题,因此我们有机会构建一个成功的 AI 产品。在其他情况下,如果幻觉很重要,我们应该评估它们的影响,并尽早考虑缓解和检测策略。
摘要
-
幻觉是 AI 自信地生成的错误输出。
-
常见的幻觉类型包括虚构的事实、误解的信息和对问题的错误解决方案。
-
幻觉的一个原因是 AI 的内部世界模型不足以描述我们世界的运作方式。
-
另一个原因是,AI 模型通常被训练来做某件事,却被用于其他目的——它们与我们目标不一致。
-
幻觉在不久的将来不会消失,因为这需要以尚未知晓的方式修改现有的机器学习方法。
-
幻觉有时对用户来说可能不可接受或不安全,这可能会严重损害产品的成功机会。
-
通过使用提示工程技术,幻觉可以得到缓解,有时也可以被检测到。
-
我们必须在整个 AI 相关产品的生命周期中牢记幻觉的存在。
第三章:选择和评估人工智能工具
本章涵盖
-
不同类型人工智能或使用人工智能的方式之间的区别,以及如何选择最合适的一种
-
如何评估人工智能的性能并选择模型
-
测量人工智能在任务中性能的常见方法
本章提供了关于选择人工智能模型或工具以及评估其在特定任务中性能的指导。我们首先讨论了不同类型人工智能的三个常见区别:专有与开源人工智能、现成与微调人工智能,以及人工智能应用与基础模型。我们解释了这些含义以及如何选择最合适类型。之后,我们讨论了评估人工智能性能的常见流程,该流程使用不同的数据集进行验证和测试。我们还讨论了一些常见的性能指标,如准确率。附录包括流行生成式人工智能工具的目录。
专有与开源
在专有人工智能中,用户不允许修改甚至查看驱动底层机器学习模型的代码。该技术的内部运作被保密,以防止他人复制。使用专有人工智能的一种常见方式是通过面向客户的软件,如 ChatGPT。这些通常向用户收取月度订阅费以访问服务,尽管一些提供免费层,允许访问较少的功能。
另一种使用专有人工智能的常见方式是通过 API。这些 API 允许用户以编程方式与人工智能交互,以构建利用它的应用程序。人工智能软件在远程服务器上运行,因此用户看不到代码。API 通常根据使用情况(例如,输入和输出令牌的数量)计费。
相比之下,在开源人工智能中,提供商公开披露了机器学习模型的内部细节,包括使用它的代码和所有模型参数的值。如果需要,用户通常被授权修改或定制模型。此外,用户可以使用自己的基础设施自行托管这些模型;例如,您可以将模型的副本下载到您的本地计算机或自己的云计算实例上并自行运行代码。这并不意味着您必须自行托管模型,因为它也可能通过 API 提供,但您有选择自行托管它的选项。开源人工智能的一个例子是 Meta 生产的 Llama 模型系列,这些模型在多个网站上公开提供下载。
开源人工智能有时并不像听起来那么开放。首先,它们的制造商不会披露用于训练这些模型的数据。因此,虽然您可以查看最终模型的参数,但您无法自己训练那个精确的模型,因为您不知道要使用哪些数据。提供开源人工智能的 Mistral AI 公司解释说(mng.bz/rKQy
):
我们不公开我们的训练数据集。我们保留一些中间资产(代码和资源)的专有性,这些资产是生产开源模型和优化模型所必需的。其中还包括模型的训练逻辑和用于训练的数据集。
注意,就像专有模型一样,开源模型是通过使用带有人类反馈的强化学习(见第一章)来改进(或对齐)的。这通常是通过由人工标注员手动创建的数据来完成的,在大多数情况下这些数据保持未公开。
使用开源 AI 的许可证通常带有限制。例如,你不允许在一个每月有超过 7 亿用户的 APP 中使用 Llama 模型——即使是你的副本(见mng.bz/VVoG
)。在这种情况下,你将不得不与 Meta 讨论许可选项,并且可能需要付费。此外,你不允许使用 Llama 模型或其输出以提高其他 LLMs;换句话说,你不能使用 Llama 来构建与其竞争的产品。
构建大型 ML 模型成本高昂,因此最强大的开源 AI 是由盈利公司构建的,这些公司收取或打算收取服务费用。这些服务通常包括咨询或访问高级专有模型。
如何决定
专有 AI 最适合当你需要一个现成的解决方案时。使用专有 AI 通常不需要专业知识,例如机器学习、编码和 DevOps。
使用开源 AI 的一个主要原因是能够自行托管它(在自己的服务器上运行),这可以提供更好的透明度和治理,因为你可以完全了解代码,并完全控制哪些数据离开组织。你的公司可能不想将任何敏感数据发送给第三方,例如 OpenAI,或者它可能想审计代码以确保它不会做它不应该做的事情。
然而,自托管 AI 的成本往往高于支付 API 的费用,因为你需要维护所需的基础设施,所以除非在非常大的规模上操作,否则通常不具有成本效益。你还需要非常小心——过去已经发布了恶意开源模型,这些模型在用户的机器上执行了意外的代码(见mng.bz/xKeX
)。
使用开源 AI 的另一个原因是定制。如果你想修改一个模型(例如,通过微调它,这在下一节中介绍),那么开源 AI 让你可以最自由地这样做。表 3.1 总结了专有 AI 和开源 AI 的最佳用途。
表 3.1 专有 AI 与开源 AI 的比较
专有 AI 最佳用途 | 开源 AI 最佳用途 |
---|---|
• 一站式解决方案• 易于开始• 无需专业知识• 小规模使用,其中按需付费的 AI 比维护自己的基础设施更便宜 | • 自托管以享受更好的治理和透明度• 大规模使用,其中维护自己的基础设施比按需付费的 AI 更便宜• 模型定制(例如,微调) |
在输出质量方面,专有 AI 曾经比开源 AI 有优势。然而,差距正在缩小,许多人声称开源 AI 已经或很快将与其专有对应物一样强大。
现成的模型与微调
当提到提高生成式 AI 在特定任务上的性能时,存在两种主要的思想流派。其中之一是使用现成的模型——没有任何修改——并且它依赖于提示工程技术来提高其性能并使其更适合你的目标任务。例如,在提示中包含一些如何执行任务的演示已经变得很流行,这被称为少样本提示(与不提供任何示例的零样本提示相对)。这有助于消除歧义。来自 OpenAI 的研究人员争论(arxiv.org/pdf/2005.14165
):
如果有人被要求“制作 200 米短跑的世界纪录表”,这个请求可能是模糊的,因为它可能不清楚表格应该有什么格式或应该包含什么内容(即使经过仔细的澄清,精确理解所需的内容也可能很困难)。
研究人员继续表明,在提示中包含一些如何执行任务的示例可以引导 LLM 走向正确的方向。
此外,RAG 方法(见第一章)已成为向 LLM 提供大量上下文信息以帮助其执行任务的一种流行方式。最先进的 LLM 的日益增大的上下文窗口使得 RAG 特别有效。
改进的提示可以帮助定制图像生成。例如,图像生成器 Midjourney 允许用户将图像作为他们提示的一部分上传,以指示生成图像所需的风格。
另一种思想流派建议修改模型以使其更适合目标任务,这被称为微调。模型的内部参数被调整,因此你使用修改后的原始模型的副本来生成你的输出。
微调需要训练数据,这些数据用于继续对原始模型进行更长时间的训练。例如,为了微调一个 LLM,你必须创建一个符合你预期风格的文本样本。这些数据被输入到训练算法中,以细化 LLM。用于微调的数据量通常比用于训练原始 LLM 的数据量小得多——你可能只需要几份文档就能做到这一点。开源模型非常适合微调,因为你可以访问整个模型及其参数,然后你可以调整参数以更好地满足你的需求。
微调可能面临的最大挑战可能是过度调整——如果你在微调训练数据上过度专门化你的模型,它可能会记住数据中存在的特定示例,而无法在其他实例上表现良好。这被称为过拟合。
有几种技术可以防止过拟合(见侧边栏)。你需要注意这些技术,并适当地配置微调算法以防止过拟合。我们将在本章后面讨论如何使用验证集和测试集来评估和比较不同的 AI 模型,这有助于选择最佳的微调策略,并确保最终模型没有过拟合数据。
控制过拟合的技术
提前停止**—你只在微调数据上训练模型几次迭代。一旦性能不再提高(在单独的数据上衡量,称为验证集),你就停止训练。
更新范围有限**—你只允许模型的一些部分被更新。例如,一种名为 LoRA 的流行方法将带有新可学习参数的小层插入到模型中,同时保持其原始参数不变。
正则化**—你会在损失函数中添加一个项,惩罚过高的或过低的参数值。这通过防止参数过度专门化到特定的训练示例来降低过拟合的风险。
Dropout**—在训练过程的每次迭代中,随机移除模型的一部分,这防止了模型的内部单元过度专门化到训练示例。
一种称为 LoRA 的方法已成为微调(见arxiv.org/abs/2106.09685
)的流行方法。LoRA 通过插入带有新可学习参数的小层来调整现有模型,而不是修改其原始参数。这使得微调更快,因为每个迭代只需要计算少量参数更新。它还有助于控制过拟合,因为你只修改了有限数量的参数(见侧边栏中的“更新范围有限”)。
Hugging Face 开发的库非常受欢迎,用于微调现有模型(huggingface.co/docs/trl/main/en/index
)。Hugging Face 还包含大量开源模型,您可以对其进行微调。许多用户通过连接到云计算实例的 Jupyter 笔记本进行微调。Google Collab 特别常用,因为它提供了易于访问的笔记本,并允许您免费使用其部分计算能力,这可能足以微调一些模型。
微调需要一些专门的机器学习知识,所以我建议您学习 ML 的基础知识以正确进行。您可能还需要基础设施来运行微调过程,然后您将不得不使用自己定制的模型副本。
在某些情况下,也可以微调专有 AI。例如,OpenAI 允许您上传自己的微调数据集并创建其模型的微调版本,您可以通过 API 访问。与使用 OpenAI 的原始模型相比,公司对使用微调模型收取额外费用。该过程友好,尽管不如微调开源模型可定制。
如何决定
提示工程是提高模型性能的最直接方法。常见的建议是,这是您应该尝试的第一件事(更多信息请参阅mng.bz/AQZx
和 mng.bz/ZlQA
)。随着上下文窗口变得很大,提示可以相当丰富。因此,当尝试了多种改进提示的方法后,输出仍然不是您期望的那样时,通常建议将微调作为最后的手段。然而,请注意,提示工程与最先进且成本最高的模型结合得最好,因为它们可以更好地适应更广泛的任务,并在它们的上下文窗口中适应更长的提示。表 3.2 比较了现成的 AI 与微调 AI。
表 3.2 现成的 AI 与微调 AI 的比较
现成的 AI 最佳使用场景 | 微调 AI 最佳使用场景 |
---|---|
• 提示工程技巧效果良好。• 使用专有 AI 是可以的。• 您可以负担得起大型模型。• 您优先考虑易用性。 | • 您希望获得高度定制的输出,并且已经用尽了其他选项。• 您需要使用较小的模型(例如,用于自托管)。• 您拥有机器学习专业知识和访问计算资源。 |
对于较小的模型,微调可能是一个不错的选择,例如,因为您想降低成本。这在您必须自托管自己的模型时尤其相关。在这种情况下,使用小型、微调的模型可能比使用大型模型的提示工程更有效。
面向客户的 AI 应用与基础模型
面向客户的 AI APP 帮助最终客户完成任务。这些包括通用商业聊天机器人,如 ChatGPT,以及特殊用途的 APP,如 GitHub Copilot 和 Cursor,这些 APP 帮助软件工程师编写代码。
相比之下,基础模型是大型、多用途的 AI 模型。这些模型在幕后用于为面向客户的 APP 提供动力。例如,GPT-4o 等基础模型被用于为面向客户的 ChatGPT 提供动力。
一些公司既构建面向客户的 APP,又通过 API 提供其底层基础模型的访问权限,以便软件开发者可以在其上构建自己的 APP。
如何决定
当您希望 AI 协助您完成特定任务时,面向客户的 APP 是最合适的选择,因为它们易于使用,并且特别针对任务进行了定制。基础模型在您希望基于强大的 AI 创建自己的 APP 时,最好用作构建块。表 3.3 比较了面向客户的 AI APP 与基础模型。
表 3.3 面向客户的 AI APP 与基础模型
面向客户的 AI APP 适用于... | 基础模型适用于... |
---|---|
• 特定任务的协助• 最终用户 | • 支持基于 AI 的 APP• 工程师 |
模型验证、选择和测试
如果您想准确比较和选择 AI 模型,建立一个基准来评估它们的各自性能是个好主意。此外,由于一些原因将在后面变得明显,我们经常高估机器学习的性能,因此遵循一个精心设计的评估过程以避免意外是个好主意。
本节描述了评估 AI 在任务上性能的理想协议。在这个协议中,AI 模型使用三种不同的数据集进行构建和评估,这些数据集被称为数据集。以下,我们将描述每种类型数据集的作用以及如何使用它们。
训练集
训练集是用于构建模型的数据库。它包含大量如何执行任务的示例。例如,对于图像生成,它包括大量与描述其内容的标题配对的图像。对于文本生成,它包括大量文本。还使用了一个较小的训练集来微调模型。
在训练或微调期间,训练算法试图找到最小化训练集损失的模型参数(见第一章)。损失是一个数学函数,它量化了模型在执行所需任务时的偏差程度,例如在 LLMs 的情况下预测下一个标记。
损失通常被设计成具有良好的数学属性,例如可微性,因此它不总是理解模型性能的最直观方式。此外,损失并不总是量化模型在你期望的任务上的表现。例如,如果你想使用人工智能来解决编码问题,训练损失并不明确量化其编码能力;相反,它量化了它自动完成文本的能力,这仅与编码能力间接相关。
除非你正在微调模型或从头开始训练模型,否则你不必过于担心创建训练集。然而,在创建验证集和测试集时,你可能需要注意用于训练的数据(关于这一点,稍后还会详细介绍)。
验证集
验证集用于比较不同模型的性能。例如,你可以使用验证集来比较 GPT-4o 和 Llama 3 在执行任务时的性能。这有助于你选择最佳模型,这被称为模型选择。
验证集上的性能通常使用接近你实际业务目标的度量来计算。例如,你可以计算模型正确解决编码问题的频率。注意,这通常与用于训练或微调模型的损失函数不同。本章后面将列出常见的性能度量。
确保验证集中的数据不在训练集中出现非常重要。否则,你可能会高估模型的性能。这是因为一个过度拟合训练数据(它记住了特定实例)的较差模型可能不会被检测到,因为一些被记住的数据也可能出现在它所评估的验证集中。如果验证集包含在训练集中,这就像是一场包含教科书上直接出现的问题的考试——学生可以记住答案而不真正学习并通过考试。
当使用大型语言模型(LLM)时,你需要特别注意这一点,因为它们是在包括许多问题解决方案在内的海量公开数据上训练的。假设你想使用 LLM 来帮助你解决填字游戏。你可以通过收集过去出版的真实《纽约时报》填字游戏的线索来创建一个验证集。然后,你统计 LLM 根据线索识别正确单词的频率。问题是,有众多网站明确提供了所有过去《纽约时报》填字游戏的解决方案,线索逐个列出。因此,至少在理论上,LLM 可以记住每个过去线索的确切解决方案。因此,你的验证数据将评估 LLM 解决其已有答案的问题的性能。更好的方法是创建一个包含过去谜题中未出现的新线索的验证集。这样,LLM 就无法“作弊”。或者,你可以确保验证集中的谜题是在 LLM 的训练数据截止日期之后出版的。
验证集也可以在你训练或微调自己的模型时帮助你做出高级决策。例如,你可以训练两个具有不同层数或不同学习率(模型参数在每次训练迭代中更新的程度)的模型,然后在验证集上选择性能最高的模型。你也可以使用验证集来比较不同的提示工程方法。
测试集
仅使用验证集不足以正确评估模型的表现。因为你专门选择了在验证集上表现最好的模型,你可能会对其性能有一个过于乐观的看法。毕竟,你丢弃了在该特定数据上表现不佳的模型。如果选定的模型只是偶然在验证数据上表现良好,而不是一个更优秀的模型,那会怎样?
因此,在你使用验证集挑选出最佳模型之后,你必须使用另一个数据集进行最终检查,这个数据集被称为测试集。测试集让你了解模型在从未用于建模决策的数据上的性能。这种最终评估是一种理智的检查。
测试集只能使用一次。如果在测试后发现性能令人失望,想要更新模型或考虑其他选择,你必须收集一个新的测试集来进行新的评估。否则,你将反复使用测试集进行模型选择,使其变成验证集。
在遵循此过程时,您需要决定您希望有多彻底。我知道一些对遵循此过程非常严格的对冲基金,因为涉及的资金量很大。例如,他们甚至试图不去查看测试集中的数据,比如绘制图表。这样,他们可以防止关于测试数据的知识渗透到建模决策中,从而使测试数据尽可能独立。
性能指标
本节描述了一些可以用来评估 AI 在预期任务中性能的常见性能指标。
准确度
准确度是任务执行正确的百分比。例如,90%的准确度意味着在验证集或测试集上测量的解决方案中有 9 个是正确的。
准确度通常用于分类任务。例如,它经常用来评估 AI 在分类图像或检测推文的情感方面的好坏。您还可以将其用于其他问题解决任务。例如,您可以使用准确度来衡量一个 LLM 解决编码问题的能力——您需要计算正确解决的问题数量,并将其除以验证集或测试集中的总问题数。
精确度和召回率
在信息检索中,我们感兴趣的是从大量数据中识别相关实例。例如,一家律师事务所可能使用 RAG 方法根据查询从大量过去的案例数据库中检索相关法律案例。作为另一个例子,一家银行可能希望从(希望是)更大的交易池中识别欺诈交易。
两个常见的性能指标是召回率和精确度。然而,正如我们稍后将讨论的,这两个指标都不能单独使用。
召回率衡量识别出的相关实例数量。例如,90%的召回率意味着 10 个相关实例中有 9 个被检索到,其余的未被检索到。
精确度衡量检索到的实例的相关性。例如,90%的精确度意味着 10 个检索到的实例中有 9 个确实是相关的,其余的要么是不相关的,要么是误报。
挑战在于精确度和召回率之间存在权衡。考虑一个检索过多内容的系统。例如,它可能确定几乎所有过去的法律案例都与每个查询相关。这个系统将实现非常高的召回率,可能接近 100%。然而,它将受到大量误报的困扰,因此其精确度会非常低。
相比之下,考虑一个几乎不检索任何内容的系统。例如,它可能认为几乎每个过去的法律案例都与查询无关。这个系统将实现接近 100%的精确度,但召回率会非常低。
因此,为了正确量化 AI 在信息检索方面的性能,您必须以某种方式将召回率和精确度结合成一个单一指标。一种常见的方法是计算F 度量值,它是精确度P和召回率R之间的调和平均(一种平均数):
F = 2(P R)/(P + R)
F-measure 越高,召回率和精确率就越高。当召回率和精确率都达到 100% 时,它达到最大值。
我对 F-measure 不太感冒,原因有两个。首先,它对召回率和精确率给予同等的重要性。这是任意的。在现实中,企业可能不会对它们同等关心。我建议您对任何关于信息检索普遍适用的度量(无论是 F-measure 还是其他什么)的承诺持谨慎态度,因为精确率和召回率的相对需求是业务特定的。
第二,F-measure 难以解释,因为调和平均数并不直观。技术上,F-measure 是倒数平均数的倒数,经过一些代数运算后得到上述公式。祝您在与企业沟通这一点时好运!
在我看来,您的最佳选择是尝试理解企业在精确率和召回率方面的偏好,并据此制定一个考虑这些因素的定制度量。在接下来的段落中,我将解释我偏好的这种方法之一。
第一步是理解企业对召回率的最小期望水平(也可以用精确率来做,但这里我们使用召回率)。例如,企业可能希望确保至少召回 95% 的相关法律案例或欺诈交易。
然后,您调整系统以达到所需的召回率水平。一种方法是让 AI 输出相关性作为数值分数,分数范围从 0(完全不相关)到 1(完全相关)。高于某个相关性阈值的实例被认为是相关的。您选择有助于您达到所需召回率的阈值。例如,设定一个阈值为 0.7,高于这个阈值,实例被认为是相关的,可以帮助您达到所需的 95% 召回率(您可以使用验证集来计算阈值)。
最后,您使用另一个度量——在本例中是精确率——来报告性能。因此,您可以通过模型(所有达到所需的召回率)的精确度来比较不同的模型。
平均绝对误差和均方根误差
如果您使用 AI 进行数值预测,例如降雨量,您必须计算预测值与实际值之间的偏差。一种简单的方法是计算训练集或测试集中预测值与已知值之间的绝对差异,并平均结果。这被称为 平均绝对误差,或 MAE。
另一种方法是平方差异,使它们都变为正值,然后平均这些结果,最后取这个数的平方根以(某种程度上)抵消平方的影响。这被称为均方根误差,或 RMSE。由于它具有很好的数学性质(特别是其可微性)并且由于平方差异的平方,它对较大偏差的惩罚更多,因此这个度量相当受欢迎。然而,它不像 MAE 那样容易解释。
摘要
-
当你需要一个易于使用、现成的解决方案时,专有 AI 是一个不错的选择。
-
当你需要自行托管或定制模型时,开源 AI 是一个不错的选择。
-
如果人工智能没有按你期望的方式工作,或者你需要对其进行定制,通常建议仍然使用现成的模型并增强你的提示。如果这还不行,你可能想对你的数据进行微调。当你更喜欢使用较小的模型时,微调也是一个好选择。
-
面向客户的 AI 应用程序旨在对最终用户友好且有用。它们由幕后的大型通用 AI 模型提供支持,你可以使用这些模型来构建自己的基于 AI 的应用程序。
-
确保使用一个验证集(包含不在训练集中的数据)来比较和选择模型。一旦你选定了你最喜欢的模型,你也应该使用一个单独的测试集进行合理性检查。不要两次使用测试集。
-
模型的准确性衡量它正确执行任务的频率。例如,在信息检索中(例如,根据查询从大量法律案件中检索相关法律案例),使用精确度和召回率。精确度和召回率不能单独使用;它们必须以与业务偏好相匹配的方式结合,以反映它们相对重要性的关系。你可以使用平均绝对误差(MAE)或均方根误差(RMSE)来评估模型在预测数字(如降雨量)方面的性能。
第四章:何时使用(以及何时不使用)AI
本章涵盖
-
帮助你决定是否构建某个基于 AI 的产品的问题
-
帮助你决定是否将对话式 AI 作为特定任务的助手以及可能出现的挑战的问题
-
在将软件作为 LLM 包装编写之前需要注意的注意事项,以便 LLM 在幕后执行繁重的工作
本章包含一个简短的清单,用于确定 AI 是否适合你。该清单包含七个问题,我希望这些问题能帮助你揭示使用 AI 的挑战和机遇。前三个问题是在构建基于 AI 的生产级产品的背景下提出的,例如基于大型语言模型(LLM)的旅行规划应用。我希望这些问题能帮助你确定在构建之前某个基于 AI 的产品是否可能成功。
以下三个问题是在使用对话式 AI 进行日常工作时提出的,例如使用 LLM 来帮助你编码。我希望这些问题能帮助你弄清楚 AI 是否是你工作流程中的一个有价值的补充。
最后,最后一个问题关注的是以 LLM 包装形式构建应用的新实践,其中 LLM 在幕后执行工作,而应用管理 LLM。这个问题旨在帮助你确定这种方法是否适合你的需求。
构建基于 AI 的产品
本节包含三个问题,在构建基于 AI 的产品时需要牢记。第一个问题是与业务相关的。在决定是否使用 AI 时考虑业务可能看起来很奇怪。然而,根据我的经验,不这样做会导致许多 AI 项目失败。因此,我认为考虑 AI 是否有商业案例是一个好的开始。其他两个问题是技术性的。
我是否把 AI 放在了客户之前?
一家初创公司的员工曾向我寻求建议。他的公司开发了会计软件,正打算在其应用中添加基于 ChatGPT 的功能,但他们不知道那会是什么。他问我是否能帮他想出基于 ChatGPT 的他们可以添加的可能功能。我问他为什么一开始想要一个基于 ChatGPT 的功能,他解释说:“我们正在尝试筹集资金,我们不能告诉投资者我们没有用 ChatGPT 做任何事情。”
许多基于 AI 的项目就是这样开始的——人们因为炒作、FOMO(害怕错过)、资金机会等等而决定使用 AI,而并不一定知道他们将如何使用 AI。他们手里拿着锤子,在寻找钉子。
这种方法的缺点是,你往往最终会构建出人们实际上并不需要的产品。一个杰出的例子是亚马逊开发的豪华 AI 驱动的超市结账技术。这项名为“直接离开”的技术旨在使用 AI 分析视频并自动准备购物者的收据——购物者不需要去结账柜台。
亚马逊最初为自身的仓库开发了类似的技术,这有助于跟踪工人从货架上挑选的商品。在开发这项技术之后,亚马逊想知道还能做些什么。公司手里拿着一把锤子,开始寻找钉子。
他们提出的解决方案是超市结账流程。亚马逊并没有针对实际顾客的需求做出反应,而是将这项技术推向了杂货购物,仿佛技术本身就能足够吸引人。以下是我书中《硅化》一书的摘录(应用数学,2024 年),我在其中讨论了这个问题:
公众对商店的反应并不热烈。似乎人们并不像关心寻找最佳购物优惠那样关心复杂的结账技术。一位商业顾问解释说:“零售商还必须提供有竞争力的定价和愉快的顾客体验。‘轻松结账’是不够的。”……我总是努力理解亚马逊试图为购物者解决什么问题。购物者真的对结账那么烦恼,以至于他们会涌向亚马逊 Go 商店以避免它吗?……如果这是关于降低超市运营成本从而提供更好的优惠,那么这项技术如何实现这一点也不清楚,因为拥有“轻松结账”技术的超市需要与配备自助结账机的普通超市一样多的员工,再加上安装和运行复杂技术的成本。
由于这项技术似乎并不满足实际需求,亚马逊最终暂停了其开发,并关闭了许多商店。
人工智能日益普及导致许多人采用人工智能优先的方法,他们试图寻找人工智能的应用场景,而不是首先尝试了解客户的需求。例如,我知道一家公司专门成立了一个团队,致力于在组织内部寻找与人工智能相关的事情。我还知道一些公司雇佣了数十人加入新成立的 AI 团队,却不知道这些团队将如何使用人工智能——他们认为,由于人工智能看起来很有前途,他们肯定能找到一些与之相关的事情来做。
人工智能优先的另一个例子是自动驾驶汽车行业的大部分。许多自动驾驶汽车公司之所以诞生,是因为人们观察到,由于卷积神经网络,人工智能在图像分类方面变得更加强大。因此,他们认为现在是开发自动驾驶汽车的正确时机,并从投资者那里筹集了数十亿美元,承诺将带来巨大的利润。然而,在许多情况下,这些初创公司并不知道自动驾驶汽车将为顾客解决什么问题,或者如何将它们转化为具有商业可行性的产品。通常,他们的方法是,“如果你建造了它,他们就会来。”
虽然将 AI 的需求放在顾客需求之前的方法有时可能奏效,但它与创业和创新领域的普遍智慧相悖。这些领域越来越多地采用以顾客为中心的方法。例如,流行的精益运动建议人们应该尽早构建一个最小化产品——可能是一个原型或模型——向顾客展示,并在全面投入解决方案之前了解他们的真实需求。
风险投资家 Itamar Novick 认为 (mng.bz/DMrV
):
“如果你建了它,他们就会来”是反模式,其中初创公司基于他们对解决方案外观的愿景做出决策,忽视或低估顾客需求,并且没有从潜在顾客那里收集足够的产品验证。
这种反模式的起源是“一个伟大想法”的诱惑。企业家们,被他们的热情和信念所驱动,往往假设他们产品的卓越性本身就能吸引顾客并保证成功。
很不幸,产品的存在并不能自动转化为顾客蜂拥而至购买它。这种“如果你建了它,他们就会来”的心态往往导致产品与市场不匹配,这是早期创业失败的主要原因 .
除非你在纯研究或其他非商业追求中工作,我的建议是采取创业心态。尽量确保你理解你的顾客,并找到解决他们问题的最佳方案——这可能或可能不是 AI。例如,如果你被要求构建一个基于 AI 的产品,因为 AI 很流行,如果可能的话,回到画板前了解真正的需求,并判断基于 AI 的产品是否是解决它的最佳方式。
如果可以,问问自己你是否在考虑顾客的需求,或者你只是在尝试用 AI 找到一个钉子来敲打。如果答案是你在把 AI 的需求放在顾客需求之前,那么这个项目可能无法成功起飞。如果你计划使用 AI 来满足真正的顾客需求,那么我们可以勾掉我们清单上的第一个点(参见本节末尾的表 4.1)。这是 AI 可能对你来说是一个好解决方案的指标。
幻觉是否可以接受?
在某些应用中,幻觉并不是什么大问题。例如,在 Booking.com 或 Tripadvisor 等网站上对酒店评论的翻译,这些是由 AI 完成的。旅行者更喜欢看到尽可能多的评论,即使有些是不正确的,所以幻觉并不是什么大问题。
在其他应用中,幻觉并不完全可接受。我们已经在本书中讨论了许多这样的例子。以防万一,这里还有一个由《经济学人》解释的例子 (mng.bz/lY5o
):
麦当劳,一家快餐连锁店,最近取消了一个试验,该试验使用 AI 来处理顾客的驾驶窗订单,因为系统开始出现错误,例如向一位顾客的账单中添加价值 222 美元的鸡块。
在使用 AI 之前,我建议你问问自己幻觉是否会造成大问题。也许它们不会像酒店评论的例子中那样严重,所以使用 AI 就足够了。在其他情况下,幻觉可能是一个问题,就像麦当劳的故事中那样。在这种情况下,你必须决定最初使用 AI 是否是一个好主意,因为如果顾客觉得它无法接受,它可能会最终毁掉产品。或者,也许你可以以某种方式重新定义任务,使得幻觉更容易被接受。
例如,假设你正在构建一个用于校对法律合同的工具。如果你将其定位为一个“自动校正合同”的工具,那么当它有时出现幻觉时,可能会给用户带来很大的失望(甚至可能是灾难)。然而,如果你将其定位为“通过这个工具运行你的合同,以帮助你找到你可能忽略的错误”,那么幻觉可能就没什么大不了的,因为用户现在会明白它只是一个用来双重检查合同并可能发现未注意到的错误的工具。
这使我们来到了清单上的第二项的结尾。如果幻觉可能会引起重大问题,你可能需要考虑其他解决方案。如果幻觉不是什么大问题,或者你可以将你的 AI 解决方案定位得让它们不是问题,那么你就可以在清单上勾掉另一个点。
我需要解释输出的生成过程吗?
公司喜欢使用机器学习来预测各种事情,比如客户是否会购买产品,或者工业机器是否需要很快更换。这通常是通过在历史数据上训练机器学习模型来完成的。最丰富和最复杂的模型类型通常会产生最高的预测性能。
但客户在理解预测是如何生成的时候有时会非常敏感。在某些情况下,这是因为他们不想盲目地信任模型,即使指标显示它是准确的。在其他情况下,他们想要理解预测,以便从模型中获得更多见解。例如,他们可能想要了解为什么一个产品可能会被购买。
一个机器学习模型越复杂,它就越像一个黑盒,解释其输出是如何生成的就越困难。因此,最精确的模型有时并不被想要理解输出的客户所欣赏。当使用包含许多处理层和数百万或数十亿参数的深度学习模型,包括 LLMs 和 CNNs 时,这个问题变得更加明显。
因此,在使用 AI 之前,我建议您尝试找出您的客户需要多少可解释性。如果可解释性不重要,那么使用最先进的 AI 模型可能是最佳选择,并且您可以将其从清单上勾除。然而,如果您需要可解释的输出,您可能不得不使用更简单的模型,例如线性模型,即使其性能较差。或者,您可能想以不同的方式制定问题,例如进行一项分析或统计研究,而不是构建预测模型。
或者,如果您仍然想使用复杂模型,您可能想尝试使用一种技术来解释其工作的一些方面。有一个被称为可解释人工智能或简称 XAI 的研究领域。许多这些技术,例如一个流行的技术叫做 SHAP (shap.readthedocs.io/
),通过识别模型最依赖的输入来生成输出。虽然这些技术揭示了 ML 模型工作的一些方面,但它们并不提供输出生成的完整解释,因此在某些情况下可能令人失望。
研究人员现在正在研究解释 LLMs 输出的具体技术。例如,他们已经开发出分析变压器内部注意力分数的方法 (arxiv.org/abs/2401.12874
)。然而,这仍然处于非常初期的阶段。我们仍然没有对大型 ML 模型如何产生输出有一个稳固的理解。
我用表 4.1 总结了我们迄今为止提出的问题,以及可能的答案及其相关影响。
表 4.1 基于 AI 产品的构建清单。
问题 | 评论 |
---|---|
我是否将 AI 置于客户之前? | 如果没有(您使用 AI 来响应已知的客户需求),您可以继续前进。如果有(您将 AI 作为锤子寻找钉子),您可能需要退一步,确保您理解客户的需求。之后,您可以决定 AI 是否是解决这些需求的良好解决方案。 |
幻觉是否可以接受? | 如果可以(客户可以容忍幻觉),您可以继续前进。如果不行(幻觉是一个大问题),您可能需要重新构建问题,使其不那么重要,或者您可能需要重新考虑最初是否使用 AI。 |
我需要解释输出的生成方式吗? | 如果不需要(客户不需要可解释的输出),您可以继续前进。如果需要(需要可解释性),您可能需要考虑使用更简单、更可解释的解决方案,而不是使用最先进的 AI。或者,您可以评估是否可以接受为 AI 提供一些可解释性的技术,例如 SHAP 值。 |
使用对话 AI 作为助手
在本节中,我们提出了三个问题,这些问题可以帮助你决定是否使用 AI 作为助手来帮助你完成任务。我们专注于对话式 AI,这意味着你将任务描述为自然语言提示。这包括使用 LLM 帮助你编码,或使用文本到图像应用程序创建标志。
我能否简洁地描述任务并轻松验证输出?
对话式 AI 在你得到“物有所值”的提示时最有用,这意味着你获得了有用的输出,而不必费很大力气编写详细、分步的提示。所以,在使用它之前,我建议你问问自己:
-
我能否简洁地描述任务?
-
我能否轻松验证输出?
例如,在编写代码时,有些任务可以用非常简短的提示来描述,例如
-
总结一下这个文件中代码的功能。
-
编写一个函数,从 S3 存储桶中下载文件。
-
将这个函数重写为 JavaScript。
-
有没有优化这段代码的方法?
其他任务描述起来要困难得多,因为它们需要详细、分步地指定解决方案。在这些情况下,编写提示可能和编写代码本身一样繁琐。例如,我曾经不得不使用一个名为 GraphHopper 的库,它包含在地图上地标之间找到最短路径的算法,但我必须将其定制以以非标准方式测量距离。为此,我们必须使用我们与客户共同设计的自定义公式。要求如此具体和定制,以至于我不确定通过编写提示并让 LLM 编写代码我是否节省了任何时间。所以,如果你的答案是“我能否简洁地描述任务?”是肯定的,那么 AI 帮助你解决问题的可能性就更高(参见本节末尾的表 4.2)。由于 AI 有时会胡编乱造,因此你也要问问自己第二个问题,“我能否轻松验证输出?”,尤其是如果你对输出的正确性非常敏感(参见 4.1.2 节)。
一些任务可以轻松验证。例如,如果你已经知道如何执行这个任务,而你只想节省时间,你可以依赖你的专业知识来快速验证 AI 的输出。例如,我经常忘记如何使用 Boto3 库从 S3 读取文件。所以,我经常询问 ChatGPT 如何操作。因为我之前已经做过,而且只需要几行代码,我可以很容易地查看 ChatGPT 的代码并验证其正确性。我也可以快速运行代码,看看它是否正确地获取了所需的 S3 文件。
以另一个例子来说,如果你询问一个 LLM 一段代码是否可以优化,你可以轻松检查其建议是否对你有意义,尤其是如果你有编码经验并研究过诸如计算复杂性等内容。或者如果你让 ChatGPT 将一段代码重写为另一种编程语言,如果你熟悉目标语言,你也可以验证输出。
在其他情况下,验证 AI 的输出并不像想象中那样快捷或容易。例如,假设你要求 ChatGPT 编写一个需要大量连接和业务逻辑的 SQL 查询。逐步理解生成的查询可能很繁琐,可能需要花费与编写查询一样多的时间。或者,如果你要求 ChatGPT 用你不懂的语言编写代码,你可能会在调试它时遇到困难。
所以,如果你的答案是第二个问题——“我能否轻松验证输出?”也是肯定的,那么 AI 可能提供很好的帮助。
有没有人做过这样的事情?
一位软件工程师在推特上评论说,“我有时会想,编程最终会不会变成这样” (mng.bz/BXr2
),并分享了一张以下代码的截图:
import ai from 'ai-thing';
const Select = ai.gen`
A select dropdown with these options:
- Podcast
- Book
- Movie
Animate the dropdown to slide down from the top
of the page in a distracting manner.
`;
如果前端开发所用的唯一工具只是纯 JavaScript、CSS 和 HTML,那将会非常令人印象深刻。但如今大多数人并不是这样编程的。我们使用库和框架来帮助我们完成工作。例如,我经常使用 Material UI 进行前端开发,这是一个包含现成且视觉上吸引人的组件的集合。这就是我使用 Material UI 创建所需动画下拉菜单的方式:
import { Select, MenuItem } from '@mui/material';
const Select =
<Select>
<MenuItem>Podcast</MenuItem>
<MenuItem>Book</MenuItem>
<MenuItem>Movie</MenuItem>
</Select>
这段代码几乎与之前代码片段中的自然语言描述完全相同。尽管这段代码是用更结构化的语言编写的,但它同样紧凑且易于阅读。使用 AI 带来的收益很小。
所以,在使用 AI 助手之前,我建议你思考一下,是否有人可能已经完成了这项工作,例如,通过创建一个执行你所需功能的库。如果任务是极其常见的——选择下拉菜单肯定是这样——那么很可能有一个工具可以为你完成这项工作。这些工具通常非常易于使用,成熟,并且由活跃的开发者社区进行了充分的测试。因此,它们有助于快速且稳健地构建软件。
几周前,我不得不编写代码来计算在特定时间和地点太阳在天空中的位置。与其费力处理三角方程或询问 AI 助手如何做,我的第一个想法是搜索一个用于此任务的库。我想,“这是一个如此标准化的任务,肯定有人之前做过。”我搜索了“sun position calculation library python”,立即找到了一个执行这项特定任务的库(还有其他库)。我只需一个命令就轻松安装了它:
pip install suncalc
这个库很小,其文档也很简短。你可以快速了解到,它可以根据给定的日期时间、经度和纬度使用如下方式:
from suncalc import get_position
get_position(datetime, longitude, latitude)
这正是我需要的:
{'azimuth': -0.014045295626482863, 'altitude': 0.8562684198030407}
在我完成这个任务几天后,出于好奇,我向 GPT-4o 提问,“编写一个 Python 函数,根据位置和时间计算太阳的位置。”聊天机器人编写了一个复杂的算法,有 40 行代码。这里是一个片段:
n = julian_day - 2451545.0 # Days since J2000.0
mean_longitude = (280.46 + 0.9856474 * n) % 360
mean_anomaly = (357.528 + 0.9856003 * n) % 360
ecliptic_longitude = (mean_longitude + 1.915
*math.sin(math.radians(mean_anomaly)) +
0.020 * math.sin(math.radians(2 * mean_anomaly)))
obliquity = 23.439 - 0.0000004 * n
declination = (math.degrees(math.asin(math.sin(
math.radians(obliquity)) *
math.sin(math.radians(ecliptic_longitude)))))
该算法难以理解,包含许多未解释的常数。幸运的是,聊天机器人还建议,“我们可以使用像 Astral 或 Pysolar 这样的 Python 库。”因此,作为后续提示,我问道,“我该如何使用 Astral 库来替代完成这个任务?”它回应了一个更短的代码片段,展示了我如何使用这个库。然而,我尝试了这段代码,但它并没有运行,因为它错误地想象了使用该库的正确方式。(您可以在mng.bz/dXGw
找到对话记录。)
也许再次运行提示或对其进行改进会得到更好的结果。然而,我的观点是,有时你最好先弄清楚是否有人已经为它构建了一个工具。快速进行谷歌搜索和查看文档可能比使用人工智能更有效,而且结果可能更可靠。
所以,试着问问自己,尤其是当你正在执行一个千篇一律的任务时,是否有人之前已经做过。最有效的软件开发者会避免重复造轮子,并尝试在别人的成功作品上构建。
一份出色的工作看起来是什么样子?
我的一个朋友有一个非常有趣的人生故事——他从几乎一无所有,住在换宿的旅舍以换取床位,到经营一家成功的在线业务。一家杂志想要分享他的故事,并请他写一篇关于他的文章。他使用 ChatGPT 来写这篇文章。
然后,他将文章的草稿分享给我,并征求我的意见。语法和风格如预期的那样完美。然而,这篇文章并没有公正地讲述他的故事。例如,它跳过了读者想要了解更多的事情。值得注意的是,它没有说明他在住在旅舍时是如何想出他的商业想法的;相反,它直接跳到了他开始建立业务的部分。此外,还有一些离题的内容,比如对政治问题的个人观点,这分散了读者的注意力,偏离了文章的主要目的。单词组织得很好,但写作并不出色,因为它没有有效地讲述故事。在我看来,如果他以那样的方式提交故事,是可以接受的,但不是那种人们会一直读到结尾并推荐给别人的类型。
我给我的朋友列出了关于这篇文章的评论。我的评论大多是高层次的建议。例如,我建议他放慢速度,有时更详细地讲述故事,并建议他删除某些缓慢的段落和离题的内容。我还建议他重新组织文章中交织不同主题的部分。
当他阅读我的评论时,他说他终于明白了为什么写作花费了我这么多时间。他还说,他终于明白了为什么我花钱雇佣人类编辑。在此之前,他一直认为写作主要是关于语法。他没有意识到文章的节奏和组织对吸引读者有多么重要。我刚开始写作时也不知道这一点。
当我们对 AI 了解不多时,很容易草率下结论,认为 AI 可以很好地完成一项任务。我们可能会错过做好这项工作所需的重要事项,并且不知不觉地完成质量不佳的工作。
所以,在使用 AI 之前,我建议你调查一下要胜任这项工作需要具备哪些条件。也许这比一开始看起来需要更多的事情。一旦你更好地理解了这项工作,你就可以决定 AI 是否能够完成你需要的足够好的工作。
考虑标志设计的任务。一些公司不惜花费巨资聘请顶尖的标志设计师。但现在 AI 可以创建标志,雇佣昂贵的专业标志设计师是否值得呢?嗯,这取决于。如果你与高端标志设计师交谈,你会发现他们对竞争对手的标志及其传达的情感进行了彻底的研究。然后,他们设计了一个真正原创的标志,而不是重复之前的标志——这是 AI 不太擅长的事情——但同时又以某种方式与竞争对手的标志风格相匹配。这有助于顾客快速了解品牌是什么,因为他们从竞争对手那里认出了这种标志类型,同时仍然给你的公司标志带来独特的风格。
根据你的需求,你可能需要也可能不需要高端标志设计的彻底性。例如,如果你正在启动一家初创公司,你可能只需要一个标志来填补你网站上的空白,因为可能还不到花钱购买高端设计的时机。一旦公司成长并开始有回头客,你可能想雇佣一个专家来设计一个能够更好地定位你公司在竞争环境中的标志。在我们进入下一节之前,你会在表 4.2 中找到一个问题和可能的答案的总结,以及它们的影响。
表 4.2 使用对话式 AI 作为助手的清单
问题 | 评论 |
---|---|
我能否简洁地描述任务并轻松验证输出? | 如果可以,一个 AI 助手,比如一个代码编写的 LLM,可能会为你节省时间和精力,因为你将得到“物有所值”的提示。如果不能(任务难以描述或验证输出很麻烦),那么你可能最好在没有 AI 帮助的情况下手动完成这项工作。 |
以前有人这样做过吗? | 如果是(例如,你正在解决一个标准化的软件任务,有一个库正好满足你的需求),那么重新使用他人的经过验证的工作和工具可能更容易、更可靠,而不是请求 AI 的帮助。如果不是(你的任务不是很常见,而且不太可能他人的过去工作会帮助你),那么使用 AI 作为助手可能有助于完成你需要定制的任务。 |
一份出色的工作是什么样的? | 如果你熟悉在所需任务上出色完成工作的含义,你就有很好的条件来判断 AI 是否能满意地完成这项工作。如果你不知道出色完成工作的含义,你可能遗漏了一些东西,并高估了 AI 的性能。在这种情况下,最好是对任务进行一些研究,以便在是否使用 AI 进行决策时做出更明智的决定。 |
构建 LLM 包装器
由于 LLM 可以处理如此多的任务,现在有一种趋势是采用一种新的方式构建软件产品:你的代码将任务转换为自然语言提示,并让 LLM 来完成它。例如,如果你的应用必须根据用户的位置向用户显示附近的餐厅列表,你的代码会自动创建一个提示,例如,“创建一个 HTML 表格,列出距离[用户坐标插入处]最近的五家餐厅。每一行应代表一家餐厅,列应包括:餐厅名称、菜系风格……”之后,你的应用使用 LLM 来执行任务,并在向用户显示餐厅之前解析 LLM 的输出。
以这种方式编码,应用变成了复杂的 LLM 包装器——它们管理 LLM,LLM 负责在幕后进行重负荷工作。我遇到过许多早期阶段的初创公司,它们就是这样构建或尝试构建它们的初始产品的。他们认为,当你只需创建一个提示并让 LLM 完成工作而不是编写应用程序的核心功能时,编写应用程序的核心功能并不是必要的。
创建 LLM 包装器可能是在某些情况下构建软件的好方法。然而,在其他情况下,这并不是最佳解决方案。本节提出一个在决定以这种方式构建软件之前可能值得自问的问题。
用户是否会用自然语言与我产品互动?
我知道有一个初创公司正在开发一个旅行规划应用。用户会通过在日历上选择日期和从列表中选择目的地,以结构化格式输入旅行详情。然后,该工具会生成一个结构化的观光行程,以时间线和地图的形式显示。请注意,这并不是一个聊天机器人——用户在任何时候都没有通过书写或阅读自由文本与该应用进行对话。
由于 LLM 的普及,公司决定在底层使用 LLM 构建这个功能。用户的请求首先被转换成自然语言提示,例如,“从 7 月 1 日到 7 月 7 日制定每天的巴黎行程……”整体提示很长,因为它包含了如何以特定格式输出行程的说明,以便在应用中轻松解析和渲染。
那家初创公司努力使这个功能工作。其中一个原因是 LLM 的输出经常包含过时的信息,例如建议访问一个已经不存在或在该时间段内关闭的景点。此外,LLM 的输出有时并不完全遵守所需的结构。例如,它有时会在应该提供网址的地方指示景点的街道地址。此外,整个过程需要超过一分钟才能运行,这在今天的浏览标准下太长了。
那家初创公司随后意识到,它试图解决的问题与自然语言没有任何关系——用户并没有以自由文本形式输入(“我想去巴黎”)输入,输出也没有以文本形式展示给用户。那么为什么还要使用 LLM 呢?
那家初创公司最终以不同的方式解决了这个问题:在用户提出查询后,软件使用 Google Places API 在所需目的地搜索相关景点,该 API 提供有关景点最新和结构化信息,例如营业时间和坐标。之后,软件运行路径查找算法,从这些景点创建一个理想的观光行程。该解决方案运行得更快,并且更好地解决了问题。
如果用户将通过自然语言与您的产品进行交互,使用大型语言模型(LLM)可能是最佳选择(参见本节末尾的表 4.3),因为 LLM 专门设计用于处理和生成自然语言。例如,如果您正在构建一个客服聊天机器人,那么使用 LLM 可能是最佳选择,因为它们被设计来处理书面形式的自由文本请求并生成令人信服的散文。在这种情况下,您利用了 LLM 最擅长的能力。
当用户不会使用自然语言与您的产品进行交互时,例如在旅行应用中,在使用 LLM 解决问题之前,您可能需要三思。如果您使用 LLM,您可能不会享受到它的好处,并且您将不得不应对其缺点,如长执行时间、幻觉和不规则输出。在这些情况下,传统的软件,如数据库查找,可能做得更好。因此,如果您的任务不涉及自然语言,在构建 LLM 包装器之前,首先分析是否有其他工具更适合这项工作。
这就带我们结束了本章。我们讨论了几种何时使用 AI 的场景。我希望它会在您下次遇到问题并考虑是否引入 AI 模型时有所帮助。
表 4.3 构建 LLM 包装器的清单
问题 | 评论 |
---|---|
我的问题是否涉及自然语言? | 如果是,LLM 可能是一个很好的选择,因为它们专门设计用来读取和生成自然语言。如果不是,你可能需要考虑其他老式的方法来构建你的软件,这些方法可能比 LLM 更适合这项工作。 |
摘要
-
采用创业心态:确保你理解客户的问题,并找到最佳解决方案,这可能或可能不是 AI。在知道你将如何使用它之前,尽量不要决定使用 AI。
-
评估幻觉对用户是否可接受。在某些情况下,例如酒店评论的翻译,用户对它们并不太挑剔。如果幻觉是一个问题,你可能需要重新考虑这项任务。
-
如果你的客户想要了解 AI 是如何生成其输出的,你可能会发现自己处于一个非常棘手的境地,因为最强大的 AI 无法被详细理解。你可能需要使用性能较低但更可解释的模型或技术来尝试解释模型的一些方面,例如找到输入特征的相对重要性。
-
如果你将 AI 用作助手,你可以快速问自己,“我能否轻松描述任务并验证输出?”如果是这样,你就得到了很好的回报,这时 AI 最有效。如果你无法简洁地描述任务,或者验证输出需要大量努力,使用 AI 可能不是很有用。
-
当使用 AI 作为助手时,确保你并没有试图重新发明轮子。如果你执行的是一项常见任务,可能已经存在一个经过良好记录和验证的方法来完成这项工作。例如,在编码某个任务时,可能已经存在一个开源软件可以完成你所需的一切,使用它可能比尝试使用 AI 助手来完成同样的事情更容易且更可靠。
-
在让 AI 完成某项工作之前,尝试理解以优秀的方式完成这项工作意味着什么。这可能会比看起来更复杂。然后你可以根据你的需求决定是否需要一个 AI 助手来帮助你以令人满意的水平完成这项工作。
-
有些人正在构建 LLM 包装器应用程序——这项工作由 LLM 在幕后完成,由应用程序管理。当你处理自然语言问题时,这尤其强大,无论是由于用户输入自由形式的文本,还是系统必须生成人类可读的文本。如果你的问题不涉及自然语言,也许使用老式算法而不是构建 LLM 包装器将是一个更好的选择。
第五章:人工智能将如何影响工作以及如何保持领先
本章涵盖
-
帮助保护工作不被人工智能取代的品质
-
软件工程师如何使自己的工作具有未来性
-
人工智能如何为软件工程师创造新的机会
-
讨论人工智能对经济的影响以及它是否可能延长失业和苦难
由于生成式人工智能可以编写代码,许多软件工程师——以及有志于此的人——开始担心他们的职业生涯可能处于危险之中。英伟达首席执行官认为,现在不再有必要鼓励年轻人学习如何编程。“事实上,情况几乎正好相反,”他说。“我们的任务是创造不需要编程的计算机技术,编程语言是人类化的:世界上每个人现在都是程序员——这就是奇迹”*(mng.bz/GenJ
)。
本章讨论了人工智能可能取代软件工程师的工作的可能性以及如何保护这些工作。前三个部分讨论了三个有助于他们抵抗人工智能的品质:在“过得去”和“优秀”工作之间的巨大差距;对输出进行严格验证的需要;以及对输出进行严格控制的需要。
在每个部分的开始,我们讨论一般性的主题——超出软件工程。我希望这能给你一个更广阔的视角,了解人工智能对工作的影响。在每个部分的结尾,我将主题与软件工程具体联系起来,并分享工程师如何保护自己工作的建议。
本章的剩余部分更加具有推测性和哲学性。我们首先讨论人工智能如何打开新的大门。接下来,我们讨论人工智能是否可能造成长期的大规模失业和苦难,这是许多人所担忧的。
优秀差距
有些人问我是否认为电视节目很快将由人工智能编写,从而取代编剧的工作。在与编剧交谈后,我发现这项工作往往比最初看起来要复杂得多,或者至少如果你真的想做好它的话。编剧不仅仅是把词语组合在一起。相反,它是关于选择说什么以及如何说,一些编剧会不遗余力地完成这项任务。
以间谍剧《国土安全》为例。该剧之所以如此受欢迎,其中一个原因是每一季都在播出时讨论世界上正在发生的事情。由于该剧在播出前数月拍摄,编剧们必须尝试预测以后会相关的因素。
因此,作者和制作团队会见了情报专家,讨论下一年季度的潜在故事线。《卫报》(mng.bz/zZRA
)的一篇文章解释道:
团队开始参加一个年度的“间谍训练营”……吸收当前和前任情报特工、外交老手以及一年中,国家安全局(NSA)的告密者爱德华·斯诺登积累的洞察力和知识。
克莱尔·丹斯对间谍训练营有着美好的回忆。“那些日子漫长而密集……我们九点集合,旋转门始终在不停地转动,将一个故事接一个故事地传递过来……你真的可以从这些令人惊叹的来源中窥见一斑,并对我们一年后的现实有一个相当清晰的了解。”
以另一个例子来说,考虑一下情景喜剧《老友记》。在演员们为了一集剧反复排练多日后,该剧在一天之内面对现场观众拍摄完成。当观众没有对某个笑话发笑时,编剧们会询问观众原因。根据观众的回答,编剧们现场修改台词,并让观众通过举手表决选择他们最喜欢的替代方案。这就是他们确保台词真正好笑的方法。
但并非所有电视剧都是这样精心编写的。例如,肥皂剧以其快速和低成本制作而闻名。实际上,通常每周都会拍摄多集。不同肥皂剧的故事线往往非常相似,因为编剧们试图回收经过验证的想法。
从这些例子中我们可以看出,在某些工作中,追求卓越(如在《国土安全》和《老友记》中)和制作出仅仅“还不错”的内容(如在肥皂剧中)之间存在很大的差距。我们可以将这种差异称为“卓越差距”(见表 5.1)。
表 5.1 “还不错”和优秀工作的特点。后者可能更不容易受到 AI 的影响。
还不错 | 优秀 | |
---|---|---|
特点 | 尽快且低成本地完成工作带来的价值 | 短期效果 |
例子 | 写肥皂剧 | 写 SEO 驱动的博客文章 |
在高预算电视剧的情况下,创作者希望节目成为传奇,经受住时间的考验——他们希望在多年甚至几十年后还能收取版税。因此,写作必须非常谨慎,这需要大量的时间和技巧。
在肥皂剧中,快速写作和重复现有故事就足以有效地完成工作。肥皂剧的目标是提供轻松娱乐,制片方很少打算让节目重播。
我问了一位编剧,他是否认为这个职业受到 AI 的威胁。他告诉我,可能是重复性、公式化的写作可能会受到影响,就像在肥皂剧中那样。然而,在知名度较高的制作中,大部分工作并不是关于写作本身,而是关于进行采访、进行研究、与测试观众尝试想法等等——这些任务 ChatGPT 等工具不太可能完成。
注意,卓越差距往往被需要人文关怀的活动所填补,如建立人脉、收集人类反馈、建立关系等,对于当前的人工智能方法来说并不很合适。你有时可以通过询问某人的工作是否可以轻易地描述为一系列步骤或食谱来检测这些活动,这可以揭示使用人工智能或其他技术自动化的难易程度。例如,我向一位记者提出了这个问题,她告诉我她花了很多时间试图想出有创意的故事角度,她认为没有现成的食谱。此外,她的大部分工作都涉及与她所在领域有影响力的人建立良好的关系,这样她就可以在必要时联系他们进行评论,她认为也没有描述如何做到这一点的步骤指南。
看起来,那些在卓越差距的优质一侧的工作,比如撰写高端电视剧,最不容易受到人工智能的影响。可能会受到人工智能影响的工作是那些工人专注于差距低端的工作——“过得去”的部分,或者一开始就没有太大的差距——做得过得去和做得非常好之间没有太大的区别,任务相当机械,可以很容易地描述为一系列步骤。
考虑一下撰写 SEO 驱动的博客文章的情况,其目标是吸引来自谷歌的流量到网站。例如,一家旅行社可能希望快速发布几篇关于旅游目的地的文章来吸引流量,然后向网民销售假期或从联盟链接中收集佣金。这些文章往往属于“过得去”的类型,因为目标是填充相关关键词,而不是提供深入的分析。我相信你一定见过这样的文章。它们的标题通常像“2025 年巴黎夏季必做的 20 件事。”
直到几年前,在 Upwork 和 Fiverr 等平台上雇佣人类来撰写这些博客文章是很常见的。现在我听说许多这些工人正在被人工智能取代。由于这项工作只需要“过得去”的工作——不需要面试、研究、建立人脉、测试受众等——人工智能可以满意地完成这项工作,而且速度更快。
其他可能存在卓越差距但市场价值不高的工作风险,例如,人们不愿意为优秀的工作付费,因为只要过得去就足够了。在过去几个月里,我与许多专业翻译人员交谈过,他们因为对职业的担忧而联系我。翻译人员通常会付出很多努力来制作优秀的翻译,这可能需要大量的研究和创造力。然而,在某些情况下,客户并不太关心这种卓越——他们对“过得去”的翻译就满意了。例如,我与一群专门翻译网站内容的翻译人员交谈过,例如在线商店。他们似乎是最受人工智能进步影响的,因为许多客户即使人工智能翻译有些薄弱也不介意。在其他情况下,例如文学翻译,客户对工作质量更为敏感,不太可能愿意用人工智能取代专业的人类翻译。
软件工程中的卓越差距
我曾经参与过一个小型自由职业项目,我必须创建一个仪表板,以便一家公司能够更轻松地可视化一些公开可用的数据。我必须调用几个 API 来从各种来源获取数据,对其进行一点转换,并绘制出来。我大部分时间都花在编码上。这项工作相当机械,做得过得去就足够了。
现在,考虑我几年前做的一项不同工作。我为一支编写算法来自动组合假日套餐并确定其价格的团队工作。该算法旨在自动设计套餐并使过程更加数据驱动,希望增加收入。我们构建了一个在纸面上看起来不错的算法,但我们无法部署它,因为销售人员对此表示担忧。他们害怕通过改变我们组合套餐的方式,会破坏我们与客户的关系。此外,销售人员通常会战略性地定价假日——例如,他们不是试图获得最大收入,而是收取低于收入最大化的价格来推广新的旅游目的地。他们担心我们的系统会使他们失去对这些决策的控制。
为了减少摩擦,我们与销售人员进行了讨论,了解他们的需求,结果我们想出了一个数学小窍门,在算法中插入业务约束。销售人员将能够自行调整这些约束,这将使他们能够对我们的工具生成的假日套餐有更精细的控制。只有在这次干预之后,他们才对此感到满意,我们才能部署该系统。这个项目的成功不仅仅是关于编码,还在于理解销售人员的需求,并找到与他们产生共鸣的解决方案。
就像在编剧中一样,在许多软件工程项目中存在一个卓越的差距。在某些情况下,比如我提到的简单仪表板项目,过得去是可以的。这些工作涉及的任务通常可以写成一步一步的食谱并廉价地委托出去。这类工作可能是人工智能能够取代的。
优秀的软件工程远不止于此。而不是仅仅按照要求编写代码,目标是帮助一个业务解决问题,就像包装假日案例一样。软件工程师将与业务紧密合作,帮助制定问题的解决方案。例如,他们将帮助业务人员确定那些以最少的努力提供最大增值的功能。他们还将提出业务可能未曾考虑过的替代解决方案。
此外,优秀的软件开发者帮助构建经得起时间考验的稳健解决方案。这需要找到未来保障和过度工程之间的最佳平衡点。例如,即使现在所有用户都使用相同的货币进行交易,你的软件是否应该处理多种货币?或者你应该等到你国际化后添加对其他货币的支持?这些问题只能通过与业务团队讨论和协商来回答,这通常需要将技术思想翻译成非技术人员能够理解的语言,以便进行合作。
此外,在优秀的软件开发中,你必须做出重要的决策来确保软件的安全并保护数据。我曾经与一家公司合作,这家公司特别关注不要意外让他们的某个客户看到属于另一个客户的资料。为每个客户设立一个独立的数据库是实现这一目标的方法,但在某些情况下可能会过度。在与业务团队讨论了不同的可能性之后,我们决定采用一个包含不同部分的单个数据库,或者称为模式,这样可以在不增加太多复杂性的情况下提供隔离。这个决策需要与业务人员进行协商。
由于优秀的软件工程不仅仅是编写代码,还涉及商业和软技能的运用,我认为它将很好地抵抗被人工智能取代。当业务人员与真正帮助他们解决业务问题的软件工程师并肩工作时,他们不太可能想要自动化这些工作。
建议
我的建议是,如果你想为你的职业生涯打下坚实的基础,你可能需要专注于在技术和商业的交汇处工作——努力成为那些利用技术帮助业务实现目标的人,而不仅仅是编写代码的人。这并不意味着你不会编写代码;这意味着你会编写正确的代码来帮助业务成功。如果你被要求为一个你认为从业务角度来看不合适的 app 添加功能,你应该提出意见。
如果你还没有学习商业,我建议你学习。我发现以下书籍特别有用:
-
《精益创业》 由埃里克·莱斯(Crown Currency,2011**)—这本流行书籍解释了一种依赖实验和验证客户需求的现代创新过程。作者普及了“最小可行产品”或 MVP 这一术语,它是一种旨在了解客户需求的基础产品。
-
《价值投资:从格雷厄姆到巴菲特以及更远》 由布鲁斯·格林沃尔德等人(Wiley Finance,2020**)—虽然这本书是关于投资的,但前半部分描述了公司的价值来源。例如,它解释了竞争优势真正是什么以及它如何为业务增值。它还解释了未来增长的重要性以及何时增长会增值,这对于雄心勃勃、高增长性的初创公司尤其相关。
-
《重温 E-神话:为什么大多数小企业不成功以及如何应对》 由迈克尔·E·盖伯(Harper Business,2004**)—这本经典书籍有助于理解为什么一个稳固的企业类似于一个自动运行的系统,遵循明确定义的过程。
-
《创业融资:比你的律师和风险投资家更聪明》 由布拉德·费尔德和贾森·门德尔森(Wiley,2019**)—这本书有助于了解风险投资家的融资方式,这是科技公司最常见的融资来源之一。
-
《价值主张设计:如何创造客户想要的产品和服务》 由亚历山大·奥斯特瓦德等人(Wiley,2014**)—技术产品失败的主要原因之一是人们并不真正想要这个产品。这本书描述了一个过程,用于定义你的目标客户和解决方案的附加价值,这有助于防止这种情况发生。
一旦你了解了商业,我建议你朝着既涉及技术又涉及商业技能的角色发展。例如,你不必成为 React 等一种技术的深度专家,你可能想尝试在编码工作的同时承担产品管理或设计的责任。我建议你避免那些你只是捡起别人创建的 Jira 工单并完成其中描述的技术工作的职位。
你可能还想优先考虑在具有明确商业目标而不是技术目标的跨职能团队中工作。例如,你可以为一家机构(或建立自己的)工作,与初创公司合作,帮助他们指定、构建和验证产品,以换取金钱和股权,而不是仅仅构建客户想要的任何产品——无需提问。
此外,你可以专注于一个技术领域,旨在帮助实现商业目标,例如运筹学和数据科学。运筹学的主要任务之一是构建数学优化算法,以帮助解决商业问题,例如根据需求预测找到将库存分配到仓库的最佳方式。这需要将商业目标映射到数学目标,因此你既是商业人士也是技术人士。此外,由于你无法有效地优化任何事物,有时你需要与商业部门协商,以解决一个更简单但有用的而不是复杂的问题。
尽管有时有些炒作,但数据科学也位于技术和商业的交汇点,因为它使用机器学习来帮助解答商业问题。这一点对于全栈数据科学家尤其如此,他们从构思到构建生产级数据产品的整个过程都提供帮助。像运筹学和全栈数据科学这样的职业,其中编码和商业活动紧密相连,可能最能抵御人工智能的进步。
如果你根本不感兴趣于商业,更偏好纯粹的技术工作,你可能想专注于一个细分技术或问题领域,并保持与发展的同步——你可以在你的领域成为专家。这可能会帮助你领先于人工智能,因为人工智能通过互联网上可用的代码示例来学习编码,而这些代码可能过时或者最新的细分技术不够丰富。
严格的验证
如果你使用像Booking.com这样的酒店预订网站,你可能已经注意到旅行者的酒店评论通常会被翻译成你的语言。这有助于你看到尽可能多的评论。这些公司不是雇佣人类来翻译评论,而是使用人工智能自动完成这项工作。人工智能生成的输出不需要逐个手动验证。有时人工智能会出现幻觉,所以翻译可能会有错误或者听起来有点奇怪。我刚刚在Booking.com上看到了以下评论:“位置完美。报告性价比,无可挑剔。”这个词“报告”的奇怪用法来自法语中的mistranslation,即rapport qualité prix,这是一种常见的表达“性价比高”的方式。
但旅行者并不太关心这些错误;他们想知道酒店是否干净、位置是否好等等,他们不需要完美的翻译来做到这一点。所以,使用人工智能而不是人类翻译者,假设是一个不会产生幻觉的翻译者,是完全可行的。
另一个类似的例子是网站上的个性化推荐,比如在 Netflix 上观看下一部电影或者是在 Amazon 上购买哪个产品。这些推荐不是由市场营销专家分析客户并创建定制化推荐,而是通过机器学习在历史用户数据上大规模自动生成。有时这些推荐并不完全准确。例如,你可能在刚刚购买了一台洗衣机之后,还被推荐购买另一台洗衣机,尽管洗衣机通常是单次购买。但这些错误并不重要,因为用户可能不会对糟糕的推荐过于在意,只是忽略它们。
在这些情况下,输出的正确性并不是那么重要。因此,尽管人工智能有时可能会产生幻觉,但公司可能仍然会选择它而不是雇佣人工工作者(见表 5.2)。这种情况通常发生在对公司的核心运营不是至关重要的“喜欢”功能上,因此错误并不重要。这也常见于那些耗时或成本过高的大规模任务。例如,我认为Booking.com不太可能雇佣人工翻译其网站上所有的酒店评论。在没有任何翻译评论和未经验证的人工智能翻译评论之间,Booking.com选择了后者。
表 5.2 不需要严格验证输出的工作特征。后者可能比人工智能更安全。
宽松验证 | 严格验证 | |
---|---|---|
特征 | 喜欢的功能由于可扩展性差而不愿意手动操作的事情 | 错误可能具有破坏性(由于法律、安全或商业原因) |
例子 | 酒店评论的翻译 | 法律翻译 |
在其他情况下,确保工作输出的彻底验证非常重要。我最近与一位负责验证飞机维护记录的团队经理进行了交谈。他解释说,每次租赁的飞机在不同航空公司之间转手时,都必须确保所有维护工作都得到了妥善处理。他的团队负责审查所有记录以进行验证。
信不信由你,所有维护记录仍然保存在纸上——技术人员用笔手动填写表格,然后将成堆的纸张存放在盒子里(是的,在 21 世纪)。每个国家使用不同种类的表格,而且填写往往不一致,这使得验证过程变得更加繁琐。
一家初创公司利用人工智能自动化了这一过程。然而,由于边缘案例的训练数据稀缺,AI 系统有时会出错,这很难纠正。因此,有用户告诉我,他们仍然需要手动审阅所有论文来验证 AI 的输出,所以这个应用最终并没有节省多少时间。他们最终取消了 AI 服务的订阅,像往常一样手动处理所有事情。
类似地,我曾遇到过打算在卫星图像中利用 AI 识别敏感目标的军事情报人员。当时,他们通过使用“Z”形图案手动检查图像。负责扫描的人对他们的观察负有个人责任,因此错过目标可能会危及他们的职业生涯。这些图像覆盖了巨大的区域,因此这非常耗时。
在与他们讨论 AI 之后,他们很快意识到无法保证 AI 能够以 100%的准确率识别目标。也许它能够识别比人类更多的目标,但存在它有时会随机错过人类可以看到的目标的可能性。对他们来说,这意味着他们仍然需要手动扫描整个图像,以确保 AI 没有错过任何东西。因此,AI 根本不会加快这个过程。
航空维护和军事行动是那些过于敏感,不能在没有双重检查的情况下交给 AI 的工作示例(见表 3.2)。其他需要严格验证的敏感职业包括律师和医生,因为小错误可能导致失去执照或医疗不当诉讼。
即使在其他领域,错误可能不会像在航空维护和军事行动那样具有破坏性,但它们在商业上可能是有害的,因此人类仍然需要手动验证 AI 的输出。一个例子是亚马逊的自动杂货店。这些商店在美国和英国开业,据说使用了视频摄像头和 AI 来自动检测顾客从货架上取出的商品,因此登录用户可以直接走出商店,无需前往收银台,稍后会在他们的电子邮件中收到收据。
正如经常发生的那样,AI 有时会出现幻觉,因此收据中包含错误。但亚马逊不希望这些收据到达客户手中,因为这会严重损害企业的声誉。因此,亚马逊秘密雇佣了 1000 名远程监控视频并验证 AI 输出的工作人员(mng.bz/0Qnv
)。因此,亚马逊并没有消除人类收银员的工作,而是将他们转移到其他地方。
由于法律、安全或商业原因,输出必须彻底验证的工作岗位,由于需要人类专家参与其中,因此更不容易被人工智能自动化取代。在某些情况下,使用人工智能验证其输出而不是手动完成工作可能会带来生产力的提升。例如,人工智能可能有助于快速起草法律合同,律师将不得不逐字逐句地验证(记得那位不幸的律师在法庭上提交了一份充满人工智能幻觉的文件的故事),但这个两步过程将比没有人工智能起草合同更快。
然而,在某些其他情况下,整体的生产力提升可能不会显著,因为验证过程可能会很繁琐。正如飞机维护记录和亚马逊结账的故事所展示的那样,人工智能通常节省的时间远少于人们最初想象的,甚至可能使事情变得更糟。
一些专业人士告诉我,他们的客户正在施压要求他们使用人工智能更快地工作,甚至收取更低的费用。根据客户的说法,现在人工智能可以完成你的工作,你只需要验证它,所以它应该更快、更便宜。例如,翻译人员告诉我,他们中的许多客户现在要求他们成为人工智能翻译文本的编辑,而不是从头开始翻译文本,并且他们希望为此支付更少的费用。
在某些职业中,可能会观察到生产力的提升。然而,有一些早期迹象表明,这可能没有预期的那么多,验证可能是罪魁祸首。Upwork(mng.bz/KGXO
)进行的一项调查揭示了这一点。
近一半(47%)使用人工智能的工人表示,他们不知道如何实现雇主期望的生产力提升。四分之三(77%)的人表示,至少在一种方式上,人工智能工具降低了他们的生产力并增加了他们的工作量。例如,调查受访者报告说,他们花费更多时间审查或调解人工智能生成的内容(39%),投入更多时间学习使用这些工具(23%),现在还被要求做更多的工作(21%)。40%的员工认为,在人工智能方面,他们的公司对他们要求过多。
因此,当输出正确性对于安全、法律或商业原因至关重要时,人工智能不太可能完全取代人类工作,至少在人工智能不是 100%准确的情况下是这样。然而,可能的情况是,一些工人可能会发现自己被雇佣以较低的费率来验证人工智能的输出,而不是自己生成它们,尽管这种回报可能并不总是像最初看起来那样好。
软件工程中的验证
与其他领域中的小错误可能被忽视的情况相比,软件错误往往会被放大——一个微小的错误可能会破坏整个应用程序。值得注意的是,2024 年 7 月,安全软件 CrowdStrike 的一次更新中的错误在全球范围内造成了重大破坏,包括飞机停飞和建筑物中的火灾警报被禁用。损失估计高达数十亿美元(mng.bz/YD0e
)。
因此,软件通常需要经过彻底的验证。公司通常会要求开发者对自己的代码进行单元测试,并相互审查代码。他们还在部署管道中设有自动化测试,并设有独立的质量保证(QA)团队来独立验证软件。
如果 AI 生成的软件完美无瑕,那么验证可能就不再必要了。但情况真的是这样吗?
由大型语言模型(LLM)生成的代码在语法上通常是正确的——它编译得很好。然而,有时它并不能正确解决预期的问题,或者在运行时崩溃。
一位软件工程师进行了一系列测试,以了解 LLM 的代码编写能力。在他的第一个实验中,他要求 ChatGPT 从新加坡的交通摄像头中获取公开数据,并在地图上显示它们(mng.bz/jpRe
)。这是提示:
您可以通过调用交通图像 API 获取包含交通图像、摄像头 ID 和位置(经纬度)的 JSON 数据,
api.data.gov.sg/v1/transport/traffic-images
。在地图上(使用 OpenStreetMaps)显示所有摄像头的位置,以及相应的交通图像、摄像头 ID 和图像的日期和时间。每 1 分钟调用交通图像 API 刷新数据并重新填充地图。仅使用嵌入在地图 HTML 文件中的 JavaScript 进行此操作,不要使用其他任何东西。
只需一次尝试,ChatGPT 就生成了一段代码,完美地完成了它被要求做的事情。这确实令人印象深刻。
然后,软件工程师试图通过在地图上显示天气数据来增强该地图的功能:
您可以通过天气 API 找到新加坡的 2 小时天气预报,
api.data.gov.sg/v1/environment/2-hour-weather-forecast
,该 API 返回包含位置名称、位置的经纬度和接下来 2 小时的天气预报的 JSON 数据。通过修改之前返回的地图上的信息来显示这些信息。使用带有天气图标的标记来指示气象站。
这次,ChatGPT 的代码没有正确工作。经过一些调试后,工程师意识到这是因为 LLM 假设天气 API 返回的数据格式不是正确的。因此,工程师修改了提示,更明确地指出了 API 返回的数据格式。然后它就正确工作了。
工程师从这次经历中吸取了教训,在随后的实验中,他确保写更详细的提示,以防止 ChatGPT 做出错误的假设。即便如此,代码并不总是正确的。例如,它持续输出错误的 URL 到库的 CDN。
工程师承认 ChatGPT 很有用,可以帮助你学习如何执行某些任务。然而,他争论说(mng.bz/jpRe
):
如果你对 ChatGPT 做出假设,它也会做出假设,也就是产生幻觉和编造东西。编造的东西同样复杂且可信……大多数时候,你需要调试代码,尤其是如果你不够具体的话……使用 ChatGPT 来调试代码可能会启发人心或灾难性。它可能会启发人心,因为它可以给你指出问题,甚至它最初就造成的问题,有时甚至可以为你解决问题。它可能会灾难性,因为它也可能通过给你错误的指示和误导,把你引向一个永无止境的兔子洞,并且每一步都会显得非常自信。
从这些例子和作者的反思中我们可以看出,我们不能完全信任 AI 生成的代码。我们仍然需要验证和调试其输出,而这需要软件工程师的专业知识。此外,最有效的提示都充满了技术细节,因此软件工程师是能够制定最有效提示的人。
正因如此,我认为公司不太可能通过 AI 生成的代码自动化软件工程师。然而,可能会发生一些公司,受到潜在的生产力提升的诱惑,试图将软件工程师转变为 AI 生成代码的验证者。就像翻译员的情况一样,他们可能会期望支付较低的工资给工程师,或者让他们做更多的工作,因为他们只是校对 AI 生成的代码而不是编写它。让我们看看你可以如何避免这种情况。
建议
让我们先回顾一些关于传统软件开发的一些观察和建议。然后我将添加关于 AI 产品验证的建议。
我听说过一些软件开发团队,他们的大部分时间都花在实现新功能上,而将测试它们或推迟测试或留给其他人去做。虽然这些团队在编写代码,但他们往往不可靠。如果商业经理试图用 AI 自动化他们,我并不会感到惊讶。
为了保护您的职业,我建议您专注于交付健壮的软件。这需要比仅仅编写代码更多的职责。例如,您可能需要花费大量时间,甚至更多,来确保您的代码能够应对边缘情况和不幸的情况。即使 AI 可以为您编写一些代码,这也只是您职责的一小部分。您的雇主会认为您是一个能够提供全面和健壮代码,经得起时间考验的人。
因此,我建议您加入那些以验证驱动的现代软件开发团队;这些团队将开发和测试紧密结合,并试图一次性交付健壮的软件。与将验证视为次要任务不同,这些团队将验证置于核心位置,并与开发过程紧密耦合。
我还建议您了解测试驱动开发,或称TDD,它已经变得极为流行。在 TDD 中,您将代码划分为小的单元,并花时间思考每个单元可能出现的边缘情况或可能出现的问题。然后,您为所有可能出错的事情编写单独的测试,并确保您的代码通过测试(有些人甚至在编写代码之前就编写了测试)。我经常建议别人,每当他们想运行软件以查看其是否运行良好时,就写一个测试用例,也许使用“打印”语句。这样,测试就会永远留在代码库中,并在以后帮助捕捉问题。但您不想过度做这件事。作为测试驱动开发者的责任之一,您需要在编码和测试之间找到平衡点——您不应该花太多时间编写荒谬的测试来覆盖极不可能发生的场景。
我还建议您了解主干开发,这是一种越来越受欢迎的软件团队组织方式。在主干开发之前,每位编码员都在主代码分支的一个单独分支上工作。完成工作后,同行会审查软件(在“拉取请求”中),然后才能合并到主代码中。因此,编码和验证是相当分离的活动。
在主干开发中,编码员直接将他们的更新推送到主代码分支,而不需要同行审查(有些人可能使用短暂的特性分支)。为了使这可行,您必须采用一套工作实践来防止破坏生产应用。例如,您可以使用一种称为特性标志的机制,将大多数用户引导到旧版本的代码,而只有少数用户,例如您和质量保证团队,才能访问新版本。只有当您验证新功能按预期工作后,您才会移除旧代码并将所有用户指向新版本。此外,部署管道必须包含大量的自动化测试。您可以在trunkbaseddevelopment.com上了解更多关于此过程的信息。
当实施现代工作实践,如 TDD 和基于主干线的开发时,程序员的职责不仅仅是编写代码,而是要帮助持续交付稳健的软件。这涉及到的不仅仅是编写实现新功能的代码,因此 AI 可能对它的影响不会太大。
此外,你可能还想学习如何全面地构建和部署应用程序,包括 DevOps 和云基础设施的管理,例如。这将加强你作为一个能够端到端交付稳健软件的人的地位,而不仅仅是程序员,帮助你在一个 AI 可以编写一些代码的时代保持相关性。
现在让我们转向基于 AI 的产品,这些产品非常流行。这些产品在验证方面提出了额外的要求,因为 AI 有时会幻觉或在不同执行中产生不同的输出。你如何正确衡量基于 AI 的产品在执行任务时的准确性?你如何找到改进它的机会?
在过去几个月里,许多人向我寻求关于他们基于 AI 产品的建议,因为他们对 AI 的表现感到失望。这包括开发者和企业家。除了偶尔的幻觉之外,他们常常抱怨 AI 缺乏一致性。例如,一家公司创建了一个 AI 模型来生成推荐以提高营销视频。用户会实施其中一个推荐,然后再次通过应用程序运行视频,但现在应用程序会做出完全不同的推荐,并忘记一些之前的推荐。这对用户来说非常令人沮丧。
在大多数情况下,我很快注意到开发者没有遵循一个系统的过程来验证和选择 AI 模型。例如,他们没有基准来评估不同模型在任务中的性能或随着提示的变化性能如何提高。此外,他们将整个任务总结在一个单一的巨型提示中,并寄希望于最好的结果。我鼓励他们将问题分解成更小的单元,并进行彻底的基准测试。这将有助于诊断问题并识别可以改进的个别子任务,可能需要引入一些外部数据,甚至完全不使用 AI。此外,基准测试可以帮助建立关于性能的现实假设,并了解你离可接受的范围有多近——AI 很少会 100%按照你的意愿工作。在第三章中,我们讨论了验证和选择模型的推荐流程,这让你对未来 AI 的表现有一个概念,并避免由于验证过程处理不当而产生的不幸偏差。
我预计开发者将越来越需要验证 AI 的性能并寻找改进的机会。为什么不成为 AI 产品验证的大师,以保持领先于曲线呢?
严格控制
一个平面设计师告诉我,她试图使用 AI 生成图像,但效果不佳,因为她无法让它看起来完全像她想要的那样。由于她对图像有非常具体的要求,提示变得非常详细和长,这使得管理变得困难。AI 有时会随机忽略提示中的某些指令,因此她不得不重新措辞或重新排列它,以尝试让 AI 注意这些请求。
设计师告诉我:“我一定是做错了什么。我需要阅读用户手册。” 确实,用户手册可能为她提供了一些有用的指导和技巧来编写有效的提示。例如,Midjourney 的文档(docs.midjourney.com/docs/prompts
)解释了:
更好地描述你想要的东西,而不是你不想的东西。如果你要求一个没有蛋糕的派对,“蛋糕”这个词可能会出现在你的想象中。为了确保某个对象不在最终图像中,尝试使用
--no
参数进行高级提示。 ... 词语的选择很重要。在许多情况下,更具体的同义词效果更好。与其说“大”,不如说“小”、“巨大”、“巨大”、“庞大”或“无限”。 ... 复数词留给机会很多。尝试具体的数字。“三只猫”比“猫”更具体。集合名词也有效,比如“鸟群”而不是“鸟”。
尽管这些技巧和窍门可能确实帮助了设计师,但它们仍然是仅供参考的规则,并不总是有效。设计师仅仅通过遵循这些建议,不太可能轻易控制 AI 的输出,达到她想要的效果。
这种经历与电子商务网站所有者的经历大不相同。他告诉我,他有时会在 Instagram 上快速进行广告活动来测试新产品或改进其销售文案。直到几年前,他雇佣人制作这些广告的图形,或者自己制作。现在他使用 AI。由于他对这些图形的确切外观,如颜色或其中的图像,不太关心,他写出了非常简单的提示,并且经常一次就获得可接受的结果。
类似地,当我写这本书的时候,编辑们一直在制作总结其内容的视频。他们一直在使用 AI 来做这件事。他们不需要完全控制视频的外观,比如颜色、设计、布局等等。他们只需要验证内容是否合理。因此,AI 非常有效,因为一个简单的提示就可以让你走得很远。
生成式 AI 在我们不想严格控制其输出时效果最好,因为你可以在不必须反复修改提示的情况下获得有用的输出(见表 5.3)。当你对最终结果不太挑剔时,你会得到“物有所值”的提示。
表 5.3 不需要严格控制输出的工作特征。后者可能更安全,免受 AI 的影响。
松散控制 | 紧密控制 | |
---|---|---|
特征 | 你关心核心功能但不关心更细微的细节(“80/20”工作)。短期、实验性或附加功能。无需详细提示即可接受 AI 的第一个输出。 | 你确切地知道你想要什么。你希望输出看起来以某种方式,包括最细微的细节。逐步描述任务可能需要相当多的时间(可能和做这项工作一样多)。 |
示例 | 短暂广告活动的图形。补充书面内容的非正式视频。 | 高端电影制作的视觉效果。对有非常精确要求的客户的设计。 |
在其他情况下,我们希望对 AI 的输出有更多的控制,因为我们对我们想要生产的内容有更明确的想法。在这种情况下,生成式 AI 可能不会节省太多时间,甚至可能根本不节省时间,因为精确描述你想要的内容并在提示中获取 AI 执行的过程可能和手动做工作一样复杂。
因此,客户不太关心输出精确细节的工作岗位最有可能被 AI 取代。例如,专门为快速广告活动以低成本创建图形的设计师可能需要担心。客户对输出有非常精确要求的岗位可能更能抵抗 AI。在这些情况下,AI 可能提供一些帮助,但工人仍然需要做大量工作才能得到预期的输出。例如,为高端电影制作工作的视觉效果艺术家,导演要求非常严格,更有可能抵抗 AI。
软件中的控制
几个月前,我必须迅速提出一个调色板,用于在折线图中使用不同颜色显示线条。调色板必须定义为 JavaScript 颜色列表,颜色由十六进制字符串表示。我向 ChatGPT 提出了以下问题:
给我一个以十六进制值表示的 JavaScript 列表形式的图形调色板。应有 20 种不同的颜色
ChatGPT 以正确的格式响应了一个颜色列表。以下是摘录:
const colorPalette = [:
"#FF5733", // 红橙色
"#33FF57", // 绿色
"#3357FF", // 蓝色
"#FF33A1", // 粉色
"#FF8C33", // 橙色
…
];
它工作得像魔法一样。颜色看起来有点丑(客户说它们看起来很时髦),但它完成了我们当时需要的任务,那就是尽可能快地可视化数据。我们不需要它看起来特别漂亮,或者至少还不是现在。
当涉及到编写代码时,AI 最有用的时候是我们能够简洁地描述任务并且不太关心确切的输出。因此,我们得到了很好的提示效果。注意我的提示是如何草率地编写的,但 ChatGPT 还是成功地产生了我可以立即使用的代码。
但并非所有编码任务都是这样的。事实上,我们通常非常关心我们编写的软件的细节,利益相关者对我们编写的软件应该如何处理问题、其界面应该是什么样子等都有强烈的看法。例如,我们可能需要它使用特定的算法或特定的外部 API 来收集数据,或者我们可能需要一个前端界面以特定方式响应不同的屏幕尺寸。随着软件项目的增长,它通常变得更加定制化和独特。
你对代码的要求越多,编写 AI 提示的过程就越像编码本身,因为你必须一步一步地定义解决方案。这就是为什么无代码、拖放工具从未取代编程的原因之一。在某个时候,当你需要定制无代码应用时,你最终不得不使用无代码平台的特性来编码或编写一步一步的说明,这很像编码,从而违背了无代码的初衷。
在英伟达首席执行官认为编程现在将使用人类语言之后,技术教育家约翰·克里奇特指出:“我们如何能用如此不精确、模糊且容易解释的‘人类’语言来指定复杂的软件?我从未遇到过能够用英语做到这一点的产品负责人。我肯定做不到。” (mng.bz/W2KW
)。人工智能可能是一个可以帮助工程师的工具,但他们仍然必须使用精确的、一步一步的技术语言来定义代码必须做什么。
建议
我建议避免那些涉及为实验性产品构建工作,其中细节并不重要的工作——我们可以把它们看作是玩具产品。一个例子是为那些想要测试潜在用户的应用想法的创业者构建快速原型。这些客户通常不关心解决方案的可扩展性或未来保障。他们希望你能快速构建一些东西,以便他们可以向用户展示并收集反馈。如果他们收集到有真实需求的产品证据,他们通常会丢弃初始原型,之后雇佣工程师构建一个更严肃的产品。许多这些创业者现在正在使用无代码应用构建器,如 Bubble 或 FlutterFlow,而不雇佣工程师来构建自己的应用。我们可以想象,他们将越来越多地依赖 AI 工具,并且不太倾向于为他们的早期项目雇佣工程师。
相反,尝试为非常挑剔的客户工作。一些客户对细节极其敏感,希望事情以某种特定方式完成。这通常源于他们自己的用户的需求,这些用户是完美主义者,对小事抱怨连连。当你为关键任务应用构建软件时,如协调物流操作,你可能会观察到这一点最为明显。
新的机会:让网络更加人性化
你是否曾在谷歌搜索中添加过“reddit”这个词?我总是这么做,而且似乎越来越多的人也在这么做。
例如,我最近去了贝尔法斯特市,想知道参观泰坦尼克号博物馆是否值得。我知道普通的谷歌搜索会把我带到无数由 SEO 驱动的文章,标题如“参观泰坦尼克号博物馆的五大理由。”这些文章充满了关键词以吸引流量,但它们的编辑质量很差,充满了试图向我推销产品的联盟链接。
相反,我搜索了“Titanic Belfast worth visiting reddit”,因为我想知道 Reddit 用户对此有何看法。我知道意见会不同,也许 Reddit 用户会互相争论和踩低对方的评分,但至少我有更高的机会发现真正的人对博物馆的看法。
软件工程师 Dmitri Brereton 认为,“为什么人们会在 Reddit 上搜索?简短的答案是谷歌搜索结果显然正在死亡。长远的答案是,大部分网络内容已经变得太不真实,无法信任”(dkb.blog/p/google-search-is-dying
)。
人们似乎在网络上渴望更多真实、人性化的内容。我认为,如果 AI 撰写的文章充斥网络,这会使问题变得更糟。人们将涌向可以找到更多真实内容的在线平台。如果 AI 制作的内容在谷歌、Medium 和 YouTube 等平台上泛滥,他们可能会发现自己陷入麻烦,因为用户会逃离这些平台。其中一些,如 YouTube,已经开始打击 AI 生成的内容(mng.bz/8OgD
)。
因此,如果你允许我进行一些推测,我认为生成式 AI 革命可能会创造新的工作类型,帮助根据内容的真实性对其进行排名和筛选。例如,可能会出现一个新的专业领域,即编写软件来检测 AI 生成的内容。这可能会导致信息检索领域的新发展和兴趣。
哲学上的偏离:自动化和大规模失业
由于生成式 AI 的快速发展,一些人开始担忧它可能会在更广泛的经济领域引发大规模失业(mng.bz/EarR
)。这种担忧并非新鲜事——历史上每当引入机器或新技术以自动化工作的时候,这种担忧就多次被提出。作为一名技术专家,你可能会经常发现自己正在讨论你的工作在更大背景下的影响——构建新技术是否会损害经济?
事实上,新机器和技术确实会导致人们失业。这对工人来说非常不幸,因为他们发现自己拥有过时的技能,不得不寻找新的工作,可能工资更低。但是,机器对经济的影响总体上是什么——它们是否会导致长期的大规模失业和普遍的苦难?为了回答这个问题,让我们来讨论经济学。
我们可以将经济视为一个过程,它将资源转化为实际产出(产品和服务):
资源(矿物、能源、工人时间)——>产品(例如,食物、Netflix 剧集)和服务(例如,医生的护理、理发)。
一个经济的总产出是通过其国内生产总值(GDP)来衡量的(更准确地说,是经过通货膨胀调整的 GDP,即实际 GDP)。人均 GDP 较高的国家为其居民生产更多的商品。这通常意味着他们享有更高的生活水平。当一个国家找到方法生产更多商品时,例如,通过使用更先进的生产技术或建造自动化部分手工劳动的机器,其 GDP 就会增长。
当一个经济没有从机器中受益时,需要许多工人的小时数来生产基本物品,如食物和衣服。当它积累机器时,生产同样商品所需的小时数减少,因此可以生产更多的商品,它们变得更便宜。
技术的使用释放了资源,包括人力工作时间,这些资源可以用来创新和生产非必需品,如娱乐和电视剧。一项 2022 年的研究发现,“2018 年大约 60%的就业岗位在 1940 年是不存在的”(mng.bz/N1rd
)。因此,尽管自动化消除了工作,但最终经济会适应释放的资源,用于生产其他商品,可能是以前没有生产过且对生存不那么重要的商品。只要自动化能够高效地使用资源,它就会使经济更富裕,而不是更贫穷。
在他的著作《一课经济学》(Harper & Brothers,1946 年)中,记者亨利·哈兹利特解释道:
如果引入节省劳动力的机器确实会导致不断上升的失业和苦难,那么得出的结论将是革命性的,不仅是在技术领域,而且是对我们整个文明概念的根本改变。我们不仅应该将所有的进一步技术进步视为灾难;我们还应该将所有过去的技术进步视为同等恐怖的东西……为什么我们不能用火车将货物从纽约运往芝加哥,而可以雇佣大量的人,例如,用他们的背来搬运所有货物?……重复一遍,机器的作用是增加生产和提高生活水平。
纠结的是,即使自动化总体上改善了经济发展,但对于在这个过程中失去工作的人来说,过渡是艰难的。亨利·哈兹利特继续论证:
我们应该至少关注一下乔·史密斯。他被新机器赶出了工作……现在他一夜之间又变成了一个无技能的工人,目前只能希望得到无技能工人的工资,因为他的那项技能不再需要了。我们不能,也绝不能忘记乔·史密斯。他的个人悲剧是……与几乎所有工业和经济进步相关的事故之一。
我认为,从帮助我们更有效地生产东西的角度来看,生成式人工智能并不是人们所声称的那么大的进步。正如我们所看到的,人工智能会产生幻觉,其输出往往需要彻底验证。此外,正如我们稍后将要讨论的,它消耗了相当多的电力和其他自然资源。然而,它似乎确实有助于在各个行业中更有效地完成某些任务。从长远来看,这将为经济增长而不是痛苦创造条件,就像过去许多其他机器所做的那样。在这个过程中,有些人可能会失去工作,这对他们来说无疑将是残酷的。但我们不应陷入新技术导致广泛和长期痛苦的观念。恰恰相反。
摘要
-
那些出色的工作容易被注意到并受到赞赏的工作可能更能抵抗人工智能。在软件工程中,实现这一点的一种方法是在技术和商业的交汇处工作——您与商人合作,帮助他们构建成功的产品,而不是仅仅编码。以下是一些实现这一目标的建议:
-
学习商业知识,例如,通过阅读像《精益创业》这样的流行商业书籍。
-
参与超出技术范畴的任务,例如产品管理或商业分析。
-
专注于帮助业务实现目标的特定技术领域,例如运筹学和数据分析。
-
-
需要对输出进行严格和详细验证的工作,无论是出于安全、法律还是商业原因,将更好地抵抗人工智能。这种情况通常适用于软件,但有些人可能希望将工程师转变为 AI 编写的代码的验证者。以下是一些保持相关性的想法:
-
成为一名负责交付可靠软件而不是仅仅编写代码的人。
-
在不断交织编码和测试的现代团队中工作。如果您还没有这样做,学习现代工程实践,如测试驱动开发(TDD)和基于主干线的开发。
-
学习如何全面地构建和部署软件,包括部署、云和 DevOps。
-
学习评估基于人工智能产品的良好实践(见第五章)。帮助您的客户了解人工智能在其预期任务中的性能,并帮助他们找到改进的机会。
-
-
需要对输出进行精细控制的工作可能更能抵抗人工智能,因为当您准备好接受其输出而不需要对其进行太多改进时,人工智能最有帮助。以下是一些保护您工作的想法:
-
避免专注于构建粗糙的原型或“玩具产品”,这是早期创业者为了验证想法所必需的。
-
尝试与那些希望以特定方式完成工作的挑剔客户合作。当你为关键任务应用构建软件时,你可能会最高几率地找到这类客户。
-
-
生成式人工智能的普及可能会创造新的软件工作机会,以构建帮助应对新产生的内容的算法(例如,通过帮助过滤和检索由人类编写的内容)。
-
那些职业受人工智能影响的群体将在转向新职业的过程中遭受痛苦。然而,如果人工智能能够真正高效地自动化工作,而不是导致长期失业和痛苦,它将使我们的经济更加高效和繁荣。
第六章:详细说明
本章涵盖
-
围绕人工智能的争议性和及时性讨论
-
训练数据相关的版权争议
-
人工智能的经济学
-
对人工智能性能和进步的夸张
-
人工智能监管
-
训练和使用人工智能模型所需的资源消耗,如电力和水
-
围绕人工智能、生物大脑和意识的哲学辩论
本章探讨了人工智能的一些重大问题。它还揭示了一个不太令人愉快的 AI 方面——该领域经常受到夸张、推测甚至欺骗的影响。我认为了解这些话题很重要,这样你可以批判性地分析人工智能的公告和讨论。此外,如果你正在开发基于人工智能的产品或大量使用人工智能,你可能想了解你的工作可能产生的更广泛的影响和潜在争议。
版权
大型人工智能模型,如 LLM 和文本到图像模型,是使用从互联网收集的数据或 抓取 训练的,通常未经所有者授权。这包括数百万份文档、图片和书籍,这让许多人感到愤怒,并对人工智能提供商提起了许多诉讼。一个例子是 Getty Images(一个销售库存图片的网站)对 Stability AI(创建 Stable Diffusion 文本到图像模型的公司)提起的诉讼。Getty Images 认为 Stability AI 在未经授权的情况下使用从 Getty 网站收集的图片来训练其模型。投诉展示了 Stability AI 模型生成的图片,这些图片与 Getty 销售的图片相似。在某些情况下,AI 模型甚至生成了带有 Getty Images 水印粗糙仿制的图片(见图 6.1)。
图 6.1 左:在 Getty Images 网站上销售的图片。右:由 Stable Diffusion 模型生成的图片。注意图片中的水印。这些图片是从 Getty Images (US), Inc. v. Stability AI, Inc., 1:23-cv-00135, (D. Del.). 中复制的。
《纽约时报》 对 OpenAI 提起了一项类似的诉讼,理由是未经授权抓取报纸文章来训练 OpenAI 的模型。投诉中包含了 GPT-4 输出的大量文本示例,这些文本是 《纽约时报》 中找到的文本的逐字复制(见图 6.2)。
图 6.2 GPT-4 输出的示例(几乎)逐字文本,如《纽约时报》所发布。图来自 The New York Times Company v. Microsoft Corporation, 1:23-cv-11195, (S.D.N.Y.)。
此外,一群艺术家起诉了 Midjourney、Stability AI 和其他图像生成提供商,因为他们使用了原告作品的图片来训练他们的模型。他们认为这允许模型生成“原告风格”的图片 (mng.bz/ZlKa
)。未来很可能会对人工智能提供商提出许多其他版权侵权指控。
版权侵权通常基于两个理由:
-
人工智能模型有时会逐字复制内容。
-
人工智能服务提供商未经授权使用受版权保护的数据来训练模型。
当模型记住训练数据,这是过度拟合的结果时,就会发生逐字复制。人工智能服务提供商可能会通过使用防止过度拟合的技术来尽量减少这种情况。很难保证不会发生记忆,但可能成功减轻。
第二点——未经授权使用数据来训练模型——更具争议性,似乎也是问题的核心。人工智能服务提供商的支持者认为这并不构成版权侵犯。他们认为从数据中抓取信息来训练模型是合法的,因为目标是让模型从数据中学习模式和关联,而不是复制数据的逐字逐句(即使不幸地发生了这种情况)。
我甚至听说有些人认为我们人类通过阅读公开可用的数据来学习,然后我们使用这些知识来创造我们自己的作品。那么,为什么人工智能服务提供商不能做同样的事情呢?
解决这个难题的关键在于合理使用这个话题。在版权法中,在某些情况下,未经授权复制数据被认为是合理的。这包括复制数据以帮助构建不取代或与原始产品竞争的产品。例如,在这本书中,我引用了其他书籍的引文。我从未联系过这些书籍的作者请求许可。这被认为是合理使用,因为我的引用并没有使这本书与其他书籍竞争,并且引用的原始作者被明确标注。例如,在第一章中,我引用了《统计学习元素》一书的段落。然而,这本书涉及不同的主题,所以它并不打算与之竞争,窃取其客户。事实上,我可能通过提及它实际上为那本书带来了宣传。然而,如果复制了那本书的整个章节,这就不被认为是合理使用,因为我的书可能成为它的替代品。关于什么构成合理使用没有确切的规定,例如引用中精确的单词数,所以这通常在争议解决中逐案确定。
Getty Images 和《纽约时报》提起的诉讼试图确立,人工智能服务提供商抓取他们的数据不是合理使用,因为他们用它来构建竞争产品。在图像生成的情况下,这一点尤其容易可视化——可以想象 Getty Images 的客户可能会使用 Stable Diffusion 来创建图像。
如 Getty Images 所辩称(mng.bz/RVgO
),
Stability AI 已从 Getty Images 网站上复制了至少 1200 万张受版权保护的图片……Stability AI 现在与 Getty Images 直接竞争。
《纽约时报》的诉讼还试图确立 OpenAI 的模型作为报纸网站的替代品(mng.bz/2yvm
):
被告坚持认为,他们的行为应被视为“合理使用”受到保护,因为他们的未经许可使用受版权保护的内容来训练 GenAI 模型服务于一个新的“转换”目的。但是,使用《泰晤士报》的内容而不支付费用来创建替代《泰晤士报》并从其那里吸引受众的产品,并没有什么“转换”之处。
到我写这篇文章的时候,这些争议还没有得到解决。我们将看看法庭上会发生什么。
我认为连续的争议可能的一个结果是,监管机构将要求 AI 提供商尊重退出的请求——如果数据所有者不希望他们的数据用于训练 AI 模型,则不应使用。数据所有者必须通过在约定格式中的机器可读元数据中表明他们希望退出的意愿。这就是如果你不希望搜索引擎抓取和索引你的内容时的工作方式。你必须在一个名为 robots.txt 的文本文件中指定这一点,该文件在请求你的根域名时返回(例如,example.com/robots.txt)。该文件以特殊格式描述了哪些网站部分允许被抓取以及由谁抓取。所有主要搜索引擎都遵守此协议。
另一个争议是 AI 生成的内容本身是否受版权法保护。例如,如果你使用 Midjourney 生成一个图像,你能阻止他人复制 AI 生成的图像吗,因为这侵犯了你的版权?版权联盟认为,仅由 AI 生成的作品不受版权保护。然而,它澄清了(mng.bz/1Xnn
):
如果一部作品既包含由 AI 生成的元素,也包含受版权法保护的人类创作元素——例如人类创作的文本或人类对作品各部分的最小创造性安排、选择和协调——那么受版权保护的作品元素将归人类作者所有。
我不太确定这是什么意思。如果我使用 Midjourney 生成一个图像,这个作品是完全由 AI 生成的,还是因为我编写和改进了提示而我是作品的组织者?也许版权联盟还不知道,因为它在那一部分之后补充说,“AI 和版权问题将继续发展”,并邀请您订阅 AI 版权通讯以保持最新。
人工智能的经济
自从生成式 AI 的兴起以来,我们听到了很多关于其潜在经济回报的消息。听起来,很多人将因为 AI 而赚很多钱。但情况真的是这样吗?
一些 AI 提供商已经收入数百亿美元。例如,到 2024 年,OpenAI 创造了 37 亿美元。对于一个如此年轻的公司来说,这相当令人印象深刻。
但从长远来看,收入并不足以建立一个成功的企业。为了做到这一点,企业必须盈利——它必须收集比产生收入所花费的更多的收入。否则,除非有投资者持续注入资金来补贴其亏损,否则它无法支付账单。
2024 年,OpenAI 亏损了 50 亿美元。虽然其 37 亿美元的营收令人印象深刻,但这并不足以覆盖其更令人印象深刻的支出(mng.bz/PdMv
)。这很可能与训练和提供大型 AI 模型的高成本有关。有人估计,运行 ChatGPT 可能每天要花费 OpenAI 70 万美元(mng.bz/JYna
)。据说训练 GPT-4 的成本为该公司 1 亿美元(mng.bz/wJma
)。请注意,一些模型会定期用新数据进行重新训练,因此模型训练并不总是一次性支出。其他主要 AI 提供商,如 Anthropic 和 Mistral,也仍然没有盈利。
除了盈利之外,一个企业如果能够产生良好的利润,那么它才算得上是成功的——投资者希望他们的投资能够得到良好的回报。在竞争激烈的市场中,利润往往会随着时间的推移而逐渐被侵蚀,因为模仿者进入市场,推高了成本并降低了价格,因此很难持续获得良好的利润。后者需要一道护城河,也称为竞争优势,这是一种保护公司市场份额不受竞争对手侵害的特性。当一个企业从护城河中获益时,竞争对手无法在同等条件下进入市场,因此他们很难或成本过高来侵蚀你的市场份额。
似乎 AI 提供商并没有强大的护城河来保护他们的市场份额。特别是,LLMs(第一章中讨论的变换器架构)背后的方法论是公开的,因此其他人可以构建自己的竞争模型。AI 提供商对此感到有些不安。2023 年 5 月,一份泄露的谷歌备忘录表示:“我们没有护城河,OpenAI 也没有。…令人不舒服的真相是,我们并没有处于赢得这场军备竞赛的优势地位,OpenAI 也没有。…虽然我们的 AI 在质量上仍然略占优势,但差距正在惊人地迅速缩小。开源 AI 更快,更可定制,更私密,并且按性能和功能来看,每一点都更强大。”备忘录还承认:“我们没有秘密配方”,并建议:“当有免费、无限制的替代品在质量上相当时,人们不会为受限的 AI 付费。我们应该考虑我们的真正价值在哪里”(埃马纽埃尔·马吉奥里,2024 年,《硅化》)。
由于没有秘密配方,不同提供商创建的模型在性能和能力方面已经趋于一致,包括开源模型。可以预见,在某个时刻可能会发生市场动荡——一些公司可能会倒闭或停止其产品。开发大型 AI 模型的经济案例并不像最初看起来那么清晰。
除了大公司之外,许多较小的公司正在构建基于 AI 的产品,这些产品建立在基础模型之上——有些人称它们为“AI 包装器”。例如,有数十家公司提供 AI 工具,可以将你的普通照片转换成专业的头像。这些工具可能只是添加在公开可用的 AI 模型(如 Stable Diffusion)之上的一层薄薄的外壳,或者可能是其中之一经过微调的版本。这最初可能看起来像是一个成功的商业想法,因为你确实让人们创建头像变得容易。然而,这里没有护城河——“这些应用的秘诀”是提示词,除非它非常特别,否则其他人可能也能想出来。因此,竞争加剧,正如我们从提供类似功能的多个应用程序中已经看到的那样。这些薄利的企业要产生显著的利润将非常困难。
最后,关于使用 AI 工具大幅提高商业生产力的说法已经很多。2023 年,麦肯锡分享了以下估计(mng.bz/qxz6
):
生成式 AI 对生产力的影响可能为全球经济增加数万亿美元的价值。我们最新的研究估计,在 63 个我们分析的应用案例中,生成式 AI 每年可能增加 2.6 万亿美元至 4.4 万亿美元的价值——相比之下,2021 年英国的国内生产总值(GDP)为 3.1 万亿美元。
但生产力的增长到目前为止几乎无法检测到。2024 年《经济学人》的一篇文章解释说:
宏观经济数据……几乎没有显示出生产力的激增迹象……在美国,作为全球 AI 中心的美国,每小时的产出仍然低于 2020 年之前的趋势。即使在采购经理调查产生的全球数据中,这些数据滞后较短,也没有显示出生产力激增的迹象。(“人工智能革命怎么了?”2024 年 7 月 2 日,《经济学人》)
文章还解释说,由于“对数据安全、有偏见的算法和幻觉”的担忧,商业世界中 AI 的采用率一直非常缓慢。它总结道:“到目前为止,这项技术几乎没有任何经济影响。”确实,似乎在商业中实施 AI 比最初看起来要困难得多。有人最近告诉我,问题是“最后一公里”——虽然 AI 可以帮助你完成工作的前 80%,但由于幻觉或需要痛苦的定制,很难让它很好地完成剩余的 20%。这使得生产力的提升不如承诺的那样引人注目。
因此,我建议你在听到关于 AI 经济收益的大话时要谨慎。结果尚未明朗。
烟雾和幻影
2023 年 11 月,有消息透露,Cruise 公司生产的自动驾驶汽车并不能完全自动驾驶。当汽车遇到问题时,远程控制室里的一群人类操作员会手动干预。这种情况每行驶 2.5 到 5 英里就会发生一次。该公司为每辆在路上的汽车配备了 1.5 名员工来做这项工作(mng.bz/7pM7
)。商业教授托马斯·W·马龙说:“可能只是支付司机坐在车里驾驶会更便宜” (mng.bz/mGpW
)。
几个月后,Cruise 的主要竞争对手 Waymo 在一篇博客文章中解释说:“就像拨打朋友电话一样,当 Waymo 的车辆在道路上遇到特定情况时,自动驾驶驾驶员可以联系人类车队响应代理以获取更多信息,以对其环境进行上下文化” (waymo.com/blog/2024/05/fleet-response/
)。
亚马逊的“直接出门”技术也发生了类似的事情,这项技术被安装在了亚马逊的超市里。据称,这项技术利用 AI 根据安装在天花板上的摄像头拍摄的画面自动准备购物收据。2024 年 4 月,一名记者揭露,印度有 1000 名远程工作人员在观看视频,并手动准备或调整至少 70%的收据(mng.bz/5gX8
)。
使用人类秘密地驱动 AI 的做法常被比作 1770 年建造的机械 Turk,这个欺诈性的机器似乎能自己下棋,但实际上是由人类秘密地操作的。这台机器在巡展中展出了 84 年。
人工智能领域充斥着大承诺、炒作和夸张。机械 Turk 只是其中的一个例子——夸张和欺骗以不同的形式出现。例如,2023 年 4 月,谷歌高管声称他们的一款 AI 模型已经学会了孟加拉语,尽管它并没有在孟加拉语文本上进行过训练。其中一位高管解释说:“我们发现,在孟加拉语中只有很少的提示,现在它可以翻译所有的孟加拉语” (futurism.com/the-byte/google-ai-bengali
)。他们认为这是一个 AI 具有“涌现特性”的例子。
这条新闻迅速传播开来。一家印度报纸思考道:“AI 自己学会了孟加拉语,我们应该担心吗?” (mng.bz/6eyp
)。一位听到这个新闻的人联系我,问我是否认为我们可能很快会面临一个“奇点事件”——AI 能力的戏剧性爆炸——因为现在 AI 可以自己学习新东西。
在了解了当前 AI 的工作原理(见第一章)后,很难相信它能够轻易地学习不属于其训练数据的新语言。结果证明,孟加拉语确实是该模型训练的语言之一,这与谷歌高管所说的相反(mng.bz/oKYy
)。
最近,在 2024 年 9 月,OpenAI 推出了一种名为 OpenAI o1 的新模型。公司将其定位为一种能够“思考”和“推理”的模型。通告解释说:“我们推出了 OpenAI o1,这是一种使用强化学习训练以执行复杂推理的新大型语言模型。o1 在回答之前会思考——在回应用户之前,它可以产生一个长的内部思维链。”(mng.bz/nROV
)。文章中使用了“思考”这个词 9 次,使用了“推理”这个词 17 次。这种定位让人听起来像是一个重大的改进,也许是从通常的自动补全 LLM 中的一次转变。它还听起来像是朝着更类似人类的 AI 迈进了一步——通告说该模型在回答之前可以花更多的时间思考,“就像一个人一样”。
但一旦我们超越营销材料,我们会意识到 o1 系统并不像看起来那么新颖。它的工作原理如下:首先,使用 LLM 生成一段包含建议步骤列表的文本,以解决问题。然后,将这些指令添加到原始提示的末尾。因此,新的提示包含了原始任务,后面跟着一个建议的逐步执行方案。之后,这个扩展提示像往常一样通过 LLM 运行。这模仿了流行的思维链提示技术,其中用户将解决问题的逐步指南添加到提示中。
通告强调使用了强化学习来训练系统:“我们的大规模强化学习算法教导模型如何通过其思维链在高度数据高效的训练过程中进行富有成效的思考。”这听起来可能很令人印象深刻,但可能并没有什么新意。OpenAI 已经使用带有人类反馈的强化学习(RLHF)来改进其所有模型已有相当长一段时间(见第一章)。很可能是他们所说的“强化学习”是指人类手动编写了一小部分示例数据集,其中包含了他们希望 LLM 生成的逐步指令,然后 LLM 被优化以更准确地生成这样的指令。
我建议你在听到令人印象深刻的 AI 公告时要谨慎。我建议你在分析公告时牢记当前 AI 的工作原理,这使你更容易读出言外之意,区分精华和糟粕。
规章制度
在 2024 年 8 月,欧盟实施了关于人工智能的法规,被称为 AI 法案。AI 法案适用于在欧盟内使用或其输出被使用的 AI,即使它是在其他地方开发和运行的。这项法规引起了争议,有些人认为它不足,而有些人认为它过度。无论如何,让我们快速讨论一下它,因为你可能受到影响(例如,你可能开发了一个在欧盟使用的基于 AI 的产品),因为它可能成为未来其他地方 AI 法规的蓝图。
AI 法案包含四个特别章节,这些章节对 AI 系统的开发者和用户特别相关。我们下面简要评论每个章节。您可以在网上阅读全文(mng.bz/vKWm
)或查看官方的高级摘要(mng.bz/4aQ5
)。
禁止的人工智能实践
本法案的这一部分描述了一系列被明令禁止的人工智能实践,因为这些实践被视为严重的违规行为。这些包括用于操纵或欺骗人们的 AI、利用人们因年龄、残疾或特定的社会或经济状况而存在的脆弱性的 AI,以及用于社会评分的 AI,以及其他类别。
高风险系统
本部分包含适用于高风险产品的规定。这些产品已经受到欧盟监管,需要第三方合格评定,例如某些车辆、机械和医疗设备。它还增加了几个新的类别,例如用于针对性招聘广告的 AI 和用于签证申请的 AI。法案对这些高风险系统提出了多项要求,包括启用人工监督“以了解其能力和局限性,检测和解决问题,避免过度依赖系统,解释其输出,决定不使用它或停止其操作。”
透明度义务
本部分要求公司在与 AI 系统互动时通知用户(除非很明显或 AI 用于法律目的,如犯罪侦查),这特别适用于“生成或操纵构成深度伪造的图像、音频或视频内容的 AI 系统。”即使对于被认为不是高风险的系统也是如此。请注意,如果你使用 AI 生成内容,但随后你彻底审查了内容并对其承担编辑责任,你不再需要通知他人使用 AI。
顺便说一句,不用担心 AI 法案会破坏你的 AI 艺术——你可以表明你正在以“不损害作品展示或欣赏的方式”使用 AI。
基础模型
本部分对基础模型提出了要求,这些模型被称为“通用人工智能模型”。法案要求 AI 提供商编写详细说明模型开发的文档,包括“用于训练、测试和验证的数据信息”以及“模型的已知或估计能耗。”
此外,法案还特别提到了一类非常大的基础模型,这些模型被认为可能带来“系统性风险”。这些模型在训练量方面超过了一定阈值(当前设定为训练过程中的 1025 次浮点运算)。这些模型的创作者必须通知欧盟他们的工作,欧盟可能会对降低风险提出额外的要求。
此外,该法案批准了未经授权从抓取的数据中训练模型,只要尊重退出权。这是通过引用一个允许为了数据分析目的进行网络抓取的指令间接批准的。有些人批评了这个指令,认为“数据挖掘”过于宽泛,几乎可以涵盖任何内容(mng.bz/QDa1
)。
资源消耗
训练和使用 AI 模型消耗电力和其他资源,其规模受到了批评。例如,一位记者称 AI“是气候的灾难”(mng.bz/Xxzl
)。
评估人工智能的电力消耗是困难的,因为供应商尚未持续地报告这一数据。因此,我们必须依赖其他人进行的研究。这些研究并不完全标准化,因此它们有些混乱且难以追踪。其中一些研究甚至在同一报告中以混乱的方式混合了不同的单位,例如千瓦时(kWh)、二氧化碳排放量和“相当于智能手机充电次数”(arxiv.org/pdf/2311.16863
)。有时研究人员会依赖传闻和松散的逻辑联系来计算消耗量。例如,一位研究人员通过一位谷歌高管在一次采访中提到 LLM(大型语言模型)可能比执行一次谷歌搜索消耗 10 倍多的电力这一事实,间接地推断出 LLM 的能源消耗量(mng.bz/yW57
)。
在以下内容中,我将分享一组来自 Hugging Face 和卡内基梅隆大学的研究人员所展示的研究结果。研究人员使用了多个开源模型以及他们自己的 GPU,并测量了消耗量。
表 6.1 显示了研究人员报告的文本和图像生成的电力消耗情况(arxiv.org/pdf/2311.16863
)。消耗数据是研究人员研究的不同模型平均得出的(每个模型的个人消耗量没有以一致的方式报告)。
表 6.1 不同模型平均电力消耗与典型家庭消耗量的比较
千瓦时/1,000 次响应 | 每日家庭千瓦时(美国)的百分比 | 每日家庭千瓦时(英国)的百分比 | |
---|---|---|---|
文本生成 | 0.047 | 0.15% | 0.5% |
图像生成 | 2.907 | 9.83% | 30% |
注意,这些数据是按每千次模型使用计算的,例如使用 LLM 生成整个响应 1000 次或使用文本到图像模型生成 1000 张图像。1000 次 AI 使用可能看起来很多,但密集用户可能在一天内就轻松达到这个数字。例如,使用 GitHub Copilot 的程序员每小时可能生成数百个基于 LLM 的自动完成。此外,许多我们常规的在线行为,如进行谷歌搜索或浏览在线商店,可能会触发 LLM 查询(谷歌已经在搜索中显示 AI 结果),即使用户没有直接使用 LLM,也会增加 LLM 的使用量。我们还可以想象,一小群图形设计师可能会在短时间内通过反复提示系统创建图像并调整结果来生成 1000 张图像。
在这些实验中,图像生成比文本生成更耗电。然而,研究人员没有透露用于文本生成的提示或每次生成多少文本。此外,他们只使用了较小范围的文本生成模型,如 GPT-2 模型,这些模型比随后的生成大 100 倍。作者报告了模型之间的显著差异。特别是,最大的图像生成模型消耗的电量是最小的模型的 6000 倍。
注意,AI 模型正在不断优化,因此未来的消耗可能会减少——有时在不显著降低其能力的情况下,可以将模型做得小得多。为了参考,我在表 6.1 中添加了两列,比较了 AI 消耗与典型美国家庭(www.eia.gov/tools/faqs/faq.php?id=97&t=3
)和英国家庭(mng.bz/MDQE
)的每日总电力消耗。
最令人担忧的不是电力消耗本身,而是为了产生电力而排放的 CO2。碳强度衡量每千瓦时消耗产生的 CO2 克数,这取决于电力是如何产生的。表 6.2 根据美国(mng.bz/av6x
)和英国(mng.bz/gaXZ
;这两个国家从不同的来源发电,因此它们的碳强度不同)典型的碳强度重新表述了上述结果。
表 6.2 表 6.1 中电力消耗与汽油车等效 CO2 排放的比较
每千次使用产生的 CO2 克数(美国) | 等效 CO2 排放的行驶里程(美国) | 每千次使用产生的 CO2 克数(英国) | 等效 CO2 排放的行驶里程(英国) | |
---|---|---|---|---|
文本生成 | 20 | 0.05 英里 | 7.6 | 0.02 英里 |
图像生成 | 1,200 | 3.1 英里 | 470 | 1.2 英里 |
为了更清楚地说明问题,表中还包括了您需要驾驶汽车行驶多少英里才能排放相同数量的 CO2(mng.bz/av6x
)。
除了使用 AI 模型所需的电力外,许多人强调,训练它们是一项耗能的活动。据估计,训练 GPT-3 消耗了 1,287 MWh (arxiv.org/pdf/2104.10350
)。这相当于 43000 个美国家庭或 134000 个英国家庭一天所消耗的电量。请注意,尽管模型只是偶尔进行训练,但 AI 提供商每年会训练或重新训练多个模型。
使用和训练 AI 模型也消耗其他资源,例如用于冷却数据中心的水。一篇发表在《财富》杂志上的文章解释说:“微软披露,其全球用水量从 2021 年到 2022 年增长了 34%(达到近 17 亿加仑,或超过 2500 个奥运标准游泳池),与往年相比有显著增长,外部研究人员将其与 AI 研究联系起来” (mng.bz/eyNw
)。
当你使用 AI 时,我建议你记住,“云计算”实际上是在地球上,在大型冷藏建筑内进行的,这可能非常耗费资源并对环境产生影响。
大脑与意识
让我们以轻松和哲学的笔调结束。将 AI 模型的结构与我们自己的生物大脑进行比较是很常见的。如果你还记得第一章,LLMs 执行了许多投影,这些投影是涉及矩阵乘法的数学运算。生物神经元传统上被描述为执行类似的计算,因此许多 ML 模型,包括 LLMs,被归类为人工神经网络。此外,一些 ML 模型架构与大脑特定部分的构造进行了比较。例如,卷积神经网络(CNNs)通常与大脑的视觉皮层进行比较。
事实上,我们仍然不完全理解大脑是如何工作的。例如,对神经元进行计算的传统理解过于简单(Penrose, R., 1989, The Emperor's New Mind: Concerning Computers, Mind, and the Laws in Physics. Oxford University Press, p. 511)。多年来,已经开发出更加复杂的模型。然而,这些模型仍然无法预测科学家在研究真实神经元工作时所观察到的现象。例如,2020 年,一组研究人员发现,传递信号从一个神经元到另一个神经元的树突实际上可能执行复杂的计算(Gidon, A. et al., 2020, “Dendritic action potentials and computation in human layer 2/3 cortical neurons,” Science, 367[6473], pp. 83–87)。因此,它们不仅仅是像以前认为的那样只是传递信号的电线。更复杂的是,包围神经元的液体中含有被称为神经调节剂的分子,它们以不完全理解的方式影响神经元的行为。虽然已经取得了一些进展,但我们对于神经元和大脑的理解仍然相当有限。
到目前为止,只有一种生物的大脑被完全绘制出来,这意味着研究人员可以创建一个所有神经元之间连接的图谱,即连接组。这种生物是一种名为 C. Elegans 的小型蠕虫,它大约有 300 个神经元和 7000 个连接。然而,由于图谱只告诉我们哪些神经元连接到哪些神经元,但没有确切说明它们是如何工作的,因此无法模拟观察到的蠕虫行为。神经科学家安东尼·莫夫申得出结论,"连接组本身并没有解释任何事情"(Jabr, F., 2012, “连接组辩论:绘制蠕虫的大脑图值得吗?” Scientific American,mng.bz/pKaE
)。
在某些情况下,AI 模型的设计没有考虑到大脑结构,后来才强行引入大脑类比。例如,最初描述 CNNs 的文章并没有说这些是由大脑启发的。研究人员声称他们的设计决策是“受我们对形状识别的先验知识指导”(LeCun, Y. et al., 1989, “使用反向传播网络进行手写数字识别”,Advances in Neural Information Processing Systems,2)。多年以后,当 CNNs 变得流行时,同样的研究人员声称他们是“直接受到视觉神经科学中经典概念——简单细胞和复杂细胞——的启发,整体架构与视觉皮层腹侧通路中的 LGN-V1-V2-V4-IT 层次结构相似”(LeCun, Y., Bengio, Y., & Hinton, G., 2015, “深度学习”,Nature, 521[7553],第 436–444 页)。
此外,类比通常相当松散。例如,如果我们忽略视觉皮层中不属于 CNNs 的一些已知事实,那么 CNNs 和视觉皮层的比较才成立(参见 Smart Until It’s Dumb,第二章)。
因此,每当您听到 AI 和大脑之间的类比时,都要谨慎。我们仍然不了解大脑,所以这种联系很可能是高度推测性的。
除了与大脑相关的推测之外,最新的 AI 热潮也重新点燃了意识辩论。仅举一个例子,2022 年,有报道称一位 AI 工程师声称谷歌的聊天机器人已经具有了意识(mng.bz/OBn2
)。
但是,就像大脑一样,我们对意识并不完全了解。我们知道大脑的一些部分负责无意识行为(如控制心跳),而其他部分与有意识感知(如视觉)有关,但我们不明白为什么有些部分有助于我们的意识,而其他部分则不然。我们也不了解全身麻醉是如何工作的;我们只知道从经验中得知,麻醉剂可以暂时关闭意识,但我们不知道其背后的机制。
此外,关于意识存在许多哲学问题,这些问题没有简单的答案。例如,有些人认为任何计算都会产生意识。根据这种观点,恒温器是有意识的,但以不同的方式。其他人,如物理学家罗杰·彭罗斯,认为意识根本不是由计算产生的,因此不能通过数字计算机创造。这场辩论仍在继续,我不确定我们是否能够确定恒温器是否有意识。
因此,我建议你在任何人声称对人工智能与意识之间的联系有明确答案时要谨慎。我们还有很多不知道的东西。
现在我们已经到达了这本书的结尾,让我们快速回顾一下所涵盖的内容。在这本书中,我们讨论了人工智能的力量——机器学习创新如何推动人工智能能够做到的边界。我们也讨论了人工智能的限制——有时人工智能会产生幻觉,或者不像乍看之下那么有用。因为人工智能不是万能的,其影响将根据上下文而变化——有时人工智能可能会自动化工作,但有时则不会;有时它可能是完成任务的最好工具,但有时则不是;等等。在这本书中,我试图涵盖辩论的两面,并据此提供建议。最后一章通过讨论围绕人工智能的一些更大的问题来完成我们的分析,其中许多问题仍然没有答案,并且很可能是未来的热门话题。
摘要
-
版权争议取决于对合理使用的解释。人工智能提供商认为,他们抓取数据是为了让他们的模型学习一般模式,并且他们没有意图复制原始数据,这意味着这是该数据的合理使用。数据所有者则认为,人工智能提供商使用这些数据来构建竞争产品并窃取他们的客户,所以这不是合理使用。
-
人工智能的经济案例并不那么明确。人工智能提供商仍然大部分是无利可图的,面临着激烈的竞争。创建薄人工智能包装的小公司也面临着激烈的竞争,可能难以收支平衡。由于人工智能,更广泛的经济中的生产力增长尚未观察到。
-
人工智能领域有夸大或甚至欺骗的倾向。许多声称使用了人工智能的产品被揭露实际上依赖于远程人类操作员手动完成工作。大型人工智能公告往往是不正确的(比如谷歌说一个模型学会了训练数据中没有的语言)或者被粉饰了(比如 OpenAI 说它的模型“思考”和“推理”)。
-
训练和运行人工智能模型所需的电量消耗(以及其他资源如水)受到了很多批评,有些人认为这将对环境产生有害的影响。关于人工智能资源消耗的研究和报告仍然很少,但我们可以看到这并不是一个可以忽略的数量。
-
人工智能模型与大脑结构的比较非常具有推测性。我们还没有完全理解大脑是如何工作的,因此比较往往显得牵强。对于人工智能与意识的关系也是如此——这仍然是一个没有明确答案的持续争论。
附录 A 生成式 AI 工具目录
本附录列出了在撰写时许多流行的生成式 AI 工具。我预计 AI 市场的某些部分将组织成寡头垄断,这意味着将只有少数几个关键玩家而不是众多玩家。这尤其适用于构建基础模型的公司,因为模型训练涉及高昂的一次性成本,很少有公司能够承担得起。因此,基础模型市场将类似于云计算市场,该市场由三个主要竞争对手主导。
此外,我预计在模型能力方面将出现趋同,因为不同的基础模型正变得越来越相似。似乎也存在构建多模态 AI 的趋势,因此您可能不需要使用不同的模型来处理文本、图像和视频。
在其他情况下,例如较轻的 AI 应用(例如,围绕 LLM 的简单包装)或较小的专业 AI 模型,我们可能会观察到众多竞争对手。这个市场可能类似于健身应用市场,其中有许多选择。
通用对话式 AI
让我们先看看通用 AI 聊天机器人的市场,该市场分为面向客户的 APP、专有基础模型和开源基础模型。
面向客户的 APP
-
ChatGPT——由 OpenAI 开发的人工智能助手。它基于免费增值模式(免费访问某些功能,以及每月订阅以访问额外功能)。它可以在
ChatGPT.com
访问。 -
Claude——由前 OpenAI 员工创立的 AI 公司 Anthropic 开发的人工智能助手。它基于免费增值模式,可以在
claude.ai
访问。 -
Gemin——由谷歌的子公司 Google DeepMind 开发的人工智能助手。它基于免费增值模式,可以在
gemini.google.com
访问。 -
Microsoft Copilot——由微软开发的人工智能助手。它基于免费增值模式,可以通过各种微软应用程序访问,例如 Word 和 Excel,以及直接通过浏览器在
copilot.microsoft.com
访问。您还可以直接从 Windows 11 任务栏访问 Copilot,并且一些电脑已经在键盘上配备了专门的 Copilot 键。 -
Perplexity AI——一个免费增值 AI 聊天机器人,旨在用作搜索引擎。它依赖于各种基础模型,包括一些由其他公司(如 OpenAI 和 Anthropic)制造的基础模型。它可以在
perplexity.ai
使用。
基础模型(专有)
-
GPT——由 OpenAI 开发的一系列通用、多模态模型,包括 GPT-4 和 GPT-4o。它们可以通过 OpenAI API 访问。其中一些模型为面向客户的 ChatGPT 提供动力。
-
Gemin**i—由 Google 开发的一系列通用、多模态模型,包括 Gemini 1.5 Flash 和 Gemini 1.5 Pro,前者比其 Pro 版本更快但功能较弱。Gemini 模型为 Google 的客户界面 Gemini 提供动力。
-
Claud**e—由 Anthropic 开发的一系列通用、多模态模型,包括 Claude Haiku、Claude Sonnet 和 Claude Opus(按复杂性递增)。它们可以通过 Anthropic API 访问。其中一些模型为面向客户的 Claude 提供动力。
基础模型(开源)
-
Llama—由 Meta 开发的一系列通用、多模态模型。模型架构及其参数是公开的,但训练数据尚未公开。这些模型在称为 Meta Llama Community License 的特殊用途许可证下发布,该许可证施加了一些使用限制。
-
DeepSeek—由中国的 AI 公司 DeepSeek 开发的一系列模型。其最突出的模型 DeepSeek-V3 因其性能出色且训练成本远低于竞争对手而成为头条新闻,导致英伟达的股价下跌。运行该模型的代码是公开的,但训练代码和训练数据尚未公开。其许可证是许可性的,但施加了一些使用限制。
-
Mistral—由法国公司 Mistral AI 开发的一系列模型,该公司成立是为了成为 OpenAI 的欧洲竞争对手。公司发布仅包含文本的模型(例如,Mistral Large 2)和具有视觉能力的模型(例如,Pixtral 12B)。它们在高度许可的 Apache 2.0 许可证下发布,但训练数据尚未公开。
-
Gemma—由 Google 开发的一系列通用模型,作为其专有 Gemini 模型的开源替代品。一些模型仅处理文本(例如,Gemma 2),而其他模型可以处理输入图像(例如,PaliGemma)。这些模型在许可性 Apache 2.0 许可证下发布,但训练数据尚未公开。
-
Phi—由 Microsoft 开发的一系列轻量级通用语言模型,包括 Phi-3 Mini 和 Phi-3 Medium。它们在许可性 MIT 许可证下发布,但训练数据尚未公开。
编码助手
以下是一些帮助软件工程师编写代码的流行工具:
-
GitHub Copilot—一个可以安装为多个流行 IDE 插件的 AI 编码助手。它可以通过两种不同的方式使用。一种方式是在聊天窗口中输入以与聊天机器人交互并询问有关代码的问题或要求它执行任务。另一种方式是助手在您输入代码时自动完成您的代码——您可以通过按键盘上的 Tab 键接受建议。您必须支付月度订阅费才能使用它,但提供免费试用。
-
Curso**r—一个独立的、基于 AI 的 IDE,建立在 Visual Studio 之上。您可以与 AI 助手聊天或通过按 Tab 键接受代码自动完成。有一个免费版本,带有有限的完成次数,以及付费订阅,提供更多次数或无限次数的完成。
-
JetBrains AI Pr**o—PyCharm 和 IntelliJ 等流行 IDE 背后的公司提供附加订阅服务以访问 AI 助手。您可以与助手聊天关于代码,也可以通过按 Tab 键接受自动完成。这些自动完成由其基于云的 LLM 提供支持,但未订阅 AI 附加组件的用户仍然可以从本地运行的简单自动完成中受益。用户必须支付月度许可证才能将 AI 助手添加到其 IDE 中。
图像生成
我们现在讨论用于图像生成的 AI,分为面向客户的 APP、专有基础模型和开源基础模型。
面向客户的 APP
-
Midjourne**y—一种从文本描述生成图像的工具(可选地参考图像以影响输出)。该 APP 直接在 Midjourney 的网站上使用(
midjourney.com
)或通过 Discord 聊天。该 APP 最初生成四个不同尺寸为 1024 × 1024 的图像变体。然后您可以挑选您最喜欢的一个,对其进行细化,并增加其大小(或进行超分辨率)。您必须支付月费才能访问 Midjourney,不同的计划有不同的使用限制。 -
Dall-**E—OpenAI 的旗舰文本到图像 APP。它现在已经集成到 ChatGPT 中,因此可以直接通过要求 ChatGPT 生成图像来使用(尽管 OpenAI 仍然在
chatpgt.com
上提供专门的 DALL-E 界面)。只有付费的 OpenAI 订阅者才能访问它。
基础模型(专有)
-
Dall-**E—OpenAI 为其图像生成模型提供 API 访问权限。用户按生成的图像付费,价格根据模型版本和图像大小而变化。
-
Flux.1 Pr**o—由 Black Forest Labs 开发的一种文本到图像模型,因其逼真度而受到赞誉。它可以通过与 Black Forest Labs 合作的各种 API 提供商访问,包括 Replicate 和 Together AI。
基础模型(开源)
-
Stable Diffusio**n—Stability AI 开发的一系列文本到图像模型,采用扩散方法构建(见第一章)。除了使模型公开可用外,该公司还发布了用于训练其模型的数据以及用于过滤和精选数据的算法。Stable Diffusion 在开源许可下发布,但有使用限制。特别是,用户不允许“生成或传播可验证的虚假信息”、“伤害未成年人”或“提供医疗建议”,以及其他限制(
mng.bz/YDpe
)。 -
Flux.1 Schnell 和 Flux.1 Dev—这些模型是从专有的 Flux.1 Pro 衍生出来的,由 Black Forest Labs 开源。Flux.1 Schnell 在 Apache 2.0 许可下发布。更强大但速度较慢的 Flux.1 Dev 在禁止商业使用的许可下发布。训练数据尚未公开。
DIY
我们以一些常用的工具和库结束,这些工具和库可以用于微调或创建您自己的 AI 模型:
-
Hugging Face—这家公司托管了 AI 模型的实际仓库。开源模型通常在那里发布。公司还维护了一系列库,包括Transformers,这有助于使用预训练模型。公司还维护了帮助轻松微调模型的库。
-
PyTorch—一个流行的 Python 库,用于创建和训练机器学习模型。历史上,PyTorch 受到学术界的青睐,他们使用这个库快速原型设计和分析模型,尽管它在其他地方似乎越来越受欢迎。Hugging Face 的 Transformers 库建立在 PyTorch 之上。
-
TensorFlow—PyTorch 的一个流行替代品。它通常受到在生产中部署高性能 ML 模型的人的青睐,尽管它似乎正在失去对 PyTorch 的流行度。OpenAI 公开了 GPT-2 模型的代码,该模型使用 TensorFlow (
github.com/openai/gpt-2/
)。从那时起,OpenAI 将其首选库切换为 PyTorch (openai.com/index/openai-pytorch/
)).
索引
符号
--无参数
A
准确度
亚马逊
自回归
人工智能(AI)
大脑与意识, 第 2 版
人工智能(AI)
LLM 包装器, 第 2 版
大脑与意识, 第 2 版
基于 AI 的产品构建, 第 2 版
争议与讨论
对话式人工智能, 第 2 版
卷积, 第 2 版
版权, 第 2 版
经济学, 第 2 版
嵌入, 第 2 版
机器学习, 第 2 版
多模态人工智能, 第 2 版
性能指标, 第 2 版
选择和评估工具
自动驾驶汽车, 2nd
严格控制, 2nd
令牌, 2nd
Transformer 架构, 2nd
验证, 2nd
何时使用
自动化
大规模失业和, 2nd
人工神经网络
注意力机制
AI 工具
面向客户的 AI 应用与基础模型
选择专有和开源
现成产品与微调, 2nd
专有与开源, 2nd
B
批量
Boto3 库
构建基于 AI 的产品
可解释性
幻觉
将 AI 放在客户之前, 2nd
大脑与意识, 2nd
按令牌计费
字节对编码
C
版权, 2nd
上下文化, 2nd
多头注意力, 2nd
多层架构, 2nd
卷积神经网络(CNNs), 2nd
卷积, 2nd
面向客户的 AI 应用
聊天
聊天模式
原因
世界模型不足
目标不一致
价格优化
世界模型
完成模式
对话式 AI, 2nd
描述任务和验证输出, 2nd
优秀的工作, 2nd
先前的工作, 2nd, 3rd, 4th
交叉熵损失
思维链提示, 第 2 版
条件扩散模型
连接组
碳强度
上下文窗口
竞争优势, 第 2 版
D
dropout
判别模型
数据集
深度学习
维度
点积
E
文本结束
嵌入
嵌入, 第 2 版
LLMs 和分析单个字母的挑战
初始
机器学习和
有用性
可视化
卓越差距, 第 2 版
在软件工程中, 第 2 版
利用
探索
周期
提前停止
外部软件函数
F
基础模型, 第 2 版
少样本提示
微调, 第 2 版
功能标志
合理使用
G
get_current_weather 函数, 第 2 版
GraphHopper
生成式 AI
GPT-2
Google 地点 API
H
哈兹利特,亨利
幻觉, 第 2 版, 第 3 版
原因, 第 2 版
对产品的影响, 第 2 版
问题的错误解决方案, 第 2 版
与...共存
编造的事实
误解
缓解措施, 第 2 版
过度自信
不可预测性
它们会消失吗?
I
图解 Transformer(书籍)
对工作的影响
使网络更具人性
输入提示
将文本细分为有效标记
推理时间
InstructGPT
J
工作
L
损失
LSTM(长短期记忆)
局部最小值
语言
除了英语之外
LLM 包装器
使用自然语言与产品交互
LLMs(大型语言模型), 第 2 次, 第 3 次
调用外部软件函数
聊天
文本结束
对标记的需求
检索增强生成
在分析单个字母时遇到困难
系统提示
文本生成
训练, 第 2 次
可学习参数
LLM(大型语言模型)包装器, 第 2 次
使用自然语言与产品交互
LLM 包装器
更新范围有限
对数损失
M
编造的事实
多智能体 AI
多模态 AI, 第 2 次
多层架构
小批量
模型验证、选择和测试, 第 2 次
测试集
训练集
验证集
大规模失业, 第 2 次
MVP(最小可行产品)
护城河
模型选择
机器学习
深度学习
嵌入
损失
随机梯度下降, 第 2 次
训练 LLMs, 第 2 次
类型, 第 2 次
Mechanical Turk, 第 2 次
平均绝对误差(MAE)
目标不一致
机器学习(ML), 第 2 次
架构, 第 2 次
深度学习
损失
随机梯度下降(SGD), 第 2 次
训练大型语言模型(LLMs), 第 2 次
类型, 第 2 次
多头注意力
误解
MAE(平均绝对误差), 第 2 次
Maggiori, Emmanuel
N
国家安全局(NSA)
无免费午餐定理
O
开源 AI, 第 2 次
在专有和开源之间做出决定
现成与微调, 第 2 次
在两者之间做出决定, 第 2 次
OpenAI o1 模型
过度自信
运筹学
过拟合, 第 2 次
P
性能指标, 第 2 次
MAE, 第 2 次
RMSE, 第 2 次
准确性, 第 2 次
精确度, 第 2 次, 第 3 次, 第 4 次
召回率, 第 2 次, 第 3 次, 第 4 次
提示
提示工程
专有 AI, 第 2 次
在专有和开源之间做出决定
预测
精确度, 第 2 次
价格优化
参数
隐私
投影
Q
QA(质量保证)团队
R
RMSE(均方根误差), 第 2 次
检索
均方根误差(RMSE)
RLHF(带人类反馈的强化学习), 第 2 次, 第 3 次
强化学习(RL)
强化学习, 第 2 次
召回率, 第 2 次
RAG(检索增强生成), 第 2 次, 第 3 次
资源消耗, 第 2 次
可复现的输出
正则化
奖励模型
检索增强生成(RAG), 第 2 次
监管
基础模型
高风险系统
禁止的 AI 实践
透明度义务
S
自动驾驶汽车, 第 2 次
软件工程, 第 2 次
验证, 第 2 次
智能直到愚蠢(Maggiori)
监督学习
SMOTE(合成少数类过采样技术)
奇点事件
SGD(随机梯度下降), 第 2 次
系统提示
自监督学习
将输入提示细分为有效标记
问题解决方案,错误, 第 2 次
模拟数据
T
Top-k 设置
文本生成
温度
Top-k 设置
Top-p 设置
测试集
类型
强化学习, 第 2 次
自监督学习, 第 2 次
模拟数据, 第 2 次
监督学习, 第 2 次
无监督学习, 第 2 次
Transformer 架构, 第 2 次
上下文化, 第 2 次, 第 3 次, 第 4 次
初始嵌入, 第 2 次
了解更多关于, 第 2 次
预测, 第 2 次
可复现的输出, 第 2 次
温度, 第 2 版
Top-p 设置
训练数据
严格控制, 第 2 版
在软件中, 第 2 版
推荐, 第 2 版
TDD(测试驱动开发)
透明度义务
训练集
标记, 第 2 版, 第 3 版
按计费
除英语以外的语言
需要
将输入提示细分为有效标记
训练时间
U
无监督学习
欠拟合
不可预测性
V
验证集
验证, 第 2 版
在软件工程中, 第 2 版, 第 3 版, 第 4 版
推荐, 第 2 版, 第 3 版, 第 4 版
可视化
嵌入
W
Waymo
世界模型, 第 2 版
X
XAI(可解释人工智能)
Z
零样本提示