论文导读:transformer

transfomer 《Attention is all you need》

introduction

提出的时候是引用在机器翻译之中

transformer和CNN、RNN不同,其网络结构是基于attention机制,使用attention机制来刻画输入和输出的全局依赖关系。

transformer结构和大部分编码器-解码器架构类似,整体结构是6个堆叠的相同的encoder block和六个decoder block

更好的并行化(ANN会有一系列的隐状态 h t ht ht,),更短的训练时间

输入

单词的表示向量 X X X

t r a n s f o m e r 的单词表示 X = 词特征向量 + 词位置信息 transfomer的单词表示X=词特征向量 + 词位置信息 transfomer的单词表示X=词特征向量+词位置信息

X n × d X_{n\times d} Xn×d, n n n是单词个数, d d d是embeding维度。

  • 词embeding就是词向量,可以使用word2vec,glove,MLP来预训练得到
  • 位置embeding(PE)表示单词在句子中的位置信息。(因为cnn和rnn的结构都可以获得单词的顺序信息,但transformer使用的是全局信息,就需要加入一些序列的位置信息)。PE可以预训练得到,也可以根据公式计算。

注意力机制

attention

reference:nndl-book 8.2&&8.3

N N N个输入向量 X X X中选择出和某个特定任务相关的信息

三个重要的向量

  • 查询向量 Q Q Q:和任务相关的表示
  • 键向量 K K K:用于计算注意力分布
  • 值向量 V V V:信息聚合,求加权平均

打分函数 s ( x , q ) s(x,q) s(x,q)用于计算输入向量 x x x和查询向量 q q q间的相关性

模式:

  • 软性的注意力机制(transformer使用的)

    step1:计算注意力分布
    α n = p ( z = n ∣ X , q ) = s o f t m a x ( s ( x n , q ) ) \alpha_n = p(z=n|X,q)=softmax(s(x_n,q)) αn=p(z=nX,q)=softmax(s(xn,q))
    s ( x , q ) s(x,q) s(x,q)过softmax函数,选择第 n n n个输入向量 x n x_n xn的概率 α n \alpha_n αn

    注意力分布 α n \alpha_n αn,解释为在给定任务的查询向量 q q q时,第 n n n个向量受关注的程度。

    step2:加权平均

    A t t ( X , q ) = Σ α n x n = E ( x ) Att(X,q) = \Sigma \alpha_n x_n = E(x) Att(X,q)=Σαnxn=E(x),算的是期望,加权和

  • 硬性注意力:

    相比软性注意力(期望,加权平均),硬性注意力只关注某一个输入向量

  • 键值对注意力

    将计算注意力分布 K K K(计算 α n \alpha_n αn)和聚合信息 V V V(计算期望)分开。(前面硬性和软性注意力都是用的同一个输入向量 x x x)。

    α n = s o f t m a x ( s ( k n , q ) ) \alpha_n = softmax(s(k_n,q)) αn=softmax(s(kn,q))

    A t t ( ( K , V ) , q ) = Σ α n v n Att((K,V),q) = \Sigma \alpha_n v_n Att((K,V),q)=Σαnvn

  • 多头注意力

    多个查询 Q = [ q 1 , q 2 , . . . q m ] Q=[q_1,q_2,...q_m] Q=[q1,q2,...qm]。并行的从输入信息 X X X中选择多组信息,每个注意力关注输入信息 X X X的不同部分

self-attention

将单个序列的不同位置联系起来

常用的是 查询-键-值(QKV) 模式。

