李宏毅2021春季机器学习课程笔记6:Self-attention

1. Sophisticated Input

如果神经网络输出是一个序列并且长度不一致时,比如输入是一个句子,把句子里面的没一个词汇都表示成一个向量(vector),呢么model的输入就是一个vector set,并且每次的输入长度都不一样。在这里插入图片描述

1.1 Input

当输入是一段话时,

  1. 我们可以用独热码来表示每一个向量,但是由于互相正交,所以彼此之间没有办法存在语义的联系
  2. 另一种方法对每个词汇都给一个向量(词向量),并且互相之间有着一定的联系。

在这里插入图片描述
声音信号也可以作为一个vector set,我们把一小段的声音信号变成一个向量(frame),这样一段声音就成为很多连续向量的连续。
在这里插入图片描述
一个图结构也可以抽象化成一个向量集合,每一个节点都可以看作一个向量
在这里插入图片描述
每一个分子也可以看作一个graph,上面的每一个原子都可以用一个向量来表示,比如用不同的元素进行标识
在这里插入图片描述

1.2 Output

当每个输入向量都有对应的输入时:

  1. 如果输出是一个数值那么就是回归问题(输入输出的长度一样)
  2. 输出是一个class就是分类问题
    例如:
    POS tagging(词性标注),让机器确定每一个词汇是什么词性(名词、动词等等),输入输出长度一样
    作业2的语音信号识别每一个音标是什么
    社交网络里每一个节点会不会买商品,从而确定用不用推荐相关商品。

在这里插入图片描述
第二种情况是,我们的输入只需要输出一个label就可以
例如Sentiment analysis,判断一段话是正面还是负面评价
语者辨认,确定是谁讲的话
预测分子的毒性或者亲水性
在这里插入图片描述
还有一种情况下我们并不知道输出的长度是多少,由机器自己学习产生,这种就是seq2seq的任务在这里插入图片描述
在这里我们只讨论输入和输出一样长度的情况,即Sequence Labeling

2. Self-attention

如果使用之前的Fully-connected,无法考虑到上下文关系,每一个输入都是独立的。就算我们把每一个window输入给网络,这样的方法还是有极限的,无法考虑到整个sequence(因为运算量会很大、还会过拟合)
在这里插入图片描述
所以我们使用了注意力机制,考虑整个序列得到一个向量
在这里插入图片描述
Self-attention的输入可以多次叠加,与全连接交替使用。使用Self-attention比较有名的就是Attention is all you need 中的transformer(变形金刚:)的架构。
在这里插入图片描述

2.1 Process

接下来是Self-attention的步骤:

  1. 首先找出sequence中与 a 1 a^1 a1相关的向量,并得到相关性大小的权重(attention score)在这里插入图片描述
  2. 常用的寻找这个相关性数值(attention score)的方法是做Dot-product操作(如下图左)和Additive(如下图右)在这里插入图片描述
  3. 这时我们就让 a 1 a^1 a1分别对每一个输入进行计算attention score,其中 q n q^n qn在论文中的关键字是query, k n k^n kn的关键字是key。其中 a 1 a^1 a1也会跟自己计算attention score。之后我们会做一个Soft-max(其他的Activation Function也可以)。在这里插入图片描述
  4. 这里我们已经知道了每个向量和 a 1 a^1 a1的关联性,所以我们把每一个向量计算得到 v n v^n vn并与attention score相乘后相加得到 b 1 b^1 b1在这里插入图片描述
  5. 同理操作每一个输入,这样我们就得到了一排attention层的输出,这里每一个 b n b^n bn并不需要依次产生,它们是同时被计算出来的。
    在这里插入图片描述

2.2 Matrix transpose

从矩阵乘法的视角来看,每一个输出都要乘相应的矩阵得到相应值,所以我们可以把他们拼起来当作 I I I计算。
在这里插入图片描述
所以我们可以把之后的计算也用矩阵计算进行表示
在这里插入图片描述

同理可得到输出 b b b
在这里插入图片描述
所以整个过程都可以表示成一连串的矩阵计算,其中只有 W q W^q Wq, W k W^k Wk, W v W^v Wv是未知量需要学习得到。
在这里插入图片描述

2.3 Multi-head Self-attention

在相关这种定义中,也许不只有一种相关性,所以有时我们需要多个 q q q来表示多种的相关性。
在这里插入图片描述
之后可能会将结果拼起来通过矩阵乘法得到结果,送到下一层。
在这里插入图片描述

2.4 Positional Encoding

但是Self-attention的输入并没有表示出位置信息,每个位置的输入是一样地位的。
所以我们要用Positional Encoding的技术添加位置信息
我们在每个位置都给一个vector表示,把它加到输入中。
下图右就是最早的transform中用的vector。
在这里插入图片描述
Positional Encoding这还是一个尚待研究的问题。在这里插入图片描述

3. Others

3.1 Using

注意力机制在NLP方向一直被广泛使用在这里插入图片描述
但是在语音方面也可以使用,我们只看语音信号时,由于信息量太大,所以只看一小部分的咨询在这里插入图片描述
在影像方向也会使用Self-attention,我们可以把每一个像素位置看成一个三维的向量,这样就可以看作成一个Vector set,使用Self-attention进行处理。在这里插入图片描述
比如以下两篇论文。
在这里插入图片描述

3.2 Self-attention v.s. CNN

Self-attention和CNN相比:

  1. CNN可以看作成一种简化版的Self-attention,确定一个小的感受野,受限制。
  2. Self-attention考虑所有输入进行学习,好像是自己学习得到感受野(根据相关性决定感受野的形状、位置、相关),感受野可以不相连
    在这里插入图片描述
    在这篇论文中说明了CNN是Self-attention的特例,只要设定了合适的参数,它可以做到跟CNN一样的事情
    在这里插入图片描述
    根据不同的数据量也可以说明Self-attention较为灵活(弹性大),需要更大的数据量进行训练。
    在这里插入图片描述

3.2 Self-attention v.s. RNN

RNN(Recurrent Neural Network)现在大部分都被Self-attention所取代了,RNN也是要处理输入是一个序列的情况,基本结构如下,有一个计算顺序,每一个输入只考虑到了前面的输入情况,但是无法考虑到后面vector的信息(但是RNN也可以是双向的
在这里插入图片描述
但是Self-attention每一个输入都考虑到了所有input,与RNN相比:

  1. 如果最后一个vector要考虑第一个vector,RNN需要一直存在memory中,而self-attention不需要,有一种天涯若比邻的感觉
  2. RNN无法平行化处理输入,运算速度与效率上Self-attention更有优势

在这里插入图片描述
在这里插入图片描述

3.2 Self-attention for Graph

在图中我们不仅有点的信息,我们还有边的信息,所以我们可以用edge来表示互相的关联性,不需要用机器找出来,我们就可以只计算有相连edge的node之间的score
这种思路就是一种GNN(Graph Neural Network)
在这里插入图片描述

4. More

有很多相关的变形,快的训练速度等等方法
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值