微信扫码
与创始人交个朋友
我要投稿
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。如何对这个的向量进行采样是有很多中方法的,下面一一介绍。
通过调整 k 值,您可以直接影响模型的选择过程。较低的 k 值将模型限制为一组较小的高概率token,使文本生成更加可预测和连贯。相反,较高的 k 值通过考虑更广泛的标记阵列来实现更多的多样性,这可以引入创造力,但也可能导致输出更不可预测。
例如上图中,如果设置k=4,那么就会选择前4个概率最大的作为候选,将这4个概率值重新计算归一化,得到新的概率值,然后根据随机选择一个token作为结果。
Top-K也是有一定的缺点:
1. 重复的可能性:虽然与Greedy Search相比,重复的可能性较小,但如果前 k 个集合经常包含相似的标记,则仍然有可能出现重复。
2. k 的选择:确定 k 的最佳值需要进行实验,因为 k 太小可能会导致可预测性,而 k 太大可能会重新引入过多的随机性。
temprature是一个超参数,它会修改 softmax 函数产生的输出概率,从而影响下一个 token 的选择。
具体的计算是:
T代表temprature参数的值,经过计算后,概率分布会重新改变:T>1 时:除以大于 1 的temprature的效果是使 logit 在 softmax 操作之前彼此更接近。这种分布的“平坦化”意味着 logit 之间的差异不那么明显,从而导致更均匀的分布,其中可能性较小的 token 获得更高的被选中机会。
T<1 时:相反,除以小于 1 的温度会放大 logit 之间的差异,使分布“更尖锐”。这会导致可能性较大的 token 的概率更高,而可能性较小的 token 的概率会显著降低。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-08-21
2024-04-11
2024-07-09
2024-08-13
2024-07-18
2024-10-25
2024-07-01
2024-06-17