为什么现在的LLM都是Decoder only的架构?
在我看来,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%免费】🆓