Transformer的前世今生 day06(Self-Attention和RNN、LSTM的区别)

Self-Attention和RNN、LSTM的区别

  • RNN的缺点:无法做长序列,当输入很长时,最后面的输出很难参考前面的输入,即长序列会缺失上文信息,如下:
    • 可能一段话超过50个字,输出效果就会很差了
      在这里插入图片描述
  • LSTM通过忘记门、输入门、输出门、记忆单元,来有选择性的记忆之前的信息,如下:
    • 可能一段话超过200个字,输出效果才会很差
      在这里插入图片描述
  • 总结:RNN和LSTM无法解决长序列依赖问题,而且它们都是序列模型,必须上一个做完了才能做下一个,无法做并行
  • Self-Attention针对以上的两个问题,有以下解决
    • 1、由于集合中的每一个词都会和其他的词做相似度计算,所以即使序列再长,两个词之间的联系都能通过相似度存储到它们的词向量上,保留下来。
      在这里插入图片描述
  • 2、由于我们将集合中的每一个词都要得到它的Q、K、V,并要做相似度计算以及乘和操作,所以不需要等前一个词做完了才能做下一个词,而是可以很多个词一起做,可以做并行,如下:
    在这里插入图片描述
  • 而且,通过Self-Attention得到的新的词向量具有句法特征和语义特征(词向量的表征更完善)
  • 但是,Self-Attention的计算量特别大(集合中的每一个单词和其他所有单词都要计算相似度),所以在文本量为50个单词左右,模型的效果最好。而LSTM虽然没有解决长序列依赖,但是它在处理长文本任务时,文本量在200个单词左右,模型的效果最好

RNN(循环神经网络)

  • RNN,当前的输出 o t o_t ot取决于上一个的输出 o t − 1 o_{t-1} ot1(作为当前的输入 x t − 1 x_{t-1} xt1)和当前状态下前一时间的隐变量 h t h_t ht,隐变量和隐变量的权重 W h h W_hh Whh存储当前状态下前一段时间的历史信息,如果我们去掉 W h h ∗ h t − 1 W_{hh} * h_{t-1} Whhht1,RNN就退化为MLP
  • 在RNN中,我们根据前一个的输出和当前的隐变量,就可以预测当前的输出。当前的隐变量也是由上一个隐变量和前一个输出
    (即当前的输入)所决定的在这里插入图片描述
    在这里插入图片描述
  • 所以RNN其实就是MLP多了一个时间轴,能存储前一段时间的历史信息,并根据这个历史信息来更新层的参数
    • 同时由于RNN会不加选择的存储前一段时间的历史信息,所以如果序列太长,即句子太长,隐变量会存储太多信息,那么RNN就不容易提取很早之前的信。
      在这里插入图片描述

GRU(门控神经网络)

  • 为了解决RNN处理不了很长的序列,我们可以有选择的存储历史信息,通过更新门和重置门,来只关注有变化的重点信息
    在这里插入图片描述
  • GRU引入了 R t R_t Rt Z t Z_t Zt H ~ t \widetilde{H}_t H t
    • 其中 R t R_t Rt Z t Z_t Zt为控制单元,是可以学习的参数,由于最后用了sigmoid函数,所以范围在(0,1),表示要不要进行Reset和Update操作
      在这里插入图片描述
    • 其中 H ~ t \widetilde{H}_t H t为候选隐变量,跟 R t R_t Rt有关, R t ∗ H t − 1 R_t * H_{t-1} RtHt1表示:候选隐变量要使用多少过去隐变量的信息
      在这里插入图片描述
    • H t H_t Ht为真正的新的隐变量,跟 Z t Z_t Zt有关, ( 1 − Z t ) ⊙ H ~ t (1 - Z_t)\odot\widetilde{H}_t (1Zt)H t表示:新的隐变量要使用多少当前输入的信息
    • 通常情况下:GRU会在以下极端情况中,进行可学习的调整,来决定是多去看当前的输入信息,还是多去看前一次的隐变量
    • 极端情况如下:
  • Z t Z_t Zt为0, R t R_t Rt为1时: H t H_t Ht = H ~ t \widetilde{H}_t H t,不遗忘前一次的隐变量,GRU就退化为RNN
  • Z t Z_t Zt为1时:不考虑候选隐变量, H t H_t Ht = H t − 1 H_{t-1} Ht1,即不使用 X t X_t Xt更新隐变量,当前隐变量和上一次的隐变量相同
  • R t R_t Rt为0, Z t Z_t Zt为0时: H t H_t Ht = H ~ t \widetilde{H}_t H t,不使用前一次的隐变量,只用 X t X_t Xt来更新隐变量
    在这里插入图片描述

