Why decoder-only? LLM架构的演化之路

news2024/11/13 8:05:36

图片

如何根据大模型架构进行选型

©作者|Zhongmei

来源|神州问学

引言

本文想为大型语言模型(LLMs)及其下游自然语言处理(NLP)任务的实践者和用户提供一份全面且实用的指南。将从模型架构的角度出发,对比不同架构的特点,希望可以从最底层给大模型选型一些参考意见。以及针对大模型架构的演变过程做出探究,分析decoder-only成为主流架构背后的原因。

大模型常见架构

LLM(大型语言模型)的架构命名某种程度上是混乱而反常的。所谓的“decoder-only(仅解码器)”实际上意味着“自回归编码器-解码器”。“encoder only(仅编码器)” 实际上包含一个编码器和解码器(非自回归),而所谓的“encoder-decoder(编码器-解码器)”真实含义是”自回归编码器-解码器“

—— Yann Lecun

这个小节会简要介绍常见的不同的大模型的模型架构和用例。目前比较常见的是将其分类为:encoder-only, decoder-only以及encoder-decoder。但是正如杨立昆推特帖子中说的,其实这些名称比较难理解。个人觉得最好理解的方式如下:机器学习模型都是根据给定的输入来预测输出,在NLP模型中把出处理输入的组件叫做Encoder,它负责将输入的文字序列转化为一种隐藏表示(语义上丰富表示的特征向量);而生成输出的组件叫做Decoder,负责试用隐藏表达来生成目标文字序列。所以从这种角度讲所有的模型都可以从”Encoder-decoder“的角度来理解,差异在于Encoder、Decoder的注意力模式以及如何共享参数。所以个人觉得更直观的方法是上表格。

图片

表一:模型架构

图片

图1. 不同语言模型的注意力掩码设计不同,掩码全部取1为双向注意力,掩码下三角矩阵为单向注意力。图中蓝色指处理输入时前缀token彼此的注意力,绿色指输入token和输出token间的注意力,黄色则指的是输出token和掩码token间的注意力

架构特性

近年来,大型语言模型(LLM)的快速发展正在彻底改变自然语言处理(NLP)领域。但是,有效且高效地利用这些模型需要对其能力和局限性有实际的了解。

由于自然语言数据易于获得,且已提出了更好地利用极大数据集的无监督训练范式,这促进了自然语言的无监督学习。但NLP领域要求模型不仅能理解语言(NLU),还要能生成语言(NLG),不同架构在平衡这两方面的能力上存在显著差异。

图片

表2:架构特性

1.  Encoder-only:

一种常见的训练方法,是在考虑周围上下文的情况下预测句子中的遮蔽词。这种训练范式被称为掩码语言模型(Masked Language Model)。这种类型的训练通过Masked LM和Next Sentence Prediction的学习目标,使模型能够更深入地理解单词之间及其使用上下文中的关系。这类模型在语义理解上展现出强大的能力,在如情感分析和命名实体识别的NLP任务中取得很好的效果。然而,其完形填空式的训练目标与文本生成任务并不直接相关,且这种架构难以直接应用于从头到尾依次基于上文预测下一个token的标准语言模型目标。最著名的掩码语言模型是BERT,同时,国货之光GLM-130B也属于带掩码处理的这一类型。

2.  Encoder-decoder:

当处理输入和输出的参数不共享时,模型在理解输入和据此生成特定输出方面表现出色。因此,非常适合于机器翻译、文本摘要等需要精确映射的任务。这种精确的映射关系虽然在特定应用中非常有效,但同时也使模型的通用性和灵活性受限,这意味着,费力训练得到的模型,仅对特定类型的任务表现良好。比如谷歌做翻译的模型就不能用于进行语音识别,每涉及到一种新的功能,便需要重新训练一个模型,耗时耗力,很不灵活。代表性的模型是T5。

3.  Decoder-only:

这类模型通过生成给定的前缀单词序列中的下一个单词来训练,这种自回归语言模型被发现在少样本和零样本性能方面最成功。基于这种架构训练得到的模型能够处理广泛的文本生成任务,还能通过无监督学习理解文本内容不需要针对每一种任务进行专门的训练或调整,展现出极大的灵活性和广泛的应用潜力。非常适合内容创作、问答等下游任务。自回归语言模型的例子包括GPT-3、LLaMA等等。

