用好语言模型:temperature、top-p等核心参数解析

news2024/9/30 9:31:22

编者按:我们如何才能更好地控制大模型的输出?

本文将介绍几个关键参数,帮助读者更好地理解和运用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常见参数,以优化语言模型的生成效果。

文章详细解释了这些参数的作用机制以及如何在质量与多样性之间进行权衡。提高 temperature 可以增加多样性但会降低质量。top-p 和 top-k 可以在不损失多样性的前提下提高质量。frequency penalty 和 presence penalty 可以增加回复的词汇多样性和话题多样性。

最后,文章提供了参数配置的具体建议和技巧,供读者参考使用。选择合适的参数能显著提高语言模型的表现,更是进行 prompt engineering 的重要一环。

以下是译文,enjoy!

作者 | Samuel Montgomery

编译 | 岳扬

🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~

当我们通过 Playground 或 API 使用语言模型时,可能会被要求选择一些推理参数。但是对大多数人来说,这些参数的含义(以及使用它们的正确方法)可能不为大多数人所熟悉。

典型模型推理界面参数选择的截图。图片由作者提供

本文将介绍如何使用这些参数来控制大模型的幻觉(hallucinations),为模型的输出注入创造力,并进行其他细粒度的调整,主要目的是为了优化模型的输出。就像提示工程(prompt engineering)一样,对推理参数进行调优可以使模型发挥出最佳效果。

通过学习本文,我相信各位读者能够充分理解这五个关键的推理参数——temperature、top-p、top-k、frequency penalty 和 presence penalty。还可以明白这些参数对生成内容的质量和多样性产生的影响。

所以,泡好咖啡了吗?现在开始吧!

目录

01 背景信息 Background

02 质量、多样性和Temperature

03 Top-k和Top-p

04 频率惩罚和存在惩罚 Frequency and Presence Penalties

05 参数调整备忘单

06 总结

01 背景信息 Background

在选择推理参数之前,我们需要了解一些背景信息。让我们来谈谈这些模型是如何选择要生成哪些单词的。

要阅读一份文档,语言模型会将其分解为一系列的tokens。token只是模型能够轻松理解的一小段文本:可以是一个单词(word)、一个音节(syllable)或一个字符(character)。例如,“Megaputer Intelligence Inc.” 可以被分解为五个token:[“Mega”, “puter”, “Intelligence”, “Inc”, “.”]。

我们熟悉的大多数语言模型都是通过重复生成token序列(sequence)中的下一个token来运作的。每次模型想要生成另一个token时,会重新阅读整个token序列并预测接下来应该出现的token。 这种策略被称为自回归生成(autoregressive generation)。

token的自回归生成。

GIF由Echo Lu[1]制作,其中包含了 Annie Surla[2]的一张图片(来自 NVIDIA[3],经过修改)。

本次修改已获得版权所有者的许可。

这解释了为什么ChatGPT会逐个地输出单词:它在生成内容时就以逐词输出的方式。

如果要选择序列中的下一个token,语言模型首先要为其词汇表中的每个token分配一个可能性分数(likelihood score)。经过模型的评估,如果某个token能够让文本得到合理的延续,就能够获得较高的可能性分数。如果某个token无法自然延续文本内容,就将获得较低的可能性分数。

语言模型分配可能性分数,以预测序列中的下一个token。

原始图片由 NVIDIA[3] 的 Annie Surla[2] 创建,经过版权所有者 Echo Lu[1] 的许可进行修改。

在分配完可能性分数(likelihood score)之后,就会使用一种将可能性分数考虑在内的token抽样选择方案(token sampling scheme)来选择token。token抽样选择方案包含一定的随机性,这样语言模型就不会每次都以相同的方式回答相同的问题。这种随机性可以成为聊天机器人或其他应用程序中的一个不错的特性。

简而言之:语言模型将文本分解为token,预测序列中的下一个token,并引入一些随机性。根据需要重复这个过程,来输出内容。

02 质量、多样性和Temperature

