深度学习中 的 Attention机制

深度学习中 的 Attention机制注意力机制即 Attentionmec 在序列学习任务上具有巨大的提升作用 在编解码器框架内 通过在编码段加入 Attention 模型 对源数据序列进行数据加权变换 或者在解码端引入 Attention 模型 对目标数据进行加权变化 可以有效提高序列对序列的自然方式下的系统表现 Attention Attention 模型的基本表述可以这样理解成 当我们人在看一样东西的时候

注意力机制即 Attention mechanism在序列学习任务上具有巨大的提升作用,在编解码器框架内,通过在编码段加入Attention模型,对源数据序列进行数据加权变换,或者在解码端引入Attention 模型,对目标数据进行加权变化,可以有效提高序列对序列的自然方式下的系统表现。

Attention:

为什么要加入Attention:

  1. 当输入序列非常长时,模型难以学到合理的向量表示
  2. 序列输入时,随着序列的不断增长,原始根据时间步的方式的表现越来越差,这是由于原始的这种时间步模型设计的结构有缺陷,即所有的上下文输入信息都被限制到固定长度,整个模型的能力都同样收到限制,我们暂且把这种原始的模型称为简单的编解码器模型。
  3. 编解码器的结构无法解释,也就导致了其无法设计。
长输入序列带来的问题:

这个问题限制了模型的性能,尤其是当输入序列比较长时,模型的性能会变得很差(在文本翻译任务上表现为待翻译的原始文本长度过长时翻译质量较差)。

“一个潜在的问题是,采用编码器-解码器结构的神经网络模型需要将输入序列中的必要信息表示为一个固定长度的向量,而当输入序列很长时则难以保留全部的必要信息(因为太多),尤其是当输入序列的长度比训练数据集中的更长时。”

— Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015

使用Attention机制

Attention机制的基本思想是:打破了传统编码器-解码器结构在编解码时都依赖于内部一个固定长度向量的限制。
Attention机制的实现是 通过保留LSTM编码器对输入序列的中间输出结果,然后训练一个模型来对这些输入进行选择性的学习并且在模型输出时将输出序列与之进行关联。

换一个角度而言,输出序列中的每一项的生成概率取决于在输入序列中选择了哪些项。

Attention-based Model 其实就是一个相似性的度量,当前的输入与目标状态约相似,那么在当前的输入的权重就会越大。就是在原有的model上加入了Attention的思想。

没有attention机制的encoder-decoder结构通常把encoder的最后一个状态作为decoder的输入(可能作为初始化,也可能作为每一时刻的输入),但是encoder的state毕竟是有限的,存储不了太多的信息,对于decoder过程,每一个步骤都和之前的输入都没有关系了,只与这个传入的state有关。attention机制的引入之后,decoder根据时刻的不同,让每一时刻的输入都有所不同。

参考博客 浅谈Attention-based Model【原理篇】,对Attention的公式梳理一下。

对于“match”, 理论上任何可以计算两个向量的相似度都可以,比如:

  • 余弦相似度
  • 一个简单的 神经网络,输入为 h h w ” role=”presentation” style=”position: relative;”> w ,输出为 α α
  • 或者矩阵变换 α = h T W z ” role=”presentation” style=”position: relative;”> α = h T W z (Multiplicative attention,Luong et al., 2015)

算出 C0 C 0 之后,把这个向量作为 RNN 的输入。然后第一个时间点的输出的编码 z1 z 1 c0 c 0 和初始状态 z0 z 0 共同决定。我们计算得到 z1 z 1 之后,替换之前的 z0 z 0 再和每一个输入的encoder的vector计算匹配度,然后softmax,计算向量加权,作为第二时刻的输入……如此循环直至结束。
这里写图片描述

  • uti=vTtanh(W1hi+W2Zt) u i t = v T t a n h ( W 1 h i + W 2 Z t )
  • αti=softmax(uti) α i t = s o f t m a x ( u i t )
  • ct=iαithi c t = ∑ i α t i h i

得到 ct c t 之后,就可以作为第t时刻RNN的input,而 Zt Z t 可以作为 t t 时刻RNN的隐状态的输入,这样就能够得到新的隐状态 Z t + 1 ” role=”presentation” style=”position: relative;”> Z t + 1 ,如此循环,直到遇到停止符为止。


一些例子:

— Dzmitry Bahdanau, et al., Neural machine translation by jointly
learning to align and translate,
2015

虽然模型使用attention机制之后会增加计算量,但是性能水平能够得到提升。另外,使用attention机制便于理解在模型输出过程中输入序列中的信息是如何影响最后生成序列的。这有助于我们更好地理解模型的内部运作机制以及对一些特定的输入-输出进行debug。

大型图片带来的问题:

这种启发式方法某种程度上也可以认为是考虑了attention,但在这篇博文中,这种方法并不认为是基于attention机制的。

