图解Attention学习笔记

news2025/4/22 20:52:50

教程是来自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.coloradmin.cn/o/1823898.html

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

相关文章

重生之 SpringBoot3 入门保姆级学习(21、场景整合 Redis 定制对象序列化存储)

重生之 SpringBoot3 入门保姆级学习(21、场景整合 Redis 定制对象序列化存储) 6.4 定制化 6.4 定制化 需求:保存一个 Person 对象到 redis 创建 Person 类 package com.zhong.redis.entity;import lombok.AllArgsConstructor; import lombok…

13.ChatGPT 大模型训练核心技术

ChatGPT 大模型训练核心技术 从 GPT-3 到 ChatGPT 的大模型训练技术演进 基于RLHF训练大模型的三阶段 • Domain Specific Pre-Training: Fine-tune a pre-trained LLM on raw text with a Causal Language Modelling Objective.• Supervised fine-tuning: Fine-tune the do…

Confluence是否免费?你需要知道的都在这里!

根据Atlassian官方信息,可以确定的是 Confluence 并不免费,但为10人以下团队提供了免费版本。免费版可以使用不限量的页面、空间,但只有2GB的存储空间和3个活动白板。但国内有不少公司通过使用破解版的方式来免费使用Cofluence。下面本文将详…

排阻A103J

1.定义: 排阻,即网络电阻器。排阻是将若干个参数完全相同的电阻集中封装在一起,组成制成的。排阻一般应用在数字电路上,比如:作为某个并行口的上拉或者下拉电阻用。使用排阻比用若干只固定电阻更方便。 排阻是将若干…

vue+intro.js实现引导功能

前言: 使用 intro.js这个插件,来实现一个引导性的效果,适用场景,比如:新手引导页,操作说明等等 效果图: 官网地址:点我 实现步骤: 1、安装 npm install intro.js --sa…

Spring Boot集成Timefold Solver实现课程表编排

1. 什么是Timefold Solver? 每个组织都面临规划问题:使用一组有限的资源(员工、资产、时间和金钱)提供产品或服务。Timefold Solver 优化了此类规划,以更少的资源开展更多业务。这被称为约束满足编程(属于…

LeetCode | 168.Excel表列名称

这道题一开始以为是简单的进制转换问题,用的以往的思路,对于一般性的进制转换题目,只需要不断地对 columnNumber 进行 % 运算取得最后一位,然后对 columnNumber 进行 / 运算,将已经取得的位数去掉,直到 col…

ABB 和PLC ProfinN 通信

1,设置IP 地址 2, 设置站名称 3, 修改传送区大小 4,配置DI DO 5,导出 6,安装gsd 文件 7,建立通信

LeetCode --- 132双周赛

题目列表 3174. 清除数字 3175. 找到连续赢 K 场比赛的第一位玩家 3176. 求出最长好子序列 I 3177. 求出最长好子序列 II 一、清理数字 这题直接根据题目,进行模拟即可,大体的思路是遍历字符串,遇到字母就加入答案,遇到数字就…

android studio 自定义类注释模版

perferences>File and Code Templates>Class 填写: /*** ClassName: ${ClassName}* Description: ${Description}* Author: ${Author}* CreateDate: ${CreateDate}* UpdateUser: ${UpdateUser}* UpdateDate: ${UpdateDate}* UpdateRemark: ${UpdateRemark}* …

Spring boot 启动报:Do not use @ for indentation

一、使用maven插件动态切换配置时出现报错 二、配置文件及pom 2.1 配置文件结构 2.2 application.yml spring: # 根据环境读取配置文件(手动) # profiles: # active: dev# 根据环境读取配置文件(通过勾选maven插件)profiles…

Python时间序列分析库

Sktime Welcome to sktime — sktime documentation 用于ML/AI和时间序列的统一API,用于模型构建、拟合、应用和验证支持各种学习任务,包括预测、时间序列分类、回归、聚类。复合模型构建,包括具有转换、集成、调整和精简功能的管道scikit学习式界面约定的交互式用户体验Pro…

如何应对生活中的不确定性:仁者安仁,知者利仁。

有较高自尊水平的人,接近于孔子说的:仁者。 ——— 有着稳定的高自尊,无论外在环境如何变化,对其影响都不大,他能够愉快地生活。 相反:一个人处于低自尊状态,就会活得很痛苦,对自己…

俄罗斯Yandex推广投放如何开户?Yandex广告开户和代运营推广流程详解_俄罗斯_受众_搜索引擎

在俄罗斯进行Yandex广告推广是一种有效的在线营销方式,特别是针对俄罗斯市场。Yandex是俄罗斯最受欢迎的搜索引擎,类似于Google在全球范围内的地位。以下是通过Yandex广告推广的一般步骤,以及如何通过上海上弦进行广告开户和代运营。 1. Yan…

Stringboot

一、概述 springboot是spring家族中的一个全新框架,用来简化spring程序的创建和开发过程。在以往我们通过SpringMVCSpringMybatis框架进行开发的时候,我们需要配置web.xml,spring配置,mybatis配置,然后整合在一起&…

明天二战六级

明天二战六级,各位程序员们,加油

活动集锦 | 英码科技积极参与行业盛会,AI赋能城市数字化转型

在当今数字经济时代,城市全域数字化转型已经成为提升城市管理效能、优化资源配置、推动经济发展的重要手段。英码科技始终致力于为企业打造高效、低成本的行业应用方案,助力企业实现数字化转型。近日,英码科技受邀参加了多场行业展示活动&…

[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 🧀线程与…

zabbix老版本3.0.14迁移

由于之前zabbix版本过老,一直未能升级,现在一台老的服务器需要迁移,服务器较老,就不更新,先迁移数据, 下载地址: Zabbix Official Repository http://repo.zabbix.com/zabbix/3.0/rhel/7/x86…

R 文件优化插件:Binary XML file in layout Error inflating class

场景一:构造函数缺失 问题 自定义布局(FlagmentLayout)加载自定义属性失败,导致广告显示异常,甚至是闪退~ InflateException 在 Android 中我们遇到的通常发生在自定义 View 创建中,动态加载…