观察:演化过程

图片

图2. LLM进化树(来自论文[2304.13712] Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond)

著名的进化树图出处论文的作者,总结了以下关于大模型演进的观察:

1.  在LLM发展得早期阶段,encoder-only和encoder-decoder模型更受欢迎。然而,自2021年起,随着游戏规则改变者GPT-3入局,decoder-only经历了显著的增长并逐渐主导LLMs的发展,于此同时在BERT带来的初期爆炸式增长之后,encoder-only模型逐渐开始淡出。

2.  encoder-decoder模型仍具有前景,因为这种类型的架构仍在积极探索中,而且大多数都是开源的。Google对开源该架构做出了重大贡献。然而,decoder-only模型的灵活性和多功能性似乎使得Google坚持这一方向的前景不太乐观。

3.  LLMs展现出向封闭源代码的趋势。在LLM开发的早期阶段(2020年之前),大多数模型是开源的。然而,随着GPT-3的引入,公司越来越倾向于闭源,如PaLM、文心一言、Claude2和GPT-4。因此,学术研究人员在进行LLM训练实验变得更加困,基于API的研究可能成为学术界的主流方法。

4.  OpenAI在LLM领域始终保持领导地位,无论是目前还是未来。其他公司和机构正努力赶上OpenAI,开发与GPT-3和GPT-4相媲美的模型。这种领导地位可能归功于OpenAI对其技术路径的坚定承诺,即使最初并未广泛认可。

5.  Meta在开源LLMs方面做出了重大贡献,并推动了LLMs的研究。在考虑对开源社区的贡献时,特别是与LLMs相关的贡献,Meta作为最慷慨的商业公司之一脱颖而出,因为Meta开发的所有LLM都是开源的。

为什么是decoder-only?为什么尤其是Casual decoder?

首先,像之前提到的,BERT这种encoder-only,因为它用masked language modeling预训练,不擅长做生成任务,做NLU一般也需要有监督的下游数据微调,所以它很自然出局,接下来主要讨论的是剩下的encoder-decoder和Prefix-LM为什么即使也能兼顾理解和生成,泛化性能也不错,却没有被大部分大模型工作采用。

原因1:过往研究证明decoder-only泛化化性能更好

Google有两篇著名的发表于ICML’22的论文,一个是《Examining Scaling and Transfer of Language Model Architectures for Machine Translation》,另一个是《What Language Model Architecture and Pretraining Objective Work Best for Zero-Shot Generalization?》,两篇论文都是很实践性的分析论文,和常见的论文在模型做创新不一样,两篇论文都是针对现有NLP语言模型的架构和训练方法、探索其在不同场景下的优劣并总结出经验规律。?

第一篇主要探索语言模型在机器翻译任务上传统语言模型能有多好的表现,是否可以与主流的encoder-decoder匹敌。作者采用类似Transformer-base的架构做基线模型,在WMT14 英法、英德,WMT19 英中,以及自有英德数据集上做了主实验。以此来探索不同模型架构随着加大参数量在机器翻译上的影响。(图3)

图片

图3.在两个数据集上,各种LM变体以及encoder-decoder的BLEU分数-参数量曲线图

(来自:[2202.00528] Examining Scaling and Transfer of Language Model Architectures for Machine Translation)

作者的主要结论如下:

1.  Encoder-decoder架构在计算效率上(以FLOPs衡量)优于所有的LM架构,这或许就是为什么encoder-decoder占据了机器翻译的绝对主流

2.  在模型参数量较小的时候,架构对性能的影响最大。不同的模型显示出不同的参数量特性,但这种差距在都使用大规模参数时缩小了。而且句子序列长度对语言模型参数量特征的影响较小。所以在模型参数量较大时,合理地设计语言模型可以使其与传统的encoder-decoder架构做机器翻译任务的性能不相上下

3.  在机器翻译的zero-shot场景下,PrefixLM 有较好的表现,但是CausalLM掩码看起来就没那么适合。不过,在小语种机器翻译上的迁移性能都优于encoder-decoder架构。而且在大语种翻译上也更少有off-target(翻错语种)的情况

