【王树森】RNN模型与NLP应用(8/9):Attention(个人向笔记)

news/2024/11/10 14:25:30/

前言

  • 基于RNN的Seq2Seq模型无法记住长序列
  • Attentnion机制可以大幅度提升Seq2Seq模型
    在这里插入图片描述

Seq2Seq Model with Attention

  • Attention可以让句子在逐步变长的时候不忘记前面的输入信息
  • Attention还可以告诉Decoder应该关注哪一个状态
  • 优点:Attention可以大幅度提高准确率
  • 缺点:Attention计算量比较大

Simple RNN + Attention

  • 需要计算最后一个输出的状态和前面所有状态的相关性(权重),把这个权重记为 α i \alpha_i αi,所有的权重总和为1
    在这里插入图片描述
    • 计算方法1(原版):①把 h i h_i hi s 0 s_0 s0 做concatenation,②然后和一个矩阵 W W W(需要被训练的参数)相乘后丢到 tanh 激活函数里面使其范围变为 [ − 1 , 1 ] [-1,1] [1,1] ,③然后再和 v T v^T vT 做内积得到一个实数。④最后把所有的权重做一个Softmax。
      在这里插入图片描述
    • 计算方法2(更流行,和Transformer一致):①将 h i h_i hi W K W_K WK(需要被训练的参数) 相乘得到 k i k_i ki,将 s 0 s_0 s0 W Q W_Q WQ(需要被训练的参数) 相乘得到 q 0 q_0 q0,其中 k i k_i ki q 0 q_0 q0 都是一维的向量。② k i T q 0 k^T_iq_0 kiTq0 得到权重 α i ~ \tilde{\alpha_i} αi~。③对所有的 α i ~ \tilde{\alpha_i} αi~ 做 Softmax即可得到权重。
      在这里插入图片描述
  • 我们对所有的 h i h_i hi 利用刚刚算出的权重计算加权平均得出一个向量 c 0 c_0 c0,其中一个 c c c 对应一个 s s s,计算出的加权平均向量被称为 Context vector。
    在这里插入图片描述
  • 对于更新状态来说,之前的Simple RNN是这样的,它不会去看前面的状态,而是只会看最后一个
    在这里插入图片描述
  • 而有Attention后更新状态还会把之前的信息 c 0 c_0 c0 考虑进去,也就是还会把前面的信息考虑进去,这样就把RNN遗忘的问题解决了
    在这里插入图片描述
  • 而对于后续的状态 s i s_i si 重复前面的步骤即可,注意每次权重 α i \alpha_i αi 都需要重新计算后得出 c i c_i ci
    在这里插入图片描述
  • Question: 有多少权重 α i \alpha_i αi 被计算了?
    • 对于每一个 c i c_i ci ,我们都i需要用 s i s_i si 来计算 m m m 个权重
    • 假设 Decoder 有 t t t 个状态,那么总共就需要计算 m t mt mt
    • 这个时间复杂度是很高的!
  • 权重可视化:在下面的图中,连线表示相关性,连线越粗,相关性越强。而可以看到Area和zone有比较粗的连线,而英语中的Area就对应法语中的zone:权重指导Decoder关注Encoder中正确(如zone会特别关注Area)的状态,从而生成正确的翻译
    在这里插入图片描述

Summary

  • 之前的Seq2Seq模型:Decoder只会关注最后一个状态,容易导致遗忘
  • Attention则会关注Encoder的所有状态
  • Attention还会指导Decoder关注的侧重点
  • 缺点:更高的计算复杂度,之前的模型只需要 O ( m + t ) O(m+t) O(m+t) 的复杂度,而Attention则需要 O ( m t ) O(mt) O(mt) 的复杂度,其中 m m m 是源序列的长度, t t t 是目标序列的长度

http://www.ppmy.cn/news/1518875.html

相关文章

【栈】| 力扣高频题: 基本计算器二

🎗️ 主页:小夜时雨 🎗️专栏:算法题 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/basic-calculator-ii/description/ (可点击) 本道题是栈…

责任链模式-升级版

责任链模式 前言一、CypherCorrectionHandler 提供入口二、AbstractCorrectionHandler 抽象类三、check 实现类第一个检查第二个检查 四、调用总结 前言 就是记录下,方便自己工作用。 含责任链顺序加载,以及抽象调度链路。 一、CypherCorrectionHandle…

深度学习(11)---Swin Transformer详解

文章目录 一、引言二、结构三、Patch Merging操作四、W-MSA详解五、SW-MSA详解 一、引言 1. 在原论文中,首先在开头作者就分析,当前的Transformer从NLP迁移到CV上没有大放异彩主要原因集中在:  (1) 两个领域涉及的规模不同,NLP的…

uniapp实现区域滚动、下拉刷新、上滑滚动加载更多

背景&#xff1a; 在uniapp框架中&#xff0c;有两种实现办法。第1种&#xff0c;是首先在page.json中配置页面&#xff0c;然后使用页面的生命周期函数&#xff1b;第2种&#xff0c;使用<scroll-view>组件&#xff0c;然后配置组件的相关参数&#xff0c;包括但不限于&…

Java面试题:equals和==的区别与联系分别是什么?

1. 运算符 是一个运算符&#xff0c;其用于比较两个变量的内存地址是否相等&#xff1b;对于基本数据类型(int、char、Boolean等)&#xff0c;比较的是它们的值&#xff1b;而对于引用数据类型的话(String、Object、ArrayList等)&#xff0c;比较的是引用&#xff0c;也就是对…

Golang | Leetcode Golang题解之第377题组合总和IV

题目&#xff1a; 题解&#xff1a; func combinationSum4(nums []int, target int) int {dp : make([]int, target1)dp[0] 1for i : 1; i < target; i {for _, num : range nums {if num < i {dp[i] dp[i-num]}}}return dp[target] }

【Kubernetes知识点问答题】第一篇

目录 1.ca-certificates, gnupg, lsb-release 三个包的解释。 2.docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin 作用。 3.K8s 在 1.2 之后就不再支持 docker&#xff0c;请解释对错。 4.举例说明创建容器以及以交互方式访问容器的命令&#xff1f; 1.ca-…

Durid解析SQL语句

在外面的需求中&#xff0c;有很多需要解析SQL语句的地方&#xff0c;我们采用Durid来进行解析。 Durid可以将sql进行详细的拆分成多个部分 解析where解析SQLSelectItem解析update语句解析limit解析group by 还可以动态修改sql&#xff0c;比如在原sql上增加条件修改sql运行的…