[从0开始AIGC][LLM]:LLM中Encoder-Only or Decoder-Only?为什么主流LLM是Decoder-Only?

server/2024/11/15 0:42:54/

LLM中Encoder-Only or Decoder-Only & 为什么主流LLM是Decoder-Only?

文章目录

  • LLM中Encoder-Only or Decoder-Only & 为什么主流LLM是Decoder-Only?
    • 1. 什么是Encoder-only、Decoder-Only
    • 2. 为什么当前主流的LLM都是Decoder-only的架构
      • 低秩问题

1. 什么是Encoder-only、Decoder-Only

大模型(Large Language Model,LLM),目前一般指百亿参数以上的语言模型,主要面向文本生成任务。而"encoder-only"和"decoder-only"是两种不同的架构,它们都基于Transformer模型,但在处理输入和生成输出的方式上有所不同。

在这里插入图片描述

在 Transformer 模型中,编码器(Encoder)负责理解和提取输入文本中的相关信息。这个过程通常涉及到处理文本的序列化形式,例如单词或字符,并且用自注意力机制(Self-Attention)来理解文本中的上下文关系编码器的输出是输入文本的连续表示,通常称为嵌入(Embedding)。这种嵌入包含了编码器从文本中提取的所有有用信息,并以一种可以被模型处理的格式(通常是高维向量)表示。然后将编码的结果传递给解码器。解码器(Decoder)的任务是根据从编码器接收到的嵌入来生成翻译后的文本(目标语言)。解码器也使用自注意力机制(添加attn mask),以及编码器-解码器注意力机制,来生成翻译的文本。

[Encoder-only]:

  • Encoder-only模型,如BERT,主要用于理解和提取输入文本中的相关信息。这个过程通常涉及到处理文本的序列化形式,例如单词或字符,并且用自注意力机制(Self-Attention)来理解文本中的上下文关系。
  • BERT只使用了Transformer模型中的编码器部分,因为它主要用于处理单向输入数据。BERT的预训练目标是通过掩盖部分输入来预测其他部分,即完形填空,或者预测两个句子之间的关系,这些任务并不涉及到生成输出序列的自回归任务,因此不需要解码器。

自回归指输出的内容是根据已生成的token做上下文理解后一个token一个token输出的。

[Decoder-only]:

  • Decoder-only模型主要是为了预测下一个输出的内容/token是什么,并把之前输出的内容/token作为上下文学习。
  • 在Transformer模型的解码器中,自注意力机制允许每个位置的输出都依赖于输入序列中所有位置的信息。然而,当生成输出序列时,我们希望位置i的输出只依赖于位置i之前的已知输出,而不依赖于位置i之后的输出。为了实现这一点,Decoder使用了一种“掩码”技术(attn_mask),阻止模型关注位置i之后的位置。

[Encoder-Decoder]:

  • 这种架构的LLM通常充分利用了上面2种类型的优势,采用新的技术和架构调整来优化表现。这种主要用于NLP,即理解输入的内容NLU,又能处理并生成内容NLG,尤其擅长处理输入和输出序列之间存在复杂映射关系的任务,以及捕捉两个序列中元素之间关系至关重要的任务。
  • T5、BART

总的来说,encoder-only类型的更擅长做分类,理解场景;encoder-decoder类型的擅长输出强烈依赖输入的,比如翻译和文本总结,而其他类型的就用decoder-only,如各种Q&A。
在这里插入图片描述

2. 为什么当前主流的LLM都是Decoder-only的架构

引用自:苏神:https://kexue.fm/archives/9529

跟小尺度模型(10亿或以内量级)的“百花齐放”不同,目前LLM的一个现状是Decoder-only架构的研究居多,像OpenAI一直坚持Decoder-only的GPT系列就不说了,即便是Google这样的并非全部押注在Decoder-only的公司,也确实投入了不少的精力去研究Decoder-only的模型,如PaLM就是其中之一。那么,为什么Decoder-only架构会成为LLM的主流选择呢?

