图解Attention学习笔记

教程是来自https://github.com/datawhalechina/learn-nlp-with-transformers/blob/main/docs/

图解Attention

Attention出现的原因是:基于循环神经网络(RNN)一类的seq2seq模型,在处理长文本时遇到了挑战,而对长文本中不同位置的信息进行attention有助于提升RNN的模型效果。

seq2seq框架

seq2seq(sequence to sequence)是一种常见的NLP模型结构,也就是从一个文本序列得到一个新的文本序列,其典型的任务是机器翻译任务、文本摘要任务。
seq2seq模型的输入可以是一个单词、字母或者图像特征序列,输出是另外一个单词、字母或图像特征序列,以机器翻译任务为例,序列指的是一连串的单词。
seq2seq模型由编码器(Encoder)和解码器(Decoder)组成,绿色的编码器会处理输入序列中的每个元素并获得输入信息,这些信息会被转换成为一个黄色的向量(称为context向量),当我们处理完整个输入序列后,编码器把context向量发送给紫色的解码器,解码器通过context向量中的信息,逐个元素输出新的序列。
在这里插入图片描述
以机器翻译任务为例,seq2seq在Transformer还没出现的时候,编码器和解码器一般采用的是循环神经网络RNN,编码器将输入的法语单词序列编码成context向量,然后解码器根据context向量解码出英语单词序列。
在这里插入图片描述
context向量本质是一组浮点数,而context的数组长度是基于编码器RNN的隐藏层神经元数量,上图是长度为4的context向量,但在实际应用中,context向量的长度是自定义的,比如可能是256,512或1024。
RNN具体处理输入序列的过程如下:

  1. 假设输入是一个句子,这个句子可以由 n n n个词表示: s e n t e n c e = w 1 , w 2 , . . . , w n sentence={w_1,w_2,...,w_n} sentence=w1,w2,...,wn
  2. RNN首先将句子中的每一个词映射成为一个向量,得到一个向量序列: X = x 1 , x 2 , . . . , x n X={x_1,x_2,...,x_n} X=x1,x2,...,xn,每个单词映射得到的向量通常又叫做word embedding
  3. 然后在处理第 t ∈ [ 1 , n ] t\in [1,n] t[1,n]个时间步的序列输入 x t x_t xt时,RNN网络的输入和输出可以表示为: h t = R N N ( x t , h t − 1 ) h_t=RNN(x_t,h_{t-1}) ht=RNN(xt,ht1)
  • 输入:RNN在时间步 t t t的输入之一为单词 w t w_t wt经过映射得到的向量 x t x_t xt,另一个输入是上一个时间步 t − 1 t-1 t1得到的hidden state向量 h t − 1 h_{t-1} ht1,同样是一个向量。
  • 输出:RNN在时间步 t t t的输出为 h t h_t hthidden state向量。
    下图是word embedding的例子,为了简单起见,每个单词被映射成一个长度为4的向量。
    在这里插入图片描述
    在这里插入图片描述
    看上面的动态图,相当于第一步 t 1 t_1 t1先把一个单词输入(转化为嵌入向量 x 1 x_1 x1),得到其对应的hidden state #1,然后根据hidden state #1 x 2 x_2 x2得到hidden state #2,以此类推,最终编码器输出的是最后一个hidden state,将其作为输入传给解码器,和编码器相同,解码器也是在每个时间步得到隐藏层状态,并传递到下一个时间步,一步步输出得到序列。

Attention

