《Attention Is All You Need》阅读笔记

基本信息

论文:《Attention Is All You Need》
作者:Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Lizhe Wanga,
Illia Polosukhin
年份: 2017
参考:沐神的讲解: https://www.bilibili.com/video/BV1pu411o7BE?spm_id_from=333.999.0.0

现状

主流的序列转录模型通常基于复杂的循环或者是包含encoder和decoder的卷积神经网络
通常在encoder和decoder之间使用注意力机制(Attention)的模型性能最好

存在的问题

  1. 循环神经网络 (Recurrent Neural Network, RNN)
    RNN是时序的,第 t t t个词的隐藏状态 h t h_t ht 是由 前一个词的隐藏状态 h t − 1 h_{t-1} ht1 和 当前第 t t t个词本身 一起决定的
    也就是说,你在计算 h t h_t ht时,必须保证先获得 h t − 1 h_{t-1} ht1(自回归)
    (目的:把前面学到的历史信息,通过 h t − 1 h_{t-1} ht1放到当下,有效处理时序信息)
    缺点:
    (1)难以并行(RNN是一步一步计算的过程)
    (2)内存问题(如果时序较长,则早期的时序信息,在后续可能会丢失,如果不想丢失则需要一个比较大的 h t h_t ht,如果后面的每一个 h t h_t ht都较大,又需要存下来,那么会导致内存开销大

  2. 卷积神经网络 (Convolutional Neural Networks, CNN)
    替换RNN,并行计算所有输入输出位置的隐藏表示,减少时序计算
    使用CNN做计算时,每次看一个比较小的窗口,如果你两个像素隔得远,则需要很多层卷积,一层一层上去,才能把两个隔得远的像素融合起来
    缺点:对比较长的序列难以建模
    优点:可以多个输出通道,一个输出通道可以去识别不一样的模式(Transformer也想有,所以提出多头注意力机制)

  3. Attention 注意力机制
    Attention已经应用在编码器的解码器decoder里面,主要用于把编码器encoder的东西有效的传给解码器decoder,与RNN一起使用。

    注意力机制不同于卷积、全连接层、池化层,它显示的考虑随意线索,也就是带着明确要关注的点去进行模型训练。
      随意线索被称之为查询(query)(也就是你想要干什么)
      每一个输入是一个值(Value)和不随意线索(key)的对
      通过key和 query的相似度有偏向性的选择某些输入,也就是确定value的权重

    注意力函数就是将一个 Q u e r y Query Query和一些 K e y − V a l u e Key-Value KeyValue对映射成一个输出的函数,具体的说输出 O u t p u t Output Output V a l u e Value Value的加权和,权重就是每一个 V a l u e Value Value对印的 K e y Key Key Q u e r y Query Query的相似度的来的。具体如下:
    在这里插入图片描述

  4. Self-Attention 自注意力机制
    self-attention的主要作用是找到每个向量和其他向量(包括自己)之间的关联程度。

本文主要思想

提出Transfomer彻底抛弃RNN完全基于注意力机制(第一个)
优点:并行度高,效果更好

模型架构

  • Transformer使用编码器和解码器架构

  • 纯基于注意力机制(在编码器和解码器里堆叠使用自注意力机制,Pointer-wise,全连接层)。
    原文图1
    在这里插入图片描述

  • 编码器

    • 编码器由6个相同的层组成,每层都有两个子层,一个是多头注意力机制,另一个是基于位置的全连接前馈神经网络(也就是MLP)。
    • 两个子层之间使用残差连接,也就是: 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))(当前层的输入+当前层的输出)
    • 每一层的输出维度定为512(因为残差连接需要输入输出的大小是一致的)
  • 解码器

    • 解码器由6个相同的层组成,每层都有三个子层,一个是多头注意力机制,一个是基于位置的全连接前馈神经网络,还有一个Masked多头注意力机制(因为解码器是自回归的,也就是过去时候的输出,要作为当前时刻的输入,也就是在做当前的预测是,不能看到之后的上一层的输入,但是在注意力机制里,每一次都能看到完整的输入,所以要掩盖后面的信息)

Masked注意力机制:
在注意力机制,Q会和所有的K一直做运算,但是我们要保证在算输出的时候,对于K_t,来说只能用到K_1,…,K_t-1,而不能用到后面的
所以就加了一个mask(),对于后面的K,全部替换成一个非常大的负数,那么一个很大的负数进入softmax做指数运算的时候就会变成0,就会导致softmax出来的东西是没有用到后面的值的
在这里插入图片描述

  • 多头注意力机制
    • 目的:对于同一个key,value,query,希望抽取不同的信息
    • 方式:使用不同的线性投影法将 q u e r y 、 k e y 、 v a l u e query、key、value querykeyvalue进行 h h h次投影,投影到一个低维,再做 h h h次的注意力函数
    • 对于每一个注意力函数的输出,并到一起,再投影回来得到最后的输出
      在这里插入图片描述在这里插入图片描述
      x i , y i x_i,y_i xi,yi
  • 带掩码的多头注意力机制
    因为解码器是自回归的,也就是过去时候的输出,要作为当前时刻的输入,也就是在做当前的预测是,不能看到之后的上一层的输入,但是在注意力机制里,每一次都能看到完整的输入,所以要掩盖后面的信息
    方式:计算 x i x_i xi输出时,通过掩码是的当前序列长度为i
  • 基于位置的全连接前馈神经网络
    • 将输入形状由 ( b , n , d ) (b,n,d) (b,n,d)变换成 ( b n , d ) (bn,d) (bn,d)
    • 作用两个全连接层
    • 输出形状由 ( b n , d ) (bn,d) (bn,d)变换成 ( b , n , d ) (b,n,d) (b,n,d)
    • 等价于两层核窗口为1的一维卷积层
  • 信息传递
    • 假设编码器中的输出是: y 1 , . . . . . . . , y n y_1,.......,y_n y1,.......,yn
    • 将其作为解码器中第 i i i个Transformer块中多头注意力的key和value
      • 它的query来自目标序列
    • 意味着编码器和解码器中块的个数和输出维度都是一致的

预测

  • 预测第 t + 1 t+1 t+1个输出时
  • 解码器中输入前 t t t个预测值
    • 在自注意力中,前t个预测值作为key和value,第t个预测值作为query

总结

  • Transformer是一个纯使用注意力机制的编码-解码器
  • 编码器和解码器都有n个transformer块
  • 每个块里面都是由多头注意力,基于位置的前馈神经网络,残差链接
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值