注意力机制(Attention Mechanism)

今天看关于命名实体识别的论文的时候,关于其中运用到的模型、方法技术,大多只能大致的了解,还有模型方法的名字有个熟悉。吃完饭后对论文中出现的“注意力机制”实在是不知道是个什么意思,就自己查了资料看了看,然后自己对自己理解的部分进行了收藏整理,便于以后自己的学习和日后找出自己理解存在的问题,若有什么问题请大家指正。
注意力机制(Attention Mechanism)是机器学习中的一种数据处理方法,广泛应用在自然语言处理、图像识别及语音识别等各种不同类型的机器学习任务中。
一、「注意力机制」为什么有必要存在(科普向)
我们不难发现,「注意力」这个词本来是属于人类才有的动作。
注意力是一种机制,或者方法论,并没有严格的数学定义。
也就是说,「注意力机制」可以看做是一种仿生,是机器通过对人类阅读、听说中的注意力行为进行模拟。
在神经网络中,注意力模块通常是一个额外的神经网络,能够硬性选择输入的某些部分,或者给输入的不同部分分配不同的权重。本文的注意力机制主要指代神经网络中的注意力机制。
那为何要对「注意力」进行仿生呢?
这是因为,人脑在进行阅读任务、读图任务时,并不是严格的解码过程,而是接近于一种模式识别。
怎么理解呢:
1.1 大脑会自动忽略低可能、低价值的信息
例如:研究表明,汉字的顺序不一定能影阅响读质量。
比如当你看完这句话后,仔细看才发这现句话是乱序的。
上面的这段话,好几个词都存在顺序混乱,但是阅读的第一感受,不会感觉到这种乱序。
我们甚至不用停下来思考,这种乱序是不是存在笔误,不仔细看甚至发现不了问题的存在。
这不是我们的眼睛都出了问题,而是大脑在识别文字的过程中,自动就把低可能的解释忽略了。
这一点在读图任务上,还更为明显一些,读图的过程中,大脑总是会优先获取认为有用的信息,而将次要的内容直接抛弃。
这是因为,大脑在阅读或读图的过程中,会直接抛弃低可能性答案,将阅读的内容更正为“大脑认为正确的版本”。
1.2 同样的文字随着对话主题的不同,含义也会发生变化
上下文联系影响文字的意义
这是网络上的一个段子,所谓的中文十级考试。这段话的第二句话里,两个“对”字代表了不同的含义。但如果单独把第二局话挑出来,即使是中国人也会对里面的意义产生疑义。因为本身这句话的“对了”可以解释成“已经校对过了”、“正确了”或者“无意义的承接词”。但如果有了第一句话的限定,这个“对了”就只能是“对答案了”的意思。也就是说,理解一句话的含义,不仅仅取决于这句话本身,而与上下文相关联的词也有很大影响。还不单单如此,通常一段对话中,都会存在一个反复出现的概念,例如这段话中的“对答案”,其他的词语或多或少都能与这个概念产生联系。也就是说,这个概念就是这段话的主题。而在更复杂一些的段落里,还会出现部分与主题没有什么关联的内容,通常这些内容都会被我们弱化或者自动遗忘。结合上面的两个例子,你会发现,我们在阅读、交流的过程中,本身就存在着信息的舍弃。虽然每段文字可能字号、粗细都相同,但我们的注意力却不是那样均衡地分配给每一个词。
如果计算机不能模拟人类的注意力状态,就可能让无关的信息对处理结果造成干扰,最后导致处理结果偏离实际的应用场景。
例如,聊天场景中,用户输入了错别字,导致了歧义。如果是人工场景,就很容易忽略错别字的影响,理解文字的本来含义。又或者,同样的句子,在不同语境中含义发生变化,导致机器翻译在段落和文章的翻译上,似是而非,语言不通顺。
这些干扰,都让人工智能显得像是“人工智障”,逻辑硬伤导致无法执行较为复杂的任务。
为了让计算机更加适应人类交流场景,我们必须教会计算机选择遗忘关联上下文,这种机制就是所谓的注意力机制
深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。
二、「注意力机制」具体是如何实现的?
注意力机制可以分为四类:基于输入项的柔性注意力(Item-wise Soft Attention)、基于输入项的硬性注意力(Item-wise Hard Attention)、基于位置的柔性注意力(Location-wise Soft Attention)、基于位置的硬性注意力(Location-wise Hard Attention)。

Encoder-Decoder框架

要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,因为目前大多数注意力模型附着在Encoder-Decoder框架下,当然,其实注意力模型可以看作一种通用的思想,本身并不依赖于特定框架,这点需要注意。

Encoder-Decoder框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。
在这里插入图片描述
最后进行一下总结。Attention在NLP中其实我觉得可以看成是一种自动加权,它可以把两个你想要联系起来的不同模块,通过加权的形式进行联系。目前主流的计算公式有以下几种:
在这里插入图片描述
不过在NLP中的attention机制和人类的attention机制还是有所区别,它基本还是需要计算所有要处理的对象,并额外用一个矩阵去存储其权重,其实增加了开销。而不是像人类一样可以忽略不想关注的部分,只去处理关注的部分。

注意力机制(self-attention mechanism)是Transformer模型的核心之一,它允许模型在计算表示向量时关注输入序列中的不同部分,以便更好地建模序列之间的依赖关系。 自注意力机制的基本思想是,对于一个输入序列中的每个位置,计算该位置与序列中其他位置的相似度,并将相似度作为权重将这些位置的表示向量进行加权,以生成每个位置的新表示向量。 具体来说,假设输入序列为$x_1,x_2,\cdots,x_n$,每个位置的表示向量为$h_1,h_2,\cdots,h_n$。对于位置$i$,我们可以通过计算该位置与其他位置的相似度得到一个权重向量$w_i$,其中$w_{ij}$表示位置$i$和位置$j$之间的相似度。然后,我们可以将权重向量$w_i$应用于每个位置的表示向量$h_j$,并将加权的值相加,以得到位置$i$的新表示向量$h'_i$: $$h'_i=\sum_{j=1}^n w_{ij}h_j$$ 其中,权重向量$w_i$的计算可以通过先将输入序列中每个位置的表示向量进行线性变换得到查询向量$q_i$、键向量$k_j$和值向量$v_j$,然后计算查询向量$q_i$和键向量$k_j$之间的相似度,并将相似度归一化为概率分布,以得到每个位置的注意力权重。具体来说,权重向量$w_i$的计算公式为: $$w_{ij}=\frac{\exp(q_i\cdot k_j)}{\sum_{k=1}^n \exp(q_i\cdot k_k)}$$ 其中,$\cdot$表示向量之间的点积。 自注意力机制的优点在于,它能够捕捉输入序列中不同部分之间的依赖关系,从而更好地建模序列。此外,它还可以并行计算,因为每个位置的表示向量可以独立地计算。 总之,自注意力机制是一种非常强大的序列建模工具,已经在许多NLP任务中取得了出色的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值