为什么现在的LLM都是Decoder only的架构?

devtools/2024/9/25 3:08:10/

在我看来,Encoder-Decoder架构和Decoder only架构的主要区别,在于它们的灵活性和专业性有所差别。

Encoder-Decoder架构通常用于处理一些需要在输入和输出间建立精确映射的任务,比如机器翻译、文本摘要等。在这些任务中,理解输入的精确内容并据此生成特定的输出是非常重要的。而基于这种架构训练出来的模型,一般只能应用于某种特定的任务,比如一个专为机器翻译训练的Encoder-Decoder模型可能不适合直接用于文本摘要或其他类型的任务。

相比之下,Decoder only架构则具有更强的灵活性。基于这种架构训练得到的模型可以处理多种不同类型的文本生成任务,如聊天机器人、内容创作、问答、翻译等等,不需要针对每一种任务进行专门的训练或调整,也不需要在输入和输出间构建严格的映射关系。


 

用经典的transformer结构图进行直观的说明,Encoder-Decoder架构包括左右两部分,而Decoder only架构则只包括右边一部分。

Openai成员们发表的关于初代GPT的文章Improving Language Understanding by Generative Pre-Training(使用通用的预训练来提升语言的理解能力)中,详细描述了GPT1的Decoder only架构


其实在ChatGPT横空出世之前,Encoder-Decoder架构着实“风光”了一段时间。

比如当年一经出场就横扫同行,翻译效果令人眼前一亮的谷歌翻译,便是基于当年最为“风骚”的attention技术实现。

 

用一张动图来描述“中译英”的过程:首先,将中文句子中的所有词编码成一个向量列表,其中的每一个向量,表示到目前为止所有被读取到的词的含义(也就是编码过程)。一旦整个句子读取完成,解码器便开始工作,依次生成对应的每个英文单词。为了尽量生成正确的词,解码器重点“注意”与生成英语词最相关的编码的汉语向量的权重分布,也就是attention机制在其中起到重要作用。
 

其实了解了Encoder-Decoder架构的训练思路和过程后,就可以发现这种架构存在的几个最大的缺点:

数据预处理:Encoder-Decoder模型通常对于输入和输出之间的精确对齐要求非常严格,这也就意味着需要复杂的数据预处理过程。而且对于不同类型的输入和输出数据,可能需要用到不同的预处理方法,比如机器翻译中的双语对齐;比如图像字幕识别任务中的图像预处理和文本预处理等等。

输入数据难以获取:Encoder-Decoder架构通常高度依赖于输入和输出之间的关系,这就要求收集到的输入和输出数据具备精确的映射关系,增大了数据收集的难度,大大减少了符合要求的数据量。

训练时间更长:由于结构的复杂性,Encoder-Decoder模型可能需要很长的训练时间。尤其是处理长序列时,为了理解和编码整个序列的上下文,为了计算序列中每个元素与其他所有元素间的关系,为了储存更多的数据点和中间计算结果,仅在Encoder阶段,就需要消耗大量的时间和内存,增加训练难度。

模型应用受限:而最令人恼火的,还是费劲力气训练得到的模型,仅对特定类型的任务表现良好,比如谷歌翻译不能用于进行语音识别,每涉及到一种新的功能,便需要重新训练一个模型,耗时耗力,很不灵活。

而去年如雨后春笋般冒出来的各种大模型,一个重要的主打功能便是:多模态

也就是说,对于大模型的要求是,既能文字聊天,又能语音聊天;既能生成文本,又能画出美图;既能根据文字出音,又能根据文字做视频。
 

通过体验多模态LLM的聊天功能、图片生成、语音对话等,就可以发现Decoder-only架构的灵活性。不仅如此,Decoder-only可以让模型构建和训练的各个步骤都显得更加便捷:

灵活的输入格式:由于Decoder-only模型本质上是根据给定的文本串生成输出,因此它们可以接受各种格式的输入。包括问题和回答、提示和续写、以及代码和其执行结果等。也就是说,无需特意对输入数据集进行“清洗”。

无需特定的任务架构:与Encoder-Decoder架构不同,Decoder-only模型不需要为不同类型的任务构建特定的encoder部分。也就是说,同一个模型可以在没有或仅需要少量修改的情况下,处理多种任务。

简化的预训练和微调过程:在预训练和微调阶段,没有繁琐的encoder过程,Decoder-only模型可以更加容易的进入训练过程。此外,由于训练过程主要关注如何基于给定的上下文生成文本,因此既不需要用户提供复杂的输入输出编码关系,也不需要专门处理这些复杂的映射。

易于扩展性:由于结构的简单和统一,Decoder-only模型通常更容易扩展到更大的模型尺寸,有助于提升模型的性能和适应性。这也就是去年涌现出的众多LLM,参数数量能够不断攀上新高的主要原因之一。

