手撸 chatgpt 大模型:简述 LLM 的架构,算法和训练流程
本节我们自顶向下看看大模型的相关概念,了解其基本架构以及从零手撸大模型的基本流程。自从 openai 释放了 chatgpt 后,人工智能就立马进入了大模型时代,我还记得在此之前 NLP 的处理主要依赖于深度学习的 LSTM,GRU 等模型架构。这些模型参数也就在几百万左右,而大模型出来后,原本这些“先进”的 NLP 处理模型一下变成了笑话然后被扫到了历史的垃圾堆里,如今在自然语言处理方面已经不再有这些红极一时的深度学习模型的身影。
大模型首要特点在于“大”。所谓“大”就是模型的参数多。前面我们提到的深度学习模型 LSTM,GRU 等,参数数量在几百万左右,而大模型的参数数量的计量单位是“十亿”,目前已经“落后”的 gpt3 模型上千亿,而大模型中的“小”模型参数数量也在七八十亿左右,目前国内外最新的大模型参数数量也要三四千亿了。第二个“大”在与训练模型的数据量。我记得训练 LSTM 这些模型时,基本上几本电子书的内容即可,而训练大模型,openai 等这些巨头是将所有互联网的公开数据,所有能电子化的书籍,所有可以接触的数据库全都作为训练数据。正是因为他在参数量和训练数据两方面的大才使得大模型在语言和文字方面的生成能力极强。
第二是在架构方面。大模型使用了两种突破性的算法设计,一个叫 transformer 架构,一个叫 attention 机制。正是这两个模块使得大模型在训练上能够实现高并发,同时在输入数据的识别能力上呈现出“进化”级别的提升。我们先简要看看 transformer 架构的基本信息,它最早应用与文本翻译,它包含两个关键模块,一个是编码器,另一个是解码器:
在机器翻译时,在编码器输入一句原文,编码器把原文转换为一个向量,这个向量会输入给解码器进行分析,然后我们把对应翻译后目标语言的对应句子前部分输入解码器,训练的目的是让解码器生成下一个单词或字,例如当我们要实现英语翻译成中文,那么 “I love you"对应的句子作为输入到编码器,然后在解码器部分只输入“我爱”,最后我们训练解码器生成最后一个字也就是"爱”。
chatGPT 的架构设计与上面的 transformor 有所不同,因为它只有解码器部分而没有编码部分,基本情况如下:
设计成这种模式主要是因为 chatgpt 强调的是文本生成而不是翻译,因此它主要训练生成能力。另一个关键组件是 attention 机制,它相对复杂,我们后面再具体的解析,特别是使用代码实现来了解它。
最后我们看看大模型的基本训练流程:
它主要分成两部分,第一个不服就是 train,也就是通过大量的数据训练基础模型,这个基础模型拥有强大的语言理解和生成能力。然后在基础模型上再训练专业模型,例如训练针对法律领域或者是金融领域的大模型,现在业界主要集中在后半部分,因为基础大模型有很多开源或者可以在 hugging face 上直接下载,而大模型真正的商业竞争力在后半部,也就是组织如何将自己专有数据生成专有知识大模型从而提供专业服务或是提升组织内工作者或合作者的生产效率,我们将深入了解这两部分,首先我们将代码设计基础模型,深入查看训练流程和效果。当然我们个人所拥有的资源不足以训练出有效的模型结果,因此我们只集中在算法设计的训练流程的掌握上。然后我们再去使用开源的基础模型深入理解第二部分也就是特定优调的过程。