百科问答小站 logo
百科问答小站 font logo



有哪些令你印象深刻的魔改transformer? 第1页

  

user avatar    网友的相关建议: 
      
  1. Self-Attention with Relative Position Representations
    1. 提出了相对位置编码,建模词与词之间的相对位置关系而不是绝对位置关系,使得transformer可以适应没有见过的长度:一个在长度为128的序列上训练的语言模型,可以在长度为256的序列上推断并且不会有性能损失,相比之下用sin/cos的绝对位置编码性能会有显著下降。
    2. 为了节省计算量,每层所有head共享相同的encoding。
    3. 性能相较普通transformer有若干提升,速度略有下降。
    4. 给后续的文章提供了很多改进的机会:相对位置可以看做词与词之间的一种relation,而相对位置编码套在图网络的框架中实际上是一种建模relation的message function。词和词之间还有很多其它的relation(coref, dependency, pos tagging, kg中的relation),可以用来给transformer嵌入外部知识,可能会对相应的下游任务有帮助。
  2. Transformer-XL
    1. 提出了一种新的相对位置编码,性能比上文中的编码方式略有提升,参数量增大。
    2. 提出使用跨相邻两个segment的attention来建模长程依赖。
    3. 模型本身只能用于单向建模,后续的XLNet为了使其具有建模双向上下文的能力定义了permutation language modeling。
  3. Dynamic Conv
    1. 早期的CNN on text系列工作对于kernel中的每个相对位置使用固定的权重,限制了其表达能力。
    2. 本文提出了Dynamic Conv结构,旨在根据当前词的表示动态调整卷积权重,更具体地:
      1. 对于所有位置,用同一个函数 来把当前位置表示 映射到 ,然后对 在kernel size的维度做softmax,作为可分离卷积的权重。
      2. self-attention可以看做 ,需要每个词对其它所有的词表示做dot-product算出 ,而dynamic conv只需要用当前的词表示。
    3. @赵光香 所提到的,本文的亮点在于不使用词之间两两交互的attention(backward过程中有类似attention的交互,这是一个大家可以挖掘的点)也可以获得类似/超过transformer的效果。
      1. MUSE结合了Self-Attention和Dynamic Conv,在每个transformer block中同时使用FFN,Dynamic Conv和Self-Attention,在翻译任务上取得了更好的效果。
  4. Universal Transformer
    1. transformer固定层数限定了其表达能力。
    2. 不固定层数的transformer如何适应没有见过的层数?共享每层的网络权重。
    3. 除了positional encoding以外,使用了layer encoding来建模不同层的偏置。
    4. Adaptive Computation Time的思想引入transformer,每个layer之后用一个网络来predict每个词需不需要halt,有些词需要经过更多的层来获得一个较好的表示。
    5. 需要注意这篇文章的机器翻译实验中并没有使用词级别ACT,所以词级别ACT的使用对于大规模的任务需要警惕。
  5. DiSAN
    1. 此文投稿时间与Transformer问世只差两个月,可以看做同期工作,文章没有太多transformer的影子,将纯self-attention结构用于NLI/分类任务上,直至目前仍然是很强的baseline。
    2. 提出了multi-dimensional attention,与multi-head attention有类似之处,
    3. 普通的self-attention无法建模语序,区别于transformer使用的positional encoding,此文提出使用自左到右和自右到左两个单向的attention mask来建模语序(可以看做两个方向的causal transformer)。
      1. ablation study验证了这种建模方式的有效性。
    4. 在不使用交互的情况下在SNLI有85.7的test acc,属于当时的state-of-the-art。
    5. 不同于transformer,此文不stack self-attention layer,然而未来大家都已经看到了。
  6. Star-Transformer
    1. @邱锡鹏 老师组的工作,同时维护每个词的表示和一个global的表示,思路类似于视觉中的Squeeze-and-Excitation Networks
    2. 限制每个词attend到邻域和global表示,全局表示attend到每个词,迭代地更新词级别的表示和global的表示,复杂度为O(n)。
      1. ablation study验证了局部attention和全局attetion的必要性。
    3. 由于更新global表示与更新词级别表示用了两套参数,因此删除了网络中的FFN以平衡参数量。
    4. 在中小型数据集上有比transformer显著更好的泛化性能和推断速度。
    5. 从图网络的视角来看,把clique简化为了star + ring。
  7. Set-Transformer
    1. 此文试图将transformer应用于无顺序的数据(例如集合)中。
    2. 大家能想到的一种最简单的方法是去掉positional encoding,也就是这篇文章中提到的SAB(Set Attention Block)。
    3. 但是普通的SAB的计算复杂度为O(n^2 d),当集合中元素数量很多时候计算代价很大,本文提出了ISAB(Induced Set Attention Block):
      1. 每个self-attention block中维护m个inducing points(可以看做对原来n个元素的表示做了一个压缩),将原来的n->n的self-attention拆成二段式n->m->n:首先用inducing points对原来的n个元素表示做self-attention,之后再用n个元素的表示对这m个inducing points(压缩之后的表示)做self-attention,时间复杂度为O(nmd)。
      2. 尚不清楚此算法对于文本类型的效果如何,一个可能的尝试是用在文档级别翻译的encoder-decoder attention中。
  8. Gaussian Transformer
    1. 观察发现attention通常对近距离的词权重较大,远距离的词权重较小。
    2. 对self-attention模块增加了一个高斯先验:
    3. 设计了一套交互式基于transformer的NLI结构:三层encoder+三层带交互的encoder,在SNLI上取得了89.2的test acc,式目前不使用EMLO/BERT的SOTA。
  9. Augmenting Self-attention with Persistent Memory
    1. 做过仔细的profiling的同学会发现,transformer中FFN的计算代价很高(无论是显存还是速度)。
    2. 直接去掉FFN对transformer性能影响极大。
    3. 这篇文章去掉FFN的同时在self-attention层中加入了persistent(与文本本身无关,属于模型的参数) key/value,使得新模型在参数量上与使用FFN的transformer相匹配,性能不降。
    4. 实际上每层需要1024组persistent memory,开销不小,需要后续改进。
  10. Large Memory Layers with Product Keys
    1. 同样来自FAIR,思路是用大的key/value字典来代替FFN。
    2. 字典体积很大,memory size=1024^2,使用了二分subspace的方法降低查询代价。
    3. 使用了faiss做高效的similarity search。
    4. 由于参数/计算量大,只在12层transformer中的第六层和第十二层把FFN改成key-value layer.
    5. 思路上与word embedding流行年代的multi-sense embeddingmemory network有类似之处,有兴趣的同学们可以考虑在key-value layer引入外部知识,比如knowledge embedding。
  11. Adaptive Attention Span in Transformers
    1. 观察发现大部分层/head的attention集中在局部。
    2. 同样将Adaptive Computation Time 的思想引入transformer中,动态地学习每个attention head的context length。
    3. 使用相对低的计算代价建模长程上下文,在字符级语言模型上效果显著优于transformer-xl。
    4. adaptive的方法通常需要对参数比较敏感,其它任务上的性能有待考证。
  12. InDIGO
    1. 来自 @Jiatao Gu,使用transformer做非自左到右的解码。
    2. 句子的绝对位置和相对位置都不再确定,如何建模位置信息?
    3. 使用更”模糊“的相对位置编码:x在y的左边,x在y的右边,x是y。
      1. 该相对位置编码是insertion-invariant的。
      2. 为什么work?可以参考relative positional encoding原文中的clip_dist=1的情形。
    4. 大量的实验来探究不同解码方式生成的质量。
    5. 同期还有两篇研究非自左到右编码的文章:Insertion Transformer (log(n)步解码), Non-Monotonic Sequential Text Generation (对transformer本身没有改动)。
  13. Levenshtein Transformer
    1. 同样来自Jiatao。
    2. 普通的transformer每层更新每个词的表示。
    3. Levenshtein Transformer每层对句子进行一个编辑,具体分为三步:
      1. 删除token
      2. 在句子中加placeholder
      3. 预测每个placeholder对应的词。
    4. 用RL优化每层output和target的levenshtein distance。
    5. 未来有很多的可能性,令人充满遐想,比如 @Towser 提过的human-in-the-loop。
  14. Tree-Transformer
    1. 用Transformer来做unsupervised parsing,尝试从文本中学习结构。
    2. 在每个Transformer layer中都把整段文本分成一系列成分。
    3. 对attention加上mask,对每个词而言,超出当前所在成分的权重置为0。
    4. 如何分出成分?每个位置预测link probability代表其与后一个词在同一个成分中的概率,设置一个threshold用来分段。
    5. 直接这样做模型倾向于将整句分到同一个成分中,因此设计了neighbor attention。
    6. 如何保证Transformer layer从下层到上层学出的成分组成一棵合法的树?设计了hierarchical constraint。
    7. 提出了从pre-trained Tree-Transformer中构建成分树的算法,使用BERT中的MLM loss做训练,并在unsupervised parsing上评测。
    8. 同在EMNLP 19中有一篇立意类似的文章PALM
  15. Tensorized Embedding
    1. WikiText-103这类数据集,词表很大(267735),embedding占据了总参数的大部分。
    2. 本文试图分解(vocab_size=I1 * I2* ... In, d=J1 * J2 * ... Jn)这个矩阵:
      1. (I1 * I2 * ...* In, J1 * J2 * ...* Jn) -> (I1 * J1 * r1), (I2 * J2 * r1 * r2), ... (In * Jn * rn),其中r*为预设的秩。
      2. 思路上与三年前的LightRNN接近,但是LightRNN有一个用最小费用最大流求word reallocation的过程,本文缺失了这一过程,因此可能对初始词表的排布有一定要求。
    3. 显著降低了embedding的参数量,并将其应用于Transformer-XL,性能不降/略有提升。
    4. 在CTR任务上也有一定效果。
  16. Bi-BloSAN
    1. 此文是DiSAN原版人马做的拓展,试图将self-attention拓展至长文本。
    2. 将self-attention分解为局部和全局,先将文本分块,再依次进行intra-block self-attention和inter-block self-attention。
    3. 在SNLI和SQuAD上验证了有效性。
    4. 影响力不够大的原因:
      1. (主要)选择了DiSAN而不是Transformer作为backbone,名字不好读。
      2. 仍然是单层结构不能stack。
      3. SNLI句子平均长度只有14,没有必要节省self-attention的开销,效果相比DiSAN没有显著提升;SQuAD上性能与LSTM类似。
  17. Sparse Transformer
    1. 解决transformer应用于生成长序列开销大的问题。
    2. 对于image,每个像素attend当前行和当前列。
    3. 对于文本,首先将文本分成固定长度(stride)的块,第i个块中的第j个词attend第i个块中的前(j-1)个词和前i-1个块中的最后c(常数)个词。
    4. 时间复杂度为n sqrt(n),思路无比接近上文(citation is missing)。
    5. 对于>=1维的情形,提出了新的positional encoding: (i, j) -> e1(i) + e2(j)。
    6. 基于blocksparse,在tensorflow上有高效的实现。
  18. BP-Transformer
    1. 解决transformer应用于长文本开销大的问题。
    2. 维护log(n)个层次的表示:第k个层级的第i个节点建模[i*2^k, (i+1)*2^k)这个span,一共2n个节点。底层节点可用于词级别任务,顶层节点可用于分类。
    3. span级别节点直接attend词级别的表示,词级别的节点按照相对距离由近到远attend低层级到高层级的表示,计算复杂度为n log n,可用于长文本建模。
    4. 可同时用于单向和双向建模,在长文本的语言模型,分类和翻译上有着不错的性能。
    5. 由于引入了更多的节点(*2)增大了FFN上的开销,对于短文本速度没有优势。
  19. Compressive Transformer
    1. 为了建模长程依赖,Transformer-XL将当前segment的表示和上一个segment的表示作为memory。
    2. 此文认为把历史都压缩在上一个segment的表示中不妥,提出了维护一组memory和一组compressive memory,较远的memory压缩成compressive memory。
      1. 压缩的方式可以是各种花式conv/pooling。
    3. 提出了新的用于评测长序列建模的benchmark:PG-19,平均篇章长度达到69K。
  20. Reformer
    1. 同样试图解决transformer计算量过大的问题。
    2. query和key表达的含义有一定冗余,本文合并query和key(此处用qk来表示),这样attention score大的词对相应的qk的距离会更近。
    3. 使用local sensitive hashing来对qk分桶并排序,每个桶内只attend当前桶和之前的桶,减小attention的计算开销。
    4. 使用可逆网络降低显存开销(这是本文最漂亮的一个点)
      1. 普通的残差网络形式为y = x + f(x),无法从y中倒推出x。
      2. revnet的形式是y1 = x1 + f(x2),y2 = x2 + g(y1)
      3. 倒推可得x2 = y2 - g(y1), x1 = y1 - f(x2)
      4. 本文选择f为attention,g为ffn,并且声明此做法可以不降性能。
    5. 为什么可以降显存,因为不用存每层的activation——可以在backward的时候从更高层的activation中恢复出来(当然带来了一些额外的计算开销,速度变慢),因此显存占用几乎与layer数无关,不明白的可以去看Training Deep Nets with Sublinear Memory CostThe Reversible Residual Network: Backpropagation Without Storing Activations
    6. 在enwik8上性能离state-of-the-art有一定距离,那么reformer优势是什么呢?
      1. 在没有位置先验(比如集合,图,multi-agent)的数据类型上,LSH仍然可以work。以上提到的其它结构均依赖于locality bias,需要原数据有位置信息(比如图片,文字,语音)。
    7. 随着未来transformer越来越深,可逆网络的应用可能会成为趋势。(p.s. revnet的训练额外开销巨大,在框架对其优化之前不要对reformer的速度有什么期待)
  21. TODO: Jiatao的一系列新工作:depth-adaptive, disco, monotic multihead attention……

近年来改进transformer的工作层出不穷,此处只列举一些个人比较感兴趣的工作,如有疏漏,不吝赐教。




  

相关话题

  GAN:固定训练好的判别器网络,去指导训练生成器为什么不可以? 
  如何看待微软小冰写的诗? 
  训练过程中loss震荡特别严重,可能是什么问题? 
  如何用自然语言处理判断一句话是否符合中文口语习惯? 
  新手如何实现个简单AutoML框架。有参考的github开源项目介绍吗? 
  GAN(对抗生成网络)可以被用于哪些(商业或潜在商业)实际问题? 
  为什么现在有这么多人工智能无用论? 
  验证集loss上升,准确率却上升该如何理解? 
  北京深鉴科技基于FPGA平台的DPU架构如何? 
  如何评价Google最新提出的gMLP:MLP模型在CV和NLP任务上均取得较好的效果? 

前一个讨论
机器学习中有哪些形式简单却很巧妙的idea?
下一个讨论
如何看待谷歌研究人员提出的卷积正则化方法「DropBlock」?





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利