当然,Decoder-only架构理论上也是存在一些缺点的:比如Decoder-only架构通常只能基于先前的文本来生成新文本,在理解某些复杂输入方面可能不如Encoder-Decoder架构那么强大;比如Decoder-only模型在处理长序列时可能面临长期依赖的问题,在长文本中维持上下文一致性和相关性可能表现不佳;比如Decoder-only模型更易出现“幻觉”,因为模型在生成新文本时主要依赖于先前生成的文本,而不是直接从原始输入中提取信息,因此输出结果的可靠性可能不如Encoder-Decoder模型。

但是随着算力的不断提升,数据的不断丰富以及模型结构的日益复杂,Decoder-only架构的相关缺点可以在一定程度上得到克服:

  • 算力的提高可以加速模型的训练和推理过程,即使处理规模更大、复杂程度更高的数据集时,也显得游刃有余。
  • 更强的计算能力允许模型拥有更大、更复杂的结构,可能有助于改善模型在长期依赖方面的表现,以及一定程度上改善“幻觉”问题。
  • 越来越完善的数据集可以提供更加多样化和覆盖面更广的信息,帮助模型学习到复杂的语言模式和上下文关系,从而提升生成内容的质量。
  • 基于预训练模型,针对不同类型的任务进行微调,可以显著提高模型的泛化能力和适应不同任务的能力。

不过任何一种特定结构的模型,都有其上限,简单的增加模型大小和数据量并不总是解决问题的最佳途径。未来大模型发展到一定阶段,可能面临过拟合和优化困难等问题。到时候想要得到突破,恐怕还是需要各领域专家灵光一现,从模型基本架构的角度实现突破。

 

 如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

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

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

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

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

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

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

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


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

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

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

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


1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓


http://www.ppmy.cn/devtools/116779.html

相关文章

蓝桥杯算法之暴力

暴力 1.十进制数转换成罗马数字 2.判断给出的罗马数字是否正确 小知识 %(模除): % 符号用作模除(或取模)运算符。模除运算是一种数学运算,它返回两个数相除的余数。 具体来说,如果 a 和 b 是…

Android CarrierConfig 配置问题的解决流程

开发步骤 确认代码路径 查看编译用的CarrierConfig APK在项目代码的path,一般是源码或者厂商定制的: packages/apps/CarrierConfig/vendor/mediatek/proprietary/packages/apps/CarrierConfig Note:一些overlay的方式是替换xml文件&#…

C++ STL容器(三) —— 迭代器底层剖析

本篇聚焦于STL中的迭代器,同样基于MSVC源码。 文章目录 迭代器模式应用场景实现方式优缺点 UML类图代码解析list 迭代器const 迭代器非 const 迭代器 vector 迭代器const 迭代器非const迭代器 反向迭代器 迭代器失效参考资料 迭代器模式 首先迭代器模式是设计模式中…

[数据结构]无头单向非循环链表的实现与应用

文章目录 一、引言二、线性表的基本概念1、线性表是什么2、链表与顺序表的区别3、无头单向非循环链表 三、无头单向非循环链表的实现1、结构体定义2、初始化3、销毁4、显示5、增删查改 四、分析无头单向非循环链表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引…

Redis中的setnx的使用场景

Redis中的SETNX命令是一个非常有用的工具,特别是在处理分布式系统和并发控制时。SETNX是“Set if Not Exists”的缩写,用于设置键的值,但仅当键不存在时。以下是SETNX命令的一些主要使用场景: 1. 分布式锁 在分布式环境中&#…

【MySQL 04】数据类型

目录 1.数据类型分类 2.数值类型 2.1 tinyint 类型 2.2 bit类型 2.3 float类型 2.4decimal 3.字符串类型 3.1 char类型 3.2 varchar类型 4.日期和时间类型 6. enum和set类型 6.1.enum和set类型简介: 6.2.enum和set的一般使用方法 6.3.用数字的方式…

如何把pdf转换成word文档?6种转换方法看完就学会

在日常工作和学习中,PDF文件和Word文档可以说是两种非常常见的文件格式了。然而,PDF文件的不可编辑性常常让我们感到困扰,在遇到需要编辑修改内容的PDF文件时,就需要将其转换成Word文档来便于编辑修改,那么该怎么转换呢…

C语言在嵌入式系统中的应用有哪些?

C语言在嵌入式系统中的应用非常广泛,这主要得益于其高效的运行速度、优秀的代码优化能力以及丰富的函数库。以下是C语言在嵌入式系统应用中的几个关键方面: 1. 硬件直接访问能力 底层硬件操作:C语言提供了直接访问底层硬件的机制&#xff0…