论文笔记-Vanilla Transformer:Character-Level Language Modeling with Deeper Self-Attention
前段时间为了解决长文本分类的问题,即长距离依赖问题,依次就看了些相关论文。比如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=1∏LPr(ti∣t0:i−1)
像原先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
预测时不是指预测最后一个位置,而是序列的每个位置都进行预测,例如上图中t1,t2,t3,t4 4个位置都会产生预测然后都会计算loss。训练时,t1~t4产生的loss都不会decay,都是同等重要的。【这一类loss贯穿整个train的全部阶段,不发生衰减】
3.2 Intermedia Layer Losses
不仅最后一层会计算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
在序列的每个位置,模型不仅对下一个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 结果(消融实验)
从实验结果开看:【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)