第二篇则针对Zero-shot场景进行更深的研究,探索用什么架构、什么预训练目标最有效。

这篇论文将三种架构:causal decoder-only, non-causal decoder-only,和encoder-decoder和两种预训练目标:autoregressive(自回归语言模型训练)、masked language modeling(掩码语言模型训练)做排列组合测试性能。测试则是看各个模型+训练方式的组合在zero-shot和multitask prompted finetuning后,在新任务上的性能。

作者们发现:

1. 在不做finetuning的情况下,Causal decoder+自回归训练,可以让模型具有最好的zero-shot泛化性能。(这个结论其实符合目前GPT-3这类模型在zero-shot NLG上的突出表现)

2.  有multitask finetuning 的情况下,encoder-decoder+masked language modeling训练则具有最好的zero-shot泛化性能。而且单个任务finetune表现好的架构往往在multitask场景下泛化行也好。

3.  decoder-only架构的模型在做adaptation或者task transfer时,比encoder-decoder需要的开销更小、即更容易任务迁移。

原因2. 成本

Google这个论文大户又有两篇论文,一个是UL2的论文《UL2: Unifying Language Learning Paradigms》,另一个是T5的论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》都拼了老命证明Encoder-Decoder架构相比于Decoder-only的优势,但是它们遭人诟病的在于,这两篇论文的模型尺度都还不算大,以及多数的LLM确实都是在做Decoder-only的,所以这个优势能否延续到更大尺度的LLM以及这个优势本身的缘由。因为如果看回表1,可以看见,如果GPT-3和T5这种模型比较,其实存在两个变量,一个是输入部分的注意力改为双向,另一个是由于输入输出的注意力不共享造成的参数翻倍。这就造成我们无法确定Encoder-Decoder架构的优势,究竟是输入部分改为双向注意力导致的,还是参数翻倍导致的。而如果我们严格控制变量,将GPT-3与仅输入注意力双向的UniLM对比,我们会发现UniLM相比GPT并无任何优势,甚至某些任务更差。如果我们假设这个结论是足够有代表性的,那么可以结论输入部分的注意力改为双向不会带来收益,Encoder-Decoder架构的优势很可能只是源于参数翻倍。如果同样参数量,decoder-only成本消耗类似时效果更好。

其次,Decoder only结构比Encoder-Decoder结构更加简单,训练中Decoder only结构只需要一次前向传播,而Encoder-Decoder结构则需要两次前向传播。所以对比之下,自然计算效率更高。同时,推理过程中,Casual decoder-only支持一直复用KV-Cache,对多轮对话更友好,因为每个token的表示只和它之前的输入有关,而encoder-decoder和PrefixLM就难以做到。

原因3. 训练目标已经奠定了模型能力上限

第一个是预训练的难度上讲,Casual decoder这种架构预训练时每个位置所能接触的信息比其他架构少,要预测下一个token难度更高,当模型足够大,数据足够多的时候,能学习通用表征的上限更高;与此同时,Casual decoder这种架构具有隐式的位置编码功能 ,打破了transformer的位置不变性,而带有双向attention的模型,如果不带位置编码,双向attention的部分token可以对换也不改变表示,对语序的区分能力天生较弱。再加上前人发 现的Casual decoder架构带来了更强的上下文学习能力,它自然而然成为在不同任务上泛化能力和学习上限最强的模型架构。

第二个是知乎上来自大佬苏剑林的高赞回答,我个人感到极其赞同。苏神提出的是注意力改为双向时的低轶问题带来效果下降。Attention矩阵一般是由一个低秩分解的矩阵加softmax而来,具体来说是一个 𝑛×𝑑 的矩阵与 𝑑×𝑛 的矩阵相乘后再加softmax(𝑛≫𝑑),论文《Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth》指出这种形式的Attention的矩阵如果出现低秩情况就会带来表达能力的下降。而对于Decoder-only架构,Attention矩阵是一个下三角阵,注意力矩阵的行列式等于它对角线元素之积,由于softmax的存在,对角线必然都是正数,所以它的行列式必然是正数,即Decoder-only架构的Attention矩阵一定是满秩的,满秩意味着理论上有更强的表达能力。换句话说,Decoder-only架构的Attention矩阵在理论上具有更强的表达能力,建模能力更强。