但是,为什么我们会想要选择第二好的token、第三好的token,或者除了最好的token以外的其他token呢?难道我们不希望每次都选择最好的token(及具有最高可能性分数的token)吗?通常情况下,我们确实会这样进行。但是,如果我们每次都选择生成最好的回复,那么我们每次都将得到相同的回复。如果我们想要得到多种多样的回复,我们可能不得不放弃一些回复内容的质量来获得回复的多样性。这种为了多样性而牺牲质量的做法被称为质量与多样性的权衡(quality-diversity tradeoff)。

在这种情况下,temperature这个参数可以告诉机器如何在质量和多样性之间进行权衡。较低的 temperature 意味着更高的质量,而较高的 temperature 意味着更高的多样性。当 temperature 设置为零时,模型总是会选择具有最高可能性分数的token,从而导致模型生成的回复缺乏多样性,但却能确保总是选择模型评估出的最高质量的token来生成回复。

很多时候,我们都希望将 temperature 设置为零。原则上,对于只需要向模型传递一次的任何提示语,都应该将 temperature 设置为零,因为这样最有可能得到一个高质量的回复。在我进行的数据分析工作中,对于实体提取(entity extraction)、事实提取(fact extraction)、情感分析(sentiment analysis)和大多数其他标准任务都设置temperature 为零。

在较高的 temperature 下,通常会看到更多的垃圾内容和幻觉内容,连贯性较差,生成的回复质量可能会降低,但同时也会看到更多具有创造性和多样性的回复。我们建议仅在需要获得多个不同答案的情况下,才使用非零的 temperature。

较高的 temperature 带来了回答的多样性和创造性,但也会增加垃圾内容、不连贯和幻觉。

图片由Echo Lu[1]创建。

为什么我们会希望对同一个提示语(prompt)获得两个不同的回答呢?在某些情况下,对同一个提示语生成多个回复并仅保留最佳回复可能是比较好的。例如,有一种技术可以让我们对一个提示语生成多个回复,并只保留最好的回复,这通常会比在 temperature 为零时的单个查询产生更好的结果。另一个使用场景是生成人工合成的数据:我们会希望有许多不同的合成数据点(synthetic data points),而不仅是只有一个非常好的数据点(data point)。可能会在以后的文章中讨论这种情况(以及其他情况),但更常见的情况是,我们只希望每个提示语有一个回复。当你不确定应该如何选择 temperature 时,选择 temperature 为零通常是一个安全的选择。

需要注意的是,虽然理论上 temperature 为零应该每次产生相同的答案,但在实践中可能并非如此! 这是因为模型运行在 GPU 上,可能容易出现微小的计算错误,例如四舍五入产生的误差。即使在 temperature 为零的情况下,这些误差会在计算中引入低水平的随机性。由于更改文本中的一个token可能会大大改变文本的含义,一个微小的错误可能会导致文本后序的token选择发生级联变化,从而导致几乎完全不同的输出结果。但请放心,这通常对质量的影响微乎其微。我们提到这一点,只是以免让你在 temperature 为零时输出结果出现一些随机性而感到惊讶。

有很多方法可以让模型在质量和多样性之间进行权衡,而不是仅受 temperature 的影响。在下一节中,我们将讨论对 temperature 选择技术的一些修改。但是,如果您对将 temperature 设置为 0 很满意,可以暂时跳过这部分内容。在 temperature 为零时这些参数不会影响模型的回复,您可以放心地设置。

简而言之:增加 temperature 可以增加模型输出的随机性,从而提高了回复的多样性,但降低了质量。

03 Top-k和Top-p

一种常见的调整token选择公式的方法称为 top-k sampling 。top-k sampling 与普通的 temperature sampling 非常相似,只是排除了可能性最低的token:只考虑“前k个”最佳选择,这也是该方法的名称来源。这种方法的优点是防止我们选择到真正糟糕的token。

