Attention & Transformer

seq2seq; attention; self-attention; transformer;

1 注意力机制在NLP上的发展

  1. Seq2Seq,Encoder,Decoder

  2. 引入Attention,Decoder上对输入的各个词施加不同的注意力 https://wx1.sbimg.cn/2020/09/15/9FZGo.png

  3. Self-attention,Transformer,完全基于自注意力机制

  4. Bert,双向Transformer,mask

  5. XLNet,自回归语言模型,自动编码语言模型,摒弃遮盖

2 注意力机制

以机器翻译为例;Seq2Seq架构;

2.1 RNN + RNN

  1. Encoder处理输入序列,得到上下文CONTEXT(一个向量,代表源文信息);Decoder处理CONTEXT逐项生成输出序列。

  2. RNN在每个时间步接收两个输入

    • 隐状态:上一个时间步传递来的;Decoder的初始隐状态为编码阶段的最后一个隐状态
    • 词向量输入:Encoder为输入序列的对应位置的词向量;Decoder为上一个时间步的输出(第一个时间步的输入为Start)
  3. 上下文向量定长,模型难处理长句

2.2 RNN+RNN+Attention

  1. Encoder 向 Decoder 传递更多的数据,不止传递编码阶段的最后一个隐藏状态,而是传递所有隐藏状态。

  2. Decoder增加额外步骤,根据隐状态之间的相关性对不同的隐藏状态打分

    • 为每个编码器隐状态打分;softmax加权;求和

    • 打分后的Encoder隐状态加权后与当前Decoder隐状态结合,作为当前时间步的隐状态输入

    • Decode 过程中不同的步骤回关注于不同 Encoder 的隐状态

3 Transformer

Attention Is All You Need; self-attention;

3.1 概述

  • 仍然由encoder和Decoder组成,完全基于自注意力机制,不使用RNN。
  • 编码器和解码器都是一组编码/解码组件组成,原论文使用了6个

3.2 Encoder 解码器

  • 编码器由两个子层:自注意力层(见3.3节)、全连接神经网络

  • 每个编码器组件结构相同,但不共享权重。

3.3 自注意力机制

自注意力机制全景图

  1. 词嵌入 word embedding

    • 发生在最底部的编码器;输入数据[batch_size, word_embedding_size, seq_len];完成嵌入后作为输入经过编码器;每个位置的词并行经过编码器,速度比RNN快。

    • 并行运算未考虑到顺序关系,通过位置编码(positional encoding)使词嵌入包含位置信息。

    • 位置编码方式:sin、cos

  2. 自注意力计算

    1. 三个参数W(\(W^Q\), \(W^K\),\(W^V\))与输入的向量相乘得到:查询向量q,键向量k,值向量v;新向量维度小于嵌入向量的维数

    2. 对于一个输入向量,将其q向量与其他词的k向量相乘计算分数;分数高则关系密切

    3. 将分数缩放(避免梯度弥散);通过softmax操作转化为概率。

    4. 将每个词的v向量用上一步的softmax概率加权求和;得到该输入向量的 z值

    5. 234步骤 以矩阵的形式,对多个输入向量并行求z,得到Z矩阵

  3. 多头机制

    • 为关注曾提供了多个表示子空间;拓展了模型专注于不同层面的能力

    • 有多组qkv的权重矩阵;e.g. 使用8个关注头则每个编码器解码器会得到8组Z

    • 将所有的Z连接起来和一个权重矩阵\(W^O\)相乘,得到捕捉了所有注意力头的Z矩阵,再将其输入到接下来的全连接层。

3.4 Decoder 解码器

  1. 结构:自注意力,encoder-decoder attention,全连接层

  2. 自注意力层:仅对输出序列中之前的位置;在softmax之前,把将来生成的位置设置为-inf

  3. encoder-decoder attention

    • 在自注意力层、全连接神经网络之间加入了一个encoder和decoder之间的注意力层,类似seq2seqRNN模型中的注意力。

    • 最后一个Encoder的输出,转换为K和V的集合,每个decoder在其encoder-decoder attention层中使用这些KV。

    • 工作方式与多头注意力类似,区别在于是从Encoder Stack的输出中获取KV。

  4. 经过N层decoder,最终的输出通过线性层和softmax层得到输出的词

3.5 细节补充

  • 残差和归一化 解码器编码器都有

