大模型如何生成下一个token--解码策略

Background

  • 生成模型目前主要使用自回归(Autoregressive)模型,通过上文信息预测下文信息,如GPT系列;

  • BERT系列使用自编码(AutoEncode)模型,在输入中随机mask一部分token,通过上下文预测这个token;

  • 自回归主要用于生成文本,如机器翻译和对话系统,而自编码主要用于降维和特征提取,如情感分析、聚类和分类等任务。

自回归模型当生成文本时,并不是同时生成一段文字,而是一个字一个字的去生成,同时新生成的字会继续加入上文,用于生成下一个字。

在自回归架构中,模型针对输入内容逐个token生成输出内容的文本。这个过程一般被称为解码

在本章的内容中,我们将首先介绍常见的解码策略

解码策略

我们可以将模型预测的结果看作一个向量,这个向量的长度是vocab size,其中每个位置的大小表示选取这个token的概率,如何基于这个信息选择合适的token作为本次生成的token即为解码策略(decoding strategy)

贪婪策略(Greedy Strategy)

最朴素的方案是直接选择概率最高的token,也就是贪婪策略

优点

  • 简单高效

缺点

  • 可能导致生成的文本缺乏多样性和创意

  • 容易产生重复的句子

  • 每次选取概率最大的token还可能造成看起来每次达到局部最优,但是最终错过全局最优的情况

由于贪心搜索所采取的是确定性策略,它的效果在不同类型的任务中具有一定的差异。在机器翻译和文本摘要等任务中,任务输出高度依赖于输入内容,贪心搜索通常能够获得不错的结果,但是在开放式生成任务(如故事生成和对话系统)中,贪心搜索有时会因为过于关注局部最优,而生成不自然、重复的句子

针对这种问题,提出了beam search

束搜索(Beam Search)

beam search的思路是既然每次选一个概率最大的可能会错过全局最优的选择,那么每次多选择n(i.e. Beam Size)个概率较大的token,再下一次time step继续多选n个概率较大的token,最后综合评估这几条线路的整体概率,选择其中整体概率较大的情况

  • 比如第一步保留了概率最高的两个词“dog”和“nice”作为候选;第二步基于“dog”和“nice” 均进行扩展,我们发现第一步概率较小的dog后面遇到了概率很大的has,使得the dog has整体联合概率达到0.4_0.9=0.36, 而第一步较大概率的the nice women 整理联合概率为0.5_0.4=0.2,通过beam search我们找到了更好的句子序列。

  • 在下面的生成步骤中,将会继续基于这两个候选去进行扩展,每次都选择联合概率最高的两个句子。最后,当两个束的句子均生成结束后,选择整体生成概率最高的候选句子作为最终的输出。

  • 在实践中,Beam Size的数量通常设定在 3 到 6 的范围内,设置过大的束会显著增加运算开销,并可能会导致性能下降。

  • Beam Size为1即退化为贪婪策略

优点

  • 缓解了贪婪策略过于关注局部最优导致错误全局最优的情况

缺点

  • beam search生成的结果相较于人类的结果,仍然有明显的缺点,缺乏多样性,生成内容重复度较高,比较机械

  • https://arxiv.org/pdf/1904.09751

概率采样(Probability Sampling)

另一类方法是根据模型给出的概率分布对token进行采样。虽然较大概率会选中概率较大的token,但是为其他概率较小的token被选中增加了可能性,进而加强生成过程的随机性和文本的多样性。

基于概率采样的方法会在整个词表中选择词元,这可能会导致生成相关性很低的token,导致生成质量下降。为了进一步提高生成质量,减少具有极低概率词汇对于生成结果的影响,主要有以下改进方案:

  • Top-K

  • Top-P

  • temperature

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

Top-K

top-𝑘 采样策略是直接选取概率最大的前K个token,然后从这K个token中基于概率分布情况进行采样。

缺点

Top-k比较简单直接,但是存在一个比较明显的问题,K的范围是固定的,不考虑整体概率分布,对于不同概率分布的情况,无法动态调整K的大小

  • 前K个概率最大的token, 可能有时候主要集中在前1~2个token, 导致后面的token其实没有被选中的必要,浪费计算资源

  • 前K个概率最大的token,可能概率分布比较平均,且都比较小,此时应该扩展K的个数,使得尽量多包含一些token进来做备选;

