Google 钻研员 François Chollet 是一位在机器学习和深度学习畛域具备关键影响力的一线工程师。他以创立盛行的开源机器学习库Keras而知名, 同时也是盛行的机器学习实战书籍《Deep Learning with Python (经常使用 Python 来深度学习)》 的作者。不久前他宣布博文:“How I think about LLM prompt engineering (大模型的提醒工程之我见)”,深化地讨论了大模型提醒工程。Chollet 从言语模型架构、学习机制和才干的演出去了解大模型的提醒工程。他特意指出大模型实践上是一个 (向量) 程序数据库,而且该数据库是延续的和内插的,因此对大模型的提醒是对其中某个程序(经过内插)来查问,所以提醒工程实践上是在向量程序空间内的搜查。提醒学习是当今大模型运行的关键模式; 这样的讨论关于大模型了解和运行都是有益的。咱们特将该内容编译进去和各位客户、协作同伴好友分享。
在 2013 年,谷歌的Mikolov 等人留意到了一些令人注目的现象。
他们过后正在构建一个将词汇中的单词嵌入到向量空间的模型——这个疑问在过后曾经有着悠久的学术历史,可以追溯到上世纪 80 年代。他们的模型经常使用了一种提升指标,旨在将单词之间的相关相关转化为嵌入空间中的距离相关:每个单词被调配一个向量,这些向量被提升,使得经常一同发生的单词的向量点积(余弦相似度)凑近 1,而很少一同发生的单词的向量点积凑近 0。
他们发现,由此发生的嵌入空间不只能够捕捉语义相似性,还具备某种涌现学习的才干——它能够启动“词算术”,而这并不是它被训练去做的事情。在空间中存在一个向量,当它加到恣意一个示意男子的名词上时,失掉的点会凑近于它的女性对应词。比如:V(国王) - V(男人) + V(女人) = V(王后)。一个“性别向量”。十分酷!仿佛有几十个这样的神奇向量——一个双数向量,一个将家养生物称号转化为其对应的宠物称号的向量等等。
图示:一个二维嵌入空间,使得将“狼”与“狗”链接的向量与将“虎”与“猫”链接的向量相反。
Word2Vec 和大言语模型:Hebbian 学习类比
期间快进十年——咱们如今曾经进入了大言语模型的时代。从外表上看,现代大言语模型与原始的 word2vec 模型仿佛齐全不同。它们能够生成流利的言语——这是 word2vec 齐全不可做到的——并且仿佛对任何话题都有必定的了解。但是,它们实践上与新鲜的 word2vec 有很多独特之处。
两者都是关于将 token(单词或子词)嵌入到向量空间中。两者都依赖于相反的基本原理来学习这个空间:一同发生的 token 在嵌入空间中会更凑近。用于比拟 token 的距离函数在两种状况下是相反的:余弦距离。甚至嵌入空间的维度也相似:大概在 10e3 或 10e4 的数量级上。
你或许会问——等等,我原告知大言语模型是自回归模型,经过基于之前的单词序列预测下一个单词来启动训练。这与 word2vec 最大化共存 token 点积的指标有什么相关呢?
实践上,大言语模型仿佛确实将相关的 token 编码在相近的位置,所以两者之间必定存在某种咨询。答案是自留意力机制。
自留意力是 Transformer 架构中最关键的组成局部。它是一种经过线性组合先前空间中的 token 嵌入来学习新的 token 嵌入空间的机制,这种组合会给曾经“更凑近”的 token(即点积更高的 token)更大的权重。它会偏差于将曾经凑近的向量拉得更近——随着期间的推移,相关相关会转化为嵌入空间中的凑近相关(以余弦距离权衡)。Transformer 经过学习一系列逐渐改良的嵌入空间来成功,每个空间都是基于对前一个空间的元素启动从新组合。
自我留意力是如何上班的:在这里,留意力分数是在“站”和序列中的一切其余单词之间计算的,而后它们被用来加权成为新的“站”向量的词向量的总和。
自留意力赋予了 Transformer 两个关键属性:
1. 它们学习的嵌入空间在语义上是延续的,即在嵌入空间中移动一点只会使相应 token 的语义稍微扭转一点。word2vec 空间也具备这个属性。
2. 它们学习的嵌入空间在语义上是可插值的,即在嵌入空间中的两个点之间取两边点会发生一个示意相应 token “两边含意”的点。这是由于每个新的嵌入空间都是经过在前一个空间的向量之间启动插值构建的。
请留意,这与大脑的学习模式十分相似。大脑中的关键学习准则是Hebbian 学习——简而言之就是“一同激活的神经元会衔接在一同”。神经激活事情之间的相关相关(或许代表举措或感知输入)转化为大脑网络中的距离相关,就像Transformer(和 word2vec)将相关相关转化为向量距离相关一样。两者都是消息空间的映射。
从涌现词算术到涌现向量程序
当然,word2vec 和大言语模型之间也存在清楚的差异。word2vec 并不是为生成文本而设计的。大言语模型要大得多,能够编码复杂得多的变换。疑问是,word2vec 确实是一个玩具模型:它之于言语建模,就像对 MNIST 图像像素启动逻辑回归之于最先进的计算机视觉模型一样。基本原理大抵相反,但玩具模型不足任何无心义的示意才干。word2vec 甚至不是一个深度神经网络——它具备浅层、单层的架构。与此同时,大言语模型具备任何人训练过的任何模型的最高示意才干——它们具备几十个 Transformer 层,总共几百层,参数数量到达数十亿。
就像 word2vec 一样,大言语模型经过将 token 组织到向量空间中来学习有用的语义函数。但由于示意才干的提高和更精细的自回归提升指标,咱们不再局限于像“性别向量”或“双数向量”这样的线性变换。大言语模型可以存储恣意复杂的向量函数——实践上,将它们称为向量程序比函数更准确。
word2vec 使你能够启动一些基本操作,比如 plural(猫) → 猫们,或许 male_to_female(国王) → 女王。而大言语模型则可以启动纯正的魔法操作——比如 write_this_in_style_of_shakespeare(“...你的诗...”) → “...古诗...”。它们蕴含了数百万这样的程序。
大言语模型作为程序数据库
你可以将大言语模型视为相似于数据库:它存储消息,你可以经过提醒来检索这些消息。但大言语模型和数据库之间有两个关键的区别。
第一个区别是,大言语模型是一种延续的、可插值的数据库。数据不是以一组团圆的条目存储,而是存储在一个向量空间——一条曲线上。你可以在曲线上移动(它是语义延续的,正如咱们所讨论的)来探求左近的相关点。你可以在不同的点之间启动插值,以找到它们的两边点。这象征着你可以从数据库中检索到比你输入的更多的消息——但并不是一切的消息都是准确的或无心义的。插值或许造成泛化,但也或许造成幻觉。
但是,这些程序并不是你所习气解决的那种。你或许会想到确定性的Python 程序——一系列符号语句逐渐解决数据。但并不是这样。相反,这些向量程序是高度非线性的函数,它们将潜在的嵌入空间映射到其自身。相似于 word2vec 的神奇向量,但要复杂得多。
要从大言语模型中失掉消息,你必定提醒它。假设大言语模型是一个蕴含数百万向量程序的数据库,那么提醒就像是在该数据库中的搜查查问。提醒的一局部可以被解释为“程序键”,即你想要检索的程序的索引,另一局部可以被解释为程序的输入。
思索以下提醒示例:“用莎士比亚的格调重写以下诗歌:...我的诗...”
“用 ... 格调重写”是程序键。它指向程序空间中的特定位置。
“莎士比亚”和“...我的诗...”是程序输入。
大言语模型的输入是程序口头的结果。
如今,请记住,大言语模型作为程序数据库的类比只是一种思想模型——还有其余模型可以经常使用。一个更经常出现的模型,但不太具备启示性,是将大言语模型视为自回归文本生成器,依据训练数据散布输入最有或许追随提醒的单词序列——即关注大言语模型被提升的义务。假设你在思索大言语模型的上班模式时,能记住多种模型,你会更好地理解它们——宿愿你会发现这个新的模型有用。
提醒工程作为程序搜查环节
记住,这个“程序数据库”是延续的和可插值的——它不是一个团圆的程序集。这象征着一个稍微不同的提醒,比如“用 x 的格调从歌词上从新表述这段文本”,依然会指向程序空间中十分相似的位置,失掉的程序行为会十分凑近但不齐全相反。
你可以经常使用数千种不同的变体,每个变体都会造成一个相似但不齐全相反的程序。这就是为什么须要提醒工程。你的第一次性尝试、直觉上的程序键没有理由在指标义务上发生最佳的程序。大言语模型不会“了解”你的意思,而后以最佳模式口头它——它只会检索你的提醒所指向的程序,而你的提醒或许指向了泛滥或许的位置中的一个。
提醒工程是一个在程序空间中搜查的环节,指标是找到在你的指标义务上体现最佳的程序。这与你在谷歌搜查软件时尝试不同的关键词没有什么不同。
假设大言语模型真的了解你通知它们的内容,那么就不须要这个搜查环节了,由于关于你的指标义务的消息量不会由于你的提醒中经常使用“重写”而不是“从新表述”,或许你能否在提醒前加上“逐渐思索”而扭转。永远不要假定大言语模型第一次性就“了解”了——记住,你的提醒只是有限程序陆地中的一个地址,它们都是经过自回归提升指标将 token 组织到向量空间中的副产品。
自始自终,了解 LLM 最关键的准则是你应该抵抗将它们拟人化的诱惑。
本文转载自,作者: