attention简单总结(初版)

本文概述了注意力机制的基本概念,包括其在深度学习中的作用,以及Encoder-Decoder框架的应用。重点介绍了Self-attention、HardAttention和LocalAttention的不同类型,以及它们在文本处理中的运用。文章还讨论了注意力机制的层次结构和与自注意力机制的区别,适合初学者理解注意力机制的核心原理。

引言

  • 本文将总结归纳个人搜集关于注意力机制的一些简单通俗理解,在失业期间作为个人充电的起始,本文不包含众多注意力机制以及其组合的变体,只为方便理解后续的一些算法做铺垫。
  • 本文首先介绍注意力机制的通俗理解和背景
  • 然后介绍目前注意力机制的主要使用场景
  • 介绍注意力机制的结构原理和数学原理
  • 介绍attention根据不同的划分条件分类介绍类别
  • 注意力机制和自注意力机制的区别

注意力机制通俗理解

  • 如上图chatgpt回答,通俗来讲注意力机制就是模仿生物将注意力集中到一部分事物而忽略另外的一些事物,比如下图的这张图片当我们第一眼看过去兔子大概率是关注的重点其次才是后面的景色。
  • 在深度学习领域,训练模型往往需要大量的数据但是在某特定的情境下只有少部分数据是极为重要的,此时就需要attention机制发光发热了。
  • 注意力机制产生的原因
    • 计算能力的限制,当要记住很多"历史信息"的时候模型就会变得越来越复杂,但是计算能力不一定能刚好满足
    • 优化算法的限制:LSTM只能在一定程度缓解RNN中的长距离依赖关系,且记忆能力并不高,个人理解是觉得记忆的不够精准有点碰运气的成分没有针对性。

Encoder-Decoder框架(编码器-解码器)

  • 目前大多数注意力模型是存在于Encoder-Decoder框架中的,但是注意力模型其实可以看作是一种通用的思想,其本身是不依赖于特定框架的,个人理解其更像是数学中的一条定理,我们拿着这个定理去解决数学问题。
    • 以下为文本处理领域常用的E-D框架

  • 对于上图公式的抽象理解 https://zhuanlan.zhihu.com/p/37601161

seq2seq(序列到序列)

  • 关于seq2seq模型此处做一个简单的介绍,方便后面举例(具体s2s模型会专门写文章总结),seq2seq其实就是对上述的Encoder-Decoder框架的具体实现和应用
  • 参考2
  • RNN LSTM
  • 注1:其中不管是左边的编码器还是右边的解码器,所用模型可以是CNN/RNN/BiRNN/GRU/LSTM等根据自己场景需要选择(参考上面ED部分的最后一个图的说明)
  • 下图中红色文字为个人认为比较LSTM更好是因为在LSTM里遗忘门与下图的文字解释更搭配,RNN虽然先提出的隐状态的概念但是相对理解不够形象,酌情参考

attention结构

  • 脱离ED框架的attention结构和引入了注意力模型的ED框架

  • 实例说明(参考3)
  • attention机制的具体计算分为两大过程
    • 根据Query和Key计算权重系数)(又细分为两个部分)
      • 根据Query和Key计算两者的相似度或者相关性
      • 对上面阶段的原始分值进行归一化处理
    • 根据权重系数对Value进行加权求和
  • 关于第一阶段可以用不同的函数和计算机制来计算其相关性和相似性

  • 第二阶段

关于attention的变体类型划分(下图仅供参考)

计算区域分类
  • 1 Self-attention自注意力机制对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式(也可以叫Global Attention)。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。
  • 2 Hard Attention,这种方式是直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。(或者使用gumbel-softmax之类的,解决某些情况下不可导的情况)
  • 3 Local Attention,这种方式其实是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。
所用信息分类
  • 关于信息,如果我们需要对一段原文计算attention,是包含外部信息和内部信息的,内部信息就是原文本身的信息,外部信息指的是除了原文以外的额外信息
  • 1 General Attention,这种方式利用到了外部信息,常用于需要构建两段文本关系的任务,query一般包含了额外信息,根据外部query对原文进行对齐。
    • 如:构建问题和文章的关联,将问题首先转化成一个向量并将其与文章的所有词向量拼接起来,输入到如LSTM中进行建模, 此时文章所有的词向量共享同一个问题向量(此时内部信息还是原文),如果想要同一层级下文章词向量都有一个不同的问题向量,并计算词层级下词向量和问题的attention值,问题属于原文,文章词向量属于外部信息(个人对下面图片中作者例子的理解,仅供参考)
  • 2 Local Attention,这种方式只使用内部信息,key和value以及query只和输入原文有关,在self attention中,key=value=query。既然没有外部信息,那么在原文中的每个词可以跟该句子中的所有词进行Attention计算,相当于寻找原文内部的关系。
    • 同上面例子,就是对问题的词进行向量化,然后每个词与其他词计算attention,并不引入文章的信息,也可以单独用文章信息(同上的个人理解)
