self-attention自注意力机制笔记

目录

介绍

Self-attention

通俗理解

矩阵运算的角度

Multi-head Self-attention

下面以2个头为例

融合位置信息

self-attention 的应用

1. NLP(Transformer 和 Bert···)

2.语音

3.图像

4.图、网络(graph)

Self-Attention   v.s.  CNN 

self-attention  v.s.  RNN

Self-Attention 的变形


介绍

我根据台大李宏毅21年机器学习课程 self-attention和transformer_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili做的笔记

感叹:哇~这个老师讲解的果真好,通透细致醍醐灌顶,有些地方甚至妙绝!!~ 后面看看如果有时间考虑将所有的课程都看一遍

怕后面会遗忘,简单记录一下,方便以后翻翻看看~

这个课程是2021年的课程,老师说里面提到的论文也是比较新的论文


Self-attention

通俗理解

将self-attention和FC交替使用,self-attention处理全局信息,FC专注于处理局部的信息

下面只讲了得到b^1的过程,b^2~b^4同理可得

如何计算两两之间的α(关联性),下面有两种方式,课程以点积举例

自己和自己也会计算关联性α_i,i

做归一化(但这里不一定要做归一化,可以用别的东西,比如Relu)

基于attention score 提取信息

b^1~b^4并行得到

矩阵运算的角度

下面从矩阵乘法的角度重新讲一下self-attention的过程

先是q矩阵

 

同理可得k,v

接下来每一个q都会跟k做inner-product得到attention score

同理可得a_2与其他的attention score

得到全部两两的attention score

然后对每一个column做softmax

计算b^1(图片中有个错误,α^hat应该为α'才对)

得到整块全部的

完整的矩阵运算过程如下所示:

I:input matrix  O: output matrix

self-attention 需要学习的参数只有这三个W:


Multi-head Self-attention

应该存在不同种类的相关性  ,让不同的q负责不同种类的相关性

下面以2个头为例

先和之前一样得到q^i,然后让q^i分别乘上两个矩阵W^q,1和W^q,2得到两个q

同理可得到两头的 k 和 v

然后同一个头内算attention score就可以了

而后 attention score (a'^i,1)和 v (v^i,1)做inner-product最后求和得到b^i,1

同理第二个头:

然后会将 b^i,1 和 b^i,2 做一个拼接,乘以一个矩阵,得到b^i,作为下层的输入

融合位置信息

但是到目前为止,self-attention layer缺少一个很重要的信息,位置信息 (想想看一个句子中单词出现是有顺序的,这个次序对于语义表达很重要)

下面就是改进这一点,加入位置信息,具体做法是把位置信息单独用一个向量e^i来表示,将e^i加到a^i上

最开始位置编码是人为设定的,通过一定的规则(sin cos)产生的,每一列代表一个位置信息/位置向量(position vector)

position encoding的方法不一定非要按照上面那样得出,也可以设计别的方法来实现,这个是尚待研究的一个点,这个位置信息甚至可以学习得到

positional encoding的目前的技术方法


self-attention 的应用

1. NLP(Transformer 和 Bert···)

2.语音

它还可以用在语音问题上, 数据量很大

truncated Self-attention

3.图像

图像上的应用,图像可看做vector set

每一个pixel是一个3维向量,整张图片就是5×10个向量

这是用Self-attention做图像处理的最新工作

4.图、网络(graph)

只计算有连接的node pair的attention score

其他没连接的node pair(很可能暗示它们之间没关系),简单的做法是置位0,

当然也可以根据领域知识来构造Attention Matrix

老师说水很深,不细讲了,放出了下面二维码


Self-Attention   v.s.  CNN 

(Self-Attention是对全局,CNN是对窗口,是局部的   )

  • CNN是简化版的Self-Attention

  • Self-Attention是对CNN的复杂化

Self-Attention在全局中找到相关的pixel,就好像CNN中的窗口(reception field)是自动学出来的一样

李宏毅老师在视频中说的这句话真哇塞,醍醐灌顶,简直妙绝!!!~~  你品,你细品~

Self-Attention选择的范围是全局,他自己决定哪些pixel是重要的,非常相关的,所以它选择的窗口是隐形的,没有具体边界的,是学习出来的,不再像CNN那样需要人为设定了

这篇paper(19年的)里用数学严谨论证了CNN其实就是Self-Attention的特例

更flexible的model训练的时候需要的data量要大,否则会overfitting

Self-Attention更适合大数据集,CNN更适合小数据集

一篇论文做的实验,横轴是数据量,纵轴是性能,也验证了这一点

Self-Attention弹性比较大,需要比较多的训练数据

self-attention  v.s.  RNN

  • 相同点:都是输入一串vector然后输出一串hidden vector,然后每个hidden vector都和 FC layer相连接

  • 不同点:单向RNN每一步都只包含左边的信息,而self-attention考虑了全局信息,但如果是双向RNN,那么每个hidden vector也可以视为考虑了全局信息

 

但是两种结构如果都拿最后黄色hidden vector作比较的话还是有些不同,因为对于RNN来说,最左边的输入(红框框起来的紫色输入),必须经过长链一路不被遗忘,才可以将这部分信息携带进最后黄色hidden vector中去,所以它很难考虑到最左边的输入,而Self-Attention则不是这样。

还有一个不同点:RNN也不能并行计算,self-attention可以并行计算,计算速度更快

综上,所以现在很多work都抛弃RNN架构,将其替换成为Self-Attention来做了

下面这篇paper(20年6月)探究了Self-Attention加上什么东西后就变成了RNN,探究了两个之间的关系


Self-Attention 的变形

下面的文章,比较了不同Self-Attention的变形

Self-Attention最主要的问题是运算量非常大,怎样减少Self-Attention的运算量是未来研究的一个重点

Self-Attention现在的变形都叫做XXformer,最早的Self-Attention是用在Transformer上,现在的XXformer虽然运算速度快了,但是效果不如以前的好,怎样设计出一个又快又好的模型是Self-Attention研究的一个重点


真不戳!哈哈哈哈 嗝儿e~~

有时间把整套课程我感兴趣的其他部分再see see 

 

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值