过程

  • step1:

    对每个输入向量 x i x_i xi,通过线性变化得到三个向量 q i , k i , v i q_i,k_i,v_i qi,ki,vi

    线性变化的过程中就有仨可学习的参数矩阵 W q , W k , W v W_q,W_k,W_v Wq,Wk,Wv

    Q = W q X Q=W_qX Q=WqX K , V K,V K,V

  • step2

    对每个查询向量 q i q_i qi,使用键值对的注意力机制,得到输出向量 h i h_i hi
    α i j = s o f t m a x ( s ( k j , q i ) ) A t t ( ( k j , v j ) , q n ) = Σ α i j v j h i = A t t ( ( K , V ) , q i ) \alpha_{ij} = softmax(s(k_j,q_i)) \\ Att((k_j,v_j),q_n) = \Sigma \alpha_{ij} v_j \\ h_i = Att((K,V),q_i) αij=softmax(s(kj,qi))Att((kj,vj),qn)=Σαijvjhi=Att((K,V),qi)
    H = V   s o f t m a x ( K T Q D k ) H = V\ softmax({K^TQ\over \sqrt{D_k}}) H=V softmax(Dk KTQ)

self-attention 可以作为神经网络的一个部件来使用,比如代替卷积层或者池化层。

multi-head attention

多个self-attention的组合

h = 8 h=8 h=8为例,过每个self-attention都会有一个输出矩阵 Z i Z_i Zi。将 Z i ( i ∈ [ 1 , 8 ] ) Z_i(i\in [1,8]) Zi(i[1,8])拼接contact起来,再经过一个线性变化,得到最终的输出 Z Z Z

encoder

在这里插入图片描述

encoder block结构
  • step1: self-attention

Z = A t t ( Q , K , V ) = s o f t m a x ( K T Q D k ) ⋅ V Z = Att(Q,K,V) = softmax({K^TQ\over \sqrt{D_k}})\cdot V Z=Att(Q,K,V)=softmax(Dk KTQ)V

D k D_k Dk是输入向量的维度, K T Q D k K^TQ\over {\sqrt {D_k}} Dk KTQ叫做缩放点积, D D D太大的时候其 K T Q K^TQ KTQ的方差较大,导致softmax的梯度小。

​ 点积运算还快,省空间…

  • step2: Add&Norm

    就是正则化的处理,Norm转成同均值方差的结果

  • step3: feed froward neural network

    两层全连接的前馈神经网络,第一层过ReLU,第二层是一个线性激活函数 F F N ( Z ) = m a x ( 0 , Z ⋅ W 1 + b 1 ) ⋅ W 2 + b 2 FFN(Z) = max (0, Z\cdot W_1+b_1)\cdot W_2 + b_2 FFN(Z)=max(0,ZW1+b1)W2+b2

    输入和输出维度保持一致

  • step4: Add&Norm

组成encoder

将多个encoder block叠加就可以得到encoder。其中第一个block的输入是单词的向量表示矩阵。后面block的输入是前一个block的输出(论文中block的输入输出矩阵维度一样)。最后一层的输出编码信息矩阵C

decoder

在这里插入图片描述

decoder blcok

相比encoder会复杂一些,

  • 有两个multi-head attention,第一个有mask操作
  • 最后有一个softmax层计算翻译下一个单词的概率
第一个multi-head attention

有一个masked操作。(用于顺序翻译,防止单词 i i i知道 i + 1 i+1 i+1和后面的信息)

一个mask的方阵,大小为句子长度。 m i j = 0 / 1 m_{ij} = 0 / 1 mij=0/1。如此实现单词 i i i只可以使用 i i i i i i之前的信息

  • 计算 Q K T QK^T QKT,也就是打分衡量相关性
  • 过softmax,这儿需要使用mask矩阵。其实就是按位乘(被遮挡的×0=0)
  • Z = s o f t m a x ( m a s k ( Q K T ) ) ⋅ V Z = softmax(mask(QK^T))\cdot V Z=softmax(mask(QKT))V
  • 然后就是多个self-attention的结果拼接,线性变化,得到第一个multi-head attention的输出(维度和输入一样)
第二个multi-attention

使用的 K , V K,V K,V并不是上一个decoder的输出计算得到的,而是使用encoder的输出信息编码矩阵C来计算

Q Q Q是decoder的第一个multi-head attention的输出。

softmax 预测输出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值