作者:黑夜路人
时间:2023年4月27日
想要连贯学习本内容请阅读之前文章:
【原创】理解ChatGPT之GPT工作原理
【原创】理解ChatGPT之机器学习入门
【原创】AIGC之 ChatGPT 高级使用技巧
GPT的全称是 Generative Pre-trained Transformer(生成型预训练变换模型),它是基于大量语料数据上训练,以生成类似于人类自然语言的文本。其名称中的“预训练”指的是在大型文本语料库上进行的初始训练过程,其中模型学习预测文章中下一个单词,它可以完成各种自然语言处理任务,例如文本生成、代码生成、视频生成、文本问答、图像生成、论文写作、影视创作、科学实验设计等等。
下面我们用大家容易理解的方式简单介绍一下GPT模型的整个工作原理。
上面讲了我们GPT的单词是:Generative Pre-trained Transformer ,简单这三个词语拆解下来就是:
Generative - 生成下一个词
Pre-trained - 文本预训练(互联网各种文字材料)
Transformer - 基于Transformer架构(无监督学习)
GPT用中概括描述就是:通过Transformer 架构进行文本预训练后能够按照给定的文本,生成合理文本延续的模型。(文本接龙)
其中无监督训练中,核心依赖的就是Transformer模型,这是一个优秀的模型,如果说到Transformer框架比较优秀,就需要大概了解一下神经网络在这个过得的迭代发展过程,了解为什么它是一个在AI问答(ChatGPT)中优秀的模型框架。
对于ChatGPT能够取得那么好的一个互动交流的效果,最核心的是GPT机制,GPT机制里面除了预训练( Pre-trained)和人工反馈强化学习(RLHF - Reinforcement Learning from Human Feedback),最基础的就是这个T(Transformer)机制了。
整个Transformer可以简单理解为一个“无监督学习”的“文字接龙”游戏,然后完成整个核心基础大模型的训练,然后通过 RLHF 强化训练让这个LLM(大模型)看起来越来越智能。
在我们先看一下整个Transformer发展路线图:
看到上面比较关键的几个节点主要是 RNN -> LSTM ->Attention -> Transformer ,基本就是从循环神经网络(RNN)发展长短记忆网络(LSTM),然后诞生了注意力机制(Attention),然后到Transformer(包含Multi-Head Attention多头自注意力),奠定了整个Transformer的大框架体系。
RNN(Recurrent Neural Network - 循环神经网络)
要理解RNN基本原理,我们可以简单理解理解一下。
比如当我们在识别一张图片的时候,每张图片都是独立的,认出图片中是“苹果”和对下一张图片是“梨”的识别没有影响。但是对语言来说,顺序是超级重要的。“我吃苹果”和“苹果吃我”两个句子意思完全不同,顺序也提供了信息,比如“吃”后面跟的大概率可能是食物名词。
为了理解数据之间的这种关联,人们发明了一种叫做循环神经网络的模型,简称RNN。RNN是一种神经网络,可以理解它有一个小记忆盒子,用来记住过去的数据。当新数据进来时,网络要考虑记忆盒子里保存的信息,随着新数据的输入,存储的信息也在不断更新,记忆盒子里的信息被称为“隐状态”。
RNN最常用于自然语言处理,比如说机器翻译和写诗。“机器翻译”是找到不同语言中表达相同意思的序列(中文翻译成为英文);诗歌生成是根据主题按规则生成有逻辑的词序列;改变输入和输出的类型,输入图片输出句子就是“看图说话”;语音也可以看作是一个时间序列的声音信号,语音识别和语音生成等场景也在RNN的能力范围内;股票价格变化也可以看作一个随时间变化的序列,很多量化交易模型就是基于这个认知建立的。
(中间的h就是隐状态,c是输入,y是输出)
RNN能够处理序列数据,即其输入和输出都可以是序列。这是因为RNN在隐藏层里面有循环,能够维持网络的内部状态,并根据输入的序列数据不断更新状态。
RNN很厉害,图片文本等都能够很好处理,有很多适用场景。但是RNN也有明显的缺点,比如数据输入的越早,在隐状态中占的影响就越小。也就是说,如果一个句子很长,RNN就会忘记开始说了什么,标准的RNN在较长的序列上会出现梯度消失或梯度爆炸的问题,导致它无法捕捉到长期的依赖关系。为此,后来发明了RNN的改进版本——LSTM(长短期记忆网络)。
LSTM(Long Short-Term Memory,长短期记忆网络)
RNN有一定的记忆能力,但是遗憾的是它只能记住短期记忆,在各种任务中的表现不太好。那么该怎么办?
人们将目光投向了人类自己。人的记忆是有选择的,我们不会记住每一时每一刻发生的所有事,会选择性地保存重要的事情,丢弃不重要的事情。参考人类这种记忆机制,Sepp Hochreiter在1997年改造了“记忆盒子”,并找到了“门”这种机制。“门”是用来决定信息如何保存的开关,它的值在0到1之间,1表示完全保存,0表示完全丢弃。
“记忆盒子”上有三个门:
遗忘门(Forgot gate):决定记忆盒子要保存多少原有信息,也就是丢弃哪些不重要的记忆;
输入门(Input gate):决定当前网络信息有多少要保存到记忆盒子,也就是接触哪些新东西;
输出门(Output gate):决定输出记忆盒子中的信息的程度。
经过改造的记忆盒子既可以通过输入门了解当前网络状态,又可以利用遗忘门保留过去重要的信息。这就是LSTM长短期记忆模型。
通过改变记忆盒子的结构,LSTM还有许多变体,比如GRU。GRU只有两个门,更新门是遗忘门和输入门的结合,决定丢弃哪些旧信息,添加哪些新信息。 GRU还决定写入多少当前时刻的网络状态,用来捕捉短期记忆。GRU的结构更简洁,计算更高效,效果与LSTM不相上下,所以GRU变得越来越流行。还有一些包含了 Remember-负责记忆中的信息存储,Update gate-控制 Remember 中存储的信息更新 等等模块。
一个大概的LSTM网络:
注意力机制不是凭空出来,主要还是从人类本身进行学习的基本人类原理。
深度学习里面的一个注意力机制,它从名字上来看,就和我们人类视觉的注意力机制是非常相似的,其实它也是借鉴于人类视觉注意力机制的。他们的核心是什么?他们的核心就是关注重点的信息,而忽略掉不重点的信息。而这个机制的形成就是人类在漫长的进化当中形成的,从大量的信息里面去获取少量的关键信息的一个主要的核心的东西,也就是人类规避危险的最核心的一种能力。
我们直接来看,比如说这样的一张图,我们首先看到的时候,我们会优先关注婴儿的脸,然后才会关注到熊熊玩具:
比如这个新闻,首先其实会看到“标题”,然后才是看到下面的内容:
上面两张图片中,我们会优先关注婴儿的脸,然后文章我们会先关注标题;比如这个新闻,这个标题这一大段文字的开头,而这些东西恰好就是这张图片的核心的最关键的位置,我们关注这些东西之后,我们会对最核心的位置再继续深入去看,比如说我们看婴儿的脸,皮肤白不白,什么表情等等;比如说我们看这个标题,看这个标题具体讲的什么,而对于其他一些无关的信息,我们就会选择把它给忽略掉。
这个核心简单可以总结为:“视觉注意力机制是人类视觉所持有的大脑信号处理器,人类视觉通过快速扫描全局图像获得需要重点关注的目标区域,也就是一般所说的注意力的焦点,而后对这一区域投入更多的注意力资源,以获取更多所需要关注的目标的细节信息,而抑制其他无用的信息”。
人类的注意力机制和和深度学习中注意力机制的一个核心,就是“关注最核心的部分,抑制其他无用的信息”。这是人类利用有限的注意力资源,从大量的信息中快速筛选出高信息的一个手段,是人类在长期进化中形成的一种生存的机制,然后Attention也学习了整个机制,能够极大的提高了信息的处理的效率与准确性。
可以用自然界中的一些概念来拟人化地描述注意力机制,可以关注到这些特点:
1. 聚焦: 就像我们的视觉系统可以聚焦在视野中的某个区域,注意力机制也可以聚焦在输入序列的某些部分,并为其赋予更高的权重。这种聚焦能力使模型可以专注在当前最重要和相关的信息上。
2. 过滤: 我们的感知系统会过滤掉很多不太相关和重要的信息,只选择critical信息。同样,注意力机制也具有过滤的功能,它可以过滤掉输入序列中不太相关的元素,只选择最相关和重要的信息。
3. 上下文感知: 人类在理解语言时会根据上下文来正确解释某个词或短语的意思。同样,注意力机制可以将上下文信息融入当前输入的表达中,从而产生上下文相关的输出。这使模型的预测结果更加合适当前输入的上下文。
4. 关注漂移: 人类的注意力不是固定不变的,我们可以根据需求随时改变关注的目标。注意力机制也具有类似的能力,它可以随时根据输入的重要性来改变注意力的分配,从而动态地聚焦在当前最相关的输入上。这种动态的注意力分配使模型更加灵活和强大。
所以,注意力机制类似于人类注意力的一些特点,比如聚焦、过滤、上下文感知和关注漂移的能力,这使注意力机制具有选择性地关注输入序列的某些部分,过滤不太相关的信息,并根据上下文来调整注意力分布的能力,从而产生更加准确的输出结果。这些特点都被神经网络学习过去,然后进行模拟。
注意力在图片和文本中的应用
以上就是利用注意力机制进行关键信息识别,所有白色区域就是为下面图片识别生成文字:
一个带有注意力机制文本计算的LSTM网络:
既然自然界和人类有注意力机制这件事,那么在深度学习中,如何计算注意力,就是如何判断图片和文本中哪个内容是更需要关注的。
图片注意力计算
在图片处理中,注意力机制的主要原理也是判断当前输入与输入序列中每个历史元素(此处为像素)之间的相关性,并根据相关性为每个像素赋予权重,这些权重决定了哪些像素需要特别注意和聚焦,哪些需要过滤。
具体来说,注意力机制会计算当前输入特征与每一个历史像素之间的相似度或相关性,相似度越高的像素被赋予更大的权重,表示其对当前输入特征更重要,需要更多注意;相似度越低的像素被赋予更小的权重,表示其影响较小,可以被过滤。
那么,在图片中,注意力机制主要通过以下方法来判断两个输入之间的相关性:
1. 空间注意力:计算两个像素在空间上的相对位置关系,位置越近的像素相关性越高,权重越大。这种注意力可以捕捉空间结构信息。
2. 通道注意力:如果两个像素在RGB通道上值越接近,则认为其相关性越高,权重越大。这可以学习通道之间的依赖关系。
3. 分层注意力:在空间注意力和通道注意力的基础上,可以建立多层注意力,高层综合低层结果与输入计算相关性。这使注意力可以在不同抽象层面审视输入,更加准确。
4. 相似性注意力:直接采用点乘或余弦相似度等方法计算两个像素之间的相似性,相似性越高则相关性越强,权重越大。
在图片处理中,注意力机制主要是通过计算当前输入特征与每个像素的相关性,为后者赋予不同的权重,并据此产生当前输入特征的新表示。相关性越高的像素影响越大,权重越大,这使得模型可以选择性地关注输入图像中的重要区域,过滤不太相关的背景区域。这种过程模拟了人类在理解图片时对重要信息的注意力分配机制。
文本注意力计算
在文本处理中,注意力机制的主要原理是:判断当前输入与输入序列中每个历史元素之间的相关性,并根据相关性为每个历史元素赋予权重,这些权重决定了哪些历史元素需要特别注意和聚焦,哪些需要过滤。
具体来说,注意力机制会计算当前输入与每个历史输入之间的相似度或相关性,相似度越高的元素被赋予更大的权重,表示其对当前输入更重要,需要更多注意;相似度越低的元素被赋予更小的权重,表示其影响较小,可以被过滤。
那么,注意力机制是如何判断两个输入之间的相关性的呢?主要采用以下方法:
1. 点乘注意力:计算两个输入的向量表示(Embedding)之间的点积,点积越大则相关性越高。
2. 缩放点乘注意力:在点乘注意力的基础上,对点积结果除以一个缩放因子(如向量维度的平方根),这样可以使得权重分布更集中,关注更重要的元素。
3. 多头注意力:使用多个注意力头,每个头有自己的Query、Key和Value,最终将每个头的输出拼接或求平均以产生最终输出。这使模型可以从不同角度审视相关性,更加准确。
4. 位置编码:对输入序列的输入 Embedding 加入位置信息,以便模型可以利用位置信息判断相关性。位置更靠近的两个输入相关性更高。
所以,文本的注意力机制主要是通过计算当前输入与历史输入的相关性,为后者赋予权重,并据此产生当前输入的新表示。相关性越高的历史输入影响越大,权重越大,这使得模型可以选择性地关注输入序列中的重要元素,过滤不太相关的元素。这种过程模拟了人类在解码文本时的注意力分配机制。
Transformer 解决seq2seq的问题
在机器学习里,一般需要解决的问题主要包括,我输入一个东西给模型,然后模型输出一个东西(比如一个词或者是一张图)然后输出:(比如单词翻译或者是分类问题)
或者是输入一堆东西,然后输出一个东西,整个输入序列最后输出一个标签:(比如分类问题,或者是情感分析)
再进一步,在计算中,可能是N个输入向量,输出也是N个标签(输入输出向量是固定的):
还有一种常见是输入N个向量,输出可能是M个标签,这种问题叫做Seq2Seq(Sequence to Sequence,机器学习中比较典型的一种方式,常见比如AI问答、机器翻译等):
ChatGPT可以认为是一种Seq2Seq的问题,用户输入一堆Prompt,然后GPT输出一堆文本。Seq2Seq实现了从一个序列到另外一个序列的转换,比如Google曾用Seq2Seq模型加attention模型来实现了翻译功能,类似的还可以实现聊天机器人对话模型。经典的RNN模型固定了输入序列和输出序列的大小,而Seq2Seq模型则突破了该限制。
Seq2Seq 这种结构最重要的地方在于输入序列和输出序列的长度是可变的。
一般处理seq2seq的问题都会采用 Encoder-Decoder 的结构,输入一个seq,经过encoder各种处理,然后decoder成为一个目标想要的内容,比如经典的RNN中的Encode-Decoder架构:
Encoder-Decoder架构,我们举例看一个翻译的场景:
对于ChatGPT中T 就是我们上文提到的Transformer框架,Transformer就是一种处理seq2seq的模型设计。上面这个图可以简单理解为,Transformer 框架基本工作结构图 ,它本质就是一个Encoder-Decoder 的结构。
Transformer和LSTM/RNN 的区别
本质使用RNN或者LSTM都能够解决这种AI问答的问题,但是Transformer对比它们有这些更多优点:
1. 并行计算:RNN和LSTM是顺序模型,计算过程中每个步骤的输出都依赖于上一步的输出,无法并行计算。而Transformer采用Attention机制,可以并行计算所有 timesteps,大大提高计算速度。
2. 长期依赖学习:RNN和LSTM虽然有循环结构可以捕捉上下文信息,但在较长序列中难以学习长期依赖,会出现梯度消失问题。而Transformer通过采用Attention机制,可以直接建模任意两个timesteps之间的依赖关系,更好地学习长期依赖。
3. 训练更稳定:RNN和LSTM中的循环结构使得其训练过程较为困难,参数选择和初始化都会对最终结果产生较大影响,并且容易出现梯度爆炸问题。而Transformer的非循环结构使其训练更加稳定。
4. 更少的参数:RNN和LSTM需要的参数较多,而Transformer通过使用Attention机制,可以用更少的参数获得同等或更好的性能。
5. 无需标定的输入输出:RNN和LSTM对序列进行编码时,通常需要在输入序列两端添加特殊的起始和结束标记,Transformer则无此要求。
Transformer 框架的优秀不只是 Encoder-Decoder 机制,更主要的是它Multi-Header Attention机制。transformer架构完全依赖于Attention机制(注意力机制),解决了输入输出的长依赖问题,并且拥有并行计算的能力(Multi-head),大大减少了计算时间。self-attention模块,让源序列和目标序列首先“自关联”起来,这样的话,源序列和目标序列自身的Embedding(单词嵌入)表示所蕴含的信息更加丰富,而且后续的FFN(前馈网络)层也增强了模型的表达能力。Muti-Head Attention模块使得Encoder端拥有并行计算的能力。
Transformer对比RNN和LSTM具有 并行计算,计算速度更快,学习长期依赖更好,不易出现梯度消失问题,训练更加稳定,不易出现梯度爆炸问题,参数更少,空间复杂度和计算复杂度更低,无需在输入输出序列添加特殊标记 等优点,所以是一个非常优秀的神经网络模型。
Transformer 既可以看作一种模型,也可以看作一种架构。如果从具体的模型实现来看,如BERT,GPT等等,这些都是基于Transformer架构设计的独立的模型,用于不同的自然语言处理任务,可以看作是各种模型。但如果从更高的层面来理解,Transformer本质上提出了一种基于注意力机制的encoder-decoder框架或架构。这个架构中的主要组件,如多头注意力机制、位置编码、残差连接以及前馈神经网络都是通用的构建块。
所以,从这个意义上讲,Transformer更像是一种统一的架构或框架。研究人员可以基于这个架构,通过选择不同的训练语料或任务,设计出用于不同目的的变体模型,如:
- BERT:通过自监督的方式,在大规模语料上预训练得到的Transformer模型,用于语言理解。
- GPT:通过自我监督学习在大规模语料上预训练得到的Transformer模型,用于语言生成。
- Transformer-Align:用于序列对齐任务的Transformer模型。
- Graph Transformer:用于处理图数据的Transformer模型。
所以,总的来说,我的理解是:Transformer提出的是一个通用的注意力为基础的神经网络架构,而各种基于该架构设计的模型,如BERT,GPT等则可以看作是该架构的具体实例。这些具体的实例模型通过选择不同的数据集以及训练目标,可以完成不同的自然语言处理任务。
Transformer模型的主要优点如下:
1. 并行计算。Transformer可以并行计算所有时间步,计算速度很快,这是其相比RNN和LSTM的最大优势。
2. 学习长期依赖。Transformer通过Attention机制可以直接建模任意两个时间步之间的依赖关系,可以很好地学习长期依赖,不容易出现梯度消失问题。
3. 训练更稳定。Transformer的非循环结构使其训练过程更加稳定,不容易出现梯度爆炸问题,参数选择也更加灵活。
4. 参数更少。相比RNN和LSTM,Transformer需要的参数更少,尤其在更长序列的任务中参数量的差距更加明显。
5. 无需标定的输入输出。Transformer无需在序列两端添加特殊的开始和结束标记。
Transformer主要缺点如下:
1. Transformer contains no recurrence. 形式上Transformer没有循环结构,丢失了RNN的一些特征。例如,Transformer无法很好地建模周期时间序列。
2. Transformer可能不适合较短序列。对于较短的序列,Transformer的参数相对较多,并不一定优于RNN和LSTM。
3. 计算复杂度较高。Transformer中的Attention计算成本比较大,在一些计算资源受限的情况下可能会出现瓶颈。
4. 缺乏韵律和时域信息。Transformer不像RNN和LSTM中包含循环结构和隐状态,无法很好地建模时域和韵律信息。
总体来说,Transformer的主要优势在于并行计算、学习长期依赖以及训练稳定性,但也存在一定的缺点,如无循环结构、处理短序列时效果可能不佳、计算复杂度高以及建模时域和韵律信息的能力较弱等。选用什么样的模型还需要根据具体任务的需求和数据特征进行权衡。
本文概要的了解了一下Transformer的整个发展历程,以及在Transformer中占据主导地位的Attention注意力机制的基本自然界面和深度学习中的工作原理。
希望能够稍微对Transformer模型有个印象和好感,了解这个神器背后的基本自然规律。
取代你的不是AI,而是比你更了解AI和更会使用AI的人!
##End##
想关注更多技术信息,可以关注"黑夜路人技术” 公众号