由浅到深 : Self-Attention (自注意力机制)

文章探讨了在自然语言处理中,Self-Attention机制如何解决词性判断时的上下文依赖问题,通过窗口大小扩展和注意力权重计算,使得模型能够考虑整个序列,减少参数过拟合,实现对输入向量的有效整合。
摘要由CSDN通过智能技术生成

Self-Attention

看到下面的第一个saw是动词,第二个saw是名词。
在这里插入图片描述
因为第一个saw和第二个saw在形式上没有任何差别。如果任务是进行词性的判断,把上面的词直接输入给神经网络,那么它肯定不能够正确分析。
在这里插入图片描述
想要正确分析词性,那么该怎么办呢?
一个解决方式就是让这个词考虑其上下文信息。可以设置一个window,考虑上下文的n个词,n是可以自己指定的。

在这里插入图片描述
如果有一个任务,不是一个短的window就可以解决的,而是考虑整个序列才行,那该怎么办呢?
很直接的想法就是把window开大一点,可以包含整个序列。这样就会有一个问题,输入给model的序列会有长有短,这样就需要统计整个训练资料,找出最长的一个序列,然后将window长度设置为该序列的长度。这样就会有一个致命的缺点:FC(full connected) 的参数会很大,这样不仅运算量很大,而且容易overfitting。

有没有更好的方法考虑输入的整个序列呢?
当前是今天的重点 Self-attention
self-attention会记录整个序列的信息,你输入几个vector,它就会输出几个vector。比如下图输入输入和输出了4个vector。

那么输出的4个vector有什么特点呢?
每个self-attention后输出的vector都是考虑了整个序列后才得到的。
输出的向量经过FC层后会进行相应的判断。
在这里插入图片描述
self attention是怎么考虑整个序列的呢?
下面的图可以看出,每个b向量都考虑了a1-a4向量。
在这里插入图片描述


输出的向量 b是怎么计算的呢?

根据a1找出与其相关的其他向量,每一个向量与a1关联的程度用一个数值α来表示。
在这里插入图片描述
怎么计算两个向量之间的关联性呢,也就是如何计算的α?
以下就是常见的计算α两种方式。例如左边的:输入向量分别乘上Wq和Wk 矩阵,得到q和k两个向量。然后再将q和k向量进行点乘得到α
,在这里插入图片描述
分别计算a1与a2、a3和a4的关联性。
在这里插入图片描述

q1一般也会跟自己计算关联性
在这里插入图片描述

计算出a1和每个向量的关联性之后,会做一个softmax得到α’。然后会根据得到的α’,得出哪些向量跟a1是最有关联的。接着会根据关联性来抽取重要的信息 。
在这里插入图片描述
怎么抽取重要的信息呢?
把输入的每个向量都乘上一个Wv得到新的向量,也就是下图的v1-v4。然后再将v1和v4都去乘上对应的α’,然后将他们加起来,就能得到考虑全局信息的b向量了。
如果某一个向量得到的分数越高,比如a1和a2的关联性很强也就是a’1,2的值很大,那么得到的b1的值就可能比较接近于v2。也就是哪个向量的attention的分数越大,那么这个向量的v就会dominate抽出来的结果。
在这里插入图片描述


后续会计算 q2与k1,k2,k3,k4、q3与k1,k2,k3,k4、q4与k1,k2,k3,k4的计算结果
在这里插入图片描述


从矩阵角度进行分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Wq, Wk, Wv是通过training data找出来的

在这里插入图片描述

参考自:李宏毅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值