序列到序列模型中的注意力机制

目录

一、说明

二、编码器解码器架构中的问题:需要注意

2.1 编码器方面的问题:

2.2 解码器方面的问题:

三、什么是注意力机制?

3.1 计算 ci 值:

3.2 ci 的广义表示:

四、Bahdanau 注意 :

4.1. 兼容性分数计算:

4.2.注意力权重:

4.3. 上下文向量:

五、Luong 注意 :

六、注意机制的好处:

七、引用:


  

一、说明

        在人工智能和机器学习领域,注意力机制的概念已成为提高神经网络效率和有效性的有力工具。受人类有选择地关注输入数据特定方面的认知过程的启发,注意力机制允许模型动态地将计算资源分配给给定输入的最相关组件。

在这篇博客中,我们将分解注意力机制:它们是什么,为什么它们如此有用,以及它们是如何运作的。从基本概念到实际应用,我们将以通俗易懂的方式解释注意力机制如何成为人工智能的重要组成部分。

二、编码器解码器架构中的问题:需要注意

2.1 编码器方面的问题:

 在自然语言处理中,编码器-解码器架构面临的挑战类似于人类在尝试处理冗长句子时遇到的挑战。想象一下,试图将一个长而复杂的句子翻译成另一种语言,只看了一眼。保留整个上下文并准确翻译几乎是不可能的,尤其是在处理包含超过 25 个单词的句子时。

同样,当编码器处理一个大句子时,在固定长度的上下文向量中捕获其完整的上下文被证明是一项艰巨的任务。此限制会显著影响翻译准确性。

2.2 解码器方面的问题:

 在图的解码器方面,我们可以观察到,要输出一个特定的单词,如“आपसे”(在英语中意为“你”),我们不一定需要整个句子上下文。

        相反,只需要一个特定的单词或一组单词。然而,在传统的编码器-解码器架构中,整个句子上下文向量都提供给解码器,导致解码器难以准确解码的静态表示。

        如果解码器可以动态地关注与输出相关的特定单词,则效率会更高。这个概念反映了人类的阅读和翻译方式,通过关注注意力区域和相邻单词作为上下文。当我们人类阅读一段冗长的段落时,我们的大脑会自然而然地创建一个注意力区域,我们的注意力集中在其中。就像相机镜头捕捉到一个清晰的区域,而其余部分仍然模糊不清一样,我们的注意力主要集中在这个焦点上,而周边信息则不太清晰。这种自然的认知过程使我们能够有效地理解和翻译文本。

        此外,考虑一下我们发现自己在段落中途的场景。在这一点上,我们的大脑依靠相邻单词的上下文线索来破译不熟悉术语的含义。

        考虑一个场景,你要解码一个句子,从解码器中的时间戳 t=1 开始。假设您需要输出单词“आपसे”(英语中的“你”)。为了准确地做到这一点,您必须提供来自编码器的相关信息,特别是时间戳 t=4 处的内容,即单词“you”所在的位置,这对于生成“आपसे”至关重要。同样,在时间戳 t=2 处解码时,要输出“मिलकर”(“见面”),您需要从时间戳 t=2 和 t=3 输入,其中可以找到“见面”的上下文。

        因此,挑战在于动态传递编码器的时间戳值,这些值在解码过程的每个步骤中都保存了要翻译的重要信息。这种动态机制使解码器能够有选择地关注相关的编码器时间戳,这就是我们所说的注意力机制。

三、什么是注意力机制?

        注意力机制使模型能够有选择地关注输入序列的相关部分,同时生成输出序列的每个元素,从而提高准确性并捕获机器翻译等任务中的长程依赖关系。我们举个例子来理解一下:

        下面是编码器解码器图,我们将英语翻译成印地语。我们传递输入“关灯”,我们从解码器端得到的输出是“लाइट बंद करो”。

        在具有注意力机制的增强型编码器-解码器体系结构中,我们将编码器隐藏状态表示为 h0、h1、h2、h3、h4,将解码器隐藏状态表示为 s0、s1、s2、s3、s4。值得注意的是,在解码器中预测特定时间戳的输出时,我们输入两个基本组件:前一个时间戳的解码器隐藏状态值(si-1)和前一个时间戳的编码器隐藏状态值(yi-1)。注意力机制的添加引入了另一个关键参数 ci,它表示特定编码器时间戳对解码器中当前解码时间戳的重要性。