Attention & Transformer的更多相关文章

  1. 2. Attention Is All You Need(Transformer)算法原理解析

    1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...

  2. 深入浅出Transformer

    Transformer Transformer是NLP的颠覆者,它创造性地用非序列模型来处理序列化的数据,而且还获得了大成功.更重要的是,NLP真的可以"深度"学习了,各种基于tr ...

  3. [NLP] REFORMER: THE EFFICIENT TRANSFORMER

    1.现状 (1) 模型层数加深 (2) 模型参数量变大 (3) 难以训练 (4) 难以fine-tune 2. 单层参数量和占用内存分析 层 参数设置 参数量与占用内存 1 layer 0.5Bill ...

  4. 文本建模、文本分类相关开源项目推荐(Pytorch实现)

    Awesome-Repositories-for-Text-Modeling repo paper miracleyoo/DPCNN-TextCNN-Pytorch-Inception Deep Py ...

  5. 关于NLP和深度学习,准备好好看看这个github,还有这篇介绍

    这个github感觉很不错,把一些比较新的实现都尝试了: https://github.com/brightmart/text_classification fastText TextCNN Text ...

  6. BERT解析及文本分类应用

    目录 前言 BERT模型概览 Seq2Seq Attention Transformer encoder部分 Decoder部分 BERT Embedding 预训练 文本分类试验 参考文献 前言 在 ...

  7. ACNet: 特别的想法,腾讯提出结合注意力卷积的二叉神经树进行细粒度分类 | CVPR 2020

    论文提出了结合注意力卷积的二叉神经树进行弱监督的细粒度分类,在树结构的边上结合了注意力卷积操作,在每个节点使用路由函数来定义从根节点到叶子节点的计算路径,结合所有叶子节点的预测值进行最终的预测,论文的 ...

  8. 从RNN到BERT

    一.文本特征编码 1. 标量编码 美国:1 中国:2 印度:3 … 朝鲜:197 标量编码问题:美国 + 中国 = 3 = 印度 2. One-hot编码 美国:[1,0,0,0,…,0]中国:[0, ...

  9. Transformer【Attention is all you need】

    前言 Transfomer是一种encoder-decoder模型,在机器翻译领域主要就是通过encoder-decoder即seq2seq,将源语言(x1, x2 ... xn) 通过编码,再解码的 ...

随机推荐

  1. leetcode 33和 leetcode81

    //感想: 1.对于这两题,我真的是做到吐,这篇博客本来是昨晚准备写的,但是对于这个第二题,我真的做到头痛,实在是太尼玛的吐血了,主要是我也是头铁,非要找到那个分界点. 2.其实之前在牛客网上做过非常 ...

  2. 网络拓扑实例之RRPP单环(五)

    组网图形 RRPP简介 在城域网和企业网的网络规划以及实际组网应用中大多会采用环网结构来提高网络的可靠性.采用环网结构的好处是:当环上任意一个节点或节点之间的链路发生故障,都可以将数据流量切换到备份链 ...

  3. AtCoder Beginner Contest 178 E - Dist Max 题解(推公式)

    题目链接 题目大意 给你n个点(n<=2e5)要你求所有点中两个点最短的曼哈顿距离 曼哈顿距离定义为d(i,j)=|x1-x2|+|y1-y2|. 题目思路 想了很久也没有什么思路,其实就是一个 ...

  4. 在Spring data中使用r2dbc

    目录 简介 依赖关系 数据库连接配置 数据库初始化 DAO操作 Service操作和Transaction controller 测试 简介 上篇文章我们讲到了怎么在Spring webFlux中使用 ...

  5. tomcat安装及环境变量配置

    java环境的配置应该都学过吧,这里简单的讲一下. 下载安装java JDK,注意安装的路径,我们需要进行环境变量的配置. 2 安装完成以后,配置环境变量 环境变量的配置这里就以win7为例:右击计算 ...

  6. Kubernetes Ingress-nginx使用

    目录 简介 1. 部署Ingress-Controller 2. 使用Ingress规则 2.1 Ingress地址重写 2.2 配置HTTPS 2.3 黑白名单配置 2.4 匹配请求头 2.5 速率 ...

  7. python应用(7):输入与输出

    如前文,流程是程序的主角,而流程一般都需要处理数据,那数据如何进到流程,而最终处理后的数据又如何表现,这就是流程的输入与输出的问题. 本文介绍流程处理的数据的输入与输出. 流程中的输入,一般都会先保存 ...

  8. 20200520_windows2012安装python和django环境

    http://httpd.apache.org/download.cgi#apache24 配置文件修改后, 记得去阿里云开放端口 ServerName 172.18.196.189:9080 →不能 ...

  9. vue中全局/按需引用element,样式都不生效

    简直是天坑啊,这个问题困扰了我一个晚上加今天一天,心里无数草泥马奔腾 被要求使用vue1.0+elementUI做一个后台管理项目,结果无论怎么操作elementUI,页面中都不显示css样式 谷歌百 ...

  10. 《Machine Learning in Action》—— 浅谈线性回归的那些事

    <Machine Learning in Action>-- 浅谈线性回归的那些事 手撕机器学习算法系列文章已经肝了不少,自我感觉质量都挺不错的.目前已经更新了支持向量机SVM.决策树.K ...