文章目录
- 1 注意力机制介绍
- 1.1 概念
- 1.2 为什么需要注意力?
- 1.3 注意力QKV
- 1.4 注意力机制步骤
- 1.5注意力机制分类
- 2 Seq2Seq架构中的注意力机制
- 2.1 Seq2Seq架构
- 2.2 Seq2Seq架构中的QKV
- 2.3 注意力概率分布计算流程
1 注意力机制介绍
1.1 概念
人类视觉的注意力机制:人类视觉通过长期进化形成视觉注意力机制,是大脑信号处理机制,会快速扫描全局图像,获得需要重点关注的目标区域。
本质:用有限的精力,从海量信息中快速筛选高价值信息。
人的大脑,天生抓重点,忽略次要信息,这样才能处理世界的海量信息。
RNN的弊端:无法处理长序列信息,无法并行计算。
提示:能不能把这种注意力机制引入到深度神经网络中?
灵感来源:
这个设计的灵感直接来源于我们熟悉的信息检索和数据库系统。你可以想象一下图书馆或搜索引擎的工作方式:
Query (查询):就像你在图书馆的检索系统里输入的关键词,代表你“想找什么”。
Key (键):就像书架上每本书的标签或索书号,代表这本书“是什么”。
Value (值):就是书本身的内容,是你找到书后真正获取的“信息”。
注意力机制就是把这个过程“搬”进了神经网络。
注意力机制概念:观察事物时,能够快速判断一种事物,是因为大脑把注意力放在事物最具有辨识度的地方,从而可快速判断,并非是从头到尾的观察一遍事物后,才能有判断结果。正是基于这样的理论,就产生了注意力机制。
注意力机制是一个非常重要、强大的工具:
- 是一种在深度学习中常用的技术,它允许模型在处理序列数据时,能够集中关注输入数据的不同部分
- 自然语言处理中,注意力机制被广泛应用于机器翻译、文本摘要、问答系统等任务。
- 图像处理中,比如在图像描述生成、图像分类等任务中,甚至扩展到了多模态任务,如图像与文本之间的关联问题。
- 注意力机制是一个非常重要且强大的工具,可以帮助模型更好的理解和利用输入数据的信息。
1.2 为什么需要注意力?
提示:与RNN提取事物特征对比,为什么要引入注意力机制?
- 从RNN模型角度来看:
- RNN一个时间步一个时间步的提取事物特征,必须按顺序处理,无法并行计算,效率低。
- RNN提取长序列特征时,前面单词的特征会遗忘,无法有效捕捉全局关键信息,没有重点。
- 从带有注意力机制的模型来看:
- 可以并行提取事物特征
- 还能注意到关键点。
综上,带有注意力机制的模型,更加灵活的提取事物特征。能够动态关注输入数据中的关键部分,避免长信息遗忘,让模型更灵活。
1.3 注意力QKV
QKV是注意力机制中的核心组件,它们协同工作以使模型能够灵活的关注输入数据的不同部分,从而提升模型的性能和表达能力。(QKV分工明确,协同完成“聚焦关键信息”的任务。)
- Query(查询向量):表示输入序列要查询的问题(你当前要解决的问题,也是触发注意力计算的需求向量)
- Key(键向量):表示关注的内容的索引(关键字),用来和Q计算相似度。
- Value(值向量):表示关注的内容,(最终要获取的实际内容)
tips:
注意力机制QKV核心逻辑总结:
QKV的本质:“问题”,“索引”,“内容”的匹配机制。
- 用Query表达当前的任务需求。
- 用Key作为索引,和Query计算相似度,找到最相关的信息位置。
- 用Value作为实际内容,根据相似度权重输出最终结果。
1.4 注意力机制步骤
第一步:用查询张量Q与键张量K进行相似度运算,得到一个注意力机制的权重分布attention_weight;
第二步:用权重分布乘以值张量V,得到注意力机制的结果表示attention_q。
Attention是关于QKV的函数,通过QKV运算,普通的Q升级成一个更强大的Q。
注意力机制的本质是:动态加权,让模型能够自动识别输入中哪些信息和当前任务最相关。输出的attention_q不再是孤立的“it"查询向量,而是融合了整个句子中最相关信息的增强向量。在这个例子中,模型通过权重计算,自动判断‘it’最可能指代的‘robot’,从而完成了指代消解的任务。
1.5注意力机制分类
深度学习中的注意力机制通常可以分为三类:
- 软注意力机制(soft/global attention):对每个输入项的分配权重为0-1之间,也就是某些部分关注的多一点,某些部分关注的少一点,因为对大部分信息都有考虑,但考虑程度不一样,所以相对来说计算量比较大。
- 硬注意力机制(Hard/Local Attention):对每个输入项分配的权重非0即1,和软注意不同,硬注意力机制只考虑哪部分需要关注,哪部分不关注,也就是舍弃掉一些不相关项。优势在于可以减少一定的时间和计算成本,但有可能丢一些本应该注意的信息。
- 自注意力机制(self / intra Attention):对每个输入项分配的权重取决于输入项之间的相互作用,即通过输入项内部的“表决”来决定应该关注哪些输入项。和前两种相比,在处理很长的输入时,具有并行计算的优势。
2 Seq2Seq架构中的注意力机制
2.1 Seq2Seq架构
Sequence -to-Sequence架构是一种在自然语言处理中非常重要的模型结构,广泛应用于机器翻译、文本摘要、对话系统等任务。该架构的核心思想是将输入序列映射为一个中间表示,然后再从这个中间表示生成目标序列。
Seq2Seq模型架构包括三部分,分别是encoder(编码器),decoder(解码器)、中间语义张量c。
编码流程:1个时间步1个时间步的编码,每个时间步有隐藏层输出,最终组合成中间语义张量C。
解码流程:1个时间步1个时间步的解码,解码的每个时间步输入input和ht-1,输出为output和ht,再连接一个全连接层+softmax做一个分类,从分类结果中找一个预测结果即可。
核心概念:
- 编码器:编码器负责将输入序列映射成一个中间的表示(中间语义张量C),通常是一个固定长度的向量。常用的编码器结构是循环神经网络(RNN)或者长短时记忆网络(LSTM),近年来也包括了Transformer模型。
- 编码器的工作流程:对输入的文本序列每个时间步都会产生一个隐藏状态。这些隐藏状态会捕捉到输入序列的信息,并被传递给下一个时刻。在Seq2Seq中,编码器会将整个输入序列处理完后,最后一个时刻的隐藏状态会被用作解码器的初始隐藏状态。
- 解码器:解码器接受编码器传递过来的初始隐藏状态,并逐步生成目标序列。解码器也是一个RNN系列模型,通常会包括一个额外的注意力机制,以便在生成目标序列过程中动态地关注输入序列的不同部分。
- 解码器的工作流程:一个时间步一个时间步的解码,采用自回归机制进行解码,上一个时间步的输出,作为写一个的输入,每个时间步都会用到中间语义张量C。
Seq2Seq的痛点与改进:
- 原生痛点:中间语义张量C是固定长度的,当输入序列很长时,会丢失早期信息,导致翻译或生成效果下降。
- 核心改进:引入注意力机制,让解码器在生成每个词时,能动态关注输入序列的不同部分,从而提升长序列的处理能力。注意力机制就是解决“信息利用不细致”的问题。
2.2 Seq2Seq架构中的QKV
如何在Seq2Seq中添加注意力机制?
- 解码中,一个时间步一个时间步的解码,每个时间步都要添加注意力机制,每个时间步都需要引入QKV。
权重分布不准确怎么办? - 理解注意力机制应该站在整个深度学习网络三大件的高度来理解,注意力机制只不过是前向传播路径中的一个小路径,一个小策略,最终还是要靠损失函数、反向传播来更新注意力机制层的权重参数,来学习事物的特征。
2.3 注意力概率分布计算流程
- 算匹配分
用F函数,对比Decoder当前状态和Encoder每个单词的状态,看谁更相关。 - 转成概率
用softmax()函数把匹配分转成(概率求和为1)的概率,代表:关注Encoder每个单词的比例。 - 加权求和
用这些概率给Encoder单词的词向量加权,得到专属信息包(中间语义张量C),给Decoder生成词用。