原因4. 谁都喜欢走被验证过的路

首先OpenAI作为开拓者,用于探索踩坑,坚持用decoder-only架构,用一系列基础摸索验证了可行性。同时对Scaling Laws的研究,见证着GPT-1到GPT-2到GPT-3的行之有效的拓展性,而后对指令微调和RLHF的探索让大家看到了风靡全球的ChatGPT。即使OpenAI论文发的不多,开源项目没有,技术细节也很少披露出来,但大家看到行之有效的训练方法,考虑到找新架构的时间和试错成本,就不愿意做太多改动。另外,在工程上,很对加速推理的技术都是针对Casual decoder的,比如flash attention,我想这也是为什么RWKV这种模型,即使被验证效果不错,也可以scale up但也没什么人问津。

尾语

机器学习模型其实就两个组成部分,数据和架构。通过对LLM架构演化的探讨,我们可以更好地理解不同架构的优劣,为实际应用中的模型选型提供科学依据。希望这篇文章能帮助广大NLP从业者和爱好者,在面对复杂多变的技术环境时,做出更加明智的决策。未来,随着技术的不断进步,我们期待见证更多创新型架构的诞生,推动自然语言处理领域的发展和变革。文章中内容可能和论文或其他博主的用词或理解不同,个人见解,期待大家评论区留言一起讨论或进行批评指正。

图片

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程上下文切换:详解与优化

多线程上下文切换:详解与优化 一、什么是多线程上下文切换?二、对性能的影响2.1 优点2.2 缺点 三、优化策略 💖The Begin💖点点关注,收藏不迷路💖 一、什么是多线程上下文切换? 多线程上下文切…

在 Vim 编辑器中,如果某个单词被意外地高亮显示,使用:noh可以取消高亮显示

文章目录 1、问题出现的背景2、解决办法 1、问题出现的背景 配置镜像加速器,修改 /etc/docker/daemon.json 目录下的文件,不小心高亮显示https,产生问题的步骤是,我先是按esc键退出vim的编辑模式,然后在https的前面按…

Android经典面试题之Kotlin中 if 和 let的区别

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在Kotlin中,if和let虽然有时候用来处理相似的情景,但它们实际上是用于不同的场景并具有不同的性质。下面我们来详细对比…

K-近邻和神经网络

K-近邻(K-NN, K-Nearest Neighbors) 原理 K-近邻(K-NN)是一种非参数分类和回归算法。K-NN 的主要思想是根据距离度量(如欧氏距离)找到训练数据集中与待预测样本最近的 K 个样本,并根据这 K 个…

安科瑞ASJ系列智能剩余电流继电器介绍

产品概述: 安科瑞ASJ系列智能剩余电流继电器是一种重要的电气安全保护设备,‌主要用于交流50Hz、‌额定电压400V及以下的TT和TN系统配电线路中。‌该系列继电器的主要功能包括对电气线路进行接地故障保护,‌以防止接地故障电流引起的设备损坏…

C语言家教记录(一)

C语言家教记录(一) 导语C语言简介特点优点缺点 Codeblocks安装和使用简单程序结构变量(常量)和赋值类型声明常量赋值标识符 基本运算输入输出printf基本格式转义序列 scanf转换说明 示例程序总结和复习 导语 本次授课内容如下&am…

一句JS代码,实现随机颜色的生成

今天我们只用 一句JS代码,实现随机颜色的生成,首先看一下效果: 每次刷新浏览器背景颜色都不一样 实现此效果的JS函数 : let randomColor () > ...: 定义一个箭头函数randomColor,用于生成一个随机颜色。 Math.ra…

苹果发布iPhone AI,Apple Intelligence初版落地!未融入ChatGPT,仅面向付费开发者

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 苹果公司Apple Intelligence初版落地:iPhone AI引领智能化新篇章 在全球科技领域,苹果公司一直以其创新精神和前沿技术…

java算法day27

java算法day27 动态规划初步总结509 斐波那契数杨辉三角打家劫舍完全平方数 动态规划初步总结 如果你感觉某个问题有很多重叠子问题,使用动态规划是最有效的。 动态规划的过程就是每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心了。贪心是…