一般的NLP任务都是根据给定的输入来预测输出,完全无条件的随机生成是很少的,换句话说,任何NLP任务都可以分解为“输入”跟“输出”两部分,我们可以把处理“输入”的模型叫做Encoder,生成“输出”的模型叫做Decoder,那么所有任务都可以从“Encoder-Decoder”的视角来理解,而不同模型之间的差距在于Encoder、Decoder的注意力模式以及是否共享参数:

共享参数:

  • 在GPT模型中,"共享参数"主要是指输入层和输出层的参数是共享的。
  • 在GPT模型中,输入和输出都是词汇表中的单词,因此它们可以共享同一个词嵌入矩阵
Encoder注意力Decoder注意力是否共享参数
GPT单向单向
UniLM双向单向
T5双向单向

这里的GPT就是Decoder-only的代表作;UniLM则是跟GPT相似的Decoder架构,但它是混合的注意力模式;T5则是Encoder-Decoder架构的代表作,主要是Google比较感兴趣。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
双向混合单向(正向)单向(反向)

Google在T5和UL2两篇论文中做了较为充分的对比实验,结果均体现出了Encoder-Decoder架构相比于Decoder-only的优势,但由于从LLM的角度看这两篇论文的模型尺度都还不算大,以及多数的LLM确实都是在做Decoder-only的,所以这个优势能否延续到更大尺度的LLM以及这个优势本身的缘由,依然都还没有答案。

从上表可以看出,其实GPT跟UniLM相比才算是严格控制变量的,如果GPT直接跟T5相比,那实际上产生了两个变量:输入部分的注意力改为双向以及参数翻了一倍。而之所以会将它们三个一起对比,是因为它们的推理成本大致是相同的。

相比GPT,既然T5有两个变量,那么我们就无法确定刚才说的Encoder-Decoder架构的优势,究竟是输入部分改为双向注意力导致的,还是参数翻倍导致的。为此,笔者在10亿参数规模的模型上做了GPT和UniLM的对比实验,结果显示对于同样输入输出进行从零训练(Loss都是只对输出部分算,唯一的区别就是输入部分的注意力模式不同),UniLM相比GPT并无任何优势,甚至某些任务更差

假设这个结论具有代表性,那么我们就可以初步得到结论:

输入部分的注意力改为双向不会带来收益,Encoder-Decoder架构的优势很可能只是源于参数翻倍。

换句话说,在同等参数量、同等推理成本下,Decoder-only架构很可能是最优选择。当然,要充分验证这个猜测,还需要补做一些实验,比如Encoder和Decoder依然不共享参数,但Encoder也改为单向注意力,或者改为下一节介绍的正反向混合注意力,然后再对比常规的Encoder-Decoder架构。但笔者的算力有限,这些实验就留给有兴趣的读者了。

低秩问题

突破瓶颈,打造更强大的Transformer - 科学空间|Scientific Spaces

为什么**“输入部分的注意力改为双向不会带来收益”呢?明明输入部分不需要考虑自回归生成,直觉上应该完整的注意力矩阵更好呀?笔者猜测,这很可能是因为双向注意力的低秩问题**带来的效果下降。

Attention矩阵一般是由一个低秩分解的矩阵加softmax而来,具体来说是一个 n × d n×d n×d 的矩阵与 d × n d×n d×n 的矩阵相乘后再加softmax(在NLP问题中 n ≫ d n≫d nd),这种形式的Attention的矩阵因为低秩问题而带来表达能力的下降,具体分析可以参考《Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth》。而Decoder-only架构的Attention矩阵是一个下三角阵,注意三角阵的行列式等于它对角线元素之积,由于softmax的存在,对角线必然都是正数,所以它的行列式必然是正数,即Decoder-only架构的Attention矩阵一定是满秩的!满秩意味着理论上有更强的表达能力,也就是说,Decoder-only架构的Attention矩阵在理论上具有更强的表达能力,改为双向注意力反而会变得不足。

