前言
- temperature
- top_p
- top_k
关于LLM
上一篇也有介绍过,这次看到一个不错的图
temperature
用于控制模型输出的结果的随机性,这个值越大随机性越大。一般我们多次输入相同的prompt之后,模型的每次输出都不一样。
- 设置为 0,对每个prompt都生成固定的输出
- 较低的值,输出更集中,更有确定性
- 较高的值,输出更随机(更有创意😃)
遇事不决就调参,调一下,万一就生成了不错的回答呢?
top_k & top_p
这俩也是采样参数,跟 temperature 不一样的采样方式。
比如下面这个图片,输入 The name of that country is the
这句话,模型生成了一堆 token,然后根据不同的 decoding strategy
从 tokens 中选择输出。
decoding strategy 可以选择
- greedy decoding: 总是选择最高分的 token,有用但是有些弊端,详见下文
- top-k: 从 tokens 里选择 k 个作为候选,然后根据它们的
likelihood scores
来采样 - top-p: 候选词列表是动态的,从 tokens 里按百分比选择候选词
greedy decoding
好处是简单,坏处是容易生成循环、重复的内容
top-k
设置越大,生成的内容可能性越大;
设置为1时,和 greedy decoding
效果一样。
top-p
top-p 又名 Nucleus Sampling(核采样)
继续上面的例子,将 top-p 设定为 0.15,即选择前 15% 概率的 tokens 作为候选。如下图所示,United 和 Netherlands 的概率加起来为 15%,所以候选词就是这俩,最后再从这些候选词里,根据概率分数,选择 united 这个词。
k and
p
are enabled,p
acts afterk
。
经常遇到的默认 top-p 值就是 0.7/0.8 这样,还是那个说法,设置太低模型的输出太固定,设置太高,模型彻底放飞自我也不好。
参考资料
- https://docs.cohere.com/docs/controlling-generation-with-top-k-top-p
- https://docs.cohere.com/docs/temperature
- https://mp.weixin.qq.com/s/IswrgDEn94vy5dCO51I1sw