【GPT概念04】仅解码器(only decode)模型的解码策略

一、说明

在我之前的博客中,我们研究了关于生成式预训练转换器的整个概述,以及一篇关于生成式预训练转换器(GPT)的博客------预训练、微调和不同的用例应用。现在让我们看看所有仅解码器模型的解码策略是什么。

二、解码策略

在之前的博客中,我们将转换器视为一个函数,它接受输入并开始生成下一个标记或输出,同时进行自回归,即它在所有步骤中将自己的输出作为输入并生成输出。

在训练过程中,我们也以类似的方式进行训练,因为我们展示了某些文本,我们知道下一个单词是什么,我们要求它预测下一个标记是什么,然后根据最大标记的概率反向传播损失。下一个代币预测的想法可以迭代完成,以生成我们想要的任意数量的代币,并且可能会生成完整的故事。

例如,假设一个句子***"你能不能拿一个从前开始的故事"***,所以整个事情已经成为给模型的第一个"k"个标记,从这个时间步长开始,我们需要生成一个故事,其中标记的预测发生,直到我们满意或一旦我们到达序列的末尾<eos>。

鉴于模型已经过训练来预测下一个标记和一些额外的东西,我们将做一些称为**"指令微调"**的事情,现在我们希望模型在我给它某些输入的场景中工作,它必须从那里开始继续答案,所以给出的任何问题,或者如果给出一些段落并要求总结,那么它必须总结。

最初的微调问题,如预测情绪或像两个句子一样,是相似还是不相似------与我们使用现代 LLM 应用程序看到的相比,这些要容易得多,这些应用程序是更具创造性的应用程序,如(写诗等、写简历、建立网站等),所以这些是目前让我们感到惊讶的事情。显然,目前我们不知道这些高级 LLM(大型语言模型)如何能够产生如此精确和创造性的输出,但我们目前看到的是关于下一个单词预测如何发生的解码部分------我们知道的一件事是,如果我们要选择最大概率标记的过程,那么显然我们将获得与此相同的标记输出确定性输出。现在让我们看一些或一些解码策略,其中我们为每个策略都有一些创造性的输出,其中确定性将提供相同的输出,随机性将产生不同的输出。

详尽搜索:

假设我们想生成一个 5 个单词的序列,词汇表为 { cold, coffee, I , like , water, <stop>}

穷举搜索所有可能的序列和相关的概率,并输出具有最高概率的序列。

  • 我喜欢冷水
  • 我喜欢冷咖啡
  • 像冷咖啡一样的咖啡
  • 我喜欢我喜欢
  • 咖啡 咖啡 咖啡 咖啡

因此,对于每个句子输出,概率将是

P(x1, x2, x3,.....xn) = P(x1).P(x2/x1), ..........., P(xn/x1, x2, ......xn-1)

由于这是详尽的搜索 - 我们将通过解码过程找到所有可能的序列。在每个时间步长中,我们将传递所有单词

由于这里有 6 个单词,我们可以有这 6 个单词的分布,如下所示。

如果其中一个示例输入序列是"我喜欢冷咖啡<停止>"

上述序列的总概率将等于

P(I) * P(like/I)*P(冷/I,like)*P(咖啡/I,like,冷)

同样,序列的其他组合也将遵循与上述相同的模式,并给我们提供具有最大概率的输出------这种概率计算是在每个时间步对所有标记完成的。

因此,基于上述详尽的搜索,让我们假设这些是搜索空间中的概率

假设该序列在所有 |v|⁵ 序列中具有最高的概率------在上面的本例中,如果生成"我喜欢冷咖啡"序列作为最高概率,则结果将突出显示

通过这种详尽的搜索,无论我们计算多少次------对于给定的相同输入,我们都会得到相同的答案,我们看不到任何创造性的输出。这属于确定性策略。包含所有树类型输出的最终示例图如下所示 ---

在这 9 种可能性中,以最大概率为准,它在时间步长 =2 时给出输出。如果我们的时间步长 = 3,那么我们将有 27 个具有概率的序列,并且我们对所有这 27 个序列都获得最高分。

如果 |v|= 40000,那么我们需要并行运行解码器 40000 次。

