大白话chatGPT内部原理之Transformer
上次我们只是大概性的了解了下chatGPT,今天我们的任务是更进一步地去认识它的内部世界。
Transformer是chatGPT非常复杂的一个内部结构,大话这个主题,真是有些挑战,至少要自己必须理解它。好在我在5年前,研习过另外一个语言模型Bert,这也是GOOGLE的重磅产品,它的内部就是采用的Transformer,并且也是他们提出的Transformer。这次因为chatGPT的大火,我又将其研读了一次。上次研读时,Transformer算是非常新的概念了,所能看的资源比较少,特别是国内的资料更是少。这次研读时发现国内有了很多解读,便是方便了很多。
估计你我都不是搞这个专业的,于是我尽可能地用大白话去说,你就将就着听咯。下面我们开始。
Transforme是GOOGLE,这位IT界的领头羊贡献的语言模型,下面我引用百科的定义:
Transformer模型(直译为“变换器”)是一种采用自注意力机制的深度学习模型,这一机制可以按输入数据各部分重要性的不同而分配不同的权重。该模型主要用于自然语言处理(NLP)与计算机视觉(CV)领域。与循环神经网络(RNN)一样,Transformer模型旨在处理自然语言等顺序输入数据,可应用于翻译、文本摘要等任务。
重点的词,我用红色标了出来,下面的任务是让我们先以最快的速度解决掉这几个概念。

编辑切换为居中
首先,我们来看深度学习模型,正如上面的图示,深度学习模型就是一个非常复杂的网络结构,它将样本输入后经过复杂的处理,然后去学习样本的特征,再根据样本的特征信息来识别新的文字或图像。

编辑
然后,我们来看循环神经网络(RNN),它是神经网络中的一种。如上图所示,它是一个顺序结构,即一步一步地处理输入的数据。用个表达式就可以如下图所示:

编辑
即在当前状态下,有了新的输入,产生新的状态出来。正因为这种模型不能并行处理,所以非常不适合当今训练大数据的需求。但它非常符合我们思维方式,如下面所示用来做翻译时的场景,是不是非常符合我们内心中的翻译过程呢?

编辑切换为居中
还有两处标红的概念,我们先不做解释,等你看完了文章自然就明白了,之所以标红是因为它们就是Transformer的特色,你需要在心中先记住它们。
下面我们将进入Transformer的内部来看个究竟,我们来看下面这张图:

编辑
这张复杂的让人不由得恐惧的图,所示的就是Transformer的内部。为了更加直观一些,我们将它分成输入,输出,处理过程3个部分。
在输入端,我们再来看下面这个图:

编辑切换为居中
注意的是我们输入的词不是原样送进入处理的,首先要经过编码,编码的过程就是上面的图示,最终得到一个输入矩阵。词的Embedding是由某种预训练得到,主要是把单词转换成相应的向量,比如:queen=king-man+woman。位置Embedding,GOOGLE采用了下面的公式得到:

编辑切换为居中
将单词的词 Embedding 和位置 Embedding 相加,就可以得到单词的表示向量 x,x 就是 Transformer 的输入。
在输出端就是它的输出了,如果是翻译那就是翻译后的结果,这没有什么好说的了。
下面的我们重点是处于中间的处理部分。首先我们将处理部分分成Encoder层和Decoder层。看下图:

编辑切换为居中
在Encoder层,输入编码器的文本数据,在处理过程中带上了全局信息,即上下文信息,这有助于关联当前词和其他词。
在Decoder层,被编码的信息被层层解码,通过联系上下文,从词库中找到那个最高概率的翻译词出来,这样这个词就被翻译了。
注意这里给出的RNN的串行结构,实际中应该是并行的,看下图所示:

编辑切换为居中
现在我们将镜头再离中间处理部分进一些,我们来看看它中间的那些部件。看下图:

编辑切换为居中
这是一个Encoder的内部,它包含一个自注意力机制和一个前馈神经网络。
首先来看自注意力机制,看下图:

编辑切换为居中
左边是一个注意力机制,由边是多头注意力机制,在Transformer中是多头的。我们先看单头的,它其实就是一个公式,公式如下:

编辑
大体上解释下上面的公式,Q,K,V是我们通过将词的Embedding值与WQ,WK,WV相乘的结果,WQ,WK,WV则是我们要训练的参数,原始值可以给个随机数。如果忽略激活函数 softmax 的话,那么事实上它就是三个 n×dk,dk×m,m×dv 的矩阵相乘,最后的结果就是一个 n×dv 的矩阵。即Q跟K的相关度,再乘上一个放大,缩小值V,这样就会将相关的放大,不相关的缩小。softmax函数用来归一化,就是让它们统一到统一个维度和尺度,下面除去的那个值,则是起到调节作用,防止出格。比如,下面引自网络的例子:

编辑切换为居中

编辑切换为居中

编辑切换为居中
首先,根据公式我们算出了Thinking这个词跟自己和其他词的相关度,最后将这些值相加,就得到了这个词的自注意力值,即图中的Z1。 上面是单头的情况,如果是多头,就如下所示的情况,跟上面相比只是多个几个层而已,单个的自注意力机制是相同的。

编辑切换为居中
下面这个例子更加直观的可以看出自注意力机制的作用,如下图所示:

编辑
当输入The animal didn’t cross the street because it was too tired时,我们想让机器知道其中的it指代的是什么?从上图中我们看到,模型通过自注意力机制,分析出了这里的it与The animal最为相关,另外一个是tried,根据The animal跟it的属性相同,就可以断定it就是指代的The animal。上面展示的是8个自注意力机制的情况,通过每个自注意力机制的关注度不同,我们可以得到更多的维度,因为每个自注意力机制的权重矩阵是不同的。这样我们的模型就具备了上下文相关的特性,让模型的输出内容更为连贯。说完了自注意力机制,剩下的内容就是前馈神经网络了,它用来不断地优化我们训练的参数,让模型更智能。即,自注意力机制处理后的数据被送到前馈神经网络中,在这里评估我们的处理结果,根据评估结果,更新我们的参数。
最后,在Decoder端也具有这两层,但是这两层中间还插入了一个 Encoder-Decoder Attention 层,这个层能帮助解码器聚焦于输入句子的相关部分。这篇文章省略了一些复杂的细节,所以更适合我们用于了解Transformer,所分析的是17年由GOOGLE提供的论文内容,不清楚如今的chatGPT是否有些改动,估计改动不大吧。
参考文献:
《Attention Is All You Need》链接地址:https://arxiv.org/abs/1706.03762Transformer
模型详解 - 简书 (jianshu.com)
图解Transformer(完整版)!- 腾讯云开发者社区-腾讯云 (tencent.com)
一文读懂「Attention is All You Need」| 附代码实现-阿里云开发者社区 (aliyun.com)
The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)
大话chatGPT原理剖析之Transformermp.weixin.qq.com/s?__biz=Mzg5OTYxMTQzNw==&mid=2247483950&idx=1&sn=91fd3399d3ac7e68b55a9a6afd2cf5bc&chksm=c051ec6cf726657a16dfc231a9b53fb889bc202129901784e33f35c47ec9df74e91802238244#rd
今后这里将以游戏,游戏开发相关的内容呈现给大家。
其他技术文章您可以在
公号:python自学炫酷编程
中找到。
多谢大家这些年的支持!祝福您们!