seq2seq+Attention机制原理介绍

一、Seq2seq的局限性

Seq2seq(序列到序列)模型我们在前面讲了它的原理,是一种广泛用于处理序列转换任务的深度学习架构,特别是在机器翻译、文本摘要、对话生成等应用中。然而,尽管seq2seq模型在某些领域取得了显著的成果,它仍然存在一些局限性,以下是对您提到的两个局限性的更正式和详细的描述:

  1. 信息遗忘问题(Information Forgetting)

    • 在seq2seq模型中,编码器(Encoder)负责将输入序列转换为固定大小的上下文向量,而解码器(Decoder)则基于这个上下文向量生成输出序列。对于循环神经网络(RNN)及其变体,如长短时记忆网络(LSTM)和门控循环单元(GRU),它们在处理长序列时可能面临信息遗忘的问题。
    • 随着序列长度的增加,这些模型可能会逐渐丢失早期输入信息,导致在生成输出序列时无法充分利用所有相关信息。这种信息丢失可能会降低模型的性能,特别是在需要长期依赖关系的复杂任务中。
  2. 信息不对齐问题(Information Misalignment)

    • 在seq2seq模型的解码阶段,模型需要生成与输入序列相对应的输出序列。然而,模型在处理输入序列时,可能会对所有单词给予相同的关注度,而不是根据它们对输出序列的相关性进行加权。
    • 这种信息不对齐可能导致模型无法准确地捕捉输入序列中的关键信息,从而影响输出序列的质量和相关性。例如,在机器翻译任务中,某些词汇或短语可能对翻译的整体意义至关重要,但模型可能无法识别并给予适当的重视。

为了克服这些局限性,我们看一下Attention机制是如何做的。

二、Attention介绍

Attention机制是一项先进技术,用于增强基于循环神经网络(RNN)、长短时记忆网络(LSTM)和门控循环单元(GRU)的编码器-解码器模型性能。它通常被称作Attention Mechanism,在深度学习领域非常流行,广泛应用于机器翻译、语音识别、图像标注等多个领域。

  1. Attention机制的作用与流行原因
    通过为序列中每个元素分配不同权重,Attention机制增强了模型的信息区分和识别能力。这种权重分配让模型更灵活地学习,尤其是在处理句子中每个词时,能根据其对翻译或识别结果的重要性进行调整。Attention机制还提供对齐关系,帮助解释输入输出序列间的对应关系,揭示模型学习的知识,为理解深度学习模型内部机制提供途径。
  2. Attention机制的历史与发展
    Attention机制的概念最早在20世纪90年代提出,初应用于计算机视觉领域,后在自然语言处理领域迅速发展,并近期在计算机视觉领域再获广泛关注。
  3. Attention机制与人类视觉注意力的关系
    Attention机制的灵感来自人类视觉注意力机制,一种仿生学应用。人类视觉系统能快速扫描场景,识别重点关注区域,集中注意力资源获取目标细节信息,忽略无关信息。这是人类长期进化中形成的生存策略,提高了视觉信息处理效率和准确性。
  4. 人类视觉注意力机制的特点
    人类视觉注意力机制利用有限注意力资源从大量信息中快速筛选高价值信息。这使人类能在复杂环境中快速识别响应重要视觉刺激,是进化中形成的高效信息处理方式。

三、原理解析

在传统的seq2seq中,解码器对于编码器的输入信息全部来自于H
在这里插入图片描述
Attention模型的一个关键特点是它对传统的编码器-解码器(Encoder-Decoder)架构进行了改进,使得解码器(Decoder)在生成每个新的输出单词时,不是依赖于整个输入序列编码成的固定长度的中间语义向量 H,而是能够动态地计算并关注输入序列中与当前生成的单词最相关的部分,如下图。
在这里插入图片描述
解码器的输入过程就变成了:
I = f ( c 1 , < s o s > ) I=f(c_1,<sos>) I=f(c1,<sos>)
l o v e = f ( c 2 , I ) love=f(c_2,I) love=f(c2,I)
C h i n a = f ( c 3 , I , l o v e ) China=f(c_3,I,love) China=f(c3,I,love)