例如,假设我们要补全 “The sun rises in the…(太阳升起在…)” 这个句子。那么,在没有 top-k sampling 的情况下,模型会将词汇表中的每个token都视为可以放置在序列之后的可能结果。然后,就会有一定的概率写出一些荒谬的内容,比如“The sun rises in the refrigerator.(太阳升起在冰箱里)”。通过进行 top-k sampling ,模型会筛选这些真正糟糕的选择,只考虑前k个最佳token。通过截断大部分糟糕的token,我们会失去一些内容多样性,但是内容的质量会大幅提高。

Top-k sampling 只保留 k 个最佳候选token,而丢弃其他token,从而提高内容质量。图片由 Echo Lu 提供[1]。

top-p sampling是一种既能保证输出内容多样性,又能在保持内容质量的成本上比单纯使用 temperature 更加低的方法。由于这种技术非常有效,因此激发了许多方法变体的出现。

有一种常见的 top-k sampling 变体被称为 top-p sampling ,也被称为 nucleus sampling 。top-p sampling 与 top-k sampling 非常相似,只是它使用可能性分数(likelihood scores)而不是token排名(token ranks)来决定应保留哪些token。更具体地说,它只考虑那些可能性分数超过阈值p的排名靠前的token,而将其余的token丢弃。

与 top-k sampling 相比,top-p sampling 的优势在有许多较差或平庸的序列后续词时就会显现出来。 例如,假设下一个token只有几个比较好的选择,却有几十个只是隐约挨边的选择。如果我们使用 k=25 的 top-k sampling(译者注:k代表的是保留的token数量) ,我们将考虑许多较差的token选择。相比之下,如果我们使用 top-p sampling 来过滤掉概率分布中最底层的 10%(译者注:将token的可能性概率从大到小排序,只保留从概率最大开始、累积概率之和达到90%为止的tokens),那么我们可能只需要考虑那些分数较高的token,同时过滤掉其他的token。

在实际应用中,与 top-k sampling 相比,top-p sampling 往往能够获得更好的效果。 它能够更加适应输入的上下文,并提供更灵活的筛选。因此,总的来说,top-p和top-k sampling 都可以在非零的 temperature 下使用,以较低的质量成本获取输出内容的多样性,但 top-p sampling 通常效果更好。

小贴士: 对于这两种设置(top-p和top-k sampling),数值越低表示过滤得越多。当设置值为零时,它们将过滤掉除排名靠前的token之外的所有token,这与将 temperature 设置为零具有相同的效果。因此,请在使用这些参数时注意,将这些参数设置得过低可能会减少模型输出内容的多样性。

简而言之:top-k和top-p在几乎不损失输出内容多样性的情况下提高了输出内容的质量。它们通过在随机抽样前去除最差的token选择来实现这一目的。

04 频率惩罚和存在惩罚

Frequency and Presence Penalties

最后,让我们来讨论本文中的最后两个参数:频率惩罚和存在惩罚(frequency and presence penalties)。令人惊讶的是,这些参数是另一种让模型在质量和多样性之间进行权衡的方法。然而,temperature 参数通过在token选择(token sampling)过程中添加随机性来实现输出内容的多样性,而频率惩罚和存在惩罚则通过对已在文本中出现的token施加惩罚以增加输出内容的多样性。这使得对旧的和过度使用的token进行选择变得不太可能,从而让模型选择更新颖的token。

频率惩罚(frequency penalty)让token每次在文本中出现都受到惩罚。这可以阻止重复使用相同的token/单词/短语,同时也会使模型讨论的主题更加多样化,更频繁地更换主题。另一方面,存在惩罚(presence penalty)是一种固定的惩罚,如果一个token已经在文本中出现过,就会受到惩罚。这会导致模型引入更多新的token/单词/短语,从而使其讨论的主题更加多样化,话题变化更加频繁,而不会明显抑制常用词的重复。