贪婪的搜索:

使用贪婪搜索 - 在每个时间步,我们总是以最高的概率输出令牌(贪婪)

p(w2 = like|w1=I) = 0.35

p(w3= 冷 | w1,w2) = 0.45

p(w4 = 咖啡 |w1,w2,w3) = 0.35

p(w5 = 止损 | w1, w2, s3, s4) = 0.5

则生成序列的概率为

p(w5,w1,w2,w3,w4) = 0.5*0.35*0.45*0.35*0.5 = 0.011

三、一些局限!

Is this the most likely sequence?

如果我们想得到各种相同长度的序列怎么办?

如果起始标记是单词"I",那么它最终总是会产生相同的序列:我喜欢冷咖啡。

如果我们在第一个时间步中选择了第二个最可能的代币怎么办?

然后,后续时间步长中的条件分布将发生变化。则生成序列的概率为

p(w5,w1,w2,w3,w4) = 0.25*0.55*0.65*0.8*0.5 = 0.035

如果我们在第一个时间步中选择了第二个最可能的代币怎么办?

然后,后续时间步长中的条件分布将发生变化。那么生成的序列的概率为

p(w5,w1,w2,w3,w4) = 0.25*0.55*0.65*0.8*0.5 = 0.035

我们可以输出这个序列,而不是贪婪搜索生成的序列。当我们发送相同的输入令牌时,这也将产生相同的输出。贪婪地选择具有最大概率的令牌,每个时间步长并不总是给出具有最大概率的序列。

光束搜索:

不要考虑每个时间步长的所有标记的概率(如在穷举搜索中),而只考虑 top-k 标记

假设 (k=2),在时间步长 = 2 时,我们有两个概率为 I , cold的标记,我们将有 12 个这样的序列。

现在我们必须选择使序列概率最大化的标记。它需要 k x |v|每个时间步的计算。在第二个时间步长,我们有 2 x 6=12 次计算,然后进行排名,我们选择最高概率序列。

让我们从上述概率分数中选出前 2 名。

按照类似的计算,我们最终选择时间步长 = 3 和 3 个单词或标记

现在,我们将在时间步长 T 的末尾有 k 个序列,并输出概率最高的序列。

参数 k 称为光束尺寸。它是穷举搜索的近似值。如果 k = 1,则它等于贪婪搜索。如果 k > 1,则我们正在进行波束搜索,如果 k = V,则我们正在进行穷举搜索。

现在让我们举一个例子,k = 2,标记词汇是 |v|。

以上 2 * |V|我们将再次取前 2 个概率的值

我们将有更多这样的序列,我们将只有 2 个序列继续前进------所以最后我们的流程图看起来像这样

  • 贪婪搜索和光束搜索都容易退化,即它们可能是重复的,没有任何创造力。
  • 贪婪搜索的延迟低于波束搜索
  • 贪婪的搜索和光束搜索都无法产生创造性的输出
  • 但请注意,波束搜索策略非常适合翻译和摘要等任务。

基本上,我们需要一些带有创造性答案或输出的惊喜------因此我们需要一些基于采样的策略,而不需要贪婪或光束搜索。

四、抽样策略 --- Top -K

在这里,在每个时间步长中,考虑概率分布中的 top --- k 个标记。

从 top-k 令牌中对令牌进行采样。假设 k = 2

在对代币进行采样之前,top-k 代币的概率将相对归一化为 , P(I) = 0.61 ~ (0.25/ (0.25+0.4)), P(Coffee) = 0.39 ~ 0.4/(0.25+0.4)。

让我们假设并创建一个随机数生成器,它预测介于 0 和 1 之间 --- rand(0,1)。假设如果获得的数字是 ~0.7,那么咖啡将是作为输入的单词或标记,如果再次生成的随机数是 ~0.2,那么在时间步长 2 中,单词或标记"I"将是输入。

对前 2 个单词使用 top-K 采样生成的序列是

就像<停下来一样>

价和**<止损>**的归一化概率分别为 0.15/(0.55+0.15)~0.23 和 0.55/(0.55+0.15) ~0.77。

