如何看待大型语言模型的Prompt
发布时间:2024年06月06日
回顾:Word2Vec中涌现的词语算术
他们正在构建一个模型,将单词嵌入到向量空间中——这个问题在当时已经有了悠久的学术历史,始于1980年代。他们的模型使用了一个优化目标,旨在将单词之间的相关关系转化为嵌入空间中的距离关系:每个单词都与一个向量相关联,这些向量经过优化,使得代表频繁共现单词的向量之间的点积(余弦接近度)更接近1,而代表罕见共现单词的向量之间的点积更接近0。
他们发现,生成的嵌入空间不仅能捕捉语义相似性,还具有某种形式的涌现学习能力——它能够执行“词算术”,这是它未经训练就能做到的事情。在这个空间中存在一个向量,可以加到任何男性名词上,得到的点会靠近其女性等价物。例如:V(国王) - V(男人) + V(女人) = V(女王)。一个“性别向量”。非常酷!似乎有许多这样的神奇向量——复数向量,从野生动物名称到最接近的宠物等价物的向量,等等。
Word2Vec与LLMs:赫布(Hebbian learning)学习类比
快进十年——我们现在正处于大型语言模型(LLMs)的时代。从表面上看,现代的大型语言模型与原始的word2vec模型似乎完全不同。它们能够生成完全流畅的语言——这是word2vec完全做不到的壮举——并且似乎对任何话题都了如指掌。然而,它们实际上与老朋友word2vec有很多共同之处。
两者都涉及将标记(单词或子词)嵌入到向量空间中。两者都依赖于相同的基本原则来学习这个空间:一起出现的标记在嵌入空间中最终会靠得很近。用于比较标记的距离函数在两种情况下都是相同的:余弦距离。即使是嵌入空间的维度也是相似的:大约在10e3或10e4的数量级。
你可能会问——等等,我被告知LLMs是自回归模型,它们被训练用来预测基于之前单词序列的下一个单词。这和word2vec的目标——最大化共现词汇之间的点积——有什么关系呢?
在实践中,大型语言模型确实似乎在接近的位置编码了相关的标记,因此必然存在某种联系。答案就是自注意力。
自注意力是Transformer架构中最重要的单一组件。它是一种通过线性重新组合来自某个先前空间的令牌嵌入,以加权组合的方式学习新的令牌嵌入空间的机制,这种组合赋予了更大的重要性给那些已经“更接近”彼此的令牌(即,具有更高点积的令牌)。它会倾向于将已经接近的令牌的向量拉近——随着时间的推移,令牌相关性关系会转变为嵌入邻近性关系(就余弦距离而言)。Transformer通过学习一系列逐步精细化的嵌入空间来工作,每个空间都基于从前一个空间重新组合元素。
自注意力赋予了Transformer两个关键属性:
1. 它们学习的嵌入空间在语义上是连续的,即在嵌入空间中稍微移动一点,只会稍微改变相应标记的面向人类的含义。word2vec空间也验证了这一属性。
2. 它们学习的嵌入空间在语义上是可插值的,即在嵌入空间中两点之间取中间点会产生一个代表相应标记之间“中间含义”的点。这是因为每个新的嵌入空间都是通过对前一个空间中的向量进行插值来构建的。
这与大脑学习的方式有些相似,请注意。大脑中的关键学习原则是赫布学习——简而言之,“一起放电的神经元会一起连接”。神经元放电事件(可能代表动作或感知输入)之间的相关关系被转化为大脑网络中的邻近关系,就像Transformer(以及word2vec)将相关关系转化为向量邻近关系一样。两者都是信息空间的映射。
从兴起词算术到兴起向量程序
当然,word2vec和大型语言模型(LLMs)之间也存在显著差异。word2vec并不是为生成文本采样而设计的。大型语言模型要大得多,能够编码更为复杂的转换。问题在于,word2vec非常像一个玩具模型:它之于语言建模,就像逻辑回归在MNIST像素上之于最先进的图像计算机视觉模型。基本原理大体相同,但玩具模型缺乏任何有意义的表示能力。word2vec甚至不是一个深度神经网络——它有一个浅层的单层架构。与此同时,大型语言模型拥有迄今为止任何模型都未曾有过的最高表示能力——它们具有数十个Transformer层,总共数百层,其参数数量达到了数十亿。
就像word2vec一样,LLMs在将标记组织到向量空间的过程中,作为副产品学会了有用的语义功能。但是得益于这种增强的表示能力和更加精细的自回归优化目标,我们不再局限于像“性别向量”或“复数向量”这样的线性变换。LLMs可以存储任意复杂的向量函数——实际上,这些函数复杂到更准确的说法是将它们称为向量程序而不是函数。
Word2vec让你能做一些基本的事情,比如将复数形式(plural(cat))转换为cats,或者将男性转换为女性(male_to_female(king))变为queen。与此同时,大型语言模型(LLMs)可以做纯粹的魔法——比如将write_this_in_style_of_shakespeare("...你的诗...")转换为"…新的诗…”。而且它们包含了数百万这样的程序。
LLM作为程序数据库
你可以将大型语言模型视为类似于数据库:它存储信息,你可以通过提示来检索信息。但是大型语言模型和数据库之间有两个重要的区别。
第一个区别是,LLM是一种连续的、插值式的数据库。你的数据不是以一组离散条目的形式存储,而是以向量空间——一条曲线的形式存储。你可以在曲线上移动(正如我们讨论的,它在语义上是连续的),以探索附近的、相关的点。你还可以在曲线上不同数据点之间进行插值,以找到它们之间的中间点。这意味着你可以从数据库中检索到的信息远远超过你输入的信息——尽管并非所有信息都是准确的或有意义的。插值可能导致概括,但也可能导致幻觉。
第二个区别在于,大型语言模型不仅仅包含数据。它确实包含了大量的数据——事实、地点、人物、日期、事物、关系。但它也是——或许主要是——一个程序数据库。
它们并不完全是你习惯处理的那种程序,请注意。你可能会想到确定性的Python程序——一系列按步骤处理数据的符号语句。但情况并非如此。相反,这些向量程序是高度非线性的函数,它们将潜在嵌入空间映射到自身。类似于word2vec的神奇向量,但要复杂得多。
作为程序查询的Prompt
要从大型语言模型中获取信息,你需要给它提供提示。如果说大型语言模型就像是包含数百万向量程序的数据库,那么提示就像是在该数据库中的搜索查询。你的提示的一部分可以被解释为“程序键”,即你想检索的程序的索引,另一部分可以被解释为程序输入。
请参考以下示例提示:“rewrite the following poem in the style of Shakespeare: …my poem…”
- “rewrite this in the style of”是程序的关键。它指向程序空间中的一个特定位置。
- “Shakespeare” and “..my poem…”是程序输入。
- LLM的输出是程序执行的结果。
现在,请记住,将LLM视为程序数据库的类比只是一个心智模型——你可以使用其他模型。一个更常见但不那么启发性的模型是,将LLM视为自回归文本生成器,它们输出在给定训练数据分布情况下,跟随你的提示语可能出现的最有可能的词序列之一——即,专注于LLM被优化执行的任务。如果你能记住多种模拟它们所做工作的方式,你会更好地理解LLM——希望你会发现这个新模型有用。
Prompt工程作为程序搜索过程
请记住,这个“程序数据库”是连续的和插值的——它不是一组离散的程序。这意味着稍微不同的提示,比如“用x的风格把这段文字抒情地改写”,仍然会指向程序空间中一个非常相似的位置,产生一个行为非常接近但不完全相同的程序。
你可以使用成千上万种不同的变体,每一种都会导致一个相似但略有不同的程序。这就是为什么需要提示工程。没有先验的理由表明你最初的、天真的程序关键词会导致任务的最佳程序。大型语言模型不会“理解”你的意图然后以最佳方式执行它——它仅仅是根据你的提示去获取程序,而你的提示可能指向许多可能的位置。
提示工程是在程序空间中搜索,以找到在您的目标任务上表现最佳的程序的过程。这与在谷歌搜索软件时尝试不同关键词没有什么不同。
如果大型语言模型真的理解了你告诉它们的内容,那么就不需要这个搜索过程,因为无论你的提示是使用“改写”还是“换句话说”,或者你是否在提示前加上“逐步思考”,关于你目标任务的信息量并没有改变。永远不要假设大型语言模型第一次就“明白”了——记住,你的提示不过是在无限程序海洋中的一个地址,所有这些程序都是通过自回归优化目标将标记组织成向量空间的副产品而捕获的。
一如既往,理解大型语言模型最重要的原则是你应该抵制将它们拟人化的诱惑。
原文:https://fchollet.substack.com/p/how-i-think-about-llm-prompt-engineering
出自:https://mp.weixin.qq.com/s/ewrpX3TvDm8gAv0zOD5v_g
Inktee ai 是可让您使用人工智能创建自己的图形T恤网站。您只需输入要在衬衫上看到的图像的文本描述,网站就会为您生成独特而引人注目的设计。