attention is all you need论文学习 transformer

编码器和解码器,编码器输入多个token,输出每个token的编码向量,解码器的输入是token的编码向量,输出是转换的向量,转换的维度不一定和编码器的输入token长度一样,引文如果是翻译,不同语言翻译后是不同的长度。

编码器是6个layer组成(这里一个layer其实是一个块,每个layer中有一个sublayer,编码器的sublayer就是多头自注意力,然后是一个MLP,论文中把mlp说成是简单的位置全连接网络),每个layer的输出是layerNorm(x+sublayer(x)),由于使用残差连接所以需要维度一样,所以这里维度都固定成512。

layernorm,是每个数据的特征做均值为零方差为1。

batchnorm是把batch中每个特征做均值为零方差为1,训练的时候可以去训练这个均值和方差,也可以是得到所有数据均值和方差,用在测试中。(feature一个维度,batch一个维度)

常常数据输入是三维的,一个维度是batch,一个维度是sequence,一个维度是feature。如下图黄色是layernorm,

 

当样本长度抖动比较大的时候,用batchnorm差别比较大。如果遇到一个比较长的测试序列,之前训练时候没有,那么之前训练用的batchnorm均值和方差不太好用。而对layernorm来讲,他是算每个样本的均值和方差也不需要用全局的均值和方差。所以不管样本长还是短对layernorm影响不大。

解码器是使用6个layer,每个层有三个子层。解码器有带掩码的注意力机制。是为了保证在t时间内不用看到t时间以后的输入。注意力函数是将一个query和一些

 key _value对映射成个输出的一个函数

输出是value的加权和。输出和value的维度是一个样。对于每个value的权

重是由query和value 对应的key的相似度算来.不同的相似函数导致不同的注意力版本.

文中scaled  dot product attention

Query和key是等长的,他门做内积作相似度,内积值越大相似度越高,内积值为0 两个相量垂直了没有相似度.Query和每个key作内积后的值除根号keys的维度.然后通过softmax函数得到权重0实际中用两次矩乘法实现

多头注意力是query、 key、 value经过线性变换,然后再计算相似度,可以看成每个头是不同的相似度函数。自注意力是qk v相同.一个句子算每个token和其他token的相似度,然后加权表示,这是编码 器输出 。解码器(第2个attention的输入)是编码器的输出作为key, value。 (解码器第1个attention的输出作为query. kV相当于有所有编码信息,q只需不断询问得到)

3,3

 RNN中通过MLP后的向量再用作下一个的输入,但attention起到了用全局信息的作用。所以attention可以更好的并行.Transformer中MLP不需要之前的信息输入。

3.4 embedding and softmax

embedding是每个词编码成一个向量,这里是长度为512的向量。softmax层之前的线性层也是用同一个embedding,来转化解码器的输出到下一个token的概率。在embedding层中需要乘根号模型维度,因为学l2norm可能将向量的scale减小,这样后面加上position encoding的时候会不在一个数量级。

positional encoding,attention没有时序信息,权重是query和key的相似度,没有时序信息的话,同一个句子如果打乱顺序出来的值是一样的,只是位置不一样。但是实际上打乱顺序句子的意思是变了的。rnn本来就是上一个时间的输出作为下一个的输入,所以本身带有时序。attention在输入中加时序信息。用一个长为512的向量表示位置的数字,记录时序。这个值和512输入相加。

 

实验

使用的是英语到德语的翻译,使用的是词根提取的词典,一共37000个tokens

十万步,一台机器12个小时。8个p100.学习率不用调整

使用了dropout  0.1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值