Re9 Attention is all you need

  • 变形金刚,启动!

Abstract

  • 主流序列转录模型基于复杂的循环神经网络和卷积神经网络,包括一个encoder和decoder,同时在这之中使用一个叫注意力机制attention的东西
  • 本文提出了一个简单的网络架构,仅仅使用注意力机制,而没有使用神经网络,实验结果表明效果更好

Conclusion

  • 首次提出仅使用注意力机制的模型transformer,取代了常规使用编码解码的架构模型,全部换成了multi-head self-attention
  • 使用transformer模型训练速度很快,效果也更好
  • 未来可用在其他方向

Introduction

  • 当前主流使用lstm、rnn等模型
  • RNN缺陷在于其为时序模型,在计算第t个词时,必须保证前面 h t − 1 h_{t-1} ht1个词输入完成,导致时间上无法并行
  • 注意力机制已经在RNN中有所使用
  • 提出的transformer不再使用循环机制,可以进行并行运算

Background

  • 一些工作已经使用卷积神经网络替换循环神经网络,然而,对于两个距离较远的像素块需要一层一层的卷积进行处理才能将两个融合在一起,而使用transformer的注意力机制,一次可以看到所有的像素,因此一层就能将整个序列看到,同时,提出了Multi-head attention模拟卷积神经网络多输出通道的效果
  • 自注意力机制是一种将单个序列的不同位置联系起来以计算序列表示的机制。
  • 端到端网络
  • transformer是第一个只依赖于自注意力机制进行encoder、decoder的模型

Model Architecture

  • 当前主流的序列模型都是用编码器解码器结构
    • 编码器会将输入的一组序列 ( x 1 . . . x n ) (x_1...x_n) (x1...xn)表示成一组 ( z 1 . . . z n ) (z_1...z_n) (z1...zn),每一个对应的是x的向量表示
    • 解码器收到z,生成一段长为m的序列,解码时元素是一个一个生成,注意 y 1 . . y t − 1 y_1..y_{t-1} y1..yt1也是 y t y_t yt的输入,叫做自回归auto-regressive
  • transformer使用了编码器解码器架构,将堆叠自注意力机制和point-wise全连接层都加入到了编码解码器中

Encoder-Decoder堆叠

在这里插入图片描述

  • 左侧是encoder由6个堆叠的相同的层构成,可以理解成是N个transformer块,其中每个block由两个子层组成,分别是Multi-head attention和poisition-wise fully connected feed-forward network;类似于MLP,每个子层都有一个残差连接,最后有一个normalization,每一层的的输出维度为512
    在这里插入图片描述

    • batchnorm:每次把一列,即每一个特征取出在小的mini-batch内均值变为0,方差变为1
    • layernorm:每次对一个样本做normalization,即每一行变为均值为0方差为1
    • 可以理解成batchnorm是切出一个特征有多少batch,layernorm是一个batch切出多少feature
      在这里插入图片描述在这里插入图片描述
  • 而对语句的输入来说,通常输入为三维,一个词用向量表示(512),sequence是一句话有几个单词,batch是一共有几句话。LayerNorm 更稳定,不管样本长还是短,均值和方差是在每个样本内计算。
    在这里插入图片描述
    在这里插入图片描述

  • 右侧是解码器,其输入为之前解码器的一些输出作为输入,同样是有N=6个层构成,每个包括三个子层,同样是多头注意力机制,也用了残差连接和layernorm,这里用了一个mask保证在t时刻进行预测时不会看到t时刻之后的输出

Attention

  • attention可以理解成将query、key-value对映射成输出的函数,这些都是向量,output 是 value 的一个加权和,因此,输出的维度 == value 的维度。
  • query查询,key键,value值。查询来自用户输入,键来自词典库,将查询与键相比较,得到相似度权重,由value可数值化运算

吴恩达attention讲解

模型结构

