Transformer架构及其变体(如GPT、BERT等)已经成为许多NLP任务的基石。它们不仅在学术界取得了巨大成功,也被广泛应用于工业界,改善了搜索引擎、语音识别、推荐系统等技术的性能。理解Transformer架构对于从事深度学习和NLP研究的人来说至关重要。它的提出标志着NLP领域的一个重要转折点,开启了处理语言数据的新篇章。随着技术的不断发展和优化,Transformer及其衍生模型将继续推动人工智能领域的进步。
一、Transformer的核心概念
1. 自注意力机制(Self-Attention)
自注意力机制是Transformer的核心,它使模型能够处理输入序列中的每个元素,并计算元素之间的关系。简而言之,自注意力机制允许模型在处理一个元素(如一个单词)时,考虑到序列中的所有其他元素,从而捕获它们之间的上下文关系。这种机制特别适用于处理序列数据,如文本或时间序列数据。
2. 编码器-解码器结构
Transformer原始架构包含两部分:编码器和解码器。编码器负责处理输入数据,解码器负责生成输出数据。在NLP任务中,例如机器翻译,编码器处理源语言文本,解码器生成目标语言文本。每个编码器或解码器由多个相同的层堆叠而成,每层都包含自注意力机制和前馈神经网络。
3. 位置编码
由于Transformer完全基于注意力机制,不使用循环(RNN)或卷积(CNN)结构,因此无法直接处理序列中的位置信息。为了解决这个问题,Transformer引入了位置编码,将位置信息添加到输入序列的每个元素中。这使模型能够利用元素的顺序信息。
4. Transformer的优点
-
并行计算能力:相比于RNN需要按顺序处理序列的元素,Transformer可以同时处理整个序列,显著提高了计算效率。
-
长距离依赖处理:自注意力机制使得模型能够直接计算序列中任意两个元素之间的关系,有效地捕获长距离依赖信息。
-
灵活性和通用性:Transformer架构可以应用于多种NLP任务,如文本分类、机器翻译、问答系统等,只需少量修改即可适应不同的应用场景。
二、Transformer整体架构
1、背景知识铺垫
1.1、生成式模型
相信大家在使用手机聊天的输入法时,都会注意到,当你输入文字后,会有很多的选项,那么这些选项是如何而来的呢?
首先要了解一下N_gram
当我们输入最近怎
______时,手机一般会给出很多的提示,这些提示我们可以发现都是和怎
相关的词组,这些可以选择的词组是如何来的呢?
比如我们使用一个数据集来训练一个模型,那么模型就会将数据集里面涉及到的怎后面所有的情况列举在这里,并按照出现的频率进行排序,让我们进行好选择,这种方法被称为1-Gram
,就是根据前面一个词来选择后面生成的词。
再来看看3-Gram
,就是根据前面的三个词来预测下一个词,这时就在在数据集中找到最近怎三个子同时出现的词组后面出现的说有的字出现的情况,我们可以看到,出现的字的数量少了很多
如果根据前面所选的字的数量越多,那么参考的信息就越多,其实我们预测准确性聚会越高,但是,也有可能无法给出预测,这就是N-gram方法。
当然这种方法因为是靠统计方法,很容易出现过拟合;其次,对于一些低频词汇无法进行预测,所以在真正的大型语言处理中不会使用N-gram。
1.2、神经网络
在transformer中,其实是使用神经网络来进行预测的,这里做一个简单的介绍:
神经网络会根据大脑神经元的传递方式进行模拟,我们看上图。输入时我们所有的词,编码后向后传递,经过神经元后进行传播和更新权重;而输出呢,当输出的选择时两个标签时就是二分类问题,比如情感分类、垃圾邮件识别等;如果是多个值就是多分类;当然如果输出的选择时全部的词组时那么就是文本生成模型。
我想这一点对于学习transformer的人来说应该比较容易理解。
2、整体框架
我们按照transformer原文的整体架构来简单的进行梳理
2.1 tokenization
在自然语言处理(NLP)中,tokenization是将文本分解为更小的单元的过程,这些单元通常被称为tokens。我们更加容易理解的表示就是分词。
英文一般按照空格进行切分,是比较容易的;而中文就比较麻烦了,需要建立分词辞典根据词典中出现的特有名词等进行切分,当然对于python来说有现成的开源分词工具,如Jieba、spacy等等;还有就是停用词,有些词语没有实际的意义我们可以直接过滤掉来减轻我们模型的压力以及减少不必要的混淆。
2.2 embedding
embedding就是建立自然语言和计算机识别语言的桥梁,主要目的就是相似性高的词会给予更加相近的向量。
这里要多说一句的就是,embedding是如何创建的?
我们的大脑在看见不同的事物的时候,会根据事物的各种特征进行分类,比如我们看见苹果和草莓时,认为他们都是水果,在大脑里面就会有一个位置给他们进行编码,会将他们放在一起,距离比较近的位置,而当出现一个其他的类别,比如建筑物,那么大脑会根据他的类别,将其放在另外一个地方,当然我们这里指的是相对位置。
其实是经网络的构建是一致的,也会给他创建一个位置,让相似的在一起
2.3 位置编码
我们知道RNN和LSTM是一种循环的序列模型,本身训练的过程中就会有位置的训练;但是我们看到transformer中,到现在为止我们没有讲到与序列或者排序相关的内容。
我们知道在自然语言中,字词的顺序是会影响语义的,比如:
-
我爱你
-
你爱我
同样的三个字,顺序不一样,表达的不是一个概念,所以我们必须要考虑这一点。
首先我们看一下论文中进行位置编码的位置,他是在做完embedding后,创建位置编码与原始的embedding进行相加,然后再去进行attention。
也就是说我们给予所有的词一个初始的位置编码,让位置编码直接加到原始的embedding上去,让模型不断的去学习和修改每个字词的方向
在不断的调整中,让模型学习到顺序,让后理解他们相互之间的关联(相互作用力)进行修改其embedding。
2.4 注意力机制
注意力机制其实最大的作用就是对词嵌入也就是embedding的优化,下面我们来看下是怎么做到的。
一个例子
我们这里有一堆文本单词,在一个二维的坐标系中,每个单词都有一个水平和垂直的坐标,比如香蕉是6,5,那么现在出现了一个新的单词,apple(🍎),如果让我们给苹果安排一个位置,应该在哪里最合适呢?
很明显是右上角,因为这里全部是水果,embedding的作用就是相似的单词会被赋予相似的数字
到现在为止,事情看上去还是很简单的,但是现在来了一个单词苹果(apple)
![](https://mmbiz.qpic.cn/mmbiz_png/xccmDvWWoDozIibOa3pzbQ0WsO4BPUYwVk9LKyb9wrqH62DXee1EOepnJ3Wx86ibCmcJBgABHugIVQ9UF6KibMftw/640?wx_fmt=png&from=appmsg)
这个单词应该放在哪里呢???
苹果如果表示吃的水果应该在右上角,如果是手机的话应该在左下角。而对于embedding而言,不管是自己创建Vocabulary单词表还是使用word2vec,都不能解决歧义。
我们先把单词苹果(apple)
放在中间的位置,那么我们该如何解决这个问题的,下面注意力就要出场了。
注意力机制原理
注意力机制就是来解决单词歧义问题的。
现在我们来看两个文本,根据第一句话我们应该明白,这里面提到了橘子,我们人类是知道橙子属于水果,提到苹果这个词语时,那么苹果应该是可以吃的苹果;同样在第二个句子中提到了手机,那么我们应该明白这里指的是苹果手机。
我们人类可以根据经验进行判断,但是计算机是不知道的
下面我们来看看注意力机制是如何做到的?
在前面我们提到了,我们先把苹果这个单词初始化,放在中间的位置;当输入是第一句话时,提到了orange,那么这个地方出现的apple应该向右上角移动。
而,第二句话出现时,apple这个单词应该向左下角移动
实现过程
要想实现上述过程,计算机就必须要计算所有单词来查看或者评估苹果这个词,通过程序不断的训练会发现,苹果和橘子这两个词比较接近,而与其他的词关系不是很大,那么orang就与apple这个单词相关性更大,我们这里绘制了更粗的连线,我们可以把他们想象成单词之间是有相互吸引力的,连线越粗其吸引力越大,最后距离就会越近。
其实,所有的单词之间都有相互的吸引力,但是随着不断的训练,单词之间会趋于一个平衡,比如buy这个单词,与他相关的单词会相互吸引聚成一簇,比如sell等,而苹果、橘子等水果相关的词会聚集在一起,可以想象成Kmeans聚类算法。
或者想象一下我们的宇宙空间的星球,他们之间都是有作用力的,因为地球和月球比较近,相互吸引力越大,所以相关性越大;而月球与其他的相求也有吸引力,但是比起与地球之间的相互吸引力就太弱了,也就是月球的大部分注意力都在地球上。
所以如果上下文一直在讨论香蕉、橘子等水果,那么接下来出现的apple这个单词大概率就是我们吃的苹果,那么聚集在一起的水果这个簇就会把apple这个单词拉到水果簇中心的方向。
最终的得分就是查询矩阵、键矩阵和值矩阵要做的事情
首先我们根据文本创建一初始的词嵌入,现在我们使用Q、K来创建变换。V矩阵帮助我们进行评分,好的变化给予高的权重,不好的赋值较低的权重。根据得分我们将所有的矩阵进行加权求和得到最终的词嵌入
2.5 Soft Max
Soft Max是在输出结果前,前馈神经网络输出时要进行一个Soft Max,将要生成的所有的词预测一个概率,将概率最大的进行输出。
2.6 整体架构
这里我们不在罗列原始论文的架构图,我们根据前面讲的内容,自己画一个架构图来方便理解
可视化一下,这样理解起来就简单多了
如何学习大模型 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 的正确特征了。