【大模型结构】输出参数配置

大家在体验大语言模型或者多模态大模型的开源应用时,经常会看到类似下面这个页面,用来控制大模型输出的一些参数设置:

在这里插入图片描述
或者在代码中也经常需要设置以下几个参数:

{
 "num_beams": 1,
 "max_tokens": 2048,
 "do_sample": true,
 "repetition_penalty": 1.05,
 "temperature": 0.7,
 "top_p": 0.8,
 "top_k": 20,
}

这些参数设置会直接影响大模型的输出多样性和质量,因此很多面试官都喜欢通过提问这些参数的含义或者使用技巧,来考察首选人对大模型的掌握程度。本文主要介绍 top_k, top_p, temperature以及num_beams, repetition_penalty, max_new_tokens 这几个核心参数的含义及使用技巧。

大模型生成策略

我们首先要知道大模型是如何生成结果的。大语言模型根据输入token序列来输出下一个token。每次模型想要生成另一个token时,会重新阅读整个token序列(输入token序列+已经生成的token序列)并预测接下来应该出现的token,也就是自回归生成(Auto-Regressive Generation),如下图所示:

在这里插入图片描述

GIF来源:https://pic2.zhimg.com/v2-a8e2ff8e26fa1a78b02bf000ad1397db_b.webp

大模型在自回归生成过程中,达到终止条件(如一个标点符号或一个最大长度)时就会停止输出。在每一步,模型会对于词表中的所有token,给出一个概率分布,表示它对下一个单词的预测,然后通过解码策略选出一个token作为最终的输出。

例如,如果输入的文本是“我喜欢”,那么模型可能会给出下面的概率分布,假设选择概率最大token作为输出结果,也就是“吃”,那么第二次预测,大模型的输入就变成了“我喜欢吃”,然后再选择下一个token,直到达到终止条件:

在这里插入图片描述

常用解码方法如下

  • 贪心解码(Greedy Decoding):直接选择词表中概率最高的token。这种方法简单高效,但是可能会导致生成的文本过于单调和重复。
  • 随机采样(Random Sampling):按照概率分布随机选择一个token。这种方法可以增加生成的多样性,但是可能会导致生成的文本不连贯和无意义。
  • 束搜索(Beam Search):维护一个大小为 num_beams 的候选序列集合,每一步从所有词表的概率分布中选择概率最高的 num_beams 个token,然后保留总概率最高的 num_beams 个候选序列。从所有完成的候选序列中,选择概率最高的序列作为最终生成的结果。这种方法可以平衡生成的质量和多样性,但是可能会导致生成的文本过于保守和不自然。搜索过程如下图所示(此时num_beams=2)。beam search在每一步需要考察的候选人数量是贪心搜索的num_beams倍,因此是一种牺牲时间换性能的方法

在这里插入图片描述

可以看到,贪心解码和束搜索对于同一个输入,大模型的输出都是固定的,缺乏多样性,而随机采样又存在生成内容质量不高的问题。我们想要大模型的输出的内容质量又高,同时又兼顾多样性(创造性)。因此,有了下面的几个获取候选token的方法(采样参数)。

Top_k

Top-k 采样是对前面“贪心解码”的优化,它从词表logits 排名前 k 的 token 中进行抽样,允许其他分数或概率较高的token 也有机会被选中。在很多情况下,这种抽样带来的随机性有助于提高生成质量。如下图所示:
在这里插入图片描述

Top_p

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

top-p 采样思路:在每一步,只从累积概率超过某个阈值 p 的最小token集合中进行随机采样,而不考虑其他低概率的token。这种方法也被称为核采样(nucleus sampling),因为它只关注概率分布的核心部分,而忽略了尾部部分。

例如,如果 p=0.8,那么我们只从累积概率达到 0.8 的最小token集合中选择一个单词,而不考虑其他的token。这样可以避免采样到一些不合适或不相关的token,同时也可以保留一些有趣或有创意的token。如下图所示:

在这里插入图片描述

从top_p的选择过程可以看出:

  • 如果词表的概率分布平缓,那么候选的token会多一些,会增加输出结果的多样性
  • 如果词表的概率分布尖锐,那么候选的token会少一些,会增加输出结果的准确性

Temperature

Temperature 采样受统计热力学的启发,高温意味着更可能遇到低能态。在实际应用中,Temperature 采样是对Softmax函数的一个参数调节,如下图所示:


根据公式中的参数计算可以看到:

  • 较低的 temperature,会使得原本概率较高的token获得更高的概率值,原本概率较低的token获得更低的概率值,这就导致输出结果更确定,质量更高
  • 较高的 temperature,会使得原本token的概率分布更平缓,导致输出结果的多样性更高

在这里插入图片描述

联合使用的顺序

通常我们是将 Top-k、Top-p、Temperature 联合起来使用。使用的先后顺序是 Top_k->Top_p->Temperature

参考资料

  • [1] https://blog.csdn.net/u012856866/article/details/140308083
  • [2] https://www.bilibili.com/video/BV1nK421Y72d/?share_source=copy_web&vd_source=79b1ab42a5b1cccc2807bc14de489fa7
  • [3] https://www.bilibili.com/video/BV1UM4m127A2/?share_source=copy_web&vd_source=79b1ab42a5b1cccc2807bc14de489fa7
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嗜睡的篠龙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值