3.1 计算 ci 值:

        想象一下,我们在解码器中的时间戳 t=1,旨在输出单词“लाइट”(在英语中意为“光”),我们试图了解哪个编码器隐藏状态(h1、h2、h3 或 h4)与此翻译最相关。这就是注意力机制发挥作用的地方。它为所有编码器隐藏状态分配权重,表示为 α1、α2、α3 和 α4,表明它们在生成单词“लाइट”中的各自重要性。

解码器中时间戳 t=1 处的上下文向量 c1 可以表示为:

        该等式表示上下文向量 c1 是如何形成的,方法是将每个编码器隐藏状态 hi 加权为其相应的注意力权重 α1i

        同样,对于时间戳 t= 2,请参见下文:

        对于解码器中时间戳 t=2 时的 c2,上下文向量可以写成:

        就像 c1 一样,c2 的计算方法是将每个编码器隐藏状态 hi 加权α其相应的注意力权重 2i

3.2 ci 的广义表示:

        解码器中时间戳 t 处的上下文向量 ct 可以用数学方式表示如下:

哪里:

  • ct 表示时间戳 t 处的上下文向量。
  • αti 表示在时间戳 t 处分配给第 i个编码器隐藏状态的注意力权重。
  • hi 表示编码器的隐藏状态。
  • N 是编码器隐藏状态的总数。

现在,问题来了:我们如何计算这些注意力权重值,表示为 ( α)?

        注意力权重值(α)是通过考虑两个主要因素来确定的:编码器在相应时间戳处的当前隐藏状态(hj)和解码器的先前隐藏状态值(si-1)。
事实上,α 是 hj(编码器在时间戳 j 处的隐藏状态)和 si−1(解码器的先前隐藏状态)的函数。

        我们的目标是推导出一个捕捉这种关系的数学方程,使我们能够根据 hj 和 si−1 计算 α 的值。在最初的研究论文中,研究人员使用人工神经网络(ANN)(因为它们是通用函数逼近器)来设计这个方程,使模型能够在解码过程中动态确定注意力权重。

        在注意力机制中,计算注意力权重值的两种流行方法是 Bahdanau 注意力和 Luong 注意力

四、Bahdanau 注意 :

        Bahdanau注意力,也称为加法注意力,是一种在序列到序列模型中计算注意力权重值的方法。它是由 Dzmitry Bahdanau、Kyunghyun Cho 和 Yoshua Bengio 在 2015 年的论文“通过共同学习对齐和翻译进行神经机器翻译”中引入的。以下是对 Bahdanau 注意力如何工作的详细说明:

4.1. 兼容性分数计算:

  • 在每个解码时间步,Bahdanau 注意力计算解码器的前一个隐藏状态 (si−1) 和每个编码器隐藏状态 (hj) 之间的兼容性分数。
  • 此兼容性分数通常使用前馈神经网络(通常是单层神经网络)计算,该神经网络以 si−1 和 hj 为输入。
  • 从数学上讲,编码器隐藏状态 hj 和解码器隐藏状态 si−1 的兼容性分数 eij 计算如下:

4.2.注意力权重:

  • 一旦计算出兼容性分数,它们就会通过另一个神经网络(通常是单层神经网络,然后是软最大激活)来获得注意力权重。
  • 从数学上讲,解码时间步长 i 处编码器隐藏状态 hj 的注意力权重 αij 计算如下:

4.3. 上下文向量:

  • 计算注意力权重后,通过对编码器隐藏状态进行加权求和来获得当前解码时间步长 i 的上下文向量 ci,其中权重由注意力权重给出。
  • 在数学上,上下文向量 ci 的计算方法如下:

下图直观地说明了 Bahdanau 注意力是如何运作的,提供了对其功能和计算流程的直观理解。

在编码器侧,隐藏状态用 h0 表示,每个状态都是一个四维向量。类似地,在解码器端,先前的时间戳隐藏状态用 s0 表示,也包括四维向量。

我们通过连接解码器的上一个时间戳隐藏状态 ( s0) 和每个编码器隐藏状态 ( hi ) 来创建一个矩阵。然后将该矩阵输入神经网络以计算兼容性分数 (eij)。在获得兼容性分数后,我们应用softmax函数对其进行归一化,从而得到注意力权重(αij)。然后,这些注意力权重用于计算上下文向量 ( ci )。