LSTM(长短期记忆网络)

  • LSTM和GRU都是实现这个效果:是要多去看现在的输入信息,还是要多去看前一次的隐变量,即过去的信息
  • 但是LSTM可以多实现一个效果:什么都不看,直接重置清零
  • LSTM中的状态有两个: C t C_t Ct记忆单元、 H t H_t Ht隐变量
    • 注意:LSTM额外引入的 C t C_t Ct记忆单元, C t C_t Ct的范围无法保证,可以用来增加模型复杂度,多存储信息。但是最终仍然需要让 H t H_t Ht的范围仍在(-1,1)之间,防止梯度爆炸。
    • 注意:LSTM中的忘记门、输入门、输出门的具体公式和GRU的更新门、重置门一样
      在这里插入图片描述
      在这里插入图片描述
  • C ~ t \widetilde{C}_t C t候选记忆单元:LSTM中的候选记忆单元和RNN中的 H t H_t Ht的计算公式一样,没有用到任何门,但是由于最后用了tanh(),所以范围在(-1,1)之间
    在这里插入图片描述
  • C t C_t Ct记忆单元:LSTM中的记忆单元和GRU中的 H t H_t Ht不一样,记忆单元可以既多看上一个的记忆单元,又多看当前的候选记忆单元(当前的输入信息 X t X_t Xt)。记忆单元也可以即不要上一个的记忆单元,又不要当前的候选记忆单元。但是GRU中的 H t H_t Ht Z T Z_T ZT 1 − Z t 1-Z_t 1Zt,所以要么多看上一个的隐变量,要么多看当前的候选隐变量
    在这里插入图片描述
  • H t H_t Ht隐变量:由于 F t F_t Ft I t I_t It都是(0,1),而 C ~ t \widetilde{C}_t C t在(-1,1),但是 C t − 1 C_{t-1} Ct1可以特别大(跟 C C C的初始值有关),所以上一步的 C t C_t Ct的范围无法保证,那么为了防止梯度爆炸,我们需要再做一次tanh()变换。
    • 注意:此时的 O t O_t Ot来控制要不要输出当前的输入信息和前一次的隐变量,当 O t O_t Ot为0时,表示重置清零
      在这里插入图片描述
  • 总结:通过引入记忆单元,LSTM比GRU更灵活,即可以既多看当前的候补记忆单元(当前的输入信息 X t X_t Xt),又可以多看前一个的记忆单元,也可以两者都不看都忘掉。通过引入记忆单元还可以多存储信息。同时保留 H t H_t Ht,防止梯度爆炸,还能重置清零隐变量
    请添加图片描述

参考文献

  1. 11 Self-Attention相比较 RNN和LSTM的优缺点

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

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

相关文章

【SAP-ABAP】CO01保存时错误DBSQL_DUPLICATE_KEY_ERROR

找到该表的主键OBJNR,事务代码SM56中查看当前缓冲到该key的号码段,事务代码SNRO修改对象名称OBJNR编号范围状态。 事务代码SM13查看数据更新记录

静态路由实验配置

题目及实验图 第一步划分IP IP配置如下 1&#xff09;R1&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sy R1 [R1]int g 0/0/0 [R1-GigabitEthernet0/0/0]ip ad 192.168.1.1 30 [R1-GigabitEthernet0/0/1]ip ad 192.168.1.5…

LeetCode 热题 HOT 100(P21~P30)

系列文章&#xff1a; LeetCode 热题 HOT 100(P1~P10)-CSDN博客 LeetCode 热题 HOT 100(P11~P20)-CSDN博客 LeetCode 热题 HOT 100(P21~P30)-CSDN博客 LC48rotate_image . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表…

for循环三种跳出循环的方法(retrun、continue、break)

return return是最常用的&#xff0c;不能单独在for循环中使用&#xff0c;要在函数中配合使用。 function fn () {for (var i 1; i < 5; i) {if (i 4) {return false;}console.log(i); // 分别输出 1&#xff0c;2, 3}console.log(end); // 未执行 } fn();使用return会…

JavaScript 如何设置私有属性