就像 temperature 一样,频率惩罚和存在惩罚(frequency and presence penalties)会引导我们远离“最佳的”可能回复,朝着更有创意的方向前进。 然而,它们不像 temperature 那样通过引入随机性,而是通过精心计算的针对性惩罚,为模型生成内容增添多样性在一些罕见的、需要非零 temperature 的任务中(需要对同一个提示语给出多个答案时),可能还需要考虑将小的频率惩罚或存在惩罚加入其中,以提高创造性。但是,对于只有一个正确答案且您希望一次性找到合理回复的提示语,当您将所有这些参数设为零时,成功的几率就会最高。

一般来说,如果只存在一个正确答案,并且您只想问一次时,就应该将频率惩罚和存在惩罚的数值设为零。但如果存在多个正确答案(比如在文本摘要中),在这些参数上就可以进行灵活处理。如果您发现模型的输出乏味、缺乏创意、内容重复或内容范围有限,谨慎地应用频率惩罚或存在惩罚可能是一种激发活力的好方法。但对于这些参数的最终建议与 temperature 的建议相同:在不确定的情况下,将它们设置为零是一个最安全的选择!

需要注意的是,尽管 temperature 和频率惩罚/存在惩罚都能增加模型回复内容的多样性,但它们所增加的多样性并不相同。频率惩罚/存在惩罚增加了单个回复内的多样性,这意味着一个回复会包含比没有这些惩罚时更多不同的词语、短语、主题和话题。但当你两次输入相同的提示语时,并不意味着会更可能得到两个不同的答案。这与 temperature 不同, temperature 增加了不同查询下回复的差异性:在较高的 temperature 下,当多次输入相同的提示语给模型时,会得到更多不同的回复。

我喜欢将这种区别称为回复内多样性(within-response diversity)与回复间多样性(between-response diversity)。temperature 参数同时增加了回复内和回复间的多样性,而频率惩罚/存在惩罚只增加了回复内的多样性。因此,当我们需要增加回复内容的多样性时,参数的选择应取决于我们需要增加哪种多样性。

简而言之:频率惩罚和存在惩罚增加了模型所讨论主题的多样性,并使模型能够更频繁地更换话题。频率惩罚还可以通过减少词语和短语的重复来增加词语选择的多样性。

05 参数调整备忘单

本节旨在为选择模型推理参数提供一份实用指南。首先,该节会提供一些明确的规则,决定将哪些值设为零。然后,会提供了一些tips,帮助读者找到当参数应当为非零时的正确值。

强烈建议您在选择推理参数时使用这张备忘单。现在就将此页面保存为书签,或者收藏本文章~ 以免丢失!

将参数设为零的规则:

temperature:

  • 对于每个提示语只需要单个答案:零。
  • 对于每个提示语需要多个答案:非零。

频率惩罚和存在惩罚:

  • 当问题仅存在一个正确答案时:零。
  • 当问题存在多个正确答案时:可自由选择。

Top-p/Top-k:

  • 在 temperature 为零的情况下:输出不受影响。
  • 在 temperature 不为零的情况下:非零。

如果您使用的语言模型具有此处未列出的其他参数,将其保留为默认值始终是可以的。

当参数非0时,参数调整的技巧:

先列出那些应该设置为非零值的参数,然后去 playground 尝试一些用于测试的提示语,看看哪些效果好。但是,如果上述规则说要将参数值保持为零,则应当将其保持为零!

调整temperature/top-p/top-k的技巧:

  1. 为了使模型输入内容拥有更多的多样性或随机性,应当增加temperature。
  2. 在 temperature 非零的情况下,从 0.95 左右的 top-p(或 250 左右的 top-k )开始,根据需要降低 temperature。

Troubleshooting:

  1. 如果有太多无意义的内容、垃圾内容或产生幻觉,应当降低 temperature 和 降低top-p/top-k。
  2. 如果 temperature 很高而模型输出内容的多样性却很低,应当增加top-p/top-k。

Tip:虽然有些模型能够让我们同时调整 top-p 和 top-k ,但我更倾向于只调整其中一个参数。top-k 更容易使用和理解,但 top-p 通常更有效。

