前言
本文是吴恩达(Andrew Ng)的视频课程《Generative AI for Everyone》(给所有人的生成式 AI 课)的学习笔记。由于原课程为全英文视频课程(时长约 3 个小时),且国内访问较慢,阅读本文可快速学习课程内容。
课程介绍
本课程帮助大家了解生成式人工智能的工作原理,以及如何在生活和工作中使用它。适合任何有兴趣了解生成式人工智能在当前和未来的用途、影响和底层技术的人。它不需要任何编码技能或事先了解人工智能知识。
课程分为三个部分,每个部分约 1 个小时,我会结合课程内容进行相关的解读和筛选,以便国内用户更好地理解。
- 第一部分
- 第二部分
- 第三部分(待发布)
第二部分
软件应用
在软件应用中使用生成式 AI
假设我们要搭建一个读取餐厅评论的系统,在几年前,可能需要编写大量的代码,需要机器学习工程师使用监督学习算法编写。首先,需要收集成百或上千的数据,并打上标签。例如,评论是“这是我吃过的最好的汤圆”,会被标记为正面评价。而“不值得等待”则会被标记为负面评价。然后我们需要人工智能团队来训练人工智能模型,最后还需要像 AWS、阿里云这样的云服务商来部署和运行模型。这个过程通常需要几个月的时间。
相比之下,如果使用基于提示的开发,只需要类似下面这样的代码。
使用监督学习来构建情感分析系统的传统方法,该项目可能需要花费一个月的时间才能获得数千个带有标签的数据,收集数据后,团队可能要花三个月的时间来训练模型,然后再花三个月的时间来部署它并确认它运行良好。而基于提示算法的 AI,可能只需要几分钟到几个小时来确认提示词,并在几个小时或几天内部署模型。
构建此类应用程序的准入门槛的降低正在导致更多的人工智能应用程序蓬勃发展。
生成式人工智能项目的生命周期
构建生成式 AI 项目的生命周期为:首先,我们将确定项目的范围,以决定我们希望该软件做什么。下一步即实际尝试实现它。正如前面提到的,构建生成式 AI 程序非常容易,通常会很快地构建一个原型,然后计划随着时间的推移改进这个软件原型。最初的初始原型可能并不那么好。但是,快速构建它可以让我们将其纳入内部评估,我们可以建立自己的内部团队,测试系统以查看它给出正确回应的频率。根据我们在内部发现的问题,我们将回过头来继续改进系统。正如之前提到的,编写提示是一个高度迭代的过程,你必须尝试一些东西,看看它是否有效,然后进行改进。经过充分的内部评估,确信系统运行良好,然后我们将在更大范围内部署它并继续监控其性能。
除了更新提示之外,接下来我们还将讨论一些其他的工具来改善生成式 AI 的性能。例如,Retrieval Augmented Generation(RAG,检索增强生成),它允许 LLM 访问外部数据源。Fine-tune models(微调模型),它允许你根据任务调整 LLM。Pretrain model(预训练模型)是指从头开始训练 LLM。
成本
接下来让我们看看在应用中使用 LLM 的实际成本。
开发人员会在代码中调用 LLM,如上图所示,OpenAI/GPT3.5 每 1,000 个 tokens 收费 0.2 美分。GPT4 的成本要高得多,每 1,000 个 tokens 有 6 美分。严格来说,这些大语言模型也会按提示的长度收费,但是提示的长度(有时称为输入)几乎总是比输出成本便宜,所以我们现在只关注输出 tokens 的成本。
那什么是 tokens 呢?tokens 大致上要么是一个单词,要么是一个单词的一部分。就平均而言,在大量文本文档中,每个 tokens 大约是单词的 3/4。如果你要生成 300 个单词,那将花费你大约 400 个 tokens。从直觉上来说,tokens 的数量大致等于单词的数量,但稍大一点,它比单词数多了大约 33%。
先进技术:超越提示
RAG
RAG(检索增强生成)技术除了从互联网或其他开源数据中学到的知识之外,它还可以为 LLM 提供额外的知识,从而极大地扩展 LLM 所能做的事情。
例如,如果我们询问一个通用聊天系统,“员工有停车位吗?”,它可能会回答:“我需要你们工作场所的更多信息。”因为它不清楚我们工作场所的停车政策。但是 RAG 可以为 LLM 提供更多的信息,例如我们的停车政策。
那 RAG 是如何工作的呢?它有三个步骤。第一步,给出一个问题。它将首先浏览一系列可能有答案的文档。然后第二步是将检索到的文档合并到更新的提示词中,使用上下文来给 LLM 提供更多的背景信息。最后,我们添加最初的问题。这就被称为检索增强生成(RAG)。我们通过检索相关上下文或相关信息并在提示中添加其他文本来增强生成文本的方式。
RAG 检索增强生成是一项重要的技术,它使许多 LLM 能够获得除在开放互联网上可能学到的内容之外的其他背景信息。例如,许多公司的聊天 AI 允许用户上传文档并进行提问,它们使用 RAG 来阅读文档并生成答案。RAG 还带来了新的网络搜索形式。例如,微软 Bing 有聊天功能。
我们可以不要将 LLM 视为知识库,而是将其视为推理引擎。LLM 可能已经在互联网上阅读了很多文本,因此人们很容易认为他们知道很多事情,他们确实知道,但他们并不什么都知道。使用 RAG,我们在提示本身中提供相关的背景信息,并要求 LLM 阅读这些文本,然后对其进行处理以获得答案。
微调
RAG 提供了一种向 LLM 提供额外信息的方法,还有另一种被称为微调(Fine-tuning)的技术,这是向其提供更多信息的另一种方法,特别是上下文更大的场景。
例如,假设我想修改 LLM,使之对所有事情都保持持续的积极和乐观态度。我们可以用微调的技术来让 LLM 多学一点,改变其输出。为了对 LLM 进行微调,我们会想出一组积极、乐观态度的句子或文本。如果以一个经过数千亿字预训练的 LLM 为例,我们再对其进行微调,比如说 10,000 个单词或更多,甚至可能是 100 万个单词。对这个规模相对适中的数据集进行微调可能会改变 LLM 的输出,从而使其采取这种积极、乐观的态度。
微调有一类有用的应用是当任务不容易在提示词中定义时。例如,我们有数百份人类专家撰写的特定风格的摘要,那么这将改变 LLM 以你想要的风格撰写摘要的能力。
第二类微调的应用是帮助 LLM 获得新的知识领域。例如,如果希望 LLM 能够阅读和处理医疗记录,医生写的关于患者的医疗记录可能包含很多特殊缩写,如 SOB、DOE、PE 等。如果使用通用的 LLM,它可能不太擅长处理这些文字。如果根据医疗记录集对 LLM 进行微调,那么 LLM 可以更好地吸收这些关于医疗记录的知识。然后,可以在它之上构建其他应用程序,以更好地理解医疗记录文件。
最后,微调 LLM 的另一个原因是使用较小的模型来执行以前可能需要更大模型的任务。例如,我们可以使用一个只有十亿参数或更少的小模型,它们可以在笔记本电脑上更轻松地运行。它们不如 1000 亿参数的大模型那么“聪明”,但如果我们对其进行微调,就可以很好的完成不太复杂的任务。
LLM 预训练
我们一直在使用的许多 LLM 之前都经过训练,或者我们说是由某家公司(通常是大型科技公司)进行预训练的。什么时候应该预训练自己的模型?事实证明这太昂贵了。不建议这样做,但是让我们深入了解一下。
许多团队一直在通过学习互联网上的文本来预先训练通用 LLM。这些训练超大型语言模型的工作可能要花费数千万美元,需要一个庞大的专业工程团队,需要数月的时间和大量的数据。许多团队一直在开源此类模型,这对人工智能社区做出了巨大贡献。对于许多实际应用,除非有大量的资源和大量的数据,否则从其他人预先训练过的 LLM 开始可能更实用。比如说,一个通用 LLM,它从大量互联网数据中吸取了经验,然后根据自己的数据对其进行微调。这通常会带来相当不错的表现,也要经济得多。
选择模型
使用 LLM 构建软件应用程序时,会发现有很多不同的 LLM。有大型的,有小型的,有开源的,有闭源的。如何从这些不同的模型中进行选择?我们有一些指导方针。
估计 LLM 能力的一种方法是查看模型规模。粗略地说,在十亿个参数范围内的模型,我们会发现它们通常擅长模式匹配,并且对世界有一些基本的了解。如果你想要对餐厅的评论进行情绪分类,那么十亿个参数的模型只要对食物词汇类型有基本的了解,可能就能做得很好。当模型具有 100 亿个参数时,它会有更多的对世界的知识。因此,如果你想构建一个食品订单聊天机器人, 一个 100 亿个参数的模型可能就没问题。然后,超过 1000 亿个参数的超大模型,往往具有丰富的世界知识,它们会了解更多关于物理学、哲学、历史等知识,而且也擅长复杂的推理。
不过,使用 LLM 进行开发通常是一个实验过程。因此,很难事先知道给定 LLM 的确切表现。需要不断地测试,并找出最适合的选项。
需要做的另一个决定就是使用开源模型还是闭源模型。闭源模型通常可以使用云编程接口访问,它们很容器构建到应用程序中。当今许多最大最强的模型往往都是闭源模型。它们的运行成本也相对较低,但缺点是存在供应商锁定的风险。相比之下,现在还有许多开源模型可用,使用开源模型的好处是可以完全控制,也可以在自己的设备上运行。使用开源模型还可以保留对数据隐私和数据访问的完全控制。
LLM 如何遵循指令
我们一直认为 LLM 从互联网上的许多文本中学到了预测下一个单词。但是,当你提问时,它不仅能预测下一个单词,实际上会遵循你的指示。它是怎么做到的?接下来我们将讨论一种叫做指令调整(instruction tuning)的技术,它使得 LLM 能够做到这一点。还有一种叫做 RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)的技术,即从人类反馈中进行强化学习,它有助于提高 LLM 输出的安全性。
指令调整
对已经预训练好的 LLM,我们可以准备一系列的数据集,它们根据我们的指示对问题好的答案进行微调。我们将把它变成一组输入 A 和输出 B,其中,输入 A 就是问题的提示词,输出 B 就是好的答案。当根据提示和良好答案的数据集对 LLM 进行微调时,LLM 不仅会学会预测互联网上的下一个单词,还能回答你的问题并遵循你的指示。
RLHF
许多训练 LLM 的公司都希望 LLM 给出有用(Helpful)、诚实(Honest)和无害(Harmless)的结果。有时我们称之为 3H,而 RLHF 技术就是尝试实现这一目标的一种方法。
RLHF 的第一步是训练答案质量模型。换句话说,我们会用监督学习对 LLM 的答案进行评分。例如,给出“我如何申请工作?”的提问,我们可能让 LLM 生成多个回复。如 “我很乐意提供帮助,以下是一些实用的步骤 …”,第二种它可能说:“尽力而为 …”,第三种可能是:“没有希望,为什么要麻烦?…” 这显然不是一个很好的回应。然后,我们会让人类根据 LLM 输出回答,从有用、诚实和无害程度来进行评分,这样第一个可能会获得最高分,第二个获得中等分数,第三个获得最低分。如果我们将回答和分数作为监督学习算法的输入 A 和输出 B,那么我们可以使用监督模型来训练 AI 模型。
RLHF 流程的第二步是让 LLM 继续为许多不同的提示生成大量答案。我们现在有了这个 AI 模型,可以自动对 LLM 生成的每一个响应进行评分,这可以用来调整 LLM 以生成更多的响应,获得更高的分数。通过让 LLM 学会生成更高分数的答案,LLM 会自动学会生成更有用、更诚实、更无害的回应。
第二部分完。