为了解决这个问题,提出了Top-P;

Top-P (Nucleus Sampling)

Top-P的采样策略是先设置一个概率阈值 𝑝,然后按照概率分布从大到小的顺序,依次将token加入一个子集,当这个子集中的token的概率之和大于或等于p之后,基于当前的子集进行概率采样。

这样的好处在于在不同时间步,随着解码词的概率分布不同,候选词集合的大小会动态变化,不像top-k sampling是一个固定的窗口大小。由于解码词还是从头部候选集中筛选,这样的动态调整可以使生成的句子在满足多样性的同时又保持通顺。

Temperature

上面的top-k, top-p都是在动态选择不同token的候选集范围,本质上并没有更改token的概率。那么,是否可以在直接调节模型输出的概率分布呢?例如,将高频和低频之间的概率拉大或者减少。

Temperature 是用来控制采样过程中随机性的超参数。较低的温度值会使得模型倾向于选择概率较高的词,而较高的温度值会增加低概率词被选中的机会,从而增加生成文本的多样性。

一般我们通过softmax来输出概率分布,通过在其中添加温度参数t,进而控制其概率分布情况

具体来说,降低温度系数𝑡会 使得概率分布更加集中,从而增加了高概率词元的采样可能性,同时降低了低概 率词元的采样可能;当温度系数 𝑡 设置为 1 时,该公式退化为标准的随机采样方 法;而当 𝑡 趋近于 0 时,实际上等同于贪心搜索,即总是选择概率最高的词。此 外,当 𝑡 趋近于无穷大时,温度采样会退化为均匀采样。

对比搜索(Contrastive Search)

  • https://arxiv.org/pdf/2202.06417

  • https://huggingface.co/blog/introducing-csearch

  • 每一步解码时,(1)模型从最可能的候选集合中选出一个作为输出,(2)产生的输出应当与前面已经生成的内容足够不同。这种方式下生成的文本在保持与前文的语义一致性的同时还能避免模型退化。

  • 上式的第一项代表模型对 v 的支持度 v(model confidence),是模型估计的候选词 v 为下一个词的概率。第二项是对模型退化的惩罚项(degeneration penalty)是下一个词 v 与前面已生成的词的相似度最大值。α 是超参数,负责调节两项损失之间的平衡。当 α=0 时,解码方法退化到贪婪搜索。

  • 对比搜索通过惩罚重复性来减少文本中的冗余。它会计算相似度并进行适当惩罚,从而保证生成内容的新颖性和多样性。

长度惩罚 (length penalty)

  • 传统的束搜索会倾向于生成较短的句子,因为每生成一个单词,都会乘以一个小于 1 的概率,使得句子的生成概率逐渐变小。

  • 因此,可以在生成概率的计算中引入长度惩罚,通过将句子概率除以其长度的指数幂 𝛼,对于句子概率进行归一化处理, 从而鼓励模型生成更长的句子

  • 在实践中,𝛼 通常设置为 0.6 到 0.7 之间的数值。

重复惩罚(𝑛-gram Penalty)

  • 为了缓解贪心搜索重复生成的问题,可以使用 𝑛-元惩罚(𝑛-gram Penalty)来强制避免生成重复的连续 𝑛 个词元,实践中 𝑛 通常设置为 3 到 5 之间 的整数。

进一步地,研究人员还提出了相对“温和”的惩罚机制来降低生成重复词元的概率,而不是“一刀切”地完全避免某些短语的生成,如**出现惩罚(Presence Penalty)和频率惩罚(Frequency Penalty)**。

具体地,出现惩罚在生成过程中会将已经生成词元的 logits减去惩罚项 𝛼 来降低该词元之后生成的概率。

频率惩罚相较于出现惩罚,会记录每个token生成的数目,然后减去出现次数乘以惩 罚项 𝛼,因此如果一个词元生成得越多,惩罚也就越大。

