论文笔记-Vanilla Transformer:Character-Level Language Modeling with Deeper Self-Attention

论文笔记-Vanilla Transformer:Character-Level Language Modeling with Deeper Self-Attention

  • 1. 介绍
  • 2. Character Transformer Model
  • 3. 3种辅助loss
    • 3.1 Multiple Positions
    • 3.2 Intermedia Layer Losses
    • 3.3 Multiple Targets
  • 4. 实验
    • 4.1 训练和数据
    • 4.2 结果(消融实验)
    • 4.3 Qualitative Analysis 定性分析
  • 参考


前段时间为了解决长文本分类的问题,即长距离依赖问题,依次就看了些相关论文。比如Transformer-XL、XLNet等,这篇Vanilla Transformer在Transformer-XL中被用来做对比,所以也看了下这篇论文,记录一下。

1. 介绍

论文名称为:Character-Level Language Modeling with Deeper Self-Attention,主要解决的是字符级语言模型。在使用Transformer之前,自然语言文本的Character-level modeling通常具有如下一些 挑战/困难

  • (1)模型学习单词需要“from scratch”从头开始
  • (2)自然文本表现出的长甚至超长距离依赖
  • (3)基于字符的序列长度比词级别的序列显著增加,需要更多的计算step

但Transformer由于其self-attention的核心,作者发现:

  • (1)transformer适合于长序列的语言建模。作者推测,transformer在这里的成功是由于它能够“快速”地在任意距离上传播信息(We speculate that the transformer’s success here is due to its ability to “quickly” propagate information over arbitrary distances)
  • (2)对basic transformer进行一些修改在这一领域(字符级语言模型)是有益的:增加3个辅助损失auxiliary losses
    • 【Multiple Positions】 at intermediate sequence positions
    • 【Intermedia Layer Losses】 from intermediate hidden representations
    • 【Multiple Targets】 at target positions multiple steps in the future

这些loss加速了收敛,并且使得训练更深的网络成为可能。

2. Character Transformer Model

语言模型:
P r ( t 0 : L ) = P ( t 0 ) ∏ i = 1 L P r ( t i ∣ t 0 : i − 1 ) Pr(t_{0:L})=P(t_0)\prod\limits_{i=1}^L Pr(t_i|t_{0:i-1}) Pr(t0:L)=P(t0)i=1LPr(tit0:i1)

像原先seq2seq架构的Transformer一样,在训练语言模型时,为了确保模型的预测仅条件依赖于过去的字符,所以也为attention layers添加了look-ahead mask,所以每个位置只可以关注到左侧。即使用的是原先seq2seq架构的Transformer的 decoder 部分结构

模型架构上基本就是堆叠的64层transformer layers,每个layer有2个head。一个transformer layer就是指包含multihead self-attention sub-layer + 2层全连接sub-layers的 feed-forward network。每层Transformer layer的hidden_size=512, feed-forward network的内层FFC的dim是2048。模型处理的序列长度为512。

原始的 transformer中使用了正弦信号作为position encoding,但是此论文中是有64层的深度网络,这种时间(序列)信号在传播时非常容易丢失,所以作者在模型的每层transformer layer 前都添加了a learned per-layer positional embedding,即每层都添加了可学习的位置embedding,每一层都不一样,假设有N层layers,每层有L长度的context positions,位置编码深度(embedding dim)为512,则光位置embedding就会有一共 L   x   N   x   512 L\,\text{x}\,N\,\text{x}\,512 LxNx512个额外的(位置)参数。【每层都会将上一层的输出与pos embedding加在一起作为下一层的输入】【每层的pos embedding不是共享的】

所以说架构上没有提出什么特别新的,但是由于当模型深度很深,作者在最开始的实验中,只是有10层的时候,训练就已经非常有挑战性了,很慢的收敛以及非常低的准确率accuracy。于是作者提出增加3种辅助loss,分别是:

  • 【Multiple Positions】 intermediate positions
  • 【Intermedia Layer Losses】 intermediate layers
  • 【Multiple Targets】 and nonadjacent targets

论文指出增加这些辅助loss后,显著的加速了收敛。作者猜测这些loss不仅能加速收敛,还作为额外的正则化regularizer

3. 3种辅助loss

3.1 Multiple Positions

论文笔记-Vanilla Transformer:Character-Level Language Modeling with Deeper Self-Attention_第1张图片

预测时不是指预测最后一个位置,而是序列的每个位置都进行预测,例如上图中t1,t2,t3,t4 4个位置都会产生预测然后都会计算loss。训练时,t1~t4产生的loss都不会decay,都是同等重要的。【这一类loss贯穿整个train的全部阶段,不发生衰减】

3.2 Intermedia Layer Losses

论文笔记-Vanilla Transformer:Character-Level Language Modeling with Deeper Self-Attention_第2张图片

不仅最后一层会计算loss,作何对序列中所有中间位置的也添加了预测并也参与计算loss(见图3)。 随着训练的进展,低层被加权,对损失的贡献越来越小。 如果总共有n层,那么第 l l l个中间层在完成 l 2 n \frac{l}{2n} 2nl 的训练后停止贡献任何损失。 在训练完成一半后,这个schedule会drop所有中间损失。【中间层的loss并不贯穿整个train始终,而是随着训练进行,逐渐衰减,衰减的方式是,一共有n层网络,当训练进行到 l 2 n \frac{l}{2n} 2nl 时停止计算第k层loss。也就是说当训练进行到一半的时候,所有的 中间层 都不再贡献loss】

3.3 Multiple Targets

论文笔记-Vanilla Transformer:Character-Level Language Modeling with Deeper Self-Attention_第3张图片

在序列的每个位置,模型不仅对下一个token做预测,还会对下下一个token做预测。【但对于下下步的预测结果产生的loss是要发生衰减的,论文中该loss乘以0.5后再加入到整体的loss中】

4. 实验

4.1 训练和数据

  • prediction layers:logistic regression layers over the full 256 outputs
  • 由于参数(235 million)比语料大,所以为了regularize the model,添加了dropout=0.55 在attention和ReLU layers。
  • 使用momentum optimizer with 0.99 momentum
  • learning rate 固定:0.003
  • 训练:4 million steps

4.2 结果(消融实验)

论文笔记-Vanilla Transformer:Character-Level Language Modeling with Deeper Self-Attention_第4张图片

从实验结果开看:【Multiple positions和Intermedia layer losses的增益最突出。】

4.3 Qualitative Analysis 定性分析

优点:
可以学到长距离依赖,can successfully copy over this long distance.

缺点:
计算量大,每次预测一个字符,前面都要重新计算,不能像RNN一样能记住之前的隐藏状态信息。

参考

[1] Character-Level Language Modeling with Deeper Self-Attention
[2] 【读论文】Character-Level Language Modeling with Deeper Self-Attention(Vanilla Transformer)

你可能感兴趣的:(DeepLearning,NLP)