Transformer 阅读笔记
写在前面
论文题目:
Attention Is All You Need. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, ?ukasz Kaiser, Illia Polosukhin. NIPS 2017
文章摘要:
这篇文章提出了一个基于 self Attention 的 Encoder-Decoder 模型,在 Attention 领域有承上启下的意义,它既把 NLP 领域的 Attention 推向了一个新的高潮,又为之后 Bert 等 Language model 作了铺垫。
相关链接:
- 论文地址
- TensorFlow 项目源码
- Pytorch 项目源码
1 Encoding 方法
在大型 Language Model 出来之前,NLP 任务中对句子编码的方式一般是先将句子转换为 char-level embedding 或 word-level embedding,然后用 CNN 或 RNN 进行建模,而 Transformer 的提出,提供了多一种 Encoding 的选择。
- CNN:可捕获局部信息,可并行,相当于深度版的 n-gram 模型,但不具备长距离依赖建模能力,一般用于对句子关键词比较敏感的任务中。
- RNN:变种有 LSTM/GRU,可为单层或多层,也可为单向或双向,可对长距离依赖进行建模,但无法捕获局部信息,不可并行,一般用于对上下文敏感的任务中。
- Transformer:应用 self attention 和 position encoding 来捕获局部信息和全局信息,可并行,在大型数据集上一般有比较好的表现。但其主要缺点在于需要很大的存储空间存储所有元素对的对齐分数(alignment scores),对存储空间的需求随序列长度呈二次方增长。
2 Attention 本质
Attention 函数的本质为一个查询(query)到一系列键值对的映射。
Attention 计算可分为三步:
- 将 query 和每个 key 进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等
- 用 softmax 函数将权重归一化
- 将权重和相应的键值 value 进行加权求和得到最后的 Attention
关于 Attention 更细致的讲解可见 Attention based model 是什么,它解决了什么问题?
3 Self Attention
传统 Attention 基于 source 端和 target 端的 hidden state 计算 Attention,得到的是源端的每个词与目标端每个词之间的依赖关系。但 Self Attention 则分别在 source 端和 target 端进行。
实际上,在这篇文章出来之前,已经有些文章提出了简单的 self attention,在 A Structured Self-attentive Sentence Embedding 一文中,作者提出了 self attention 的计算方式:
当然也可以用去掉公式中的一些操作,简化计算。
Attention is all you need 一文中提出的 self attention 如下图所示,它的提出是为了解决机器翻译问题,在 Encoder 和 Decoder 部分都用了 self attention,另外由于 self attention 忽略了位置信息,所以文中还提出了基于三角函数的 position encoding。