AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


LLM中的采样总结
发布日期:2024-06-06 12:59:37 浏览次数: 2283 来源:无限的达蒙


1. LLM中token生成的过程

LLM中token生成的过程基本上会有两个阶段,prefill阶段和decode阶段,为了造成不必要的混淆,把decode阶段理解成生成阶段,也就是包括prefill阶段和生成阶段。

在prefill阶段中,我们需要提供一段信息,以问答场景为例,假设输入的问题是“tell me today's whether”, 那么这个问题就可以理解成prefill阶段,回答的过程理解成生成阶段。

对于输入的问题,首先要进行的步骤是把文字转成计算机能理解的“数字”的过程,也就是tokenizer阶段,这个阶段将文字进行切割,切割成token,每个token对应词表中的一个ID(最简单的切割方式是按照词切割,只是理解上这样切割,实际上不会这么做)。这样一句话就会被映射成多个ID,在这里tell me today's whether可以理解成映射到了4个ID。之后,就是embeding层了,简单的理解是1个ID并不能表达这个词或者这个token的特征,那么为了表示这个token的特征,我们用向量来表示,此向量的维度假设为dim。如果词表的总大小是vocab_size,那么就会有维度的矩阵EmbedingMatrix(训练中得到)存在。我们已经知道了Token ID,那么就可以查表得到对用的向量,对于这里的输入得到
的矩阵,这个矩阵就是参与LLM的计算过程的输入,经过计算会得到一个新的的矩阵,这个可以理解成特征维度的结果,将此结果映射回token, 需要将的矩阵 和的矩阵相乘,得到的矩阵,取最后一个结果即的向量作为最后一个token,这里可以理解成有
个概率,每个值代表对应的token出现的概率,我们将要介绍的采样就是发生在这里,对这个最后的的向量进行采样,得到1个TokenID, 这个TokenID就是最后生成的Token。如何对这个的向量进行采样是有很多中方法的,下面一一介绍。

2. 采样方法

1. 贪心算法(Greedy Search)


贪心算法比较简单就是直接选择概率最大的那个token。这种方法每次会产生同样的结果,缺乏多样性。


2. Beam-Seach


Beam-Search的工作原理是保留预定数量的潜在序列(称为“Beam”)。这个数量是预先设置的参数。比如如果设置Beam为2,那么每次都会选择概率最大的两个token作为候选,下次的时候会用这两个在生成一轮,从下一轮的结果中选择概率最大的两个,依次进行,每次都选择概率最大的2个作为候选,最终输出2个结果,可以看到选择这种方式,最终也不会有多样性,因为如果beam数选择固定的情况下,每次的结果也是一样的。


3. Top-K采样


Top-K 采样通过将潜在的下一个标记限制为最有可能的前 k 个候选标记来改进选择过程。也就是说对输出的概率排序,选择前k个最大的概率的token,在这些前 k 个标记中,需要对其概率进行重新计算,然后下一个标记是根据其重新计算过的概率选择的,保持一定程度的随机性,同时关注更可能的选项。

通过调整 k 值,您可以直接影响模型的选择过程。较低的 k 值将模型限制为一组较小的高概率token,使文本生成更加可预测和连贯。相反,较高的 k 值通过考虑更广泛的标记阵列来实现更多的多样性,这可以引入创造力,但也可能导致输出更不可预测。

例如上图中,如果设置k=4,那么就会选择前4个概率最大的作为候选,将这4个概率值重新计算归一化,得到新的概率值,然后根据随机选择一个token作为结果。

Top-K也是有一定的缺点:

1. 重复的可能性:虽然与Greedy Search相比,重复的可能性较小,但如果前 k 个集合经常包含相似的标记,则仍然有可能出现重复。

2. k 的选择:确定 k 的最佳值需要进行实验,因为 k 太小可能会导致可预测性,而 k 太大可能会重新引入过多的随机性。

4. Top-P采样


既然Top-K中的k是不容易选择的,那么有一种办法就是使用概率,Top-P就是这样的想法,不是选择概率最大的前k个,而是选择概率概率和大于p的那些token, 比如p选择0.8, 那么就是从大到小依次对概率进行累加直到第一个大于0.8的token。对选择出来的这些概率,仍然进行重新归一化,然后按照重新归一化的概率进行随机选择。选择的过程是生成一个[0,1]之间的随机数,然后根据这个随机数去采样取出来的概率,最后根据取到的概率去取对应的token作为本轮生成的token。例如上图中的数据,先对概率值进行从大到小排序,然后从大到小开始累加,直到第一个大于p为止,选择了[0.298, 0.213,0.125,0.098,0.087,0.056]这几个概率,然后对他们重新归一化,也就是分别除以这几个概率的和,得到[0.339, 0.243,0.142,0.112,0.099,0.065]。随机选择一个概率,比如选择到0.71,那么0.339 <0.71, 0.339 + 0.243 <0.71 ,0.339+0.243+0.142 >0.71, 那么就选择概率为0.142的这个token作为最终的结果。


5. Temprature

temprature是一个超参数,它会修改 softmax 函数产生的输出概率,从而影响下一个 token 的选择。

具体的计算是:
 

T代表temprature参数的值,经过计算后,概率分布会重新改变:T>1 时:除以大于 1 的temprature的效果是使 logit 在 softmax 操作之前彼此更接近。这种分布的“平坦化”意味着 logit 之间的差异不那么明显,从而导致更均匀的分布,其中可能性较小的 token 获得更高的被选中机会。

T<1 时:相反,除以小于 1 的温度会放大 logit 之间的差异,使分布“更尖锐”。这会导致可能性较大的 token 的概率更高,而可能性较小的 token 的概率会显著降低。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询