最近在使用Transformer模型跑任务,正好加入了同学组织的一个暑期文献打卡群,于是决定假期每天读一篇文献,主要关于近两年对于Transformer模型应用的论文。阅读论文的笔记分享给大家~
7月18日
R-transformer : Recurrent neural network enhanced transformer
R-Transformer: Recurrent Neural Network Enhanced Transformerarxiv.org主要综合了RNN和Transformer两种模型的优点,提出了R-transformer
Transformer虽然在很多模型上表现出了很好的效果,但目前有两个比较致命的问题:
- 第一是对于位置的编码,虽然transformer引入了Position embedding,但是其效果并不好。并且对于具体的任务还需要设计具体的位置编码方式;
- 第二是多头注意力机制忽略了很多局部的特征
而RNN主要的问题是难以处理长距离依赖关系和难以实现并行
改进方法是:
将transformer的position embedding替换成局部的RNN,文章中称其为LocalRNN。具体来讲就是对一个序列,在每个位置的一个固定大小窗口范围内跑一个LocalRNN,将其局部的特征也表示到向量中,然后再按照transformer那样进行全局的多头attention和FeedForword
这个模型实际借鉴了TCN模型和标准transformer模型的思想。R-transformer借鉴了TCN层次化的思想,但在局部特征的提取方式上,TCN使用的是卷积核,而该模型使用了LocalRNN,这样可以更好地将位置信息进行提取。
通过以上改进,模型可以通过LocalRNN提取局部特征,弥补标准transformer在这方面的不足,同时在整体框架上依旧保持着transformer模型可并行的特点。
7月19日
Analyzing the structure of attention in a transformer language model
Analyzing the Structure of Attention in a Transformer Language Modelarxiv.org主要介绍了对于transformer attention可视化的方式。
文章介绍了从attention-head,model,neuron三个层面的可视化,可以从中看出query和key之间的attention关系。之后文章还介绍了对于依赖关系和attention距离的一些可视化。
这篇文章偏工程性,所以好像没有太多可以讲的,后面就看代码去了
7月20日
Hierarchical Attention: What really counts in various NLP task
Hierarchical Attention: What Really Counts in Various NLP Tasksarxiv.org主要介绍了一种算层次化attention的方法,对于Vanilla Attention,计算query和所有keys的attention值,然后再对所有attention进行加权得到最终的attention。
对于self-attention,则先计算d次self-attention,然后再对这d次加权得到最终的attention。
通过数学证明可知这种方法好于前面两种经典的attention机制,具体证明过程就省去了,可以看原论文的Section 4
7月21日
An analysis of Encoder Representations in Transformer-Based Machine Translation
https://www.aclweb.org/anthology/W18-5431www.aclweb.org主要研究了transformer中,模型表示的含义
在transformer模型中,有三种attention,分别为:
(1)encoder的self-attention,其中每一个位置都能attend到前一层的所有位置
(2)encoder-decoder的attention,其中decoder的每一个位置都能attend到上一encoder层的所有位置
(3)decoder的self-attention,其中每一个decoder的位置都能attend到之前的所有位置
作者通过以下几个实验研究了encoder的表示质量:
- 首先通过对于encoder权重的热感图来研究语言模式
- 其次通过从multi-head attention中提取的softmax权重来构建一棵输入句子的最大生成树
其次作者做了一下几个实验来研究decoder的能力:
- 使用一个固定的encoder表示作为输入,来衡量对于不同任务,input features的重要性
实验结果:
- 可视化结果:
通常在第一层,更多的attention都主要focus到词本身,在之后的层中,attention逐渐转移到其他单词,例如前一个或者后一个单词,以及最后一个单词。这表明tranformer更倾向于在更高层中发现长距离的依赖关系
- 推导树结构(Inducing Tree Structure):
作者通过每一层的softmax值构建了输入的推导树,发现模型可以学习出一定的语义信息,但是对于一些复杂或者更长的语义信息,模型很难学到
7月22日
Generating Wikipedia by Summarizing Long Sequences
Generating Wikipedia by Summarizing Long Sequencesarxiv.org主要介绍了一种多文本概括的方法
之前对于文本摘要的任务,主要采用的是从输入文档中选取句子或者短语,并没有产生新的文本。由于缺少大量的平行语料,这样的方式无法引入神经网络的方法。这个工作中,作者将一个Wiki的主题词和一系列参考文章作为输入,目标是一篇wiki百科文章。
由于输入的参考文章可能数量很多,所以在内存限制下无法训练一个端到端的模型。于是他们采取了两个步骤
(1)从输入中选取一些总结
(2)从这些总结中生成一篇文章
这仿照了人写一篇摘要时的思路:先画出文章中的重点部分,再产生总结
- 提取阶段
论文中提到了以下一些提取方法:
- Identity:直接选取最开始的L个tokens
- tf-idf
- TextBank
- SmBasic:使用词频作为对每次词语的打分,之后再根据词语的打分给句子评分
- 总结阶段
文章使用了标准的有attention机制的LSTM encoder-decoder作为baseline模型,引入了一个新模型,即扔掉transformer的encoder部分,将输入和输出合并为一个句子,训练一个语言模型
updating......