Transformer 的结构如下,主要由编码器-解码器组成,因为其不需要大量标注数据训练和天然支持并行计算的接口,正在全面取代CNN和RNN:
扩展阅读:What Is a Transformer Model?
其中
编码器中包含自注意力层和前馈神经网络层;
解码器包含自注意力层、编码器-解码器注意力层、前馈神经网络层三个部分。
了解Transformer,需要了解什么是超参数,这也与稍后的代码实践相关:
超参数:事先设定的。Transformer典型的超参数有Token数量,词向量,位置向量,解码器层数,自注意力头数、注意力维度数、学习率等。
与超参数对应的还有一个词叫参数,参数是在训练过程中得到的,出厂前的训练叫预训练,会得到基础参数(最开始的参数叫原始参数,随机生成的),但在实际的使用过程中,需要经过Fine-tuning,也就是微调,类似于把一套毛坯房装修为精装房的过程,以后在使用该模型的时候,其实就等于入住了。
通常来说,微调过后的参数与基础参数是不同的,这是由模型最终使用者的应用目的有关的,比如要把一个基础模型训练为安全领域的模型,那么在训练过程中就要使用安全行业的相关语料,同时结合安全专家的经验,不断调节参数,最终使模型能够在安全领域进行推理。微调这件事情主要要关注参数是否更改、在哪一层调整以及作用形式,目前主要的微调技术包括SFT(有监督微调),Prompt(提示词微调),LORA(低秩矩阵适应微调)、RLHF(人类反馈的强化学习)等。chatGPT是基于GPT3,花了一年多时间采用SFT、RM(奖励模型)、和PPO等微调之后才产生的。【想想要花多少钱)
在GPT中,只采用了解码器,且不是Transformer中标准的解码器层因为没有编码器的输入,所以解码器也去掉了编码器-解码器注意力层,最终结构如下图所示:
其内部的结构如下图所示:
第一层自注意子层:捕捉输入序列之间相互之间的关系,能学习完整的语义依赖;
第二层前馈神经网络子层:能捕捉整改输入序列的隐藏的、复杂的关联信息。
GPT总体结构如下图所示:
下面详细介绍:本介绍主要基于合集·GPT模型详细解释课程中“我是一个人”作为输入。分词为
我 是 一个 ,3个token
1、输入处理:输入处理主要包括分词、向量嵌入、词向量+位置向量三个处理部分,处理完毕之后输出为一个3×12288的矩阵。
2、解码器栈:两部分组成,先看自注意子层
在自注意力子层中,有自注意头,且因为没有输出,其输入主要来自自己,也就是左边的信息,所有叫做自回归自注意力机制。 此部分主要是关于q.,k,v的计算。
自注意力子层最终输出的为一个3×12288的矩阵。
接下来看第二个部分--前馈神经网络子层。
前馈神经网络输入是3×12288的矩阵,经过一系列计算之后,输出一个3×12288的矩阵。
3、输出部分:输出为一个3×50257的概率权重矩阵
附图:GPT、BERT、ELMo三者对比
尤其感谢B站UP主三明2046,其作品《合集GPT模型详细解释》生动精彩,本系列文章充分吸收学习了该课程,并且在文章图片素材多有引用;
本文代码部分主要引用How to build a GPT model;
如有侵权,请联系笔者删除,感谢,致敬!