整个Attention机制的重点是查看 c 1 , c 2 , c 3 c_1,c_2,c_3 c1,c2,c3是如何计算的

3.1 注意力分数

我们以 C 1 C_1 C1为例来说明
在这里插入图片描述

图片中的是C1注意力权重公式的示例。根据图片中的内容,我们可以看到:

  1. h 1 \mathbf{h}_1 h1 h 2 \mathbf{h}_2 h2 h 3 \mathbf{h}_3 h3 h 4 \mathbf{h}_4 h4是编码器每个时间状态的隐藏层信息;

  2. α i j \alpha_{ij} αij 是输入序列中第 j j j 个词对解码时间步 i i i的注意力权重,比如 α 12 \alpha_{12} α12是编码器第2个时刻 h 2 \mathbf{h}_2 h2 对于解码器第1个时刻的注意力权重;

  3. C 1 = α 11 ∗ h 1 + α 12 ∗ h 2 + α 13 ∗ h 3 + α 14 ∗ h 4 \mathbf{C}_1 = \alpha_{11}*\mathbf{h}_1 + \alpha_{12}*\mathbf{h}_2 +\alpha_{13}*\mathbf{h}_3 + \alpha_{14}*\mathbf{h}_4 C1=α11h1+α12h2+α13h3+α14h4 α i j \alpha_{ij} αij可以看成是解码器在生成第一个单词I时,和编码器中每个时刻生成的隐藏层 h j \mathbf{h}_j hj的相关性;因为 h j \mathbf{h}_j hj是每个时刻生成的隐藏状态,其实是包含了当前时间点输入的主要内容;所以我们可以理解为这里需要计算的是单词I“我”,“爱“,”中“,”国”每个时刻输入内容的相关性。当然这里的 h j \mathbf{h}_j hj其实是包含了部分上文信息的(在原始的论文中采用的是双向的RNN,也就是包含上下文信息的)。所以在生成单词I时,理论上与“我”的相关性最大,与其他的汉字`“爱“,”中“,”国”``的相关性较小。在其他的时间节点类似。

  4. 公式信息:注意力机制的计算公式,对于解码步骤 ( i ) 的上下文向量 C i \mathbf{C}_i Ci,它的计算方式是:
    C i = ∑ j = 1 n α i j h j \mathbf{C}_i = \sum_{j=1}^{n} \alpha_{ij} \mathbf{h}_j Ci=j=1nαijhj

    其中:

    • α i j \alpha_{ij} αij 是输入序列中第 j j j 个词对解码步骤 i i i的注意力权重。
    • h j \mathbf{h}_j hj 是编码器输出的第 j j j 个词的隐藏状态。
    • n n n 是输入序列的长度。
  5. 补充全部公式:
    C 1 = α 11 ∗ h 1 + α 12 ∗ h 2 + α 13 ∗ h 3 + α 14 ∗ h 4 \mathbf{C}_1 = \alpha_{11}*\mathbf{h}_1 + \alpha_{12}*\mathbf{h}_2 +\alpha_{13}*\mathbf{h}_3 + \alpha_{14}*\mathbf{h}_4 C1=α11h1+α12h2+α13h3+α14h4
    C 2 = α 21 ∗ h 1 + α 22 ∗ h 2 + α 23 ∗ h 3 + α 24 ∗ h 4 \mathbf{C}_2 = \alpha_{21}*\mathbf{h}_1 + \alpha_{22}*\mathbf{h}_2 +\alpha_{23}*\mathbf{h}_3 + \alpha_{24}*\mathbf{h}_4 C2=α21h1+α22h2+α23h3+α24h4
    C 3 = α 31 ∗ h 1 + α 32 ∗ h 2 + α 33 ∗ h 3 + α 34 ∗ h 4 \mathbf{C}_3 = \alpha_{31}*\mathbf{h}_1 + \alpha_{32}*\mathbf{h}_2 +\alpha_{33}*\mathbf{h}_3 + \alpha_{34}*\mathbf{h}_4 C3=α31h1+α32h2+α33h3+α34h4

那么这个 α i j \alpha_{ij} αij 是怎么计算出来的呢?

3.2 注意力分数计算

还是以输出的第一个时刻为例:
在这里插入图片描述
在传统seq2seq的decode中,输入有三个:encode的隐藏状态、前一个时刻的输入和前一个隐藏状态;在注意力机制中就是使用前一个时刻的隐藏状态 s i − 1 \mathbf{s}_{i-1} si1 和encode中每一个时刻的隐藏状态 h j \mathbf{h}_j hj进行计算得到 α i j \alpha_{ij} αij ;
在这里插入图片描述
比如第一个decode中的注意力权重就是隐藏状态 s 0 \mathbf{s}_0 s0与encode中每一个时刻的隐藏状态 h j \mathbf{h}_j hj进行计算得到 α 1 j \alpha_{1j} α1j

具体的计算方法有两种:
图片中提供的信息描述了注意力机制中权重 ( \alpha_{ij} ) 的计算方法以及它在模型中的作用。以下是核心内容的整理:

  • 使用神经网络计算权重
    图片中提供的信息描述了注意力机制中匹配得分 ( e_{ij} ) 的计算方法,这是计算注意力权重 ( \alpha_{ij} ) 的基础。以下是核心内容的整理:

    1. 匹配得分 e i j e_{ij} eij 的计算

      • 匹配得分 e i j e_{ij} eij 表示解码器在第 i − 1 i-1 i1 步的隐状态 s i − 1 \mathbf{s}_{i-1} si1 和编码器在第 j j j 步的隐向量 h j \mathbf{h}_j hj 之间的匹配程度。
    2. 使用双曲正切函数的计算方法

      • 匹配得分 e i j e_{ij} eij 可以通过以下公式计算:
        e i j = v T tanh ⁡ ( W s i − 1 + V h j ) e_{ij} = \mathbf{v}^T \tanh(W \mathbf{s}_{i-1} + V \mathbf{h}_j) eij=vTtanh(Wsi1+Vhj)
        其中:
      • v \mathbf{v} v 是可学习的权重向量。
      • W W W V V V 是可学习的权重矩阵。
      • tanh ⁡ \tanh tanh 是双曲正切激活函数,用于引入非线性。

    请注意,这里的 v T \mathbf{v}^T vT 表示向量 v \mathbf{v} v的转置。这种计算方法是一种常见的注意力机制实现,它通过神经网络的方式捕捉解码器和编码器状态之间的交互。

  • 使用二次型矩阵计算权重
    二次型矩阵计算方法是一种用于计算注意力权重 α i j \alpha_{ij} αij 的技术,通常出现在注意力机制中。这种方法的核心思想是通过一个二次型(一个向量和矩阵的乘积)来衡量解码器的前一状态 s i − 1 \mathbf{s}_{i-1} si1 与编码器的每个状态 h j \mathbf{h}_j hj 之间的关联度。下面是对这种方法的解读:
    二次型矩阵计算方法的公式如下:
    e i j = s i − 1 T W i − 1 , j h j e_{ij} = \mathbf{s}_{i-1}^T W_{i-1,j} \mathbf{h}_j eij=si1TWi1,jhj

    其中:

    • e i j e_{ij} eij 是解码器在第 i − 1 i-1 i1 步的隐状态 s i − 1 \mathbf{s}_{i-1} si1 和编码器在第 j j j 步的隐向量 h j \mathbf{h}_j hj 之间的匹配得分。
    • s i − 1 \mathbf{s}_{i-1} si1 是解码器在第 i − 1 i-1 i1 步的隐状态,通常是一个向量。
    • W i − 1 , j W_{i-1,j} Wi1,j 是一个可学习的权重矩阵,用于调整解码器和编码器状态之间的关系。这个矩阵可能依赖于解码器的步骤 i − 1 i-1 i1 和编码器的步骤 j j j
    • h j \mathbf{h}_j hj 是编码器在第 j j j 步的隐向量。

四、计算步骤

  1. 计算匹配得分:首先,使用权重矩阵 W i − 1 , j W_{i-1,j} Wi1,j 将编码器的隐向量 h j \mathbf{h}_j hj 转换为一个新的向量。

  2. 计算匹配得分:然后,将解码器的隐状态 s i − 1 \mathbf{s}_{i-1} si1 与转换后的编码器隐向量进行点积,得到匹配得分 e i j e_{ij} eij

  3. 计算权重:通过计算得到的匹配得分 e i j e_{ij} eij 通常需要通过Softmax函数进行归一化,以得到最终的注意力权重 α i j \alpha_{ij} αij

    α i j = exp ⁡ ( e i j ) ∑ k = 1 n exp ⁡ ( e i k ) \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k=1}^{n} \exp(e_{ik})} αij=k=1nexp(eik)exp(eij)

    这样,每个 α i j \alpha_{ij} αij 都在 0 到 1 之间,并且所有 α i j \alpha_{ij} αij 的和为 1。

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

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

相关文章

使用 Python2.7 抓取 systrace 文件

为了排查安卓终端系统底层问题&#xff0c;需要抓取终端的systrace文件分析&#xff0c;下面是操作步骤&#xff1a; 1、安装python 2.7 2、打开cmd执行命令安装python包&#xff1a;pip install pypiwin32 3、解压six-1.16.0.tar.gz&#xff0c;进入目录用命令安装six&#xf…

《UDS协议从入门到精通》系列——图解0x84:安全数据传输

《UDS协议从入门到精通》系列——图解0x84&#xff1a;安全数据传输 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 Tip&#x1f4cc;&#xff1a;本文描述中但凡涉及到其他UDS服务的&#xff0c;均提供专栏内文章链接跳转方式以便快速…

Stable Diffusion最强功能—— 图片背景完美替换

今天分享 Stable Diffusion 图片背景完美替换 功能&#xff0c;通过 Stable Diffusion 图生图重绘蒙版进行背景图的二次重绘。 在广告产品图、头像背景替换、图片后期处理等场景下用到的都很频繁。 整体步骤&#xff1a; 通过 removebg 插件实现图片主体蒙版的抠图 结合图生…

提升研发效能的67个技术点丨IDCF

在当今快速变化的市场环境中&#xff0c;企业要想保持竞争力&#xff0c;就必须不断提高研发效率。高效的研发不仅能够帮助企业快速响应市场需求&#xff0c;还能降低成本、提高产品质量。本文让我们一起来看一下&#xff0c;作为微软18年MVP的技术大咖徐磊老师&#xff0c;梳理…

HTML CSS 基础复习笔记 - 列表使用

用于自己复习 自定义列表 示例代码 <!DOCTYPE html> <html> <head><title>Definition List Example</title> </head> <body><h1>古诗</h1><dl><dt>静夜思</dt><dd>床前明月光&#xff0c;疑…

使用dot来画流程图

Dot是一种图形描述语言&#xff0c;属于Graphviz软件的一部分。Graphviz是一个用于可视化图形&#xff08;图表、网络图等&#xff09;的开源工具集。使用Dot语言&#xff0c;你可以创建并描述节点和边&#xff0c;从而生成图形。以下是如何使用Dot语言画图的基本步骤&#xff…

修复 OpenSSH 爆出极其严重的安全漏洞!

最近几天OpenSSH爆出了一个高危漏洞&#xff1a;CVE-2024-6387&#xff0c;影响到了很多的Linux服务器系统。明月第一时间给所有的代维客户服务器进行了排查和漏洞修复&#xff0c;因此耽搁了一些时间。直到今天才算抽出空来给大家分享一下。严格上来说这个漏洞的危险性还是极高…

Beyond Compare 解锁版下载及安装教程 (文件和文件夹比较工具)

前言 Beyond Compare 是一款功能强大的文件和文件夹比较工具。它支持文件夹比较、文件夹合并与同步、文本比较、表格比较、图片比较、16进制比较、注册表比较、版本比较等多种功能。通过 Beyond Compare&#xff0c;您可以轻松调查文件和文件夹之间的不同之处&#xff0c;并使…

MySQL篇-SQL优化实战-减少子查询

回顾 上一篇了解了分析SQL使用的explain&#xff0c;可以点击查看MySQL篇-SQL优化实战了解我在写sql的注意事项还有explain的说明&#xff0c;这次拿一段生产使用的sql进行优化说明。从14s优化到2.6s 待优化的SQL SELECT DISTINCTswpe.tag_number,hca.ACCOUNT_NAME customer…

ELFK简介

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

K8S学习教程(二):在 PetaExpress KubeSphere容器平台部署高可用 Redis 集群

前言 Redis 是在开发过程中经常用到的缓存中间件&#xff0c;为了考虑在生产环境中稳定性和高可用&#xff0c;Redis通常采用集群模式的部署方式。 在制定Redis集群的部署策略时&#xff0c;常规部署在虚拟机上的方式配置繁琐并且需要手动重启节点&#xff0c;相较之下&#…

java基础:方法

一、方法 1、Java方法是语句的集合&#xff0c;它们在一起执行一个功能。 方法是解决一类问题的步骤的有序集合方法包含于类或对象中方法在程序中被创建&#xff0c;在其他地方被引用 2、设计方法的原则&#xff1a;方法的本意是功能块&#xff0c;就是实现某个功能的语句块…

layui+jsp项目中实现table单元格嵌入下拉选择框功能,下拉选择框可手动输入内容或选择默认值,修改后数据正常回显。

需求 table列表中的数据实现下拉框修改数据&#xff0c;当默认的下拉框不符合要求时&#xff0c;可手动输入内容保存。内容修改后表格显示修改后的值同时表格不刷新。 实现 layui框架下拉框组件只能选择存在的数据&#xff0c;不支持将输入的内容显示在input中的功能&#x…

什么牌子的无线领夹麦克风好,一篇了解哪种领夹麦性价比高

随着5G技术的广泛应用&#xff0c;短视频平台迎来了前所未有的发展机遇&#xff0c;几乎每个地方都有人在记录生活&#xff0c;分享故事。在这样的背景下&#xff0c;户外直播和视频创作的需求急剧增长&#xff0c;然而&#xff0c;户外的复杂声场仅靠普通手机的录音功能实在难…

计算机网络之局域网

目录 1.局域网的基本概念 2.LAN的特性 3.局域网特点 4.拓扑结构 5.传输媒体的选择 6.传输媒体 7.传输技术 8.传输技术距离问题 9.LAN的逻辑结构 10.局域网工作原理 上篇文章内容&#xff1a;OSI七层体系结构 1.局域网的基本概念 局域网 是将分散在有限地 理范围内&…

Robust Test-Time Adaptation in Dynamic Scenarios--论文阅读

论文笔记 资料 1.代码地址 https://github.com/BIT-DA/RoTTA 2.论文地址 https://arxiv.org/abs/2303.13899 3.数据集地址 coming soon 1论文摘要的翻译 测试时间自适应(TTA)旨在使预先7训练的模型适用于仅具有未标记测试数据流的测试分布。大多数以前的TTA方法已经在…

SQL Server特性

一、创建表 在sql server中使用create table来创建新表。 create table Customers( id int primary key identity(1,1), name varchar(5) ) 该表名为Customers其中包含了2个字段&#xff0c;分别为id&#xff08;主键&#xff09;以及name。 1、数据类型 整数类型&#xff…

NAT地址转换实验,实验超简单

实验拓扑 实验目的 将内网区域&#xff08;灰色区域&#xff09;的地址转换为172.16.1.0 实验过程 配置静态NAT&#xff08;基于接口的静态NAT&#xff09; R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname R1 [R1]un in en I…

探索 Apache Paimon 在阿里智能引擎的应用场景

摘要&#xff1a;本文整理自Apache Yarn && Flink Contributor&#xff0c;阿里巴巴智能引擎事业部技术专家王伟骏&#xff08;鸿历&#xff09;老师在 5月16日 Streaming Lakehouse Meetup Online 上的分享。内容主要分为以下三个部分&#xff1a; 一、 阿里智能引擎…

流程表单设计器开源优势多 助力实现流程化!

实现流程化办公是很多职场企业的发展目标。应用什么样的软件可以实现这一目的&#xff1f;低代码技术平台、流程表单设计器开源的优势特点多&#xff0c;在推动企业降本增效、流程化办公的过程中作用明显&#xff0c;是理想的软件平台。那么&#xff0c;流程表单设计器开源的优…