Transformer的架构及其原理,其架构如下图:
模型主要分为左右两个部分,其中左边的部分是encoder,右边的部分是decoder。看起来很复杂,其实不管是encoder还是decoder,实际上里面就一个核心的部分——Multi-Head Attention,也即多头注意力机制。为了让模型关注到输入序列中不同的相互关系,比如长距离依赖或者词义近似关系,Transformer采用多头注意力机制来增强模型对序列的特征提取能力。
在encoder中,输入首先经过embedding层将词元转换为词向量表示,然后再加上位置信息即Positional Encoding(这里使用的是基于三角函数的位置嵌入),之后输入N个由“多头注意力+残差连接和层规范化+基于位置的前馈网络+残差连接和层规范化”组成的块,然后输出到解码器(这里输出到解码器的特征要同时作为键和值)。
在decoder中,解码器的输入是移位后的目标序列,经过词嵌入并加入位置信息后,输入N个由“掩码多头注意力(为了确保模型在训练时不会“偷看”未来的词语)+残差连接和层规范化+多头注意力+残差连接和层规范化+基于位置的前馈网络+残差连接和层规范化”组成的块,然后输出到线性层并经过softmax输出下一个词的预测概率。
在大数据的预训练下,Transformer结构通过增大模型规模和训练计算量展现了很强的扩展性。具体来说,基于Transformer的语言模型的性能与模型参数量、训练数据量和计算量呈幂律关系。Transformer主要可以在三种模式下使用:仅编码器模式、编码器-解码器模式和仅解码器模式。
仅编码器模式
在仅使用Transformer编码器的情况下,输入token(词元)序列被转换为相同数量的表征,并可进一步投射为输出(如分类)。其中一个仅使用编码器例子就是bert,它使用掩码语言模型(MLM)进行预训练:随机掩码的输入文本token被传入Transformer编码器以预测这些掩码token。原理如图(所有图片引自《动手学深度学习》):
在原始文本“I”,“love”,“this”,“red”,“car”前放置一个“”token,并随机将“love”替换为“”然后输入编码器中并输出预测序列;然后在预训练过程中最小化掩码token “love”与其预测值之间的交叉熵损失。由于Transformer编码器的注意力模式中没有约束,所有token可以相互计算注意力,因此“love”的预测依赖于序列中它前后的输入token,所以BERT本质上是“双向编码器”。
预训练的BERT可以微调到单文本或文本对的下游编码任务。在微调过程中,可以在BERT之上添加额外的网络层,这些网络层的参数以及BERT的预训练参数会被更新以适应下游任务的训练数据。下图展示了BERT在情感分析任务中的微调过程:
预训练的BERT编码器接收一个文本序列作为输入,并将“”的对应的bert输出(此时代表着输入的全局表征)输入全连接层以预测情感。在微调过程中,通过梯度下降最小化预测值与情感标签之间的交叉熵损失。
预训练的 BERT 还可以用作 embedding 层,用于生成句子或词的深度表征。在这种应用中,我们利用 BERT 的编码器能力,将输入的文本序列(例如句子或词元序列)转换成高维向量表示。这些向量称为 BERT embeddings,因为它们可以捕捉到丰富的语义信息,比传统的词向量(如 Word2Vec、GloVe)能够更全面地表达上下文含义。
编码器-解码器模式
T5(文本到文本的 Transformer)是典型的编码器-解码器架构。T5模型的核心思想是将各种自然语言处理任务都统一为“文本到文本”(text-to-text)的问题形式。通过任务描述来区分任务类型,并让解码器根据任务的需求生成对应的输出文本(比如文本摘要任务:输入可能是 “总结:这篇文章讨论了气候变化的影响……”,T5 会生成文章的摘要)。T5 的训练过程正是基于这种“文本到文本”统一框架进行的,如下图,T5通过预测连续片段进行预训练。在训练阶段,T5 的输入会包含任务描述,它是以一种特殊的文本提示(prompt)形式加入的,会作为输入序列的开头部分,直接嵌入到模型的输入中,下图并没有直接体现出来。
如图,原始文本是“I”,“love”,“this”,“red”,“car”。在文本中,连续片段被相同的特殊令牌替换。比如,标记“love”、“red”、“car”随机被特殊标记替换,由于“red”和“car”是连续的,因此它们会被相同的特殊标记替代。因此,编码器的输入序列为“I”,“”,“this”,“”,而解码器要输出的目标序列为“”,“love”,“”、“red”、“car”,以及另一个特别的结束标记“”。在生成目标序列的过程中,T5 的解码器会通过掩码注意力来控制信息流动,确保生成每个词元时只能关注到当前及之前的词元,而不能访问未来的词元。这种方式帮助模型在生成的过程中保持因果关系。
上图右半部分展示了T5 编码器-解码器中的注意力模式。在编码器自注意力(右下矩阵)中,所有输入词元相互计算注意力;在编码器-解码器交叉注意力(上方矩阵)中,每个目标词元与所有输入词元计算注意力(在训练过程中,T5 采用了 “teacher forcing” ,即在每一步生成过程中,解码器并不是依赖自己生成的前一个词元,而是使用目标序列中实际的标签词元来指导生成。这样做的好处是可以让模型更快地收敛,因为它可以在每一步都参考到真实的目标词元,而不必等待解码器逐步生成输出);在解码器自注意力(右上方三角阵)中,每个目标词元仅与当前和过去的目标词元计算注意力(因果)。
预训练好的T5需要针对特定任务的训练数据进行微调(更新 T5 参数)才能执行,如下图:
从图中可以看到,T5 的微调过程与其预训练过程非常类似,仍然遵循“文本到文本”的统一框架。图中的微调过程示例展示了一个文本摘要任务,在微调过程中,输入序列由任务描述和任务数据组成。这里的任务描述是“Summarize:”,提示模型执行摘要任务。紧接在任务描述后面的是实际的文章内容,例如“Oil prices slipped … diesel taxes”。在微调过程中,T5 的训练目标是最小化解码器生成的输出与目标摘要之间的差异,通常通过交叉熵损失来优化。
仅解码器模式
在Transformer的三种模式中,解码器模式通常用于自回归生成,例如GPT系列(生成预训练Transformer,如GPT-2和GPT-3)等大型语言模型就采用了这种结构。在仅解码器模式中,每一步生成只依赖于过去和当前生成的内容,从而确保每个生成的令牌不参考未来的内容。这种模式尤其适合文本生成和对话任务,能够自适应地生成符合上下文的序列化输出。
GPT系列是仅解码器模式的经典代表。它通过自回归语言模型进行预训练,即在大量文本数据上预测下一个单词。GPT的这种训练方式帮助它逐步建立了对上下文的理解能力,能够生成连贯且符合语境的文本。在生成时,GPT依次预测下一个词并不断更新生成内容,直到达到所需的输出长度。训练过程如图:
GPT-1拥有1亿个参数,预训练好的GPT-1需要为各个下游任务进行微调。GPT-2采用了预归一化以及改进的初始化和权重缩放,具有15亿参数,预训练好后无需更新模型即可执行多任务,比微调更高效,因为不需要通过梯度计算更新模型。在GPT-3中,通过前缀文本引导模型完成任务的“上下文学习”范式被进一步完善。它可以零样本(zero-shot)、一对样本(one-shot)或少量样本(few-shot)学习,即在不给任何例子、只有一个例子或少量例子下执行任务,如下图所示。GPT-3拥有1750亿参数,具有强大的自然语言理解和生成能力,能够完成文本总结、问答、诗歌创作、代码生成、摘要等多种任务。
零样本(zero-shot)、一对样本(one-shot)或少量样本(few-shot)学习
GPT-3还进一步验证了Transformer的scaling law,即Transformer语言模型的性能提升随模型规模、数据集规模和计算量的增加而平滑提升,如下图所示。通俗地说,模型的参数量越大,用于训练的数据集越大,用于训练模型的算力越大,模型的性能会越来越好。这一点从GPT-1、2、3到最新的GPT-4都不断得到了验证,GPT4则是成为了多模态大型模型,支持文本和语音、图像的输入和多模态输出。
同时,大型模型不仅性能更高,而且样本效率也优于小型模型。如下图所示,大型模型所需的训练样本(处理的标记数量)更少,就能达到与小型模型相同的表现,并且随着计算能力的提升,性能平滑地增长。
下图展示了GPT-3的性能(交叉熵验证损失)随训练所用计算量呈scaling law的趋势:
虽然scaling law可以提高任务性能,但仅靠增加模型规模并不足以使模型更好地理解和执行人类指令。使用人类反馈强化学习(RLHF),对预训练好的GPT模型进行微调,使其能更好地遵循多样化的指令,从而产生了InstructGPT和ChatGPT等能够实现人机对话的模型。这些模型不仅能够在零样本环境下完成自然语言处理任务,还能在与人类对话时生成自然流畅的回应。
总的来说,Transformer模型的规模和数据量的提升催生了多个大型语言模型,展示出令人瞩目的推理能力和多语言适应性。与此同时,开源模型(如Llama等)的出现,加速了大型模型的普及和创新。随着模型规模、数据和计算量的进一步增长,Transformer的应用前景愈加广阔,其多模态和上下文理解能力为未来的人工智能发展注入了新的活力。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。