调整频率惩罚和存在惩罚的技巧:

  1. 为了获得更多样化的主题,应当增加存在惩罚值。
  2. 为了获得更多样化且更少重复内容的模型输出,应当增加频率惩罚。

Troubleshooting:

  1. 如果模型输出的内容看起来零散并且话题变化太快,应当降低存在惩罚。
  2. 如果有太多新奇和不寻常的词语,或者存在惩罚设置为零但仍然存在很多话题变化,应当降低频率惩罚。

简而言之:可以将本节作为调整语言模型参数的备忘单。您肯定会忘记这些规则,所以立即将此页面加为浏览器书签或加入社区收藏夹,以便以后作为参考。

06 总结

尽管定义token选择策略(token sampling strategy)的方式多种多样,但本文讨论的参数——temperature、top-k、top-p、频率惩罚和存在惩罚——是最为常用的。这些参数在诸如 Claude、Llama 和 GPT 系列等模型中被广泛采用。在本文中,已经说明了,这些参数实际上都是为了帮助我们在模型输出的质量和多样性之间取得平衡。

在结束之前,还有一个推理参数需要提及:最大token长度(maximum token length)。最大token长度即为模型停止输出回复的截止点,即使模型的回复尚未完成。在经历了前文对其他参数进行复杂的讨论后,我希望对这个参数的介绍不言自明。🙂

简而言之:如果对参数的设置有疑问,将temperature、频率惩罚和存在惩罚这些参数的数值设为零。若不起作用,请参考上述速查表。

END

参考资料

[1]https://www.linkedin.com/in/echoxlu/

[2]https://developer.nvidia.com/blog/author/anniesurla/

[3]https://developer.nvidia.com/blog/how-to-get-better-outputs-from-your-large-language-model/

本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。

原文链接

https://towardsdatascience.com/mastering-language-models-32e1d891511a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1242125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【KMP算法】学习总结

说明: 文章内容为对KMP算法的总结,以及力扣例题;文章内容为个人的学习总结,如有错误,欢迎指正。 文章目录 1. KMP算法1.1 算法步骤1.2 关于指针回退问题 2 . LeetCode例题 1. KMP算法 1.1 算法步骤 KMP算法通常用于…

福州大学《嵌入式系统综合设计》实验五:图像裁剪及尺寸变换

一、实验目的 在深度学习中,往往需要从一张大图中裁剪出一张张小图,以便适应网络输入图像的尺寸,这可以通过bmcv_image_crop函数实现。 实践中,经常需要对输入图像的尺寸进行调整,以适用于网络输入图片尺寸&#xff0…

vue中v-if与v-for的优先级?

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中v-if与v-for的优先级? 目录 v-if和v-for的优先级是什么? 一、作用 二、优先级…

RocketMQ保姆级教程

RocketMQ是阿里巴巴旗下一款开源的MQ框架,经历过双十一考验、Java编程语言实现,有非常好完整生态系统。RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等,总之…

AI绘画工具汇总:免费、简单易上手

欢迎来到魔法宝库,传递AIGC的前沿知识,做有格调的分享❗ 喜欢的话记得点个关注吧! 提到AI绘画,许多人通常会想到Midjourney和Stable Diffusion等工具,然而,这些工具对于新手而言门槛较高,不太友…

20230511 Windows Ubuntu vscode remote-ssh 连接配置

参考 : VSCode SSH 连接远程ubuntu Linux 主机 VSCode通过Remote SSH扩展连接到内网Ubuntu主机 Ubuntu 安装 sudo apt-get install openssh-server vscode: 安装remote-ssh 插件 连接到服务器IP 免密登录的公钥密钥传递用filezillaUbuntu 和 Windows 文件互传 …

INFLOW:用于检测隐藏服务器的反向网络流水印

文章信息 论文题目:INFLOW: Inverse Network Flow Watermarking for Detecting Hidden Servers 期刊(会议):IEEE INFOCOM 2018 - IEEE Conference on Computer Communications 级别:CCF A 文章链接:https:…

