浅析NLP中的Attention技术

article/2025/10/14 23:58:09

Attention(注意力机制)在NLP、图像领域被广泛采用,其显而易见的优点包括:
(1)从context中捕捉关键信息;
(2)良好的可视性和可解释性。

我们常用QKV模型来理解Attention,Q指query,K指key,V指value。其整个流程包括三个步骤(如下图):
(1)Attention Score。通过Q和K的计算,得到各元素的attention score;
(2)Alignment。将attention score进行对齐/归一化;
(3)Concatenate。以归一化的attention score为权重,V为值进行加权平均。

在这里插入图片描述
所以,我们可以将广义的Attention技术简单理解为加权平均,至于如何计算权重,对什么进行加权计算,则取决于具体的应用场景和计算策略。

下面介绍下NLP中典型的Attention技术应用。

(1)Bahdanau/Additive Attention

2015年 ICLR 《Neural machine translation by jointly learning to align and translate》首次在机器翻译Seq2Seq模型中提出了attention的概念,用于目标语言与源语言token间的对齐,让模型自动学习到目标语言sequence中应当分别关注源语言的什么地方,从而清晰的解释了模型到底学习了什么。

该文采用了Bahdanau/Additive Attention的注意力算法:

  • 计算Attention Score,即根据某个时间步上decoder的hidden向量与encoder的各hidden向量的FC计算,找到当前翻译时,需要从输入知道的重点信息:

e i j = a ( h j e n , h i d e ) = v a T tanh ⁡ ( W a ∗ [ h j e n ; h i d e ] ) e_{ij}=a(\boldsymbol{h_j^{en}}, \boldsymbol{h_i^{de}})=\boldsymbol {v_a^T}\tanh( \boldsymbol {W_a}*[\boldsymbol{h_j^{en}};\boldsymbol{h_i^{de}}]) eij=a(hjen,hide)=vaTtanh(Wa[hjen;hide])

  • 计算Alignment后的归一化值:
    α i j = e i j ∑ j e i k \alpha_{ij}=\frac{e_{ij}}{\sum\limits_je_{ik}} αij=jeikeij
  • Concatenate得到当前时间步的加权context vector:
    c i = ∑ j α i j h j e n \boldsymbol {c_i}=\sum\limits_j \alpha_{ij}\boldsymbol {h_j^{en}} ci=jαijhjen

在后续decoder部分的迭代计算中,考虑上述的context vector:
y i d e = f ( y i − 1 d e , h i d e , c i d e ) ; h i + 1 d e = g ( y i d e , h i d e ) \boldsymbol {y_i^{de}}=f(\boldsymbol{y_{i-1}^{de}},\boldsymbol{h_i^{de}},\boldsymbol{c_i^{de}}) ;\boldsymbol {h_{i+1}^{de}}=g(\boldsymbol{y_{i}^{de}},\boldsymbol{h_i^{de}}) yide=f(yi1de,hide,cide);hi+1de=g(yide,hide)

(2)Luong/Multiplicative Attention

2015年 EMNLP 《Effective Approaches to Attention-based Neural Machine Translation》在上述Bahdanau/Additive Attention的基础上引入了各种变形,其中尤其以Luong/Multiplicative Attention被广为采用,其区别在于采用了矩阵乘法或向量的内积的形式直接计算,从而计算效率更高:
e i j = h j e n ∗ h i d e ; e i j = h j e n ∗ W ∗ h i d e e_{ij}=\boldsymbol{h_j^{en}}*\boldsymbol{h_i^{de}};\quad e_{ij}=\boldsymbol{h_j^{en}}*W*\boldsymbol{h_i^{de}} eij=hjenhide;eij=hjenWhide此外还可以采用多层感知机MLP的形式计算Attention Score:
e i j = a ( h j e n , h i d e ) = σ ( w 2 T tanh ⁡ ( W 1 ∗ [ h j e n ; h i d e ] + b 1 ) + b 2 ) e_{ij}=a(\boldsymbol{h_j^{en}}, \boldsymbol{h_i^{de}})=\sigma(\boldsymbol {w_2^T}\tanh( \boldsymbol {W_1}*[\boldsymbol{h_j^{en}};\boldsymbol{h_i^{de}}]+\boldsymbol{b_1})+b_2) eij=a(hjen,hide)=σ(w2Ttanh(W1[hjen;hide]+b1)+b2)

