[论文笔记] Attention is All You Need 阅读笔记

Attention is All You Need 阅读笔记

  • Attention is All You Need(NIPS 2017)
    • 摘要
    • 背景
    • 模型架构
      • Encoder and Decoder Stacks
      • Attention
      • Position-wise Feed-Forward Networks
      • Embeddings and Softmax
      • Positional Encoding

Attention is All You Need(NIPS 2017)

论文链接:论文链接
代码链接:代码链接

摘要

  • 动机:RNN 并行性非常差
  • Transformer 仅使用注意力机制,而不使用循环层 和 卷积层
  • 面向机器翻译做了实验

背景

  • 卷积神经网络难以对全局进行建模,而使用 Transformer 可以一次性看到所有的像素;但是卷积可以有多个输出通道,所以提出 Multi-Head
  • Transformer 使用注意力机制来构建 Encoder-Decoder 模型

模型架构

  • 整体架构:基于 Encoder-Decoder 架构,将 堆叠的 self-attention、point-wise、fully connected layer 放入编码器和解码器中
    [论文笔记] Attention is All You Need 阅读笔记_第1张图片

Encoder and Decoder Stacks

  • Encoder
    • 编码器由 N = 6 N=6 N=6 个相同的层堆叠,每一个层有两个子层,分别是 multi-head self-attention mechanism多头自注意力机制) 和 simple,position-wise fully connected feed-forward network全连接网络),每一个子层使用一个残差连接,并使用 layer normalization
    • 公式可以表示为 L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x+Sublayer(x)) LayerNorm(x+Sublayer(x)),因为残差的输入和输出的大小需要相同,所以把每一个层的输出维度 d m o d e l = 512 d_{model}=512 dmodel=512
    • LayerNorm 和 BatchNorm 的区别:下图左边是 BatchNorm(按特征进行归一化),右边是 LayerNorm(按每个样本进行归一化
      [论文笔记] Attention is All You Need 阅读笔记_第2张图片
  • Decoder
    • 解码器由 N = 6 N=6 N=6 个相同的层堆叠,但是每一个层有三个子层,其中两个子层和编码器一样,而多出的第三个层在编码器的输出上使用了一个 masked multi-head attention,masked的存在是使得解码器在时刻 t 时看不见 t 之后的输入

Attention

  • 注意力机制Q、K、VV 是由 QK 计算相似度而来。也就是说,给定一个 Query Q,通过和 Key K 计算相似度,就能够得到每一个 K 对应的 Value V 所对应的权重,并通过这些权重对 V 进行加权和。自注意力机制就是Q=K=V
  • Scaled Dot-Product AttentionTransformer 使用这个模式的注意力机制,其中 Query,Key 维度为 d k d_k dk(保证两者可以做内积),而 Value 维度为 d v d_v dv,计算所 QueryKey 的点积,并且除以 d k \sqrt{d_k} dk (做除法是为了把 d k d_k dk 和函数进行解耦,使得训练过程稳定,相当于归一化),并且应用 softmax 函数来获取所有 Value 所对应的权重(非负并且相加为1)
    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(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
    [论文笔记] Attention is All You Need 阅读笔记_第3张图片
  • Multi-Head Attention:将 Q、K、V 使用线性层投影 h 次,然后再使用注意力机制,最后将其进行合并,再使用一个线性层投影回原来的样子
    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 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_h)W^O\\ where\space head_i=Attention(QW_i^Q,KW_i^K,VW_i^V) MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhere headi=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 O ∈ R h d v × d m o d e l W_i^Q\in R^{d_{model}×d_k},W_i^K\in R^{d_{model}×d_k},W_i^V\in R^{d_{model}×d_v},W^O\in R^{hd_v×d_{model}} WiQRdmodel×dk,WiKRdmodel×dk,WiVRdmodel×dv,WORhdv×dmodel,并且本文中将 h = 8 h=8 h=8,并且 d k = d v = d m o d e l / h = 64 d_k=d_v=d_{model}/h=64 dk=dv=dmodel/h=64

Position-wise Feed-Forward Networks

  • 就是一个单隐藏层全连接网络,但是注意力机制已经读取了整个输入序列,因为它已经包含了全局的序列信息,所以这个全连接网络对序列中的每一个点做全连接即可,公式为
    F F N ( x ) = R e l u ( x W 1 + b 1 ) W 2 + b 2 FFN(x)=Relu(xW_1+b_1)W_2+b_2 FFN(x)=Relu(xW1+b1)W2+b2

Embeddings and Softmax

  • 将每一个词编码为一个维度为 d m o d e l d_{model} dmodel 的向量,并且在embedding layer中将权重乘以 d m o d e l \sqrt{d_{model}} dmodel ,相当于归一化

Positional Encoding

  • Attention 不包含时序信息,所以在这一层中,将输入与下面的 PE 相加,就可以获得时序信息
    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)

你可能感兴趣的:(论文笔记,论文阅读,深度学习,人工智能)