大模型基础概念之Top-k、Top-p 等参数

作者 tinywell 日期 2024-05-15
大模型基础概念之Top-k、Top-p 等参数

比较‘古早’的大模型用户可能还记得,大模型应用一般会有几个调整参数,比如 Temperature、Top-k 之类的,用于调整输出的多样性。现在则很少见了,因为随着应用的不断迭代升级,这些参数慢慢变成很好的经验值后台隐藏掉了,就像搜索引擎刚出来时一堆参数,而你现在看到的只有一个搜索框。而现在的大模型应用,也基本只看到一个对话框。

但是对于大模型应用开发人员来说,调用大模型相关 API 的时候,还会回去设置这些参数,今天我们就来聊下这些参数有什么作用。

首先简单介绍下大模型的基本运作方式。我们使用大模型基本形式大多都是一问一答的形式,从宏观层面讲,就是输入一段文本,大模型输出一段文本。如果放大这个过程,其实大模型输出的这段文本,是一个字一个字逐个生成的,他会基于输入文本,算出下一个字是什么,然后将这个字追加到输入后面,再计算下一个字是什么,循环这个过程直到大模型觉得该结束了,无话可说为止。

Image.png

那么大模型是如何算出下个字的呢?是直接就算出了下一个字吗?并不是,生成式大模型每一次计算,实际上会进行一个对词表里面所有字进行打分的运算(这里的词表是指这个大模型能够处理的所有字的集合),打完分之后,哪个字分越高,说明它成为下一个字的可能性就越高。一个最简单的做法是,我总是选择哪个分最高的字作为下一个字,这很合理,这就是所谓的贪心解码策略。但是有一个问题,模型的输入确定,参数确定,则计算结果确定,而每次选择都选分最高的,那么结果一定都是一样的,这样的大模型会显得很呆,所以我们希望有一些更灵活的选择策略,让其他不是最高分但是分也很高的字有被选中的机会,Top-k、Top-p 就是用来做这个的。

  • Top-k

    Top-k 是用来控制采样策略的,即从所有结果中按照打分排名,取前 k 个字作为候选集,然后从中随机选一个作为下一个输出的字。

    k=1 时,就和贪心策略效果是一样的,总是选排名第一个的那个。

Image.png

  • Top-p

    Top-p 也是用来控制材料策略的,不过它是挑选评分(概率)加起来达到 p的最小集合作为候选集,然后从中随机选一个作为下一个输出的字。p值为0-1之间,通常设置为较高的值,比如0.75,这样可以过滤掉那些低评分的长尾。

    相比于 Top-k 来说,它的优点就是不用再纠结取几个字(也就是k值)作为候选集了,p值设置起来更方便,当然,两者也可以结合起来使用。

Image.png

  • temperature

    还有一个同样用于解码阶段选择下一个字的参数-temperature。但是它的作用跟 Top-k、Top-p 少有区别。temperature 用于控制模型输出的随机性,值越大输出越随机。

    在前面的介绍中,我们说模型的输出是对词表中所有字进行打分,这实际上并不完全准备,因为再打完分之后,还需要讲这些进行 softmax 计算,即将各个评分转化为在集合中所占的比重,代表这个字应该出现的概率。

    temperature 作用在 softmax 计算的过程中,当 temperature 越大时,它会让最终计算的概率分布变得平滑,也就是说原本评分很低的字,计算得到的概率和评分很高的字的概率变得差不多,这样原本小概率的字被选中的机会就和其他字差不多了,从而使得输出结果变得不更多样。相反,当 temperature 越小时,计算得到的概率分布会变得更锐利,评分高的最终概率越发的高,被选中的可能行也更高,导致输出越发一致。

Image.png