<p id="34LNBNU9">作者 | Thomas Betts、Anthony Alford</p><p id="34LNBNUA">译者 | 平川</p><p id="34LNBNUB">策划 | Tina</p><p id="34LNBNUC">本文要点</p><p><ul><li id="34LNBNVD">“人工智能”一词通常是指生成式人工智能(genAI),因为这是人们所熟悉的最常见的实现方式。</li><li id="34LNBNVE">LLM,像任何 ML 模型一样,获取输入,提供输出,就像一个你可以通过 API 调用的函数。</li><li id="34LNBNVF">在应用程序中使用 LLM 之前,务必定义一个成功的标准。</li><li id="34LNBNVG">要提升 LLM 的效果,如果提示工程还不够的话,那么检索增强生成(RAG)是你早期应该采用的步骤。</li><li id="34LNBNVH">向量数据库提供最近邻搜索,这有助于查找要用于 LLM 上下文的相关内容。</li></ul></p><p id="34LNBNUD">简介</p><p id="34LNBNUE"><strong>Thomas Betts</strong>:大家好。在 InfoQ,我们一直致力于向读者提供最新的软件创新和趋势信息。我知道,有时候新消息满天飞,我们主要关注那些与我们目前正在从事的工作密切相关的主题,或是我们感兴趣的主题。有时,你可能会意识到,一些你以前可以置之不理的东西,现在已经不容忽视了。我承认,对于过去十年间的很多新闻,关于大数据、机器学习、人工智能,我都是这么看的。我发现这很有趣,但因为那不是我的工作,所以我对大多数主题的理解都很浅。这没什么问题。通常来说,软件架构师就是这么处理问题的。</p><p id="34LNBNUF">我们所掌握的知识往往呈 T 形。我们需要了解的学科范围很广,但通常,我们只深入了解其中的几个,除非我们不得不再去深入地了解其他学科。我认为,这就是 ML 和 AI 的发展现状。那不再是一件无关紧要的事。架构师每天都要面对它们。因为产品负责人、首席技术官、首席执行官,甚至我们的客户都在问,“能加入一些人工智能功能吗?”</p><p id="34LNBNUG">就是这样,我想到了今天的节目。我邀请了 Anthony Alford 来帮助解释一些与 ML 和 AI 相关的概念。我认为,这些概念现在是成为一名高效的软件架构师所必备的知识。Anthony 的声音可能听起来很熟悉,因为他也是 InfoQ 的编辑。他和 Roland Meertens 共同主持了 Generally AI 播客,那个节目刚刚开始第二季。Anthony,感谢你参加我的 InfoQ 播客节目。</p><p id="34LNBNUH"><strong>Anthony Alford</strong>:谢谢你们的邀请。</p><p id="34LNBNUI"><strong>Thomas Betts</strong>:对于我们今天的讨论,我做了一个很大的人工智能词汇表。里面有很多术语,我认为,架构师需要理解这些术语是什么,然后弄清楚自己需要了解多少,才能与同事进行明智的对话。我想,今天我们可以提供足够的信息,使架构师们有能力进行那样的对话,并且能够认识到,当出现什么情况时,他们就必须开始将其用于项目或思考设计。使他们了解更多的背景信息,这将帮助他们在做进一步研究时取得更大的成功。这样行吗?</p><p id="34LNBNUJ"><strong>Anthony Alford</strong>:听起来不错。</p><p id="34LNBNUK">AI 通常指深度学习或神经网络</p><p id="34LNBNUL"><strong>Thomas Betts</strong>:首先,请说出你的定义,什么是 AI?</p><p id="34LNBNUM"><strong>Anthony Alford</strong>:AI 就是人工智能。</p><p id="34LNBNUN"><strong>Thomas Betts</strong>:好吧,今天的节目就到这里。</p><p id="34LNBNUO"><strong>Anthony Alford</strong>:言归正传。事实上,当我与人们谈论这个问题时,我会说,“对于你试图解决的问题,AI 确实会告诉你更多你不知道的困难”。它不是一个实际的解决方案。好消息是,大多数人在谈论 AI 时,他们实际上是在谈论某种类型的机器学习。毫无疑问,机器学习是一项技术,而且是一个经过充分研究、明确定义的科学分支。事实上,现在大多数人所说的机器学习是深度学习,也称为神经网络。它早在 20 世纪 50 年代就出现了,因此人们对它进行了广泛的研究。</p><p id="34LNBNUP">ML 模型不过是接受输入并提供输出的函数</p><p id="34LNBNUQ"><strong>Thomas Betts</strong>:是的,我认为人工智能不是一种你可以买到的产品。你可以买一个机器学习模型。你可以构建一个机器学习模型。你可以将其添加到你的系统中,但你不能只是说,“我想要一个 AI”。但人们就是这么谈论它的。接下来,让我们开始讨论些已经存在的东西,有形的部分。请举几个例子说明一下,当人们说“我想在我的系统中包含 AI”时,他们是怎么想的。他们谈论的机器学习元素是什么?</p><p id="34LNBNUR"><strong>Anthony Alford</strong>:当然,大多数人谈论的是大语言模型或生成式人工智能。作为软件开发人员,我想告诉人们的是,你可以把这些东西看作是一个函数。我们经常编写调用外部库函数的代码。在某种程度上,你可以这样想。它只是一个可以调用的函数。输入和输出都很复杂,对吧?输入可能是一张完整的图片或是一个播客音频,而输出也可能是一些比较大的东西,比如播客的文稿或摘要。</p><p id="34LNBNUS"><strong>Thomas Betts</strong>:大多数人想到生成式 AI 时都是说,给我一些文字、图片、声音。这是输入。对于机器学习模型,所有这些都会归结为 1 和 0,对吧?它会把它们分解成某种它能理解的数据并对其进行数学运算,对吧?</p><p id="34LNBNUT"><strong>Anthony Alford</strong>:是的,没错。同样,当我与软件开发人员交谈时,我说,“当你考虑这些函数的输入和输出时,它们都只是一个浮点数数组”。实际上,它可能是一个多维数组。对此,有一个抽象术语叫向量。如果你看一些常见的机器学习库,就会发现它们用到了向量这个词。它是指一个多维数组,但是你必须能够用向量来表示所有的输入和输出。</p><p id="34LNBNUU">构建 ML 模型就像编写大量的单元测试并优化函数</p><p id="34LNBNUV"><strong>Thomas Betts</strong>:是的,这些是我多年前在大学里学到的数学知识,但因为我不是数据科学家,所以我不会每天都用到这些词,我会忘记它们,“哦,是的,多维数组,我知道那是什么”。但实际上,我不需要把这话说出来。我有了作为输入的向量。接下来我该怎么做?如何构建这些模型?</p><p id="34LNBNV0"><strong>Anthony Alford</strong>:如果你真想构建自己的模型,我们可以稍后再讲,但你可能会考虑不那样做。但总的来说,这些模型的构建是一个叫做训练和监督学习的过程。从软件开发人员的角度来看,你真正需要的是一套单元测试。一个非常大的单元测试套件,也就是我们期望的函数的一些输入和预期输出。本质上讲,训练的过程是随机编写一个函数。它从一个随机函数开始,然后不断地修复该函数中的错误,直到单元测试通过。也并不是说一定要通过。你还可以告诉它,“这里有一种方法可以计算测试失败的程度,务必每次都要缩小这个数值”。</p><p id="34LNBNV1"><strong>Thomas Betts</strong>:这就用到概率了,一切都归结为数学。同样,我习惯于编写单元测试,我说,“我的输入是 A 和 B,我期望输出 C”。而你说,“这是 A 和 B,我想要 C”。但这里的问题是,你怎么知道离 C 有多远呢?</p><p id="34LNBNV2"><strong>Anthony Alford</strong>:没错,是这样。这取决于数据类型。我说过,输入和输出都变成了向量,但我们不妨假设一个最简单的情况,比如你正在构建一个输出实际数值的模型。输入是房子的平方英尺和房间的数量等,而输出是预期房价。如果你对它做单元测试,则可以用你期望的数值减去你得到的数值来衡量单元测试的偏离程度。你可以做误差平方和。这样一来,机器学习就会不断地改变函数,缩小误差平方和。对于像文本或图像这样的东西,要衡量单元测试的偏离程度可能会有点麻烦。</p><p id="34LNBNV3">语言模型是用句子训练的,用来预测句子中下一个单词出现的概率</p><p id="34LNBNV4"><strong>Thomas Betts</strong>:我们正在深入探讨生成式 AI 的所有概念。到目前为止,我们只谈了文本的例子,暂时还没有涉及音频、图像及其他的东西,因为原理都是一样的。大多数人都熟悉如何与 ChatGPT 交互。我给它输入一些东西,它给我输出一堆文本。这些文本是如何产生的?我们是如何创建这些 LLM 的,让人们可以对它们说,“当我输入这个句子,我期望这个句子得到回应”?</p><p id="34LNBNV5"><strong>Anthony Alford</strong>:好吧,你想听多长的故事?我们可以从 2017 年开始说,或者更早。</p><p id="34LNBNV6"><strong>Thomas Betts</strong>:我们看一些高层次的细节吧。我觉得,那些里程碑式的东西有助于我们了解故事的来龙去脉。</p><p id="34LNBNV7"><strong>Anthony Alford</strong>:你说的对。简单来说,像 ChatGPT 这样的东西或所谓的语言模型,函数的输入是一个单词序列或更抽象的 Token。输出是所有可能的 Token 以及它们成为下一个 Token 的概率。让我们通过一个例子来看一下。如果我输入序列“once upon a...”,下一个单词是什么?</p><p id="34LNBNV8"><strong>Thomas Betts</strong>:我猜是“time”。</p><p id="34LNBNV9"><strong>Anthony Alford</strong>:是的。LLM 会给出每一个可能的单词和它的概率,而 time 是下一个单词的概率非常高。那么像 pancake 这样的词概率就会比较低。这是一个概率分布。我们其实知道答案。在训练中我们知道,对于这个单元测试,time 这个词的概率是 100%,其他单词的概率为 0。这是一个概率分布。LLM 给出的概率分布是另一个。有一种方法可以衡量两者之间的差异,即交叉熵损失。</p><p id="34LNBNVA">借助这个方法,你就可以训练并改进它。LLM 会使 time 一词在其输出中的概率接近 100%,而其他单词的概率都为零。这是一种语言模型,它们就是利用我上面提到的方法进行训练的。你获取一大堆文本,从中生成一些序列,去掉一个或多个单词,然后再由 LLM 来填充这些单词。它的填充方式就是给出每个可能的单词的概率分布。在理想情况下,你去掉的那个单词概率最高。</p><p id="34LNBNVB"><strong>Anthony Alford</strong>:正是如此。</p><p id="34LNBNVC"><strong>Anthony Alford</strong>:是的。一般来说,如果我们要讨论数据类型的话,这是一个枚举。对于枚举数据类型,我们可以称之为分类器。你谈论的是,是狗还是猫。它会针对每个可能的输出提供一个答案。每个可能的枚举值都有一个与之相关联的概率。你想要真正的答案接近 100%,而剩下的接近零。对于文本也是一样。LLM 会将整个词汇表以概率分布的形式给出。</p>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/153670.html