热力图大揭秘!Matplotlib教你如何画出让数据‘火辣辣‘的激情图!

1. 引言 嘿,小伙伴们!今天咱们来点不一样的,走进Matplotlib的神奇世界,一起绘制那让人热血沸腾的热力图!别误会,这可不是什么天气预报图,而是让数据“火辣辣”展现自我的秘密武器。想象一下&am…

PHP进阶-CentOS7部署LNMP服务架构的项目

在开发和部署Web应用时,LNMP(Linux、Nginx、MySQL、PHP)的组合是非常常见的。这篇博客将介绍如何通过一个简单的脚本,在CentOS 7上部署LNMP,并将PHP项目自动部署到服务器上。这不仅可以节省大量的时间,还能…

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-03-中间层(业务层|逻辑层)架构设计

文章目录 1. 业务逻辑层组件设计1.1 业务逻辑组件的实现类1.2 业务逻辑组件的配置 2. 业务逻辑层工作流设计2.1 工作流2.2 工作流参考模型2.2.1 概述2.2.1 工作流参考模型 3. 业务逻辑层实体设计3.1 业务逻辑层实体概述3.2 逻辑层实体的表示方法3.2.1 XML表示业务层实体3.2.2 通…

Prometheus+Grafana 监控平台实践-搭建常用服务监控告警

前言 Prometheus 是一个开放性的监控解决方案,通过各种 Exporter 采集当前主机/服务的数据,和 Grafana 相结合可以实现强大的监控和可视化功能 本篇将分享使用 docker compose 构建 Prometheus+Grafana,并监控之前文章所搭建的主机&服务,分享日常使用的一些使用经验 文…

Qt基础 | UDP通信 | UDP单播、广播、组播的介绍与实现

文章目录 一、QUdpSocket 实现 UDP 通信1.UDP 通信概述2.UDP 单播和广播2.1 主窗口类定义和构造函数2.2 UDP通信实现 3.UDP 组播3.1 主窗口类定义和构造函数3.2 组播功能的程序实现 Qt 网络模块: Qt基础 | 主机信息查询 | QHostInfo的介绍和使用 | QNetworkInterfac…

排序算法:选择排序,golang实现

目录 前言 选择排序 代码示例 1. 算法包 2. 选择排序代码 3. 模拟排序 4. 运行程序 5. 从大到小排序 循环细节 外层循环 内层循环 总结 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行排序 假如 30 条数据进行排序 选择排序的适用场景 1. 数据规模…

SAP PowerDesigner@官网下载

背景 略 问题 略 解决 用户可以通过访问SAP支持网站的首页(‌https://support.sap.com/home.html)‌,‌然后导航到“Software Downloads”(‌软件下载)‌部分来访问SAP软件的下载入口。‌在这里,‌用户可…

HCIP笔记1

hcia复习 osi--开放式系统互联参考模型---7层参考模型 tcp/ip协议栈道---4或5层 osi: 应用层 抽象语言-->编码 表示层 编码-->二进制 会话层 提供应用程序的会话地址 上三层为应用程序对数据流量进行加工及处理的阶段 传输层 分段、端口号 tcp/udp 网…

Apache2 Ubuntu-XXE漏洞渗透

Apache2 Ubuntu-XXE漏洞渗透 Apache2 Ubuntu Default Page 是一个包含xxe漏洞的页面,如何找到和利用xxe漏洞,并找到flag呢? 第一步:先打开其网页 当安装好虚拟机环境后,打开虚拟机我们并不知道它linux的账号密码 因…

通配符https证书的申请途径和配置方法

一、通配符SSL证书的功能 通配符SSL证书,也被称为泛域名证书,是一种特殊类型的SSL证书,它能够保护一个主域名及其所有次级子域名(不可跨级保护)。例如,如果您的主域名是example.com,那么一个通…

Vue2从基础到实战(v-bind对于样式控制的增强-操作style,v-model在其他表单元素的使用)

v-bind对于样式控制的增强-操作style 语法&#xff1a;style"样式对象" <div class"box" :style"{ CSS属性名1: CSS属性值, CSS属性名2: CSS属性值 }"></div> 代码解析&#xff1a; HTML结构&#xff1a; 包含了一个div元素&…