值的注意的是:虽然attention的理念脱胎于机器翻译Seq2Seq架构,但完全可以推广到其它场景,用于提取背景语义中的有价值信息。

(3)Soft&Hard Attention

论文《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》提出了Soft&Hard Attention的概念。

Attention的KQV视角可以理解为一个软寻址的过程,即对寻址结果进行加权求和(avg-sum)。自然而然的,我们可以通过硬寻址的方式处理attention结果,即直接取attention score最大对应的context vector。

采用Hard Attention的方式得到的结果往往更加生硬,忽略了其它vector对的影响,从而倾向于过拟合,所以实践中更多的采用的soft attention的计算思路。

(4)Local&Global Attention

在论文《Effective Approaches to Attention-based Neural Machine Translation》中又提出了Local&Global Attention的概念。顾名思义,即attention作用的上下文window大小,可以是全局性的,也可以是局部的。

Local Attention的初衷很简单:进一步缩小关注的范围,从而减少不必要的噪声。但问题在于如何选择合适的window size?文中提出了local-m和local-p两套策略,但这种复杂化的计算本身就引入了假设和计算复杂度,效果也并不显著,因此在实践中并未被推广。

(5)Scaled Multi-head Self-attention

如果说前面各种attention玩法是传统Pipeline上下文信息提取的优化,那么提出Transformer的《Attention is All You Need》中则将Attention技术发扬广大,将其构造成一种信息抽取器,兼具CNN并行化和RNN长距离依赖的优势,为后续GPT、Bert和XLNet等预训练模型的诞生奠定了基础。

Transformer的具体细节本文不做解释,下面仅仅介绍下其中的核心部件:Scaled Multi-head Self-attention。

从名称中不难知道,其由Self-attention、scaled和multi-head三个组成部分:

a) Self-attention

前文介绍的各类attention均是decoder对encoder序列的attention过程,而 Self-attention则直接作用在encoder序列或decoder序列内部,从而获得序列内部各元素间的相关性。

在具体实现中,通过引入Q、K、V参数矩阵,将每个token转换为对应的query、key和value向量,接着就按照前文计算流程进行计算。
在这里插入图片描述
b) scaled

文章在实践中发现,直接计算得到的query、key和value向量在经过Multiplicative/dot Attention操作后效果并不如Additive Attention,作者们认为在较大的向量维度前提下,内积score结果过大,从而落入softmax的饱和区域,使得归一化结果过于hard,而BP梯度过小。所以在得到内积结果,通过除以 d k \sqrt{d_k} dk 进行缩放,从而在利用Multiplicative/dot Attention矩阵计算优势的同时,保证了attention的效果。

c) multi-head

文章在每一层的self-attention计算中,采用了多组的Q、K、V参数矩阵。如果说仅用一组Q、K、V得到的是attention结果的平均值,那么多组Q、K、V就扮演了类似filters的功能,可以在不同的sub space中提取不同的特征,从而使得特征提取结果更加丰富。

(6)Multi-dimensional Attention

Multi-dimensional Attention和multi-head的目的一样,即通过多组的attention计算使得结果的信息更加丰富,其区别在于其直接通过一个3-D的weight张量进行求解。

(7)Hierarchical Attention

Hierarchical Attention是指在使用Attention时,通过层次的反复使用,完成对不同粒度信息重要性的提取,比如token-sentence-doc,可以通过对token进行attention计算完成对sentence的编码,然后再对sentence进行attention实现对整个doc的编码,其代表作为《Hierarchical attention networks for document classification》。

总结:Attention可以从复杂信息中有效提取重要信息,具备良好的计算效果和可解释性,已经成为NLP各任务和模型广泛使用的标准模块。

【Reference】

  1. 遍地开花的 Attention ,你真的懂吗?
  2. An Introductory Survey on Attention Mechanisms in NLP Problems

http://chatgpt.dhexx.cn/article/qEO8Chk3.shtml

相关文章

Attention 机制

文章目录 Attention 的本质是什么Attention 的3大优点Attention 的原理Attention 的 N 种类型 转载来源:https://easyai.tech/ai-definition/attention/ Attention 正在被越来越广泛的得到应用。尤其是 BERT 火爆了之后。 Attention 到底有什么特别之处&#xff1f…

详解Transformer中Self-Attention以及Multi-Head Attention

原文名称:Attention Is All You Need 原文链接:https://arxiv.org/abs/1706.03762 如果不想看文章的可以看下我在b站上录的视频:https://b23.tv/gucpvt 最近Transformer在CV领域很火,Transformer是2017年Google在Computation an…