在这里插入图片描述

  • 像这样给定一个很长的法语句子,在神经网络中,这个绿色的编码器要做的就是读整个句子,然后记忆整个句子,再在感知机中传递(to read in the whole sentence and then memorize the whole sentences and store it in the activations conveyed her)。而对于这个紫色的神经网络,即解码网络(the decoder network)将生成英文翻译。人工翻译并不会通过读整个法语句子,再记忆里面的东西,然后从零开始,机械式地翻译成一个英语句子。而人工翻译,首先会做的可能是先翻译出句子的部分,再看下一部分,并翻译这一部分。看一部分,翻译一部分,一直这样下去。你会通过句子,一点一点地翻译,因为记忆整个的像这样的的句子是非常困难的。
  • 在编码解码结构中,会看到它对于短句子效果非常好,于是它会有一个相对高的Bleu分(Bleu score),但是对于长句子而言,比如说大于30或者40词的句子,它的表现就会变差。随着单词数量变化,短的句子会难以翻译,因为很难得到所有词。对于长的句子,效果也不好,因为在神经网络中,记忆非常长句子是非常困难的。
  • 你会见识到注意力模型,它翻译得很像人类,一次翻译句子的一部分。而且有了注意力模型,机器翻译系统的表现会一直很好,因为翻译只会翻译句子的一部分,你不会看到有一个巨大的下倾
    在这里插入图片描述
  • 我们需要翻译这个句子,需要计算出单词的特征集,这里,使用另一个RNN生成英文翻译,其会计算注意力权重 α ( 1 , 1 ) \alpha^{(1,1)} α(1,1)表示在 x 1 x^1 x1,即第一个信息处上需要放多少注意力, α ( 1 , 2 ) \alpha^{(1,2)} α(1,2)表示在翻译jane这个词时需要花多少注意力权重在第二个词上,同理在第三个单词也是这样,结果标记为C,并传入RNN中。
    在这里插入图片描述
  • 在翻译第二个词时也是如此,会计算临近词的注意力权重,并传入到 S ( 2 ) S^{(2)} S(2)中,同时第一个单词的翻译结果也会作为输入传入。
  • 因此,一个解码RNN由两个输入组成,一个是上一轮的输出 y < t − 1 > y^{<t-1>} y<t1>,另一个是注意力上下文 c ( t ) c^{(t)} c(t),两个输入通过拼接的方式一起输入至解码RNN
模型推导

在这里插入图片描述

  • 翻译过程使用一个单向RNN:
    1、每次考虑的所有注意力权重之和等于1
    ∑ t ′ a < 1 , t ′ > = 1 \sum_{t^{\prime}} a^{<1, t^{\prime}>}=1 ta<1,t>=1
    2、特征步激活值和注意力权重的乘积之和作翻译模型的输入,即上下文 C < i > C^{<i>} C<i>
    C < i > = ∑ t " α < 1 , t " > a < t " > C^{<i>}=\sum_{t^"} \alpha^{<1, t^">} a^{<t^">} C<i>=t"α<1,t">a<t">

  • α < t , t ′ > \alpha^{<t,t^\prime>} α<t,t>表示在 t t t处生成输出词时,需要花多少注意力在 t ′ t^\prime t

这里看着很拗口,原文献使用 α i j \alpha_{ij} αij,例如 α t , 1 \alpha_{t,1} αt,1表示翻译第t个样本时需要花多少注意力在第一个样本上
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 表示激活值,左右箭头分别表示前向传播和后向传播的激活值

在这里插入图片描述

参考资料

  1. Transformer论文逐段精读【论文精读】
  2. Deeplearning.ai深度学习教程中文笔记
  3. 吴恩达深度学习deeplearning.ai

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245894.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】O’Reach: Even Faster Reachability in Large Graphs

Hanauer K, Schulz C, Trummer J. O’reach: Even faster reachability in large graphs[J]. ACM Journal of Experimental Algorithmics, 2022, 27: 1-27. Abstract 计算机科学中最基本的问题之一是可达性问题&#xff1a;给定一个有向图和两个顶点s和t&#xff0c;s可以通过…

(1)Linux的 安装与用户的创建

前言 本章正式开始Linux的学习 如果关于Linux环境搭配有问题的朋友 可以阅读此文章:Linux环境搭建 一&#xff0c;浅用一下吧 —— Hello, Linux! 我们现在已经登陆上了&#xff0c;我们当然可以用它来做很多事。 我们来用它写一个 "Hello, Linux!" &#xff0c;来…

Layui继续学习

1、简单评论区代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>社区评论区</title> <link rel"stylesheet" href"https://cdn.staticfile.org/layui/2.6.8/css/…

关于“Python”的核心知识点整理大全20

目录 ​编辑 9.2 使用类和实例 9.2.1 Car 类 下面来编写一个表示汽车的类&#xff0c;它存储了有关汽车的信息&#xff0c;还有一个汇总这些信息的方法&#xff1a; car.py 9.2.2 给属性指定默认值 9.2.3 修改属性的值 1. 直接修改属性的值 2. 通过方法修改属性的值 3.…

记录Oracle Exadata X8M-2 存储服务器告警灯亮的处理过程(/SYS/MB/P0PCIE7)

文章目录 概要调查流程处理方式&#xff1a; 概要 现场服务器告警灯亮&#xff0c;其他服务器正常&#xff0c;磁盘灯正常&#xff0c;所以从整体来看应是内部部件抛出的异常问题&#xff0c;需要登录机器确认&#xff1a; 调查流程 通过ILOM web界面查看服务器状态进行信息…

基于轻量级GhostNet模型开发构建工业生产制造场景下滚珠丝杠传动表面缺陷图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

低代码与自动化:加速软件开发的新趋势

低代码与自动化技术正在逐渐改变软件开发的面貌。随着科技的不断发展&#xff0c;传统的编程方式已经不再是唯一的选择。低代码和自动化技术正在为开发者提供更高效、更灵活的开发环境&#xff0c;使得软件开发变得更加简单、快速和高效。 低代码和自动化技术正在逐渐改变软件开…