在实践中,𝛼 的取值范围 通常在 0.1 到 1 之间。这些重复惩罚方法不止适用于贪心搜索,对于随机采样也均适用。

工程应用

通过上面介绍的不同的采样策略,大语言模型能够根据具体需求灵活地生成各种类型的文本,使得生成结果更加智能和人性化。

在实践中,现有的代码库(如 Transformers)和大语言模型的公开 API(例如 OpenAI)都集成了多种解码策略,以适应不同的文本生成任务。

"messages": [{"content": "Hi","role": "user"}],"temperature": 0.7,"top_p": 1,"tools": null,"tool_choice": "none","logprobs": false,"top_logprobs": 0,"n": 1,"max_tokens": null,"stop": null,"stream": false,"presence_penalty": 0,"frequency_penalty": 0,"user": "string","repetition_penalty": 1,"session_id": -1,"ignore_eos": false,"skip_special_tokens": true,"top_k": 40其他如:"num_beams": 1,
  • T5 默认采用贪心搜索策略。在翻译和摘要任务中,它使用束搜索(束大小为 4)并结合长度惩罚(惩罚因子为 0.6)来优化生成结果。

  • GPT-3 在所有生成任务中都使用束搜索(束大小为 4)和长度惩罚 (惩罚因子为 0.6)。

  • Alpaca 主要面向开放式生成任务,因此使用了基于采样的策略,包括 top-𝑘 采样(𝑘 = 50)和 top-𝑝 采样(𝑝 = 0.9),并将温度参数设置为 0.7,在保证结果可靠的同时促进生成结果的多样性。

  • LLaMA根据具体任务的不同采用了多样化的解码策略。例如,在问答任务中使用了贪心搜索策略;而在代码生成任务中,分别采用了温度设置为 0.1(针对 pass@1)和 0.8(针对 pass@100)的采样策略。

  • OpenAI 支持多种基本的解码策略,包括贪心搜索(通过将温度参数 temperature设置为0实现)、束搜索(通过 best_of参数设置)、温度采样 (通过调整 temperature 参数)以及 Top-𝑝 采样(通过 top_p 参数)。此外,它也支持基于出现惩罚和频率惩罚的重复惩罚机制,分别通过 presence_penalty 和frequency_penalty 来控制。

Next step

了解了解码策略,下一步我们需要考虑解码效率的问题,如何通过提升解码效率进而加快模型推理速度。

这将涉及到内存墙及计算瓶颈分析的问题。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

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

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

相关文章

关于ansible自动化运维工具

成长路上不孤单😊【14后,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&#xff…

HCIE和CCIE,哪个含金量更高点?

在现在内卷的大环境下,技术岗可谓人人自危,也因此各种认证的重视程度直线升高。 特别是华为认证的HCIE和思科认证的CCIE,它们都代表着网络技术领域的顶尖水平。 但面对这两个高含金量的认证,不得不让人问出这个问题:同…

关于Hadoop重新格式化之后集群的崩溃问题

关于Hadoop重新格式化之后集群的崩溃问题 文章目录 关于Hadoop重新格式化之后集群的崩溃问题写在前面版本信息实验场景 HiveHive交互段查询报错原因分析解决方法手动启动元数据服务重新初始化元数据库 HBase清理虚拟机磁盘参考资料 写在前面 版本信息 Linux版本:C…

ListBox显示最新数据、左移和右移操作

1、程序 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static Sys…

