AI因你而升温,记得加个星标哦!
大模型的输出是一个token一个token的进行逐步输出,在输出策略上可分为两大类:
贪心解码:直接选择概率最高的单词。这种方法简单高效,但是可能会导致生成的文本过于单调和重复。
Beam Search:是对贪心策略一个改进。思路也很简单,就是稍微放宽一些考察的范围。在每一个时间步,不再只保留当前分数最高的1个输出,而是保留num_beams个。当num_beams=1时集束搜索就退化成了贪心搜索。
随机采样:按照概率分布随机选择一个单词。这种方法可以增加生成的多样性,但是可能会导致生成的文本不连贯和无意义。
在具体应用中,主要衍生出了如下几种方法搭配使用。
Top-K
Top-K采样是对贪心策略的优化,在生成token的每一步,只从概率最高的 k 个单词中进行随机采样,而不考虑其他低概率的单词,允许其他分数或概率较高的token 也有机会被选中。在很多情况下,这种抽样带来的随机性有助于提高生成质量,可以避免采样到一些不合适或不相关的单词,同时也可以保留一些有趣或有创意的单词。
在上例中使K=3, token就会根据女孩、鞋子、大象的概率分布进行选择。
Top-P
Top-K有一个缺陷,那就是“K值取多少是最优的?”,这非常难确定。于是出现了动态设置 token 候选列表大小的策略,过滤掉累积概率低于指定阈值P的词,从而增加输出的多样性,同时避免低概率的词。。
具体做法是在每一步,只从累积概率超过某个阈值P的最小单词集合中进行随机采样,而不考虑其他低概率的单词,它只关注概率分布的核心部分,而忽略了尾部部分。
比如使P=0.9,就会只从累积概率达到 0.9 的最小单词集合中选择一个单词,而不考虑其他累积概率小于 0.9 的单词。这样可以避免采样到一些不合适或不相关的单词,同时也可以保留一些有趣或有创意的单词。
Temperature
温度这个参数可以告诉机器如何在质量和多样性之间进行权衡:
- 较低的 Temperature意味着更高的质量。较低的Temperature 值 < 1(如 0.2 或 0.5),使模型更具信心,将大部分概率集中在最有可能的下一个词上,结果是输出更连贯且重复性更高,但创造力或探索性较低
- 而较高的Temperature意味着更高的多样性。使模型的预测更加分散和“不确定”,让token的概率分布更加平滑并均匀,模型可以更频繁地从低概率的词中进行采样,从而生成更具创造性、探索性和“惊喜”的输出
当Temperature 设置为零时,模型总是会选择具有最高可能性分数的token,从而导致模型生成的回复缺乏多样性,但却能确保总是选择模型评估出的最高质量的token来生成回复。
通常听到的表达是,温度与模型的“创造力”有关。但其实温度只是调整单词的概率分布,其最终的宏观效果是,在较低的温度下,我们的模型更具确定性,而在较高的温度下,则不那么确定。
Frequency Penalty&Presence Penalty
频率惩罚和存在惩罚是另一种让模型在质量和多样性之间进行权衡的方法:
- 频率惩罚:让token每次在文本中出现都受到惩罚,进行累计
- 存在惩罚:如果一个token已经在文本中出现过,就会受到固定惩罚
Temperature参数通过在token选择过程中改变概率分布来实现输出内容的多样性,而频率惩罚和存在惩罚则通过对已在文本中出现的token施加惩罚以增加输出内容的多样性,这使得对旧的和过度使用的token进行选择变得不太可能,从而让模型选择更新颖的token。
参数协同
通常我们是将 Top-K、Top-P、Temperature 联合起来使用,使用的先后顺序是Top-K、Top-P、Temperature。比如:
- 首先使用Top-K选取前概率前50的token
- 然后使用Top-P保留概率的累计和达到0.7的单词
- 最后使用Temperature=0.7或1.5进行归一化
根据目标调参
- 对于每个提示语只需要单个答案或者当问题仅存在一个正确答案时,可将Temperature、频率惩罚和存在惩罚设置为0。同理对于多样回答,将他们设为大于0
- 如果有太多无意义的内容、垃圾内容或产生幻觉,应当降低 temperature 和 降低top-p/top-k;如果 temperature 很高而模型输出内容的多样性却很低,应当增加top-p/top-k
- 为了获得更多样化的主题,应当增加存在惩罚值。为了获得更多样化且更少重复内容的模型输出,应当增加频率惩罚
- 在Beam Search的基础上再加上以上策略,在多个序列选择一个优化序列做出输出