大概会花一到两周的时间,把 transformer 系统的讲一遍,可能会涉及到到 Bert/GPT 的一些基本知识,每天只讲一个知识点。
预告一下明天内容,是关于transformer位置编码的讲解,很多同学对位置编码这个概念很模糊,只是知道是正余弦函数,别的就不太清楚,我们之后花几篇文章好好聊一聊这个概念。
正文
Transformer 分为两个部分,encoder 侧 和 decoder 侧。今天,我们聊一下 encoder 侧。这部分由 N 个完全相同的大模块堆叠而成(原论文N=6)。
这个结构怎么理解?这个构造就需要我们确保每一个模块的输入和输出维度是相同的,在实现代码的时候,我们只需要完成一个模块的代码的构造就可以。
注解:你可以把这个过程想象成 RNN 竖过来的一个流程,是不是就很好理解(当然这样想只是帮助你理解)。
其次对于这每一个大的模块,又分为两个模块,分别是多头注意力层和前馈神经网络层。进一步拆分,多头注意力层可以分为注意力层和 Add&Norm 层。前馈神经网络可以分为 Linear 层和 Add&Norm 层。
多头注意力层,核心点在于 Q/K/V 三个矩阵,其中 Q/K 矩阵生成权重矩阵(经由softmax),随后和V矩阵得到加权和