图解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"时,注意力分布情况,法语和英语单词的顺序是颠倒的,注意力分布反映出了这一点。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

02-MybatisPlus批量插入性能够吗?

1 前言 “不要用 mybatis-plus 的批量插入,它其实也是遍历插入,性能很差的”。真的吗?他们的立场如下: 遍历插入,反复创建。这是一个重量级操作,所以性能差。这里不用看源码也知道,因为这个和…

电脑超频是否能把平平无奇的CPU性能提升到超高性能的CPU水平?

前言 这一期着实很有意思哈,一颗平平无奇的CPU通过超频,把性能提升到超高性能的CPU水平。 举个例子:类似于把i7-4790k这颗十年前的高性能CPU超频到性能与i9-14900同样水准,是否可行? 先科普一下:i7-4790…

东理咨询交流论坛系统

开头语:你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP技术、B/S架构 工具:MyEclipse 系统展示 首页 管理员功能…

智能合约之路:Web3时代的商业革新之道

随着区块链技术的日益成熟和普及,智能合约作为其重要应用之一,正逐渐引领着我们进入一个全新的商业时代,即Web3时代。在这个时代,智能合约不仅改变着商业交易的方式,更为商业模式带来了颠覆性的革新。本文将深入探讨智…

【redis】Redis的经典使用场景

目录 1.最常见——缓存2.数据共享分布式3.分布式锁4.全局ID5.计数器6.限流7.位统计8.购物车9.用户消息时间线timeline10.消息队列11.抽奖点赞、签到、打卡13.商品标签14.商品筛选15.用户关注、推荐模型16排行榜 1.最常见——缓存 数据类型:string例如:热…

buildroot编译出错you should not run configure as root

虚拟机版本:ubuntu-22.04.4 问题 buildroot在图形配置后,执行 sudo make开始编译出现以下错误configure: error: you should not run configure as root (set FOenvironment to bypass this check) 在网上看到说在/etc/profile文件中添加以下内容 exp…

Hbase搭建教程

Hbase搭建教程 期待您的关注 ☀小白的Hbase学习笔记 目录 Hbase搭建教程 1.上传hbase的jar包并解压 2.重新登录 3.启动zookeeper 4.配置环境变量 5.关闭ZK的默认配置 6.修改hbase-site.xml文件 7.修改regionservers文件 8.将配置好的文件分发给其它节点 9.配置环境变量…

JavaScript-函数

学习目标: 掌握函数 学习内容: 为什么需要函数函数使用函数传参函数返回值函数细节补充函数作用域匿名函数案例 为什么需要函数: 函数:function 是被设计为执行特定任务的代码块。说明:函数可以把具有相同或相似逻辑…

旅游网站(携程旅行网页学习 vue3+element)

旅游网站 1. 创建项目 在你要创建项目的路径下打开vscode,新建终端,然后输入vue ui,进入Vue项目管理器。选择“创建”,确定项目路径,并点击“在此创建新项目”。在项目文件夹中输入项目名称,点击下一步;选…

【V8引擎】 V8引擎如何运行JS的

文章目录 概要什么是V8引擎为什么需要V8引擎比较常见的javascript引起有哪些呢?V8引擎是如何工作的(V8引擎的解析过程)V8引擎的做了哪些优化 概要 本篇文章主要是讲V8引擎如何运行JS,对运行JS做了哪些优化 什么是V8引擎 V8 是一…

深入理解计算机系统 家庭作业6.34

第一步先求(S,E,B,m) 题目说共C32个字节,块大小B为16个字节,那就是分为两组:0,1.然后每组存4个int 每个4字节 CB*E*S .B16 ,直接映射的E就是1,所以S2 m为啥等于7? 通过写出两个数组所有的地址可以得出m7. 得出高速缓存的参数:(S,E,B,m)(2,1,16,7),注意图6-26每个参数的定义…

Python 植物大战僵尸游戏【含Python源码 MX_012期】

简介: "植物大战僵尸"(Plants vs. Zombies)是一款由PopCap Games开发的流行塔防游戏,最初于2009年发布。游戏的概念是在僵尸入侵的情境下,玩家通过种植不同种类的植物来保护他们的房屋免受僵尸的侵袭。在游…

DTU在城市智慧供热上的应用:引领供热行业的智能化革新

随着城市化的快速推进和人们对舒适生活需求的日益增长,供热系统作为城市基础设施的重要组成部分,其智能化、高效化的发展已成为必然趋势。在这一进程中,DTU(Data Transfer Unit,数据传输单元)以其独特的优势…

计算机组成原理学习 Part 1

计算机系统 组成 计算机系统 { 硬件 计算机的实体,如主机、外设等 软件 由具有各类特殊功能的信息(程序)组成 计算机系统 \begin{cases} 硬件 &\text 计算机的实体,如主机、外设等\\ 软件 &\text 由具有各类特殊功能的信…

CCAA质量管理【学习笔记】​​ 备考知识点笔记(二)

第三节 GB/T19001-2016 标准正文 本节为ISO9001:2015 标准条款的正文内容,各条款中的术语参照上节内容理解时,会很轻松。本节不再一一对各条款讲解。 引 言 0.1 总 则 采用质量管理体系是组织的一项战略决策,能够帮助其提高整体绩效…

FANUC机器人SRVO-454和SRVO-455故障报警处理总结

FANUC机器人SRVO-454和SRVO-455故障报警处理总结 公司内的一台FANUC机器人(型号:M-900iB;控制柜型号:R-30iB)正常运转过程中突然报警: SRVO-455 CPU看门狗(G:1 A:2),按Reset键无法消除该报警; 查看SRVO-455故障报警的具体内容,如下图所示: 由于现场没有备用的伺服放…

服务器如何有效解决源IP暴露问题

在现代互联网环境中,服务器的安全性至关重要。源IP暴露不仅增加了服务器遭受DDoS攻击、恶意扫描和数据泄露的风险,还可能影响业务的正常运行。本文将探讨如何利用技术手段,尤其是CDN和防火墙策略,来有效地解决服务器源IP暴露的问题…

[Java基本语法] 数组及其应用

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀线程与…

Linux环境下安装mysql5.7

1. 环境准备 Linux操作系统:CentOS Linux release 7.9.2009 (Core) mysql版本:mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar mysql5.7版本包资源: 链接:https://pan.baidu.com/s/15BqpcaGMU1XXuPd2T8oTQQ 提取码:2mgy 1…

Ollama+Open WebUI本地部署Llama3 8b(附踩坑细节)

先展示一下最终结果,如下图所示: 1. 添加环境变量 在下载 ollama 之前,先去配置环境变量,确保模型下载到我们想要的地方 win10 和 win11 输入path或者环境变量: 增加系统环境变量 变量名不可更改,必须是O…