ChatGPT模型采样算法详解

ChatGPT 模型采样算法详解

ChatGPT 所使用的模型——GPT(Generative Pre-trained Transformer)模型有几个参数,理解它们对文本生成任务至关重要。其中最重要的一组参数是 temperaturetop_p。二者控制两种不同的采样技术,用于因果语言模型(Causal language models)中预测给定上下文情景中下一个单词出现的概率。本文将重点讲解 temperaturetop_p 的采样原理,以及它们对模型输出的影响。

理解因果语言模型中的采样

假设我们训练了一个描述个人生活喜好的模型,我们想让它来补全“我喜欢漂亮的___”这个句子。一般语言模型会按照下图的流程来工作:

在这里插入图片描述

模型会查看所有可能的单词,并根据其概率分布从中采样,以预测下一个词。为了方便起见,假设模型的词汇量不大,只有:“大象”、“西瓜”、“鞋子”和“女孩”。通过下图的词汇概率我们可以发现,“女孩”的选中概率最高( p = 0.664 p=0.664 p=0.664),“西瓜”的选中概率最低( p = 0.032 p=0.032 p=0.032)。

在这里插入图片描述

上面的例子中,很明显“女孩”最可能被选中。因为人类对于单一问题在心智上习惯采用 “贪心策略”,即选择概率最高的事件。

在这里插入图片描述

永远选择分数或概率最大的token,这种策略叫做“贪心策略”。贪心策略符合人类的心智,但是存在严重缺陷。

但是上面这种策略用在频繁交互的场景下会有一个显著缺陷——如果我们总是选择最可能的单词,那么这个词会反复不断被强化,因为现代语言模型中大多数模型的注意力只集中在最近的几个词(Token)上。这样生成的内容将非常的生硬和可预测,人们一眼就能看出是机器生成的且一点也不智能。

如何让我们的模型不那么具有确定性,让它生成的内容用词更加活跃呢?为此,我们引入了基于分布采样的生成采样算法。但是传统的采样方法会遇到了一个问题:如果我们有 5 万个候选词(Token),即使最后 2.5 万个极不可能出现的长尾词汇,它们的概率质量也可能会高达 30%。这意味着,对于每个样本,我们有 1/3 的机会完全偏离原来的“主题”。又由于上面提到的注意力模型倾向于集中在最近出现的词上,这将导致不可恢复的错误级联,因为下一个词严重依赖于最近的错误词。

为了防止从尾部采样,最流行的方法是 Top-k 采样温度采样

Top-k 采样

Top-k 采样是对前面“贪心策略”的优化,它从排名前 k 的 token 中进行抽样,允许其他分数或概率较高的 token 也有机会被选中。在很多情况下,这种抽样带来的随机性有助于提高生成质量。

在这里插入图片描述

添加一些随机性有助于使输出文本更自然。
上图示例中,我们首先筛选似然值前三的token,然后根据似然值重新计算采样概率。

通过调整 k 的大小,即可控制采样列表的大小。“贪心策略”其实就是 k=1 的 top-k 采样。

在这里插入图片描述

Top-p 采样

ChatGPT 实际使用的不是 Top-k 采样,而是其改进版——Top-p 采样。

Top-k 有一个缺陷,那就是“k 值取多少是最优的?”非常难确定。于是出现了动态设置 token 候选列表大小策略——即核采样(Nucleus Sampling)。下图展示了 top-p 值为 0.9 的 Top-p采样效果:

在这里插入图片描述

在 top-p 中,根据达到某个阈值的可能性得分之和动态选择候选名单的大小。

top-p 值通常设置为比较高的值(如 0.75),目的是限制低概率 token 的长尾。我们可以同时使用 top-k 和 top-p。如果 kp 同时启用,则 pk 之后起作用。

温度采样

温度采样受统计热力学的启发,高温意味着更可能遇到低能态。在概率模型中,logits 扮演着能量的角色,我们可以通过将 logits 除以温度来实现温度采样,然后将其输入 Softmax 并获得采样概率。

越低的温度使模型对其首选越有信心,而高于 1 的温度会降低信心。0 温度相当于 argmax 似然,而无限温度相当于于均匀采样。

