【王树森】Transformer模型(1/2): 剥离RNN,保留Attention(个人向笔记)

Transformer简介

  • Transformer 是一个Seq2Seq模型
  • Tramsformer 不是RNN
  • Transfomer 只有attention和全连接层
  • 机器翻译在大型数据集上完爆最好的RNN

Review Attention for RNN

这节课讲的attention相对比于前两节课多了一个 v i v_i vi,之前是用权重直接乘 h h h,而在这里是乘以 v v v。最后得到向量 c c c
在这里插入图片描述


Attention without RNN

  • Attention一开始设计是用在RNN上的,那么我们应该如何把attention从RNN中剥离出来呢?
  • 本节课将使用一个attention和一个self-attenion层搭建一个Transformer

1. 设计一个attention层用于Seq2Seq模型

  • Seq2Seq模型有一个encoder和一个decoder
  • encoder接受 m m m 个词向量的输入
  • decoder接受 t t t 个词向量的输入,来生成下一个单词
  • 对于encoder的输入向量,我们用两个个矩阵 W K W_K WK W V W_V WV 将其变换为上面的 k k k 向量和 v v v 向量:
    在这里插入图片描述
  • 对于decoder的输入向量,我们用一个矩阵 W Q W_Q WQ 将其变换为上面的 q q q 向量
    在这里插入图片描述
  • K K K m m m k k k 向量叠在一起的矩阵,用 q q q K K K 算出相关性,其中 α \alpha α m m m 维的向量,元素及总和为1,代表着 m m m k k k 向量和 q q q 的相关性
    在这里插入图片描述
  • 利用得到的相关性和 v v v 计算 context vector c c c,其中这一系列运算可以简化为 V α V\alpha Vα
    在这里插入图片描述
  • 对所有的 q q q 用类似的方法计算出所有 context vector c c c,这样attenion层的输出就是一个 C C C 矩阵
    在这里插入图片描述
  • 对于一个 c i c_i ci 来说,它依赖于decoder的当前输入 x i ′ x'_i xi,还有所有encoder的输入 x 1 , x 2 . . . , x m x_1,x_2...,x_m x1,x2...,xm
    在这里插入图片描述
  • 以英译德为例:利用decoder的 x 2 ′ x'_2 x2 和 所有encoder的输入 x 1 , x 2 . . . , x m x_1,x_2...,x_m x1,x2...,xm,我们可以生成 c 2 c_2 c2,然后把 c 2 c_2 c2 丢进一个softmax里面产生概率来预测下一个德语单词。 c 2 c_2 c2 是知道整句英语的,所以可以很好的避免遗忘问题
    在这里插入图片描述
  • 总结Attenion层:接受encoder的输入 X = [ x 1 , x 2 , . . . , x m ] X=[x_1,x_2,...,x_m] X=[x1,x2,...,xm] 和decoder的输入 X ′ = [ x 1 ′ , x 2 ′ , . . . , x t ′ ] X'=[x'_1,x'_2,...,x'_t] X=[x1,x2,...,xt],输出一个context vector矩阵 C = [ c 1 , c 2 , . . . , c t ] C=[c_1,c_2,...,c_t] C=[c1,c2,...,ct],其中参数有三个矩阵: W K , W Q , W V W_K,W_Q,W_V WK,WQ,WV,它们需要从数据中学习
    在这里插入图片描述

2. 搭建一个Self-Attention层取代RNN

  • self-attention层和attention层完全类似,只是输入不同:其中任意一个词向量的改变都会影响到别的词向量
    在这里插入图片描述
  • 在self-attention里:每一个输入的向量都要被变换为 q , k , v q,k,v q,k,v
    在这里插入图片描述
  • 而权重计算也是类似的:对于 α 1 \alpha_1 α1 来说,它依赖于 q 1 q_1 q1,和其他所有的 k k k
    在这里插入图片描述
  • 对于 c 1 c_1 c1 计算来说,既依赖于上面它计算出的权重 α \alpha α 也依赖于所有的 v v v
    在这里插入图片描述

Summary

  • attention最初被用于改善RNN的Seq2Seq模型
  • 后来发现attention不仅仅局限于Seq2Seq模型,而是可以被用在所有的RNN上
  • 之后发现可以直接从RNN中剥离出attention作为一个模型使用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GD32】从零开始学GD32单片机 | USB通用串行总线接口+HID键盘例程(GD32F470ZGT6)

1. 简介 USB,全称通用串行总线,相信大家都非常熟悉了,日常生活只要用到手机电脑都离不开这个接口,像鼠标键盘U盘都需要使用这个接口进行数据传输,下面简单介绍一下。 1.1 版本标准 USB的标准总体可以分为低速、全速和…

业务资源管理模式语言02

图1 模式间的依赖关系 第一节:最开始,关注应用中包括的资源。首先,必须标识资源(1),下一步,检查资源限定(2),同时量化资源(3) 模式1…

c#笔记5 详解事件的内置类型EventHandler、windows事件在winform中的运用

为什么要研究这一问题? 事件和委托可以说是息息相关。 前面先解释了什么是委托,怎么定义一个委托以及怎么使用匿名方法来内联地新建委托。 事实上事件这一机制在c#的程序开发中展很重要的地位,尤其是接触了winform软件开发的同学们应该都知…

Unity 动态光照贴图,加载后显示变暗或者变白问题 ReflectionProbe的使用

