Attention is all you need

Transformer模型革新了序列建模,摒弃了RNN和CNN,完全依赖于注意力机制。其核心包括点乘注意力和多头注意力,通过位置编码引入序列顺序信息。FFN作为辅助,用于提升模型表达能力。Transformer在长序列处理中表现出色,尤其适用于需要捕捉不同部分关注度的任务,如情感分析。
摘要由CSDN通过智能技术生成

Transformer

在这里插入图片描述

​ 在transformer之前,RNN,LSTM,GRU已经在序列模型和翻译工作中建立了很多优秀的模型。transformer是第一个完全依赖于注意力去计算输入输出表示的模型,它没有用RNN,CNN。

​ 注意力函数把query,key,value作为输入,再计算值的权重,然后计算值的权重和。

​ 注意力函数普遍是用两种,分别是加法注意力和点乘注意力,他们两者效果取决于 d k d_k dk 的大小。 d k d_k dk 较小时候,两者效果差不多, d k d_k dk 较大时,加法机制优于乘法机制。在Transformer用的是点乘注意力,这是因为矩阵乘法的代码优化,使得它更快,占用内存更小

  • Scaled Dot_Product Attention and Multi-Head Attention
    在这里插入图片描述
    Scaled Dot_Product Attention:
    A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax({QK^T \over \sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
    Multi-Head Attention:
    M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , h e a d 2 , . . . , h e a d h ) W O   w h e r e h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) MultiHead(Q,K,V)=Concat(head_1,head_2,...,head_h)W^O~\\ where head_i =Attention(QW_i^Q,KW_i^K,VW_i^V) MultiHead(Q,K,V)=Concat(head1,head2,...,headh)WO whereheadi=Attention(QWiQ,KWiK,VWiV)

其 中 W i Q = ϵ R d m o d e l × d k , W i K ϵ R d m o d e l × d k , W i V ϵ R d m o d e l × d v 其中 W^Q_i=\epsilon\R^{d_{model}\times d_k},W_i^K\epsilon\R^{d_{model}\times d_k},W_i^V\epsilon\R^{d_{model}\times d_v} WiQ=ϵRdmodel×dk,WiKϵRdmodel×dkWiVϵRdmodel×dv

其中Multi-Head Attention 可以使用三种不同的方式,详情见论文3.2.3

  • Position-wise Feed-Forward Networks

F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x)=max(0,xW_1+b_1)W_2+b_2 FFN(x)=max(0,xW1+b1)W2+b2

相当于用了两个全连接的神经网络,另一个理解方式是,可以把它当作两次核为1的CNN层,输入输出维度 d m o d e l = 512 d_model=512 dmodel=512,内部层维度 d f f = 2048 d_ff=2048 dff=2048

  • Embeddings and Softmax

使用Embedding把输入核输出序列转换为维度为 d m o d e l d_{model} dmodel, 使用softmax函数转换解码器的输出到预测序列类别的可能性

  • Positional Encoding (位置编码)

    ​ 由于transformer不包含recurrence和CNN,就不能使用到序列的位置信息。为了让模型使用序列的顺序信息,transformer给模型注入了与序列绝对位置相关的信息。最后,作者添加了“positional encodings”到编码器和解码器底部的input embedding。它和Embedding有一样的维度 d m o d e l d_{model} dmodel,这样就可以对两个进行add操作。positional encodings可以有很多选择,自适应的和固定的,见论文参考文献[9]

    ​ 论文对自适应的positional embeddings做了实验,发现两个版本效果相似,最后选择了正弦版本,因为它可能允许模型推断出比在训练中遇到的更长的序列长度。
    P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l )   P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos,2i)}=sin(pos/10000^{{2i}/d_{model}})~\\ PE_{(pos,2i+1)}=cos(pos/10000^{{2i}/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel) PE(pos,2i+1)=cos(pos/100002i/dmodel)

  • Why Self-attention

    ​ 对于一段文本序列,seq2seq模型通常会先用某种机制对该序列进行编码,通过降维方式将它encode成一个固定长度的向量,用于输入到后面的全连接层,而seq2seq模型之前一般会用CNN,RNN(LSTM,GRU)对序列数据进行编码,然后采用polling或RNN直接取最后一个t时刻的hidden state作为句子的向量输出。

    ​ 然后常用的编码方法不能对长序列有较好的处理,无法很好体现长序列的不同部分的关注程度。例如:I hate you! 如果做情感分析,明显对hate词应该关注更多。用CNN,RNN当然可以编码这种信息,但是序列的长度很长,就没有一个好的效果了,所以Transformer的优势就体现出来了

  • Training

详细见论文

  • Results

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

檀良月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值