记录 transform 架构理解。
前言
序列转导模型特点与tansformer架构的创新
Transformer之前,主要架构为主流序列转导模型,是处理顺序关系数据的模型,这种模型有如下特点:
- 基于RNN(循环神经网络)/CNN(卷积神经网络)
- 使用编码器-解码器结构
- 使用注意力增强机制。
Transformer特点为:
- 完全放弃了RNN和CNN
- 仍然使用编码器-解码器结构
- 完全基于注意力机制
FNN前馈神经网络
- 结构为输入层->隐藏层->输出层,但是不适合序列转导任务
- 分词(Tokenization)->词向量表示(Embedding)->合并词向量(平均或拼接)
- 平均(把词的每一个维度直接相加):会丢掉词语的顺序关系
- 拼接:
- FNN需要固定维度输入,对不同长度的句子处理效率低下
- FNN将句子试做整体处理,无法理解句子中谁先谁后的关系
RNN循环神经网络
结构为输入层->隐藏层(循环模式)->输出层,解决了如下问题:
- 能够建模词序,RNN是按照时间顺序(token顺序)逐个处理输入
- 能够建模上下文依赖,逐个喂入词语,并且会有记忆机制
- 支持不定长输入,不再需要FNN类似的固定长度的输入格式,句子多长都行
编码器与解码器
纯RNN要求输入和输出等长,编码器和解码器分离用于解决这个问题:
- 编码器只管输入,通过输入给到c(上下文向量context vector)
- 解码器拿着上下文向量c来构造输出
- 上下文向量是输入序列的语义编码,是一个固定长度的向量,涵盖了输入的文本信息。
注意力增强机制
编码器和解码器还有两个缺陷,是注意力增强机制要解决的问题
- 即存储长序列遗忘问题,c的信息永远和最后一个token[-1]比较相关,对token[0]相关的信息有所稀释。
- 不同时间步输入对当前时刻的重要性问题,所有输入被同等对待,丢失了时序信息的重要性差异。
解法:C中的Ci不再相同,而是调整Ci对Si的权重,以优化上述两点。
至此,还剩下一个问题是传统RNN无法根本解决的问题,并RNN是串行计算的,有先后递归关系,无法并行计算。
Transformer架构
编码器
- 输入序列首先经过Input Embedding变为1*512的token向量(携带语义编码)
- 在Input Embedding的输出基础上,进行position Embedding,增加位置编码。位置编码同样为1*512的距离向量,直接加到上一步的输出上。位置编码不采用算术运算的原因是算术信息所带的信息有限,这一步的向量由sin、cos、傅里叶变换等得出。
- 单头注意力机制:为了在语义编码和位置编码的基础上,增加上下文编码
- 三个权重矩阵(由训练过程得出),wq、wk、wv,三个512*512的矩阵。
- q是query(问题),k是key(答案),v是value(值)。
- 对于每个词,生成这个词对于这三个矩阵的3个1*512的向量。
- softmax函数带上了所有token对于每个词的重要性影响的权重矩阵,再乘V就带上了上下文编码信息。此时仍然为n*512的矩阵
- 多头注意力机制,wq、wk、wv不再是512 * 512,变成了512 * 64,通过类似的计算过程,降维最终得到8组n*64的向量,然后进行线性变化,再得到n * 512的矩阵。降维(维度代表特征)的意义在于抽取一类子特征,统一计算,本质是实现一类特征的归类。
- 自注意力机制,输入的QKV来自token自身,在上面做自己的注意力的计算。
- 残差连接:把输入和第一个模块的计算结果进行连接,避免第一个模块计算不足导致整个数据稀释。
- 归一化:让数值趋于稳定,方便模型训练
解码器
- 解码器的Q来自输出的输入掩码,K和V来自编码器编码好的结果。
- 带掩码的的多头注意力机制,进行矩阵掩码(上三角掩码),只用下三角计算,即所谓的训练过程的防作弊机制。
创新点
- 每层的计算总复杂度低,低于CNN和RNN
- 解决并行计算的瓶颈(重要)
- 模型内部学习长距离依赖的能力,n方的空间存储换来了内部token序列的关联关系。
本文作者:
yd0ng
本文链接: https://blog.yd0ng.top/2026/07/07/transformer%E6%9E%B6%E6%9E%84%E7%90%86%E8%A7%A3/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://blog.yd0ng.top/2026/07/07/transformer%E6%9E%B6%E6%9E%84%E7%90%86%E8%A7%A3/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!