现在我们运行 Rand 函数来生成从 0 到 1 的数字------假设如果值为 0.9,则输出<stop> 将是输出,那么结果过程将就此停止。下次当随机生成器输出为 0.5 时,我们将以"喜欢"作为结果。因此,通过进行这种随机生成,我们将获得不同的输出。可能是第一个**"我",生成"<停止>"------**对于所有其他情况,结果可能会有所不同,如下所示。

惊喜是随机的结果。波束搜索与人类预测在每个时间步长上的预测相比如何?

如果我们看一下波束搜索,它会以非常高的概率产生输出,因此我们看不到任何惊喜------但是如果要求人类填写句子,我们将得到不同和随机的结果,概率非常小,因为人类预测具有高方差,而波束搜索预测具有低方差。给其他极有可能的代币一个机会会导致生成的序列出现多样性。

假设我们有 40K 词汇表中的前 5 个单词(I、go、where、now、then),概率分别为 (0.3、0.2、0.1、0.1、0.3)。

如果随机生成器生成任意数字 b/w 0 和 1,并且基于该值,我们将选择或采样单词或标记以选择高概率值。我们必须记住,在这里我们不是从 40K 词汇表中随机选择样本,而是我们正在做的是,我们已经从 40K 词汇表中获得了前 5 个单词,并且从前 5 个单词或样本的子集中,我们正在创建序列------这里它是随机的,但它是序列的受控随机选择。

五、抽样策略 --- Top -P

k 的最优值应该是多少?

让我们举 2 个例子,分别是平坦分布和峰值分布。

示例-1:(平坦分布)

示例 --- 2:(峰值分布)

根据分布类型,K 的值会有所不同------如果我们有一个峰值分布,那么与平坦分布相比,K值高一点将无济于事。

如果我们修复 的 vlaue,比如 k = 5,那么我们就会从平坦分布中遗漏其他同样可能的标记。

它会错过生成各种句子(创意较少)

对于峰值分布,使用相同的值 k = 5,我们最终可能会为更少的句子创造一些意义。

解决方案 --- 1 : 低温采样

当温度 = 1 时,这就是正态 softmax 方程的分布。给定 logits,u1: |v|和温度参数 T ,计算概率为

如果我们减小 T 值,我们会得到峰值分布。

  • 低温 = 偏态分布 = 创造力降低
  • 高温 = 更平坦的分布 = 更多的创造力

解决方案 --- 2: 顶部 --- P(原子核)采样

让我们再考虑上面的两个例子。

  • 按降序对概率进行排序
  • 设置参数 p, 0 < p < 1 的值
  • 将代币从顶部代币开始的概率相加
  • 如果总和超过 p,则从所选令牌中抽取令牌
  • 它类似于 top-k,k 是动态的。假设我们将 p = 0.6 设置为阈值,

**例如,-1 分布:**该模型将从标记中采样(思想、知道、有、看到、说)

例如-2 分布:模型将从令牌中采样(热、冷却)

根据生成的随机值,我们将选择不同的单词标记进行序列形成。

这是对仅解码器模型的所有解码策略的总结,即我们在确定性和随机性上徘徊的 GPT------这种随机策略确保即使 transformer 具有确定性的计算输出,但最后我们将添加一个采样函数,这将确保我们每次都采样不同的令牌,从而生成不同的序列。

相关推荐
dundunmm1 小时前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
Schwertlilien2 小时前
图像处理-Ch5-图像复原与重建
c语言·开发语言·机器学习
南七澄江3 小时前
各种网站(学习资源及其他)
开发语言·网络·python·深度学习·学习·机器学习·ai
IT古董6 小时前
【漫话机器学习系列】014.贝叶斯法则(Bayes Theorem)
人工智能·机器学习
Crossoads7 小时前
【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」
android·java·汇编·深度学习·网络协议·机器学习·汇编语言
机智的叉烧9 小时前
前沿重器[57] | sigir24:大模型推荐系统的文本ID对齐学习
人工智能·学习·机器学习
sunnf12 小时前
DB-GPT 智谱在线模型配置
gpt
云起无垠12 小时前
第79期 | GPTSecurity周报
gpt·aigc
鑫宝的学习笔记12 小时前
使用GPT进行SCI论文润色常用语句
gpt