基于attention机制的相关论文如下:


  1. Attention在文本翻译任务上的应用
    给定一个法语的句子作为输入序列,需要输出翻译为英语的句子。Attention机制被用在输出输出序列中的每个词时会专注考虑输入序列中的一些被认为比较重要的词。
  2. Attention在图片描述上的应用
    与之前启发式方法不同的是,基于序列生成的attention机制可以应用在计算机视觉相关的任务上,帮助卷积神经网络重点关注图片的一些局部信息来生成相应的序列,典型的任务就是对一张图片进行文本描述。
    给定一张图片作为输入,输出对应的英文文本描述。Attention机制被用在输出输出序列的每个词时会专注考虑图片中不同的局部信息。

  3. Attention在语义蕴涵 (Entailment) 中的应用
    给定一个用英文描述的前提和假设作为输入,输出假设与前提是否矛盾、是否相关或者是否成立。
    Attention机制被用于关联假设和前提描述文本之间词与词的关系。
    Reasoning about Entailment with Neural Attention, 2016:在模型中加入了attention机制来找出假设和前提文本中词/短语之间的对齐关系。


  4. Attention在语音识别上的应用
    给定一个英文的语音片段作为输入,输出对应的音素序列。
    Attention机制被用于对输出序列的每个音素和输入语音序列中一些特定帧进行关联。

  5. Attention在文本摘要上的应用
    给定一篇英文文章作为输入序列,输出一个对应的摘要序列。
    Attention机制被用于关联输出摘要中的每个词和输入中的一些特定词。

… 在最近神经网络翻译模型的发展基础之上,提出了一个用于生成摘要任务的基于attention的神经网络模型。通过将这个概率模型与一个生成式方法相结合来生成出准确的摘要。

— A Neural Attention Model for Abstractive Sentence Summarization, 2015

具体而言,采用传统编码器-解码器结构的LSTM/RNN模型存在一个问题:不论输入长短都将其编码成一个固定长度的向量表示,这使模型对于长输入序列的学习效果很差(解码效果很差)。而attention机制则克服了上述问题,原理是在模型输出时会选择性地专注考虑输入中的对应相关的信息。使用attention机制的方法被广泛应用在各种序列预测任务上,包括文本翻译、语音识别等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209871.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:16
下一篇 2026年3月19日 上午8:17


相关推荐

  • ANDROID自己定义视图——onLayout源代码 流程 思路具体解释[通俗易懂]

    ANDROID自己定义视图——onLayout源代码 流程 思路具体解释

    2022年1月27日
    44
  • linux系统查看网卡命令_linux如何配置网卡

    linux系统查看网卡命令_linux如何配置网卡rhel内核版本号信息:[root@hvrhub~]#uname-aLinuxhvrhub2.6.18-308.el5#1SMPFriJan2717:17:51EST2012x86_64x86_64x86_64GNU/Linux查看网卡的驱动。制造商等信息:[root@hvrhub~]#kudzu–probe–class=network-class:…

    2022年10月19日
    4
  • DSL是什么?

    DSL是什么?DSL 是目前世界上发展最快的高速宽带互联网接入技术 其全称是 DigitalSubsc 数字用户环路 它的历史要追溯到 1988 年 贝尔实验室一位工程师设计了一种方法可以让数字信号加载到电话线路未使用频段 这就实现了不影响话音服务的前提下在普通电话线上提供数据通信 但是贝尔的管理层对这个并不热心 因为如果用户安装两条线路会带来更多的利润 这一状况直到 1990 年代晚期有线

    2026年3月18日
    2
  • linux抓包查看请求接口源ip,linux 抓包「建议收藏」

    linux抓包查看请求接口源ip,linux 抓包「建议收藏」tcpdumphost172.16.29.40andport4600-X-s500tcpdump采用命令行方式,它的命令格式为:tcpdump[-adeflnNOpqStvx][-c数量][-F文件名][-i网络接口][-r文件名][-ssnaplen][-T类型][-w文件名][表达式]1.tcpdump的选项介绍-a…

    2022年10月14日
    5
  • 旅游管理系统

    旅游管理系统旅游管理系统介绍要求:ER图代码介绍高级数据库布置的实验作业要求:题目:设计与实现一个旅游预订系统,该系统涉及的基本信息有航班,出租车,宾馆和客户等数据信息。实体和其特征属性举例如下:FLIGHTS(StringflightNum,intprice,intnumSeats,intnumAvail,StringFromCity,StringArivCity);H…

    2022年6月14日
    27
  • 华为QoS中CBQ队列详解

    华为QoS中CBQ队列详解今天继续给大家介绍 QoS 本文主要介绍华为系列路由交换设备中 QoS 实现技术 CBQ 队列的特点和原理 阅读本文 您需要有比较深厚的 QoS 基础知识理解 如果您对此还存在疑惑 欢迎查阅我博客中的其他文章 相信您一定会有收获 相关链接 浅谈 QoS QoS 概述 QoS 基本原理 网络层 QoS 分类和标记字段详解 QoS 中队列简介 QoS 队列调度技术详解 QoS 中拥塞避免机制详解 WRED 技术详解一 CBQ 队列简介 CBQ Class BasedQueue 基于类的队列 是 QoS 队列实现的方式之一 CBQ 首

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号