ES6之前的私有属性模拟 1、构造函数形式创建对象 function Person(name) {let _name name; // 私有属性this.getName function() {return _name;};this.setName function(newName) {_name newName;}; }let person new Person(Alice); console.log(person.getName()); //…

一文彻底搞懂Redis底层数据结构

文章目录 1. 数据结构与数据类型的关系2. 底层数据结构详解2.1 SDS: 简单动态字符串2.2 双端链表2.3 压缩列表2.4 哈希表2.5 整数集合2.6 跳表2.7 quicklist2.8 listpack 1. 数据结构与数据类型的关系 Redis是一个基于内存的数据存储系统&#xff0c;它支持多种数据结构和数据…

vue项目报这个错是 Same `value` exist in the tree: 0008E3000E1A?

警告 "Same value exist in the tree: 0008E3000E1A" 表示在树形选择器中存在相同的值。这通常是由于树形选择器的数据中存在重复的值造成的。就是返回的值中&#xff0c;有俩个id相同

基于K-近邻的PLOSAR图像分类

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

nginx编译安装详细说明(CentOS)

前言 在 CentOS 7 上编译安装 Nginx 1.24.0 &#xff0c;您可以按照以下步骤进行操作。 一、编译前准备 1.1、在开始编译之前&#xff0c;确保您的系统已安装必要的编译工具和依赖项。在 CentOS 7 上&#xff0c;您可以使用以下命令安装这些工具&#xff1a; [roottd66 loc…

mybatis实践篇(二)

自定义类型处理器&#xff08;TypeHandler&#xff09; 实体 package com.wyl.mybatis.entity;import java.util.Date;/*** Description 省市区-字典* Author wuyilong* Date 2024-02-26*/public class FullCity {private static final long serialVersionUID 1L;/*** 主键I…

第十三届蓝桥杯省赛真题 Java A 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 裁纸刀试题 B: 寻找整数试题 C : \mathrm{C}: C: 求和试题 D: GCD试题 E: 蜂巢试题 F : \mathrm{F}: F: 全排列的价值试题 G: 青蛙过河试题 H \mathrm{H} H : 因数平方和试题 I: 最优清零方案试题 J : \mathrm{J}: J: 推导部分和 发现…

Unity Mesh简化为Cube mesh

Mesh简化为Cube mesh &#x1f373;食用&#x1f959;子物体独立生成CubeMesh&#x1f96a;合并成一个CubeMesh&#x1f32d;Demo &#x1f373;食用 下载并导入插件&#x1f448;即可在代码中调用。 &#x1f959;子物体独立生成CubeMesh gameObject.ToCubeMesh_Invidual()…

我的Linux命令学习之旅

探索Linux操作系统的世界&#xff0c;就像开启了一段全新的旅程。这个系统以其无与伦比的功能和灵活性著称&#xff0c;在服务器和开发领域发挥着不可或缺的作用。通过亲身实践&#xff0c;我逐渐掌握了一些基础而强大的Linux命令&#xff0c;这些命令成为了我日常工作中不可或…

Win11文件右键菜单栏完整显示教程

近日公司电脑升级了win11&#xff0c;发现了一个小麻烦事&#xff0c;如下图&#xff1a; 当我想使用svn或git的时候必须要多点一下&#xff0c;这忍不了&#xff0c;无形之中加大了工作量&#xff01; 于是&#xff0c;菜单全显示教程如下&#xff1a; 第一步&#xff1a;管…

vue2在调用子组件方法时,出现undefined如何解决

当父组件调用子组件queryAsnPreDeliverSku()方法时 代码报错 “Uncaught (in promise) TypeError: Cannot read properties of undefined (reading queryAsnPreDeliverSku)” 1、原因 在调用子组件queryAsnPreDeliverSku()方法时&#xff0c;this.$refs.preSkuInfoRef 是 unde…

微信小程序前后端如何交互

微信小程序的前后端交互主要依赖于微信提供的API来实现&#xff0c;其中最核心的就是使用wx.request进行网络请求。前端&#xff08;小程序端&#xff09;通过发送HTTP请求与后端&#xff08;服务器端&#xff09;进行数据交换&#xff0c;实现动态数据的获取、提交和更新等操作…

C#宿舍信息管理系统

简介 功能 1.发布公告 2.地理信息与天气信息的弹窗 3.学生信息的增删改查 4.宿舍信息的增删改查 5.管理员信息的增删改查 6.学生对宿舍物品的报修与核实 7.学生提交请假与销假 8.管理员对保修的审批 9.管理员对请假的审批 技术 1.采用C#\Winform开发的C\S系统 2.采用MD5对数据…

Centos7安装Python3.8

1.安装编译相关工具 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install libffi-devel -y2.下载安装包…

Microsoft Visio 快捷键 (keyboard shortcut - hotkey)

Microsoft Visio 快捷键 [keyboard shortcut - hotkey] References 移动所选形状 ← / ↑ / → / ↓ 微移所选形状 Shift ← / ↑ / → / ↓ 移动画布 Ctrl ← / ↑ / → / ↓ ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

数仓,大数据平台,数据中台,数据湖

数据湖的概念分为侠义和广义的两种&#xff0c;侠义的数据湖指的是数据湖存储指可以存放各种格式的海量数据的地方&#xff0c;而广义的数据湖除了数据存储之外还包含数据的管理和分析提供数据目录、数据服务、以及统一的数据访问方式&#xff1b;这个一般完善的数据处理系统都…