温度采样中的温度与玻尔兹曼分布有关,其公式如下所示:
ρ i = 1 Q e − ϵ i / k T = e − ϵ i / k T ∑ j = 1 M e − ϵ j / k T \rho_i = \frac{1}{Q}e^{-\epsilon_i/kT}=\frac{e^{-\epsilon_i/kT}}{\sum_{j=1}^M e^{-\epsilon_j/kT}} ρi=Q1eϵi/kT=j=1Meϵj/kTeϵi/kT
其中 ρ i \rho_i ρi 是状态 i i i 的概率, ϵ i \epsilon_i ϵi 是状态 i i i 的能量, k k k 是波兹曼常数, T T T 是系统的温度, M M M 是系统所能到达的所有量子态的数目。

有机器学习背景的朋友第一眼看到上面的公式会觉得似曾相识。没错,上面的公式跟 Softmax 函数 S o f t m a x ( z i ) = e z i ∑ c = 1 C e z c Softmax(z_i) = \frac{e^{z_i}}{\sum_{c=1}^Ce^{z_c}} Softmax(zi)=c=1Cezcezi 很相似,本质上就是在Softmax 函数上添加了温度(T)这个参数。Logits 根据我们的温度值进行缩放,然后传递到 Softmax 函数以计算新的概率分布。

上面“我喜欢漂亮的___”这个例子中,初始温度 T = 1 T=1 T=1,我们直观看一下 T T T 取不同值的情况下,概率会发生什么变化:

在这里插入图片描述

通过上图我们可以清晰地看到,随着温度的降低,模型愈来愈越倾向选择”女孩“;另一方面,随着温度的升高,分布变得越来越均匀。当 T = 50 T=50 T=50 时,选择”西瓜“的概率已经与选择”女孩“的概率相差无几了。

在这里插入图片描述

通常来说,温度与模型的“创造力”有关。但事实并非如此。温度只是调整单词的概率分布。其最终的宏观效果是,在较低的温度下,我们的模型更具确定性,而在较高的温度下,则不那么确定。

典型用例

temperature = 0.0

temperature=0会消除输出的随机性,这会使得 GPT 的回答稳定不变。

较低的温度适用于需要稳定性、最可能输出(实际输出、分类等)的情况。

temperature = 1.0

temperature=1 每次将产生完全不同的输出,且有时输出的结果会非常搞笑。因此,即便是开放式任务,也应该谨慎使用 temperature=1。对于故事创作或创意文案生成等任务,温度值设为 0.7 到 0.9 之间更为合适。

temperature = 0.75

通常,温度设在 0.70–0.90 之间是创造性任务最常见的温度。

虽然存在一些关于温度设置的一般性建议,但没有什么是一成不变的。作为 GPT-3 最重要的设置之一,实际使用中建议多一试下,看看不同设置对输出效果的影响。

总结

本文详细为大家阐述了 temperaturetop_p 的采样原理,以及它们对模型输出的影响。实际使用中建议只修改其中一个的值,不要两个同时修改。

temperature 可以简单得将其理解为“熵”,控制输出的混乱程度(随机性),而 top-p 可以简单将其理解为候选词列表大小,控制模型所能看到的候选词的多少。实际使用中大家要多尝试不同的值,从而获得最佳输出效果。

另外还有两个参数——frequency_penaltypresence_penalty 对生成输出也有较大影响,请参考《ChatGPT 模型中的惩罚机制》

  • 33
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论
高斯采样和原像采样算法是用于粒子滤波算法中的两种重采样方法。 高斯采样算法是一种基于高斯分布的重采样方法。在该算法中,根据粒子的权重大小对粒子进行排序,权重大的粒子被选中的概率也相对较大。然后,通过从一个高斯分布中采样来选择新的粒子,从而实现对粒子的重采样。这种方法可以保持粒子的多样性,并且相对原像采样算法更高效。 原像采样算法是一种基于累积分布函数的重采样方法。在该算法中,根据粒子的权重大小计算累积权重,并将其标准化。然后,通过从均匀分布中采样一个随机数,根据累积权重找到对应的粒子。这样,权重大的粒子被选中的概率较大。原像采样算法保持了粒子的多样性,但可能会引入一定的计算复杂性。 总之,高斯采样和原像采样算法都是粒子滤波算法中用于重采样的方法,它们都可以用来解决粒子匮乏导致的估计不精确的问题。具体选择哪种算法取决于具体应用的需求和性能要求。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [基于 AR 图像识别的算法研究与应用(python实现)](https://download.csdn.net/download/weixin_42380711/88245138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [基于高斯分布重采样的Rao-Blackwellized粒子滤波SLAM算法](https://download.csdn.net/download/weixin_38528939/14153970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JarodYv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值