Attention 一综述

近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中。随着注意力机制的深入研究,各式各样的attention被研究者们提出,如单个、多个、交互式等等。去年6月,google机器翻译…

从Attention到Bert——1 Attention解读

下一篇从Attention到Bert——2 transformer解读 文章目录 1 Attention的发展历史2015-2017年 2 Attention的原理3 Multi-Head Attention4 Self-Attention为什么需要self-attention什么是self-attention 5 Position Embedding 最早,attention诞生于CV领域&#xff0…

Attention UNet

Attention UNet论文解析 - 知乎Attention UNet论文地址: https://arxiv.org/pdf/1804.03999.pdf 代码地址: https://github.com/ozan-oktay/Attention-Gated-NetworksAttention UNet在UNet中引入注意力机制,在对编码器每个分辨率上的特征与解…

attention

文章目录 Attention基本的Attention原理参考 Hierarchical Attention原理实践参考 Self Attentionother Attention Attention Attention是一种机制,可以应用到许多不同的模型中,像CNN、RNN、seq2seq等。Attention通过权重给模型赋予了区分辨别的能力&am…

史上最小白之Attention详解

1.前言 在自然语言处理领域,近几年最火的是什么?是BERT!谷歌团队2018提出的用于生成词向量的BERT算法在NLP的11项任务中取得了非常出色的效果,堪称2018年深度学习领域最振奋人心的消息。而BERT算法又是基于Transformer&#xff0…

一文看懂 Attention(本质原理+3大优点+5大类型)

Attention 正在被越来越广泛的得到应用。尤其是 BERT 火爆了之后。 Attention 到底有什么特别之处?他的原理和本质是什么?Attention都有哪些类型?本文将详细讲解Attention的方方面面。 Attention 的本质是什么 Attention(注意力&a…

史上最直白之Attention详解(原理+代码)

目录 为什么要了解Attention机制Attention 的直观理解图解深度学习中的Attention机制总结 为什么要了解Attention机制 在自然语言处理领域,近几年最火的是什么?是BERT!谷歌团队2018提出的用于生成词向量的BERT算法在NLP的11项任务中取得了非常…

关于Attention的超详细讲解

文章目录 一、动物的视觉注意力二、快速理解Attention思想三、从Encoder-Decoder框架中理解为什么要有Attention机制四、Attention思想步骤五、Self-Attention5.1 Self-Attention的计算步骤5.2 根据代码进一步理解Q、K、V5.3 再来一个例子理解 六、缩放点积中为什么要除以根号d…

浅聊古代————汉朝

文章目录 西汉西汉建立:汉高祖刘邦西汉灭亡:王莽篡汉新朝建立:王莽篡汉改新新朝灭亡:绿林赤眉起义 东汉东汉建立:起义军刘秀东汉灭亡:曹丕篡汉 西汉 西汉建立:汉高祖刘邦 刘邦被项羽封为汉王。…

XNU简介

XNU内核比较庞大复杂,因此这里只是进行主要内容的介绍 XNU据说是一个无限递归的缩写:XNU’s Not UNIX XNU内核是Mac和iOS的核心,有三个主要部分组成的一个分层体系结构;内核XNU是Darwin的核心,也是整个OS X的核心。 …

函数

1.编写函数,完成下面的程序,将一个字符串中的字母排序后输出。输出要求:字母从小到大排序(包括大小写)后的字符串。例如: 输入:Hello World! 输出:!HWdellloor 程序中的必要代码为: main() …

HangOver

How far can you make a stack of cards overhang a table? If you have one card, you can create a maximum overhang of half a card length. (We’re assuming that the cards must be perpendicular to the table.) With two cards you can make the top card overhang t…

❤️对比PyWinAuto和uiautomation实现微信联系人自动采集❤️

大家好,我是小小明。昨天我在《UI自动化工具轻松实现微信消息的自动收发和朋友圈爬取》一文中演示了UIAutomation的三个使用示例,链接:https://blog.csdn.net/as604049322/article/details/119899542 由于昨天对UIAutomation的API了解还不够全面,个别代码优化空间还较大。…

适用于winform程序的UI自动化实现(python+uiautomation)

适用于winform程序的UI自动化实现(pythonuiautomation) 一、使用的工具和库 定位工具:inspect(提取码:kvwx)、UISpy(提取码:ab0e) python库使用:subprocess(内置库&…