Transformer

《Attention is all you need》

摘要

目前而言,序列模型都是基于Seq2Seq,用Encoder提取语义信息C,再从语义信息Decoder成另一个序列,其中Encoder和Decoder都是非常复杂的RNN或者CNN组成。
对于语义信息C,由于在解码的过程中,如果只有一个语义C导致不管解码哪一个位置时,对Encoder部分所有的位置采取了同样的权重。
因而融合注意力机制是目前为止比较好的解决方案了(当然还有很多花里胡哨的)。
Seq2Seq模型中大多用了RNN模型作为输入的Encoder和输出的Decoder。RNN天然的时序结构注定了不能在GPU上实现高度并行。怎么办?Google团队提出了Transformer模型。
其实已经有很多工作想取代RNN在NLP的地位,比如堆叠的膨胀卷积模型等。如果理解了这个模型,对于Transformer理解并不难。

引言

是的,RNN模型有很多缺点,Google很牛逼,提出了Transformer

模型

inpus

Transformer.jpg

乍一看很复杂,仔细看,就两点。
(1)自注意力
(2)前馈网络

Encoder-Decoder

(1)当inputs序列[x_1,x_2,...,x_n],即一句话的token_id,经过Input Embedding时,对每一个token进行look for table投影成512维的向量。同时,对inputs每一个位置进行编码,同样Embedding成512维度的向量。
Position Encoding如下

Positional Encoding

Position.png

原文中指明了,pos是位置,i是维度。我的理解是当前维度是偶数时正弦函数,当前维度是奇数时,是余弦函数。

import numpy as np
import matplotlib.pyplot as plt
import math
res = []
for pos in range(1, 100, 1):
    pos_i = []
    for i in range(1, 512, 1):
        if (i % 2 == 0):
            pos_i.append(math.sin(pos / math.pow(10000, i / 512)))
        else:
            pos_i.append(math.cos(pos / math.pow(10000, (i-1) / 512)))
    res.append(pos_i)
plt.imshow(np.array(res))
plt.colorbar()
plt.show()
Figure_1.png

因为postion_embedding和token_embedding都是512维,可以将这两个向量对应维度进行相加,相当于融合了位置信息。有一些经典的论文CNN做文本,会将Position concat到后面去。

Encoder

做完上一步,相当于得到512维的嵌入表示,这个嵌入表示融合词特征和位置特征。
接下来,是多头的注意力层。
暂时不考虑多头,先考虑注意力机制怎么实现。

初始化全连接的矩阵Q,K,V 维度为[512,64]

对于输入序列[x_1,x_2,...,x_n]

x_1,其维度为[1,512],乘以矩阵Q,维度为[512,64],得到的向量为q_1,维度为[1,64]。同理q_2,q_3,q_4,...,q_n

x_1,其维度为[1,512],乘以矩阵K,维度为[512,64],得到的向量为k_1,维度为[1,64]。同理k_2,k_3,k_4,...,k_n

x_1,其维度为[1,512],乘以矩阵V,维度为[512,64],得到的向量为v_1,维度为[1,64]。同理v_2,v_3,v_4,...,v_n

首先将q_1向量乘以{k_1}^T向量,[1,64]*[64,1]得到一个值w_1。这个w_1,乘以v_1。相当于给v_1加了一个权重。
同理,将q_1向量乘以{k_2}^T向量,为v_2增加权重w_2
同理,将q_n向量乘以{k_n}^T向量,为v_n增加权重w_n

这样,对于q_1,得到了v_1,v_2,v_3,...,v_n,都是[1,64]。加其累加在一起,得到V_1=[1,64]。

同理,对于q_2,得到V_2=[1,64]
同理,对于q_n,得到V_n=[1,64]

可以看到对于每一个token,都从[1,512]投影到[1,64]。这个和RNN(hidden=64)模型异曲同工。

还有Scaled,其实就是再除以了sqrt(d_k)。论文中有比较,乘性的Attention不如加性的Attention好,原因可能是得到的向量乘积值太大了。用sqrt(d_k)规范一下,效果和加性的attention一致。

多头

文章中指出,这种一组QKV不够,多几组效果好。
于是维护了8组QKV。分别执行同样的操作,相当于每一个token此使有8个[1,64]的V。将最后的维度concat起来,得到[1,64*8] = [1,512]维度的向量。这就是多头,表示不止有一组Attention得到的V,其实有8个。

怎么理解?
我们将其与卷积联系在一起,如果一组QKV相当于一个卷积核,能够提取一个特征[1,64],那么8组QKV相当于8个卷积核,能够提取八组特征。这个极大的扩展了模型的复杂度,能够学习到更多文本特征。

其实巧妙的地方不在于先从512维度压缩到64,再从64维度展开到512,更重要的一点在于可以利用残差网络。

残差

残差网络的提出,让深度神经网络成为可能。对于任何一个模型,我们希望对于输入x,能学到函数F,即x->F(x)F如果是多层网络,很难学到F映射。尤其是网络层数加深,梯度消失更难以训练。因而不希望学习F(x)。而是学习F(x)-x。即学习x->[F(x)-x]+x。所以将之前的x直接连到后面,去学习F(x)-x,即残差。

对于模型而言,就是将输入和输出连接同时送到下一层。

Add Norm

因此,多头注意力得到的输入[1,512]token,和输入x_1[1,512]直接相加[1,512]。再对这一层[x_1,x_2,...,x_n]进行层归一化。

Feed Forward

前馈网络层,就是全连接,这边论文中所述是两层。
第一层[1,512] * [512,512*4] = [1,2048]
Relu
第二层[1,2048] * [2048,512] = [1,512]

6 encoder

这样的encoder有6层。得到的输出

【未完持续】

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

推荐阅读更多精彩内容