分享
Transformer
输入“/”快速插入内容
Transformer
用户3961
用户3961
1月8日修改
https://zhuanlan.zhihu.com/p/338817680
https://www.zhihu.com/question/485876732/answer/123320827564
https://www.zhihu.com/question/298810062/answer/3559323376
前置知识:
RNN
50%
Seq2seq
50%
Transformer的诞生背景
传统的模型只能一次处理一个词,比如RNN、LSTM,他们只能
•
无法并行计算:
必须
一个时间步一个时间步地算
;序列越长,训练越慢
•
长程依赖问题:
RNN 理论上能记住过去所有信息,但实际上
梯度会消失或爆炸
•
信息压缩严重、难以捕捉全局关系:
RNN 的隐藏状态 h_t 是一个固定长度的向量,但它要“压缩”从第 1 个到第 t 个所有词的信息,导致信息丢失,并且无法建模任意两个词之间的全局依赖。
而Transformer的出现改变了这一状况,它直接抛弃了循环结构,提出了一个
全并行的注意力机制模型
。他可以一次性看到全文,可以反复回看,找到关键句,还能从多角度理解句子。
Transformer整体结构
该图为 Transformer 用于中英文翻译的整体结构
Transformer 由 Encoder 和 Decoder 两个部分组成,Encoder 和 Decoder 都包含 6 个 block。Transformer 的工作流程大体如下:
第一步
获取输入句子的每一个单词的表示向量 X,X由单词的 Embedding(Embedding就是从原始数据提取出来的Feature) 和单词位置的 Embedding 相加得到。
Transformer的输入表示
第二步
将得到的单词表示向量矩阵 (如上图所示,每一行是一个单词的表示 x) 传入 Encoder 中,经过 6 个 Encoder block 后可以得到句子所有单词的编码信息矩阵 C,如下图。单词向量矩阵用
表示, n 是句子中单词个数,d 是表示向量的维度 (论文中 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致。
Transformer Encoder 编码句子信息
第三步
将 Encoder 输出的编码信息矩阵 C传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1,如下图所示。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。
Transofrmer Decoder 预测