动态加载光照贴图代码,可参考这个帖子 Unity 预制动态绑定光照贴图遇到变白问题_unity urp 动态加载光照信息 变黑-CSDN博客 这次遇到的问题是,在编辑器下光照贴图能正常显示,打出apk后光照贴图加载后变黑的问题 以下4张图代表4种状态&…

duckDB源码GDB调试

duckDB源码GDB调试 一,首先编译源代码,使用debug模式 在根目录下 make debug cd ./build/debug/test二,gdb调试unittest gdb ./unittest三,打断点 b dictionary_compression.cpp:621四,执行unittest run test/sq…

opencascade 重叠曲线设置优先显示

‌OpenCASCADE重叠曲线显示设置‌ 当出现重叠曲线时,往往需要设置 优先显示的对象 关键点 SetDisplayPriority SetLayer

磁性齿轮箱市场报告:前三大厂商占有大约79.0%的市场份额

磁性齿轮箱是一种用于扭矩和速度转换的非接触式机构。它们无磨损、无摩擦、无疲劳。它们不需要润滑剂,并且可以针对其他机械特性(如刚度或阻尼)进行定制。 一、全球磁性齿轮箱行业现状与洞察 据 QYResearch 调研团队最新发布的“全球磁性齿轮…

在 Next.js 项目中使用 Clerk 实现 OAuth 登录与回调处理

1. 什么是 Clerk 和 OAuth 登录? Clerk 是一个身份验证管理工具,可以轻松集成到 Web 应用中,提供安全的用户登录、注册等功能。OAuth 是一种常见的授权协议,允许用户通过第三方服务(如 Google、Microsoft)…

10分钟了解OPPO中间件容器化实践

背景 OPPO是一家全球化的科技公司,随着公司的快速发展,业务方向越来越多,对中间件的依赖也越来越紧密,中间件的集群的数量成倍数增长,在中间件的部署,使用,以及运维出现各种问题。 1.中间件与业…

PCM转PCMA(pcm_alaw,G711.A率)转换表 PCM转PCMU(pcm_ulaw,G711.U率)转换表

PCM转PCMA(pcm_alaw,G711.A率)转换表 && PCM转PCMU(pcm_ulaw,G711.U率)转换表 文章目录 PCM转PCMA(pcm_alaw,G711.A率)转换表 && PCM转PCMU(…

桥接与NET

仔细看看下面两幅图 net模式,就是在你的Windows电脑(假设叫A电脑)的网络基础上,再生成一个子网络,ip的前两位默认就是192.168,然后第三位是随机,第四位是自己可以手动设置的。使用这种模式唯一的…

Centos 7 升级glibc2.33 记录

查看glibc升级所需的依赖编译环境: cd $HOME/glibc-$glibc_ver cat INSTALL | grep -E "newer|later" glibc升级参考链接: 主要参考链接:https://blog.csdn.net/optimistic001/article/details/136705055 次要参考链接&#x…

设计模式结构型模式之代理模式

结构型模式之代理模式 一、概念和使用场景1、概念2、核心思想3、java实现代理模式的方式4、使用场景 二、示例讲解1. 静态代理2. 动态代理 三、总结1、使用规则2、代理模式的优点包括:3、代理模式的缺点包括: 一、概念和使用场景 1、概念 代理模式是一…

如何设计数据库排序字段

最简单的办法就是按照id进行排序,越小的id排序越前,不过这完全没有灵活性可言,所以 int字段作为排序 采用一个额外的int字段作为排序成为更普遍的方式 考虑现实场景中,很多时候是需要进行中间插入排序的,这意味要求…

Numpy 数组及矩阵创建详解

基本数组创建方式 numpy中的主要数据类型为ndarray类型,也可以称之为数组,其在内存中是连续存储的.numpy底层大多C语言进行编写,所以运行效率较高,并且numpy库支持并行计算,如矩阵乘法以及其他线性代数操作 np.array() np.array()是numpy中最为基础和常用的创建数组的方式,其…

HUD杂散光环境模拟测试设备

概述 HUD(Head-Up Display)杂散光环境模拟测试设备是用于模拟飞行器在实际运行过程中可能遇到的多种光照环境的系统。它主要用于测试和验证HUD显示系统的性能,确保其能在各种光线条件下清晰、准确地显示信息,从而保障飞行员在复杂…

redis面试(二十六)总结

到这里 redis的相关知识就要告一段落了,给前面的系列文章做一下大致的总结。 前四篇是redis底层数据结构实现逻辑剖析,四、五两篇说的是持久化和淘汰策略,后面大量篇幅讲的都是redis锁相关。 其他相关的一些面试问题,之前也发过…

深入了解Cassandra数据库:原理、架构与最佳实践

一、Cassandra的基本原理与架构 1.1 分布式架构 Cassandra的架构是无中心化的,这意味着每个节点在集群中都是平等的,没有单一的主节点。这种设计确保了系统的高可用性,即使在部分节点失效的情况下,集群依然可以正常运行。Cassan…

MySQL——多表操作(四)(2)带 EXISTS 关键字的子查询

EXISTS 关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,坏产生任何数据,只返回 TRUE 或 FALSE,当返回值为 TRUE 时,外层查询才会执行。 例如,查询 employee 表中是否存在年龄大于 21岁的…

集成电路学习:什么是BLE低功耗蓝牙

一、BLE:低功耗蓝牙 BLE,即低功耗蓝牙(Bluetooth Low Energy),也被称为蓝牙4.0,是蓝牙技术的一种变体。BLE的主要特点在于其低功耗特性,旨在通过一系列的技术和优化措施,使得设备能够…