结构层次
  • 单层Attention,这是比较普遍的做法,用一个query对一段原文进行一次attention(上图中最简单的结构)
  • 多层Attention,一般用于文本具有层次关系的模型,假设我们把一个document划分成多个句子,在第一层,我们分别对每个句子使用attention计算出一个句向量(也就是单层attention);在第二层,我们对所有句向量再做attention计算出一个文档向量(也是一个单层attention),最后再用这个文档向量去做任务(个人感觉可能gpt的回答)。
  • 多头attention
模型方面


task分析
  • 该部分为参考文章作者的心得体会,还有部分内容请看原文链接(已经快原文摘抄了…)

自注意力机制与注意力机制区别

其他参考文章

结尾

  • 由于个人对注意力机制只是去学习没有业务实践所以还是停留在表面,本文更像是个人学习途中对参考文章的拆分总结,所以仅供参考,有错误的地方欢迎指正
  • 代码部分由于组合比较多,个人决定今后有业务需要会上传相关实现代码,参考资料中部分是包含代码的,有需要的可以自行检验。
  • 祝自己找工作顺利!
### 深度学习中的 Route Attention 技术总结 在深度学习领域,注意力机制(Attention Mechanism)已经成为处理序列数据的重要技术,尤其在自然语言处理(NLP)、计算机视觉(CV)和强化学习(RL)中得到了广泛应用。"Route Attention" 这一术语通常用于描述在路径选择、路由规划等任务中使用注意力机制的模型架构。这类技术的核心思想是通过动态地关注输入序列中的关键部分,以提高模型对路径选择任务的理解和决策能力。 #### 核心概念 Route Attention 的核心在于其对路径信息的建模方式。不同于传统的固定权重分配方法,注意力机制允许模型在处理每一步决策时,根据当前状态动态地关注输入序列中的某些部分。例如,在解决旅行商问题(TSP)或车辆路径问题(VRP)时,模型可以通过注意力机制选择下一个要访问的城市[^1]。 #### 技术实现 在技术实现上,Route Attention 通常结合了编码器-解码器(Encoder-Decoder)结构,并在解码阶段引入注意力机制。编码器负责将输入序列(如城市坐标)编码为高维特征表示,而解码器则通过注意力机制逐步生成路径。 一种常见的实现方式是使用 Transformer 架构中的自注意力机制(Self-Attention),该机制能够捕捉输入序列中不同位置之间的依赖关系。此外,还可以结合图神经网络(GNN)来处理路径问题中的图结构数据,进一步提升模型的表现力。 #### 应用场景 Route Attention 技术主要应用于以下几类场景: 1. **组合优化问题**:如旅行商问题(TSP)、车辆路径问题(VRP)及其变种,这些问题是 Route Attention 技术最早和最广泛的应用领域之一。 2. **交通预测与调度**:在智能交通系统中,Route Attention 可用于预测交通流量、优化路线规划,提升交通效率。 3. **物流与仓储管理**:在仓储补货、物流配送等任务中,Route Attention 可帮助构建高效的调度策略,优化资源分配[^2]。 4. **芯片布局设计**:Google DeepMind 在 AlphaLayout 中使用了类似的注意力机制来优化 TPU 的布局设计,通过关注关键单元之间的连接关系,提升芯片性能[^3]。 #### 优势与挑战 Route Attention 技术的优势在于其灵活性和可解释性。通过注意力权重,可以直观地看到模型在每一步决策中关注了哪些输入节点,从而增强模型的可解释性。此外,注意力机制还能够有效处理长序列问题,避免传统 RNN 结构中的梯度消失问题。 然而,Route Attention 也面临一些挑战。首先,模型的训练依赖于大量高质量的数据,尤其是在复杂路径规划任务中,数据获取成本较高。其次,当前的深度学习方法在实际应用中仍存在可扩展性问题,训练好的模型在面对新场景时可能表现不佳。 #### 示例代码 以下是一个简单的 Route Attention 模型实现,使用 PyTorch 框架: ```python import torch import torch.nn as nn import torch.nn.functional as F class RouteAttention(nn.Module): def __init__(self, input_dim, hidden_dim): super(RouteAttention, self).__init__() self.encoder = nn.LSTM(input_dim, hidden_dim, batch_first=True) self.decoder = nn.LSTM(hidden_dim, hidden_dim, batch_first=True) self.attention = nn.Linear(hidden_dim, hidden_dim) self.out = nn.Linear(hidden_dim, input_dim) def forward(self, x): # Encoder encoder_out, (h, c) = self.encoder(x) # Decoder with attention decoder_input = torch.zeros_like(x[:, 0, :]).unsqueeze(1) outputs = [] for _ in range(x.size(1)): query = self.attention(decoder_input) energy = torch.bmm(encoder_out, query.transpose(1, 2)).squeeze(2) attention_weights = F.softmax(energy, dim=1) context = torch.bmm(attention_weights.unsqueeze(1), encoder_out).squeeze(1) decoder_output, (h, c) = self.decoder(context.unsqueeze(1), (h, c)) output = self.out(decoder_output) outputs.append(output) decoder_input = output return torch.cat(outputs, dim=1) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矮人三等

秀儿,是你吗秀儿?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值