基于RNN的seq2seq模型编码器所有信息都编码到了一个context向量中,单个向量很难包含所有文本序列的信息,在处理长文本的时候,有长程依赖问题,因此Attention(注意力)机制被提出,这使得seq2seq模型可以有区分度、有重点的关注输入序列。
带有注意力的seq2seq模型结构有两点不同:

  • A. 编码器会把更多的数据传递给解码器。编码器把所有时间步的hidden state传递给解码器,而不是只传递最后一个hidden state,如图
    在这里插入图片描述
  • B. 注意力模型的解码器在输出之前,做了一个额外的attention处理。具体为:
  • a. 由于编码器中每个hidden state都对应到输入句子中的一个单词,那么解码器要查看所有接收到的编码器的hidden state
  • b. 给每个hidden state计算出一个分数。
  • c. 所有hidden state的分数经过softmax归一化。
  • d. 将每个hidden state乘以所对应的分数,从而能够让高分对应的hidden state会被放大,而低分对应的hidden state会被缩小。
  • e. 将所有hidden state根据对应分数进行加权求和,得到对应时间步的context向量。(下图的前三个时间步是编码器编码过程,第四个时间步是解码器开始解码)
    在这里插入图片描述
    以第四个时间步(解码器开始解码)为例:
  1. 注意力模型的解码器RNN的输入包括:一个word embedding向量,和一个初始化好的解码器hidden state,图中是 h i n i t h_{init} hinit
  2. RNN处理上述的两个输入,产生一个新的输出和一个新的hidden state(这里和之前一样),图中为 h 4 h_4 h4
  3. 注意力机制的步骤:使用编码器的所有hidden state向量和h4向量来计算这个时间步的context向量(C4).
  4. h4C4拼接起来,得到一个橙色向量。
  5. 把橙色向量输入一个前馈神经网络(这个网络是和整个模型一起训练的)。
  6. 根据前馈神经网络的输出向量得到输出单词:假设输出序列可能的单词有N个,那么这个前馈神经网络的输出向量通常是N维的,每个维度的下标对应一个输出单词,每个维度的数值对应的是该单词的输出概率。(编码器是把词进行词嵌入,将词汇表中的词映射为嵌入向量,解码器的输出是词汇表上每个词的概率,比如通过softmax层将该时间步的隐藏状态转换为词汇表上的概率,然后argmax取出概率最高的作为输出的单词)
  7. 在下一个时间步重复1-6步骤。
    在这里插入图片描述
    上图是解码器结合attention的全过程,最后是一段注意力机制的可视化,看看解码器在每个时间步关注了输入序列的哪些部分:
    在这里插入图片描述
    注意力模型不是无意识的将输出的第一个单词对应到输入的第一个单词,是在训练阶段学习到如何对两种语言的单词进行对应,例子中是法语和英语。
    在这里插入图片描述
    由上图可以看出,模型在输出"European Economic Area"时,注意力分布情况,法语和英语单词的顺序是颠倒的,注意力分布反映出了这一点。

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

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

相关文章

IPD体系进阶:组织体系诊断7S模型

目录 1. IPD 变革说明 2. 麦肯锡 7S 模型 3. IPD 资源 1. IPD 变革说明 企业引入 IPD,最直接的原因在于: 要解决组织当下遇到的发展问题。 这个时候就离不开对自身的诊断。 这跟解决日常问题是一样的思路。 有这样一句爱因斯坦的名言&#xff0c…

垃圾回收管理系统设计

一、引言 随着城市化进程的加快,垃圾处理问题日益凸显。为了有效管理垃圾回收,提高资源利用效率,降低环境污染,本文设计了一套垃圾回收管理系统。该系统涵盖了数据收集与分析、智能监测与识别、资源调配与协调、用户参与与反馈、…

maven编译【-Dmaven.test.skip=true和-DskipTests=true的区别】

1、背景 我在执行maven编译时,遇到下面情况: 1、当执行命令为下面: mvn clean compile package install -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue -Dmaven.wagon.http.ssl.ignore.validity.datestrue -Dra…

基于自编码器的心电图信号异常检测(Python)

使用的数据集来自PTB心电图数据库,包括14552个心电图记录,包括两类:正常心跳和异常心跳,采样频率为125Hz。 import numpy as np np.set_printoptions(suppressTrue) import pandas as pd import matplotlib.pyplot as plt import…

qss实现登录界面美化

qss实现登录界面美化 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 去掉头部this->setWindowFlag(Qt::FramelessWindowHint);// 去掉空白部分th…

批量修改文件后缀名

背景引言 bat 文件是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下输入批处理文件的名称,或者双击该批处理文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序…

鸿蒙 用tabs的 divider 属性 添加分割线,非常好用

divider10DividerStyle | null 用于设置区分TabBar和TabContent的分割线样式设置分割线样式,默认不显示分割线。 DividerStyle: 分割线的样式; null: 不显示分割线。 添加前: 添加后的效果:

JavaScript-事件监听及对象

添加事件监听 语法:对象名.addEventListener(事件类型,要执行的函数) 作用:当事件触发时,就调用这个函数 事件类型:比如用鼠标点击,或用滚轮滑动,鼠标经过这些 要执行的函数:要做的事 &l…