基于SSM的二手交易管理系统的设计与实现 (含源码+sql+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的二手交易管理系统1拥有两种角色 管理员:商品管理、订单管理、充值管理、用户管理等用户:发布商品、查看闲置、充值账户、查看所有订单、发布求购信息、修…

Redis Sentinel(哨兵)详解

目录 一:什么是Sentinel(哨兵) 二:Sentinel有什么用 1.监控 2.故障转移 3通知 4.配置提供 三:Sentinel如何检测master节点宕机 1.主观下线 2.客观下线 四:Sentinel是如何选举出新的master 1.s…

SpringBoot3整合ELK实现日志可视化

SpringBoot整合ELK实现日志可视化 一、环境准备 Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统 ELK中各个服务的作用 Elasticsearch:用于存储收集到的日志信息; Logstash:用于收集日志,SpringBoot应用整合了Logstash以后会把日志发…

golang面试

算法: 1.提取二进制位最右边的 r i & (~i 1) 2.树上两个节点最远距离,先考虑头结点参与不参与。 3.暴力递归改dp。 1.确定暴力递归方式。 2.改记忆化搜索 3.严格表方式: 分析可变参数变化范围,参数数量决定表维度、 …

【文心智能体】通过工作流使用知识库来实现信息查询输出,一键查看旅游相关信息,让出行多一份信心

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 创建灵感基本配置头像名称和简介人物设定角色与目标思考路…

Android10源码刷入Pixel2以及整合GMS

一、ASOP源码下载 具体可以参考我之前发布的文章 二、下载相关驱动包 这一步很关键,关系到编译后的镜像能否刷入后运行 下载链接:Nexus 和 Pixel 设备的驱动程序二进制文件 如下图所示,将两个驱动程序上传到Ubuntu服务器,并进行解压,得到两个脚本: 下载解压后会有两…

MySQL数据的增删改查(一)

目录 新增(create) 插入单条记录 插入多条记录 查询(retrieve) 查询所有列 查询特定列 查询字段为表达式 别名 去重 排序 按单列排序 按多列排序 使用表达式或别名排序 排序NULL值 条件查询 比较运算符 逻辑运算…

【阿一网络安全】如何让你的密码更安全?(三) - 散列函数

散列函数 散列函数(Hash Function,又称散列算法、哈希函数),是一种从任何一种数据中创建小的数字指纹的方法。 散列值 散列函数,把任意长的消息明文,压缩成摘要,使得数据量变小,将…

k8s 容忍和污点

文章目录 Taint作用在节点上,能够使节点排斥一类特定的Pod,也就是不能“兼容”该节点的污点的Pod。对应的Toleration作用在Pod上,意为容忍,也就是可以兼容某类污点。 给节点增加一个Taint也很简单,直接使用kubectl ta…

【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)

简介 PostgreSQL 是一个功能强大的开源对象关系数据库系统 下载地址 PostgreSQL: Downloads 由于我电脑上安装的是arcgispro3.1所以需要下载对应的postgresql版本 PostgreSQL 12 对应的 PostGIS 版本主要是 3.5.0 或更高版本。 安装 一般设置为postgresql 安装扩展插件 此…

Centos如何配置阿里云的yum仓库作为yum源?

背景 Centos在国内访问官方yum源慢,可以用国内的yum源,本文以阿里云yum源为例说明。 快速命令 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.a…

《深度学习》OpenCV轮廓检测 模版匹配 解析及实现

目录 一、模型匹配 1、什么是模型匹配 2、步骤 1)提取模型的特征 2)在图像中查找特征点 3)进行特征匹配 4)模型匹配 3、参数及用法 1、用法 2、参数 1)image:待搜索对象 2)templ&am…

【2025】基于python的网上商城比价系统、智能商城比价系统、电商比价系统、智能商城比价系统(源码+文档+解答)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

RTR_Chapter_4_中

四元数 四元数可以用于表示旋转和方向,它在很多地方都比欧拉角和矩阵表示更加优秀。任何三维方向都可以表示为一个绕特定轴的简单旋转,给定一个旋转轴和旋转角度,可以直接将其转换为一个四元数,或者是从一个四元数中提取出旋转轴和…

大数据与人工智能:脑科学与人工神经网络ANN

文章目录 大数据与人工智能:脑科学与人工神经网络ANN一、引言ANN简介研究背景与应用领域发展背景应用场景 二、ANN背后的人脑神经网络人脑神经网络的专业描述神经元的结构信号处理 思考和认知过程认知功能的实现 对机器学习算法的启示 三、ANN的研究进展初始阶段&am…

进程间通信-进程池

目录 理解​ 完整代码 完善代码 回收子进程&#xff1a;​ 不回收子进程&#xff1a; 子进程使用重定向优化 理解 #include <iostream> #include <unistd.h> #include <string> #include <vector> #include <sys/types.h>void work(int rfd) {…