Bahdanau 的数学工作流程 注意:

五、Luong 注意 :

        在 Luong 注意力中,与 Bahdanau 注意力的第一个区别是,Luong 注意力没有考虑解码器端的先前隐藏状态值,而是合并了解码器的当前时间戳隐藏状态值。第二个区别在于注意力权重(α)值的计算方法:Luong注意力利用解码器当前时间戳隐藏状态(si)和每个编码器隐藏状态(hi)之间的点积。

        在 Luong 注意力中,最后一个区别是上下文向量 ci 直接传递到 LSTM 单元的输出中,这与 Bahdanau 注意力中的方法形成鲜明对比,后者将上下文向量与 LSTM 单元的输入连接起来。这种将上下文向量简化到 LSTM 单元输出中的集成简化了解码过程,并增强了模型生成准确输出的能力。图表确实可以帮助直观地理解这些概念。

六、注意机制的好处:

        下图说明,将注意力机制集成到编码器-解码器架构中可以防止随着段落中句子长度的增加而降低 BLEU 分数。

七、引用:

研究论文:通过共同学习对齐和翻译的神经机器翻译

Youtube频道 : https://youtu.be/0hZT4_fHfNQ?si=ALRyGf-bNeHKMvdk

我相信这篇博客丰富了你对编码器解码器架构中注意力机制的理解。如果您发现此内容的价值,我邀请您保持联系以获取更有见地的帖子。非常感谢您的时间和兴趣。感谢您的阅读!

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

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

相关文章

报表开发工具DevExpress Reporting v23.2 - 增强PDF导出、多平台打印等

DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reporting控件日前正式发布了v23.2…

生产看板管理系统内容有哪些?

相信很多做生产管理的朋友都会遇到如下问题,我就在想,是否能一个创建“透明的”的工作场所?让员工和管理者能够实时查询生产进度,及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能&#xf…

LeRobot——Hugging Face打造的机器人领域的Transformer架构

前言 如友人邓博士所说,“用 Stanford aloha 课题组提供的训练数据,训练他们研发的 Action Chunking Transformer 动作规划模型,训练结果,能用,但是稳定性有待提高 要提高稳定性,看来必须修改 Stanford a…

C++初学者指南第一步---6.枚举和枚举类