物联网主机E6000:智慧安防的核心动力

随着科技的不断进步,物联网(IoT)技术已经深入到我们生活的各个领域,尤其是在智慧安防领域,物联网技术的应用正变得越来越广泛。物联网主机E6000作为一款高性能的智能设备,其在智慧安防系统中扮演着至关重要…

海外仓系统有哪些?主流海外仓系统类型、优缺点,不同海外仓如何选择

作为海外仓的经营者,不管海外仓大小,你都应该知道海外仓系统对提升仓库管理效率有多重要。 不过现在市场上的海外仓系统确实种类太多了,想选到一个适合自己海外仓,性价比又比较高的wms海外仓系统也不是一件容易的事情。 本文会详…

小白入手实现AI客服机器人demo

一、环境准备 1 安装python 2 安装vscode 3 安装相关python库 pip install flask flask_cors openai 4.在vscode里安装TONGYI Lingma(AI编程助手) 二、后端搭建 创建一个后端文件夹chatbot,再新建一个app.py的python文件 from flask import Flask, requ…

睿烨蜘蛛池福建官网下载

baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? 现在做站群程序的时候,由于百度、搜狗蜘蛛越来越少了,所以缓存也跟着减少,很多人都降低了服务器的配置,这个时候google蜘蛛却疯狂涌入,烦不胜烦…

Airflow任务流调度

0 前言 Airflow是Airbnb内部发起的一个工作流管理平台。使用Python编写实现的任务管理、调度、监控工作流平台。Airflow的调度依赖于crontab命令,与crontab相比,Airflow可以方便地查看任务的执行状况(执行是否成功、执行时间、执行依赖等&…

CMSIS-RTOS2简介

本文介绍CMSIS-RTOS2。 1.引入 CMSIS-RTOS2在基于Arm Cortex处理器的设备上运行的实时操作系统内核上指定了通用RTOS接口。应用程序和中间件组件可以使用CMSIS-RTOS2 API在各种软件生态系统中实现更好的代码重用和更简单的集成。 CMSIS-RTOS2还指定了RTOS内核使用的标准OS T…

归并排序的应用—计算逆序对的个数

归并排序的应用—计算逆序对的个数 什么是逆序对题目的思路 题目 如果你还不会归并排序,那么请你先学会它,再来看本篇文章效果更佳。 什么是逆序对 逆序对的定义:在一个数列中,如果前面的数字大于后面的数字,那么这两…

NTP8835数字功放-智能投影仪音频解决方案

数字功放是智能投影仪音频解决方案的一种重要技术;与传统的模拟功放相比,数字功放具有更高的效率和更低的失真;在智能投影仪中应用数字功放技术,可以提供更清晰、更真实的音频效果,为用户带来更好的听觉体验。 数字功放…

Shell脚本(.sh文件)如何执行完毕之后不自动关闭?

Shell脚本异常傲娇,出错后、执行完根本不给你机会让你查看报错信息、输出信息,直接闪退。 废话不多说,调教方法如下,直接在Shell脚本末尾加上如下代码: 1、实现方式一 1.1 使用read命令达到类似bat中的pause命令效果…

转型AI产品经理(11):“损失规避”如何应用在Chatbot产品中

损失规避是行为经济学和心理学中的一个重要概念,它揭示了人们在面对潜在的收益和损失时,表现出对损失的强烈偏好避免,相比于获得同等价值的利益,人们对损失的感受更为强烈。它主要有以下特征: 1、不对称性 损失规避体…

jvm必知必会-类的生命周期图文详解

类的生命周期描述了一个从加载、使用到卸载的过程; 而其中的 连接 部分又分为一下三个阶段: 验证准备解析6.1 加载阶段 Loading阶段第一步是 类加载器 会根据类全限定名通过不同的渠道以二进制流的方式获取字节码信息,程序员可以使用Java代码扩展不同的渠道。 比如通过 …

【前端】Nesj 学习笔记

1、前置知识 1.1 装饰器 装饰器的类型 declare type ClassDecorator <TFunction extends Function>(target: TFunction) > TFunction | void; declare type PropertyDecorator (target: Object, propertyKey: string | symbol) > void; declare type MethodDe…