el-table自定义表格数据

如上所示&#xff1a; 表格内的数据是&#xff1a;当前班级所在名次段的人数 / 当前班级1至n名的累计人数 5/12 也就是 5/75 需要变更为&#xff1a; 截至到当前名次段总人数&#xff08;上次考试&#xff09; / 截至到当前名次段总人数&#xff08;本次考试&#xff09…

使用VBA快速统计词组词频(多单词组合)(2/2)

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计多单词组合词组词频。 在上一篇博客中《使用VBA快速统计词组词频(多单词组合)&#xff08;1/2&#xff09;》讲解了如何实现双词的词频统计。 本文将讲解如何实现3词的词频统计&#xff0c;掌握实现方法之后&a…

android studio 快捷输入模板提示

在Android开发中&#xff0c;我们经常会遇到一些重复性的代码&#xff0c;例如创建一个新的Activity、定义一个Getter方法等。为了提高开发效率&#xff0c;Android Studio提供了Live Templates功能&#xff0c;可以通过简化输入来快速生成这些重复性代码。 按下图提示设置&am…

做博客网站需要什么配置的服务器?

​  利用搭建博客网站&#xff0c;来分享生活、知识和经验&#xff0c;是很多个人站长乐意做的事情。但&#xff0c;对于互联网行业的新人来说&#xff0c;或许不知道搭建个人博客网站的配置如何选择&#xff0c;本文针对这一点&#xff0c;从地域、服务器类型、配置参数等方…

使用动画曲线编辑器打造炫酷的3D可视化ACE

前言 在制作3D可视化看板时&#xff0c;除了精细的模型结构外&#xff0c;炫酷的动画效果也是必不可少的。无论是复杂的还是简单的动画效果&#xff0c;要实现100%的自然平滑都是具有挑战性的工作。这涉及到物理引擎的计算和对动画效果的数学建模分析。一般来说&#xff0c;只…

Tekton 基于 cronjob 触发流水线

Tekton 基于 cronjob 触发流水线 Tekton EventListener 在8080端口监听事件&#xff0c;kubernetes 原生 cronjob 定时通过curl 命令向 EventListener 发送事件请求&#xff0c;触发tekton流水线执行&#xff0c;实现定时运行tekton pipeline任务。 前置要求&#xff1a; kub…

大数据技术13:HBase分布式列式数据库

前言&#xff1a;2007年Powerset的工作人员&#xff0c;通过google的论文开发出了BigTable的java版本&#xff0c;即HBASE。2008年HBASE贡献给了Apache。HBase 需要依赖 JDK 环境。 一、Hadoop的局限 HBase 是一个构建在 Hadoop 文件系统之上的面向列的数据库管理系统。 要想…

【开源Mongdb驱动】SpringBoot+Mybatis+Mongdb融合使用教程

#【开源Mongdb驱动】SpringBootMybatisMongdb无缝融合使用教程 介绍 本文介绍一款基于JAVA开源的mongodb jdbc驱动为基础的无缝与springbootmybatis融合使用案例 mongodb JDBC 使用案例 https://blog.csdn.net/gongbing798930123/article/details/135002530 《基于开源的JA…

网站使用CDN后无法获取用户真实IP的解决方法

宝塔或Nginx环境 如果你使用的宝塔或Nginx&#xff0c;可以在宝塔面板或Nginx中&#xff0c;找到配置文件增加如下代码后&#xff0c;重载配置或者重启 Nginx 即可&#xff1a; #CDN获取真实ip set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For; PHP语言函数方法…

Spring Boot+FreeMarker=打造高效Web应用

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Spring BootFreeMarker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一. FreeMarker是什么 二…

Nginx与keepalived高可用节点搭建实验

本文主要介绍了nginxkeepalived的部署实验&#xff0c;并简单说明了nginx的集中负载分担模式 简介&#xff1a; nginx可以通过反向代理功能对后端服务器实现负载均衡功能 keepalived 是一种高可用集群选举软件 keepalived架构 分为三个模块&#xff1a; 1、keepalived core …

详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第一节

关于使用Vue开发鸿蒙应用的教程,我这篇之前的博客还不够完整和详细。那么这次我会尝试写一个更加完整和逐步的指南,从环境准备,到目录结构,再到关键代码讲解,以及调试和发布等,希望可以让大家详实地掌握这个过程。 一、准备工作 下载安装 DevEco Studio 下载地址&#xff1a;…

在接口实现类中,加不加@Override的区别

最近的软件构造实验经常需要设计接口&#xff0c;我们知道Override注解是告诉编译器&#xff0c;下面的方法是重写父类的方法&#xff0c;那么单纯实现接口的方法需不需要加Override呢&#xff1f; 定义一个类实现接口&#xff0c;使用idea时&#xff0c;声明implements之后会…