C初学者指南第一步—6.枚举和枚举类 文章目录 C初学者指南第一步---6.枚举和枚举类1.作用域的枚举(enum class类型)(C11)2.无作用域的枚举(enum类型)3.枚举类的基础类型4.自定义枚举类映射5.和基础类型的互相转换 1.作用域的枚举(enum class类…

深度学习(九)——神经网络:最大池化的作用

一、 torch.nn中Pool layers的介绍 官网链接: https://pytorch.org/docs/stable/nn.html#pooling-layers 1. nn.MaxPool2d介绍 nn.MaxPool2d是在进行图像处理时,Pool layers最常用的函数 官方文档:MaxPool2d — PyTorch 2.0 documentation &…

耗时两天半的java之sql注入代码审计

java之sql注入代码审计 前言 其实找到漏洞原因很简单,主要想学习一下JDBCsql的过程 JDBC 简单介绍 Java通过java.sql.DriverManager来管理所有数据库的驱动注册,所以如果想要建立数据库连接需要先在java.sql.DriverManager中注册对应的驱动类&#x…

2Y0A21 GP2Y0A21YK0F 红外测距传感器 arduino使用教程

三根线 正极负极信号线 确认自己的三根线分别代表什么,我们的颜色可能不一样 附一张我买的传感器他们的说明图 正极 接 开发板5V 负极 接开发板GND 信号线 接A0 代码arduino ide上面写 // Infračerven senzor vzdlenosti Sharp 2Y0A21// připojen potře…

新火种AI|Sora发布半年之后,AI视频生成领域风云再起

作者:一号 编辑:美美 AI视频最近有些疯狂,Sora可能要着急了。 自OpenAI的Sora发布以来,AI视频生成技术便成为了科技界的热门话题。尽管Sora以其卓越的性能赢得了广泛关注,但其迟迟未能面向公众开放,让人…

Study--Oracle-03-数据库常规操作

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、oracle 版本及主要功能 二、数据安装完成后常用操作SQL 1、检查数据库监听状态 监听的常用命令 启动:[oracleoracle u01]$ lsnrctl stop 停止&am…

买家用洗地机需要注意什么?全面评测热门洗地机品牌

对于忙碌的打工族来说,“做家务”是一件非常消费时间精力的事情,但它又是生活中的一部分,为了解决这些矛盾点,越来越多的清洁家电涌向市场,像集扫地、吸尘、洗地为一体的洗地机,在推拉之间便把脏污处理干净…

网络编程4----网络原理(面试及期末必备)

1 应用层 应用层是与程序员关系最密切的一层,在应用层这里了,很多时候,都是使用程序员自定义的协议,当然,也有很多现成的协议供我们使用。 “自定义协议”: 自定义一个协议,也就是自己做一个…

Idea连接GitLab的过程以及创建在gitlab中创建用户和群组

上期讲述了如何部署GitLab以及修复bug,这期我们讲述,如何连接idea。 首先安装gitlab插件 下载安装idea上并重启 配置ssh免密登录 使用管理员打开命令行输入:ssh-keygen -t rsa -C xxxaaa.com 到用户目录下.ssh查看id_rsa.pub文件 打开复制…

新兴互联网银行搭档Apache SeaTunnel构建数据流通管道!

当新兴互联网银行乘着数字化改革的风潮搭档数据集成平台Apache SeaTunnel,成千万上亿的数据就有了快速流通的管道。6月26日14:00,Apache SeaTunnel社区将带上企业最佳实践与观众见面,与大家面对面交流最新的企业实践部署经验。锁定SeaTunnel视…

OpenCV中的圆形标靶检测——findCirclesGrid()(二)

本章我们开始讲解基于层次聚类的标靶检测算法。当我们调用如下API,且flags中包含cv::CALIB_CB_CLUSTERING标志位时,将会执行基于层次聚类的斑点检测算法。算法支持对称标靶和非对称标靶两类,相应的需要将下述flags设为包含CALIB_CB_SYMMETRIC_GRID或CALIB_CB_ASYMMETRIC_GRI…

设计模式(五)创建者模式之工厂模式

工厂模式 工厂模式上面类图代码实现Coffee 抽象类AmericanCoffeeLatterCoffeeCoffeeStoreUser 简单工厂模式增加工厂方法更改CoffeeStore 类优缺点扩展静态工厂 工厂方法模式概念结构具体类图代码实现Coffee类AmericanCoffeeLatterCoffee抽象工厂CoffeeFactoryAmericanCoffeeFa…

OrangePi Kunpeng Pro 安装 ROS2 + Gazebo

文章目录 1. 初识1.1 到手开箱1.2 OrangePi Kunpeng Pro1.2 上电 2. 安装Ubuntu2.1 准备工作2.2 安装 3. 安装ROS23.1 设置支持UTF-8的locale编码3.2 添加证书3.3 安装ROS3.4 设置环境变量3.5 小海龟来啦 4. 运行实例4.1 安装Gazebo4.2 安装turtlebot 总结 1. 初识 1.1 到手开…

通勤必备!重回儿时回忆,完全免费!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 今天给大家安利三个网站,可以完全免费在线玩的小霸王游戏机,重回童年游戏时刻! 最后一款还可以网页在线和朋友联机CS、吃鸡、暗黑破坏神、拳皇、恐龙…

LVS负载均衡集群企业级应用实战-LVS-DR(四)

目录 LVS-DR 一. 环境准备 二. 对虚拟主机操作 三. 对真实服务器操作 四. 打开网页测试 LVS-DR 一. 环境准备 三台虚拟机,都要在同一网段内,统一关闭防火墙和selinux,时间同步,配置好YUM源。系统用centos和roucky都行。 主…

【ai】如何在ollama中随意使用hugging face上的gguf开源模型

【背景】 ollama的pull命令可以直接pull ollama列表中现有的模型,但是ollama可以直接pull的模型大都是英语偏好(llama2有直接可以pull的chinese版本),而hugging face上则有大量多语种训练的模型,如果能直接使用huggin…

隧道代理是什么?怎么运作的?

隧道代理作为网络代理的一种形式,已经在现代互联网世界中扮演着重要的角色。无论是保护隐私、访问受限网站还是实现网络流量的安全传输,隧道代理都发挥着重要作用。在本文中,我们将深入探讨隧道代理的概念、运作方式以及在不同场景中的应用。…