attention注意力机制学习

本文深入浅出地介绍了Attention机制的背景、类型及其在序列到序列(Seq2Seq)模型中的应用。通过对比传统的encoder-decoder结构,阐述了Attention如何改善长序列处理的问题,并详细解析了其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【参考资料】:

  1. 目前主流的attention方法都有哪些? - JayLou娄杰的回答 - 知乎

  2. 目前主流的attention方法都有哪些? - 张戎的回答 - 知乎

  3. Attention机制解读 - 高峰OUC的文章 - 知乎

  4. Transformer详解(一)——Attention机制详解 - 被包养的程序猿丶的文章 - 知乎

  5. 简说Seq2Seq原理及实现 - 陈猛的文章 - 知乎

  6. Attention机制简单总结 - 邱震宇的文章 - 知乎

注:本文的内容均来自上面所罗列的参考资料,只是在学习的过程中对所学的内容进行整理,感谢上面的各位大佬,让我这个nlp小白对attention有了一定的了解。


Attention机制的血缘关系:

encoder-decoder:

是一种神经网络的结构,常见的encoder和decoder可以是RNN、LSTM、GRU这些能够处理序列数据的模型。

在这里插入图片描述
seq2seq

任务:输入一个序列,输出一个序列。

主要部分:encoder和decoder,encoder首先处理输入序列中的每一个item(需要做embeeding处理),并且将其转换成一个向量(context向量),然后encoder将context向量传递给decoder,decoder根据context向量一个接一个的生成输出序列中的每个item。

在这里插入图片描述

Attention:

从上面的encoder和decoder结构seq2seq模型可以发现,encoder只把最后一个hidden state作为context向量喂给decoder,所以这种结构在处理长句子翻译问题的时候表现并不好。为解决这个问题,Attention应运而生,Attention使得模型能够关注输入序列中与目标相关的部分。

在这里插入图片描述

1. 什么要引入Attention机制?

循环神经网络已经的很强的记忆能力,但想要记忆长距离的信息需要更复杂的模型,需要更强大的计算能力,而往往在很多场合计算能力是一个瓶颈,使得不能一味增加模型的复杂度来提高模型效果。

2. Attention机制的理解

引入人脑处理信息过载的方式,只选择一些关键信息进行处理,来提高神经网络的效率。在图像识别中人的面部、文本中的标题以及文章首句等位置就是关键信息。

3. Attention机制有哪些?

按照认知神经学中的注意力,可以分为两类:

  • 聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意--------是指有预定目的、依赖任务、主动有意识地聚焦于某一对象的注意力。
  • 显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意—基于显著性的注意力是由外界刺激驱动的注意力,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看做是自下而上的基于显著性的注意力机制。

在人工神经网络中,注意力机制一般就特指聚焦式注意力。

4. Attention机制的原理

在这里插入图片描述

上面的图是QKV模型,假设输入为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 q q q,Memory 中以( k k k, v v v)形式存储需要的上下文。感觉在 Q&A 任务中,这种设置比较合理,transformer 是采用的这种建模方式。 k k k 是 question, v v v是 answer, q q q是新来的 question,看看历史 memory 中 k k k 更相似,然后依葫芦画瓢,根据相似 v v v,合成当前问题的答案。

decoder中的信息定义为一个Query,encoder中包含了所有可能出现的词语,我们将其作为一个字典,该字典的key为所有encoder的序列信息。n个单词相当于当前字典中有n条记录,而字典的value通常也是所有encoder的序列信息。

注意力机制可以分为三步:

  • step1-信息输入:

    用X = [x1, · · · , xN ]表示N 个输入信息
  • step2-计算注意力分布α:

    Key=Value=X,则可以给出注意力分布

    α i = s o f t m a x ( s ( k e y i , q ) ) = s o f t m a x ( s ( X i , q ) ) α_i = softmax(s(key_i,q)) = softmax(s(X_i,q)) αi=softmax(s(keyi,q))=softmax(s(Xi,q))

我们将 α i \alpha_i αi称之为注意力分布(概率分布), s ( X i , q ) s(X_i,q) s(Xi,q)为注意力打分机制,有几种打分机制:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2RoGg8Yi-1604650084818)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20201106113934987.png)]

  • step3-根据注意力分布α来计算输入信息的加权平均:

    注意力分布 α i \alpha_i αi可以解释为在上下文查询q时,第i个信息受关注的程度,采用一种“软性”的信息选择机制对输入信息X进行编码为:

    a t t ( q , X ) = ∑ i = 1 N α i X i att(q,X) =\sum_{i=1}^{N}\alpha_iX_i att(q,X)=i=1NαiXi

这种编码方式为软性注意力机制(soft Attention),软性注意力机制有两种:普通模式(Key=Value=X)和键值对模式(Key!= Value )
[外链图片转存中...(img-2q9iKpt2-1604650084832)]


关于Attention的更多内容可以在开头的参考资料中进行查阅学习。

### 关于注意力机制Attention)在深度学习中的应用 #### 注意力机制概述 注意力机制是一种模拟人类视觉和认知过程中分配关注能力的技术。这一技术允许模型聚焦于输入的不同部分,从而提高处理复杂任务的能力[^1]。 #### 序列模型中的实现方式 在序列建模中,注意力机制能够帮助网络更好地理解上下文关系。具体来说,当处理时间序列或自然语言处理任务时,注意力模块可以动态调整不同位置的重要性权重,使得重要信息得到更多重视。例如,在机器翻译场景下,源语句的某些单词可能对于目标语句特定词的选择更为关键;此时,通过引入注意力机制就可以让模型自动学会这些关联规律[^2]。 #### 多模态数据融合策略 针对包含多种类型的数据集(如图像、文本或其他形式),采用基于注意力的方法来增强各单一模式间的信息交互成为一种有效手段。文献指出了一种创新性的架构设计:先分别用适合各自特性的子网提取特征——基因与临床资料经由全连接层变换,影像则借助卷积操作获取表征向量;随后进入自注意力单元强化内在联系;再经过双向跨模态注意层进一步挖掘异质资源之间的潜在依赖性,最终汇总至顶层完成预测输出[^3]。 #### 扩展到多实例环境下的变体 传统监督框架通常假设单一样本对应唯一类别标记,但在实际应用场景里有时会遇到更复杂的标注情况—即一组对象共享同一个宏观属性描述而非个体层面的具体定义。为此提出的解决方案之一便是所谓的“基于注意力的深层多实例学习”,它旨在从未精细划分的目标集合内发掘出有助于区分正负类别的局部特性,并据此构建更具鲁棒性和泛化性能的学习器[^4]。 ```python import torch.nn as nn class AttentionLayer(nn.Module): def __init__(self, input_dim, output_dim): super(AttentionLayer, self).__init__() self.linear = nn.Linear(input_dim, output_dim) def forward(self, x): # 计算注意力分数 scores = F.softmax(self.linear(x), dim=1) # 加权求和 context_vector = (scores.unsqueeze(-1) * x).sum(dim=1) return context_vector ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值