【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 具有确定性的计算输出,但最后我们将添加一个采样函数,这将确保我们每次都采样不同的令牌,从而生成不同的序列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/285616.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小游戏-扫雷

扫雷大多人都不陌生&#xff0c;是一个益智类的小游戏&#xff0c;那么我们能否用c语言来编写呢&#xff0c; 我们先来分析一下扫雷的运行逻辑&#xff0c; 首先&#xff0c;用户在进来时需要我们给与一个菜单&#xff0c;以供用户选择&#xff0c; 然后我们来完善一下&#…

OceanMind海睿思入选中国信通院《2023高质量数字化转型技术解决方案集》

近日&#xff0c;由中国信息通信研究院“铸基计划”编制的《2023高质量数字化转型技术解决方案集&#xff08;第一版&#xff09;》正式发布。 中新赛克海睿思 凭借卓越的产品力以及广泛的行业实践&#xff0c;成功入选该方案集的数据分析行业技术解决方案。 为促进数字化转型…

Redis消息队列与thinkphp/queue操作

业务场景 场景一 用户完成注册后需要发送欢迎注册的问候邮件、同时后台要发送实时消息给用户对应的业务员有新的客户注册、最后将用户的注册数据通过接口推送到一个营销用的第三方平台。 遇到两个问题&#xff1a; 由于代码是串行方式&#xff0c;流程大致为&#xff1a;开…

视频号小店月入5w+,真的有那么赚钱吗?

我是电商珠珠 视频号小店是22年视频号团队发展的电商平台&#xff0c;距离现在也不过一年多的时间。我做电商已经有五年左右的时间了&#xff0c;天猫、快手、抖音小店都做过。在22年的时候&#xff0c;我开始琢磨起了视频号小店。 到现在我也拥有了视频号小店的运营团队&…

【C++从练气到飞升】06---重识类和对象

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 ⛳️推荐 一、再谈构造函数 1. 构造函数体赋值 2. 初始化列表 每个成员变量在初始化列表中只能出现一次--初始化只能初始…

python爬虫学习第二天----类型转换

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

leetcode LCR121.寻找目标值-二维数组

目录 问题描述示例具体思路思路一思路二 代码实现 问题描述 m*n 的二维数组 plants 记录了园林景观的植物排布情况&#xff0c;具有以下特性&#xff1a; 每行中&#xff0c;每棵植物的右侧相邻植物不矮于该植物&#xff1b; 每列中&#xff0c;每棵植物的下侧相邻植物不矮于该…

Hive SQL必刷练习题:留存率问题(*****)

留存率&#xff1a; 首次登录算作当天新增&#xff0c;第二天也登录了算作一日留存。可以理解为&#xff0c;在10月1号登陆了。在10月2号也登陆了&#xff0c;那这个人就可以算是在1号留存 今日留存率 &#xff08;今日登录且明天也登录的用户数&#xff09; / 今日登录的总…

一些恶意样本的流量分析学习

Trickbot Trickbot 是一种自 2016 年以来一直在感染受害者的信息窃取者和银行恶意软件。Trickbot通过恶意垃圾邮件&#xff08;malspam&#xff09;分发&#xff0c;也由其他恶意软件&#xff08;如Emotet&#xff0c;IcedID或Ursnif&#xff09;分发。 分析来自恶意垃圾邮件…

银行5G短消息应用架构设计

&#xff08;一&#xff09;RCS简介 1.1 RCS的提出与标准制定 RCS(Rich Communication Services & Suite&#xff0c;富媒体通信)是GSMA(Groupe Speciale Mobile Association&#xff0c;全球移动通信系统协会)在2008年提出的一种通讯方式&#xff0c;RCS融合了语音、消息…

Bytebase 2.14.1 - 分支 (Branching) 功能支持 Oracle

&#x1f680; 新功能 分支 (Branching) 功能支持 Oracle。为 SQL 编辑器添加了项目选择器。 新增 SQL 审核规范&#xff1a; 禁止混合 DDL、DML 语句。禁止对同一张表进行不同类型的 DML 变更 (UPDATE,INSERT,DELETE)。 &#x1f514; 重大变更 工作空间设置中的「数据访问…

【已解决】MySQL:常用的除法运算+精度处理+除数为0处理

目录 问题现象&#xff1a; 问题分析&#xff1a; 拓展&#xff1a; 1、除法运算&#xff1a; 拓展&#xff1a;MySQL中常用的几种除法运算 1、取整除法 2、浮点数除法 3、取余除法 4、向上取整除法 5、向下取整除法 2、运算结果的精度处理 1.1、浮点数 1.2、总位数 1.3、…

电脑哥的励志创业路:蹭别人的电脑做抖店

我是王路飞。 没有一步到位的创业项目&#xff0c;也没有一击必中的解决方法&#xff0c;有的只是需要时刻解决的当下问题。 做事/创业/成长/生活/人生&#xff0c;都不要追求百分百的圆满&#xff0c;不要抱有一帆风顺的幻想&#xff0c;不要期待十全十美的结果。 它们的第…

Visual Studio QT6 工程引入组件模块,例如:QtXml

QT 工程引入 QtXml QT 版本 6.6.1 Visual Studio 版本 Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.7.5 打开 Visual Studio 项目工程选择 工具栏 - 扩展 - QT VS Tools -Qt Project Settings 勾选 xml 后点击确定 点击应用即可 注意&#xff1a;配置环…

day44 动态规划part6

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…

外部普米集中监控多个Prometheus实例:Prometheus Agent 模式与Prometheus 联邦模式 超级详细

外部普米集中监控多个Prometheus实例 Prometheus Agent 模式-使用推送方式来监控1.外部Prometheus配置1.需要开放端口&#xff0c;在启动时&#xff0c;需要配置开放监听端口2.添加prometheus启动参数3.修改配置后重启prometheus即可 2.各个节点的普米配置1.修改prometheus.yml…

HiveSQL一本通 - 案例实操

文章目录 0.HiveSQL一本通使用说明6.综合案例练习之基础查询6.1 环境准备创建数据表数据准备加载数据 6.2 简单查询练习1.查询姓名中带“山”的学生名单2.查询姓“王”老师的个数3.检索课程编号为“04”且分数小于60的学生的分数信息&#xff0c;结果按分数降序排列4.查询数学成…

vue.js——学习计划表

1&#xff09;准备工作 ①打开D:\vue\chapter02\ learning_schedule 目录&#xff0c;找到 index.html 文件。 在文件中引 入BootStrap 样式文件&#xff0c;具体代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

【Linux】权限管理

文章目录 前言1.权限访问者的分类2.文件类型与访问权限3.文件权限值的表达方式4.文件访问权限的相关设置5.file指令6.目录权限理解与漏洞7.粘滞位的理解 前言 Linux下有两种用户&#xff1a;超级用户(root)和普通用户 超级用户&#xff1a;可以再linux系统下做任何事情&#x…

Vue3 + Vite + TS + Element-Plus + Pinia项目(3)--新建路由

1、在src文件夹下新建router文件夹后&#xff0c;创建index.ts文件 2、具体如下 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory(),routes: [{path: "/index",component: () > impor…