还有个间接支持这一观点的现象,那就是线性Attention在语言模型任务上(单向注意力)与标准Attention的差距,小于它在MLM任务上(双向注意力)与标准Attention的差距,也就是说,线性Attention在双向注意力任务上的效果相对更差。这是因为线性Attention在做语言模型任务时,它的Attention矩阵跟标准Attention一样都是满秩的下三角阵;在做MLM任务时,线性Attention矩阵的秩比标准Attention矩阵更低(线性Attention是 n × d n×d n×d 的矩阵与 d × n d×n d×n 的矩阵的秩不超过d,标准Attention是n×d的矩阵与d×n的矩阵相乘后加softmax,softmax会有一定的升秩作用,参考《Transformer升级之路:3、从Performer到线性Attention》中的“低秩问题”一节及评论区)。

反过来,这个结论能不能用来改进像BERT这样的双向注意力模型呢?思路并不难想,比如在Multi-Head Attention中,一半Head的Attention矩阵截断为下三角阵(正向注意力),另一半Head的Attention矩阵截断为上三角阵(反向注意力);又或者说奇数层的Attention矩阵截断为下三角阵(正向注意力),偶数层的Attention矩阵截断为上三角阵(反向注意力)。这两种设计都可以既保持模型整体交互的双向性(而不是像GPT一样,前一个token无法跟后一个token交互),又融合单向注意力的满秩优点。

笔者也简单做了对比实验,发现正反向混合的注意力在MLM任务上是比像BERT这样的全双向注意力模型效果稍微要好点的:

在这里插入图片描述

全双向注意力与正反向混合注意力的训练曲线比较

好消息是看得出略有优势,间接支持了前面的猜测;坏消息是这实验的只是一个base版本(1亿参数)的模型,更大模型的效果尚未清楚。


http://www.ppmy.cn/server/106839.html

相关文章

62. 不同路径 -dp6

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/unique-paths/ 输入:m 3, n 2 输出:3 解释&a…

7. Java 中 HashMap 的扩容机制是怎样的?

​​​​​​HashMap 是基于哈希表的数据结构,其容量是动态调整的。当存储的元素数量增加时,为了保持较好的性能,HashMap 需要进行扩容。HashMap 的扩容机制是为了减少哈希碰撞,提高查询效率。 1. 初始容量和负载因子 初始容量&a…

WSL-ubuntu下载安装配置cudnn

下载 安装cuDnn的话需要和CUDA版本对应,可参考官网: cuDNN Archive | NVIDIA Developer 我的cuda是11.8 这个cuDNN8.9.7_Linux直接下载: https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.7/local_installers/11.x/cudn…

Python学习笔记(十)

""" 演示对文件的读取 """ import time # 打开文件 # fopen(name,mode,encoding) # name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径) # mode:设置打开文件的模式(访问模式)&#x…

JVM的内存模型和垃圾回收

JVM内存区域 内存模型图: 堆 线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。 它的目的是存放对象实例。同时它也是GC所管理的主要区域,因此常被称为GC堆,又由于现在收集器常使用分代算法,Java堆中还…

【docker compose 部署和 go 热部署工具fresh】

文章目录 docker-compose.yml 文件配置得很全面,以下是一些注释安装 fresh配置 fresh注意事项 docker-compose.yml 文件配置得很全面,以下是一些注释 version: 3 services:# MySQL 服务geekai-mysql:image: registry.cn-shenzhen.aliyuncs.com/geekmast…

TapData 信创数据源 | 国产信创数据库 Vastbase 数据同步指南,加速国产化进程,推进自主创新建设

随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国产数据库正在成为主流。长期以来,作为拥有纯国产自研背景的 TapData,自是非常重视对于更多国产信创数据库的数据连接器支持&…

k8s service

k8s service 1. K8s Service 概念 Kubernetes Service(简称K8s Service)是Kubernetes中的一个核心组件,它主要负责在集群中为应用程序提供稳定的服务发现和负载均衡功能。Service是一个抽象层,它将一组Pod(运行应用程…