Reference:arXiv:1902.09113v2 [cs.CL] 28 Feb 2019
摘要
为了减少transformer的模型复杂度,提出了一种名为star-transformer的模型,可以在大幅减少参数的同时效果跟transformer相接近
在四个任务(22个数据集)上的实验表明,对于中等大小的数据集,star-transformer比标准transformer有显著的改进
模型

Radical Connections
每个star-transformer网络有n个外围节点和一个根节点,并且根节点跟所有外围节点相连接,如之前的图所示,任意两个不相邻的节点通过根节点经过两步的更新可以捕捉非局部信息 
Ring Connections
环形的结构加入的归纳偏置(或许这就是在小数据集上比标准transformer效果更好的原因),可以捕捉到局部成分的关系,就像RNN和CNN一样。
在根连接和环连接的结构下,star-transformer可以同时捕捉局部和非局部成分的信息  
Implementation
Multi-head Attention
跟标准transformer一样使用了多头注意力机制,但是这里不同的是 q 并没有经过矩阵投影成 Q 
Update
首先定义一些符号  更新分为两个部分 第一部分:每个外围节点都由其相邻的节点,和自己前一时刻的状态更新,
C
i
t
C^t_i
Cit?代表第
i
i
i个节点在第
t
t
t时刻的上下文信息,再丢到一个LN层里面  第二部分:根节点总结所有的外围节点的信息,使用多头注意力,经过ReLu后再丢到LN层里面 
Position Embeddings
为了加入序列信息,采用了一个可学习的位置编码embeddings,跟词向量concat在一起,并且在所有的时刻都共享 
Output
对于不同的下游任务使用不用的输出层
如果是文本分类的话,映射到一个固定长度的语句级别的向量表示,并在最后一层使用最大汇聚,并与
s
T
s^T
sT混合到一起,再丢到多层感知机分类器里面。 
整体训练的步骤伪代码: 
Comparison to the standard Transformer
对比跟标准transformer的复杂度:
标准transformer:
O
(
n
2
d
)
O(n^2d)
O(n2d)
star-transformer:
O
(
6
n
d
)
O(6nd)
O(6nd)
可以看到,把复杂度从立方减少到了平方,算是非常的显著的提高
训练数据展示:  可以看到除了MTL-16之外,全都是非常小的数据集(然而这个MTL-16是16个数据集组成的大数据集,最大仅有28k,所以还是都是超级小数据集)
实验
Masked Summation

文本分类

NLI

序列标注

评价
总的来说,star-transformer由于它结构引入的归纳偏置,在小的数据集上有非常不错的表现,在几个任务上都超越了标准transformer(因为标准transformer需要更多的数据来学到一些模式)
结构非常清新简单,这种相对轻量级的框架也许在工业界能有些作为?
|