分布式篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、你知道哪些分布式事务解决方案?二、什么是二阶段提交?三、什么是三阶段提交?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你…

AMEYA360:瑞萨面向高端工业传感器系统推出高精度模拟前端的32位RX MCU

全球半导体解决方案供应商瑞萨电子(TSE:6723)宣布面向高端工业传感器系统推出一款全新RX产品——RX23E-B,扩展32位微控制器(MCU)产品线。新产品作为广受欢迎的RX产品家族的一员,具有高精度模拟前…

chatglm3部署使用

chatglm3部署使用 1.部署2.使用3.接入微信4.vue前端 1.部署 1.首先去github下载chatglm3代码。Huggingface下载模型一直失败,所以用阿里的魔塔社区下载。 git clone https://github.com/THUDM/ChatGLM3.git git clone https://www.modelscope.cn/ZhipuAI/chatglm3…

2022-1-25 机器人运动规划方法综述 航空学报

论文PDF abstract 随着应用场景的日益复杂,机器人对旨在生成无碰撞路径(轨迹)的自主运动规划技术的需求也变得更加迫 切。虽然目前已产生了大量适应于不同场景的规划算法,但如何妥善地对现有成果进行归类,并分析不同…

Linux MYSQL-5.7.23-rpm安装(附带安装包)

系统环境 OS 版本(Linux) CentOS-7-x86_64-Minimal-1511Java版本 jdk1.7及以上 卸载系统自带mariadb-lib rpm -qa|grep mariadbrpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps解压tar包 tar -xvf mysql*.tar以下加粗rpm包需要安装: mysql-community-common…

求解Beamforming-SOCP(CVX求解)

时间:2023年11月23日14:00:16: 直接上代码(辛苦两天才改出来的) clear all; K 4; %user number N4; %base station number var1e-9; H []; %initialize H matrix for i1:Kh 1/sqrt(2*K)*mvnrnd(zeros(N,1),eye(N),1)1i/sqrt(2*…

【运动规划】191 自适应跟踪kinodynamicrrt的路径

分层法: two layer approach 自适应控制,跟随轨迹。运动规划:扩展自由空间(基于速度约束缩小自由空间)为控制部分留余量,确保安全。 控制设计: 考虑平移和旋转,速度环控制&#xff…

postgreSQL如何快速查询大表数据量

文章目录 场景方案结果 场景 我有一个非常大的表,估计几百万或者几千万。 我开始使用了 select count(*) from my_table_javapub 方式,查询非常慢。 如何解决??? 方案 如果你需要更快地获取表中的行数&#xff0c…

Python爬取京东商品销售数据进行数据分析示例代码,以口红为例

文章目录 一、准备工作驱动安装模块使用与介绍 二、流程解析三、完整代码四、效果展示关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资…

windows server-修改管理员登录密码-远程访问

文章目录 1.打开服务器远程桌面2.修改计算机密码3.远程桌面登录 1.打开服务器远程桌面 允许远程连接到此计算机。 2.修改计算机密码 打开计算机管理>本地用户和组>修改管理员密码>重启。如下图所示: 3.远程桌面登录 打开远程桌面连接。输入ip&…

关于APP备案的通知以及APP备案的常见问题

前言 众所周知今年8月份,工信部出台了《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,APP开发者的影晌是显而易见的。开发者需要按照要求提交相关材料进行备案,这无疑增加了开发者的时间和精力成本。虽然备案制度会增加开发者…

计网(复习自用)

计算机网络 1.概述 1.1概念 含义 计算机网络:是一个将分散的。具有独立功能的计算机系统,通过通信设备和线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。 简单点说,计算机网络是互联的,自治的计算机集…

为何设计师都在用这个原型样机资源网站?

谈论原型样机素材模板,这个话题对设计师来说如同老朋友一般熟悉。设计师们在创作完毕后,为了更淋漓尽致地展示他们的设计成果,通常会将其放置在真实的样机素材模板中。这种原型样机素材可以让设计作品迅速且清晰地呈现在真实环境中。找到一个…