解析Transformer-XL

Link Start

在很久之前的文章理解Bert 中我们介绍了Transformer,它作为CNN和RNN之后一个划时代意义的特征处理器是无比强大的,但实际用起来,还是会发现它存在着一些较为尴尬的缺陷,而为了解决其中的某些缺陷,便发展出了Transformer-XL.

Transformer存在的问题

众所周知,Transformer相对于RNN的一个重大优势在于它能捕捉长距离的依赖关系。但是,我们在实际应用的过程中会发现,多头注意力机制和RNN不同,不是循环共享参数这么简单的,它为了保存这种依赖关系,需要存储大量的参数,并且随着序列长度的增加,参数数量以平方倍的速度在增加。这对于我们的GPU来说是一个灾难,随着序列长度的扩张,且不论因增加的计算量而导致的延迟,OOM是迟早的事情。这也是为什么那些预训练的Bert模型的长度基本在512以内的原因。
我们在处理长文本的时候,通常是将其切分成更小的片段(segment),然后对每个片段进行单独的处理。而且为了保持切分的容错率,尽可能的不丢失语义信息,我们在且分的时候还会设置一个1/3左右的重叠区,避免某些词汇别割裂开而导致的语义变化。


长序列Segment切分

但是这样子切分,还是无法避免前面segment之间无交集部分的关系依赖。举个例子:

“小明考上了清华大学实现了他小时候的梦想。”

然后这句话中的小明被切分到了两个segment中:

句子切分

此时,的encoder向量将无法获取到任何小明的信息,因此便无法得知指代的是谁,这对于相关任务而言可能十分不利。不仅如此,对于大篇幅的文章的某些判断,通过切分成segment之后进行的断章取义的分析再组合回去是否还能还原文章原汁原味的特征这一点也很值得怀疑。

盲人摸象

因此,我认为,使用某种方式,来保留整体的特征信息是很有必要的,这也是Transformer-XL主要解决的问题。

Transformer-XL是如何解决超长序列关系依赖的

Transformer-XL 采用了一种与RNN类似的思想。RNN是将前一个时间步的状态信息往下一个时间步传递,那么我们为何不能也这样搞?——将前一个时间步的segment的状态信息传往下一个segment。
于是它真的就这么干了:


Transformer-XL记忆传递

哈?... 说起来轻巧,你..你这是纸...纸上谈兵 ..说起来轻巧,关键是这玩意要怎么实现呢?

当然就是RNN是怎么搞的,我就依葫芦画瓢呗!
原始的encoder过程是这样的,原始输入加上位置编码,经过多层的encoder block:


transformer encoder

我们将这整个东西作为一个循环体,然后将每一步的输出特征复制一份传给下一个segment的循环:


Transformer-XL记忆传递细节

可以说是跟RNN一样一样的...


connect

我们再来看一下每一处的连接细节。
其实没什么特别的,就是简单的拼接即可:
假设前一个segment的输出tensor是h_{t-1,i} ,当前segment的输出tensor是h_{t,i}, 它们的形状都是[batch_size, segment_len, emb_dim], 把它们拼接起来之后就是[batch_size, segment_len*2, emb_dim] ,举个实际的例子:

张量拼接

我们将这一个操作记作
cat\_h_{t,i}
表示第t个segment第i个block的连接操作。

需要注意的是,在训练期间,我们对记忆的那部分取消了反向传播。否则,我们仍然会有关于计算资源的原始问题。而实际上h_{t-1,i}cat\_h_{t,i} 都是注意力计算中的重要组成部分。

注意力计算的过程和Transformer并没什么区别,出了形状上,每个query需要额外计算前面传过来向量的的注意力,也就是形状变成了(batch_size, segment_length, 2*segment_length):


mask

mask的方式也只需对当前输入的矩阵segment_length到2*segment_length这部分进行mask即可,因为前文信息是可见的。

然后再说一下位置编码,在transformer的原始论文中的位置信息通过正余弦函数来获取,通过这种方式的话位置不同segment的位置信息会重置,绝对编码会有问题,因此需要改成相对编码的方式。
但实际Bert使用时位置信息是通过神经网络来计算的,我想Transformer-XL中也可以通过神经网络来模拟位置信息,只要根据sengment序号截取即可,就不存在位置编码冲突的问题。想了解具体相对位置编码实现的同学可以看一下原始论文Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context.

以上..Transformer-XL初看起来有点迷...但是仔细研究一下它的结构发现还是蛮简单的。接下来大概会抽个时间说一说它的TensorFlow实现。

参考资料

Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
Dissecting Transformer-XL

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352