出处:ICLR 2021
代码链接:https://github.com/guolinke/TUPE
本文讨论了Transformer结构的位置编码(Position Encoding)问题。
动机
作者首先指出,现有的Transformer模型在处理位置编码的时候,通常将word embedding与位置编码信息直接相加,然后送入Multi-Head Attention结构中。这种做法让两种信息相互干扰,引入噪声信号。
其次,在序列分类任务中,会在句首附加 [CLS]
用于捕捉全局信息并将其用于分类。然而,将[CLS]直接放在句首的做法无法真正捕捉到全局的信息,因为作者认为,[CLS]
是和普通词汇完全不一样的符号,如果[CLS]
享有和其他词汇一样的位置编码信息,则难以满足出发点(捕获全局信息)。
方法
由这两个出发点,本文做了两点针对性的贡献。
第一,将位置编码与词汇编码分离,单独训练Query矩阵和Key矩阵进行映射和乘积,然后加到word 的Q、K相乘之后的结果中(可以认为是一个偏置项)。
第二,全局化[CLS]
的贡献,在其他模型的设计中,[CLS]
到其他 token 的权重以及其他token到 [CLS]
的权重有区别的,本文使用了统一权重。也就意味着,[CLS]
到其他 token 的权重是同一个参数\(\theta_1\),其他token到 [CLS] 的权重是同一个参数\(\theta_2\)。
代码实现
这篇文章的代码已经开源,两个方法在实现细节上代码如下
seq_len = x.size(0) |
首先是位置编码在取的时候去了L + 1
长度,在乘法出来之后变成 \(L+1 \times L+1\) 的矩阵abs_pos_bias
,刚好比常规的\(L \times L\)多了四个元素,[0][0]
和[1][1]
分别用来表示[CLS] to others 和others to [CLS]。
把原来的矩阵切割掉第一行第一列然后填充回去。
论文阅读:Generative Adversarial Zero-Shot Relational Learning for Knowledge Graphs
来源:AAAI 2020 代码:GitHub 关注问题:零样本关系的知识图谱补全 在知识图谱补全问题中,已有研究主要放在大样本或者少样本场景,很少关注零样本关系的补全。所谓零样本是指在已有KG...
【李宏毅机器学习课程笔记】Transformer Decoder
最近要用Transformer相关的模型,刚好李宏毅的机器学习课更新了相关内容,就看了一下,整理一下笔记草稿。 Encoder Decoder 结构 首先是Encoder-Decoder结构。E...