Self-Attention


前言

在这里插入图片描述

复杂的输入

目前的学习输入都可以看成一个向量,大小一样,无论是Youtube预测观看人数,还是影像处理。

在这里插入图片描述

如果我们的输入是一排向量(序列),而且向量的数目还是可以改变的呢?

Example1:文字处理
在这里插入图片描述

向量集作为输入
句子的长度不一样,你的向量集大小就不一样。
怎么把词变成向量呢?
在这里插入图片描述

  • one-hot encoding,最简单的
    但存在一个严重的问题,他假设所有词汇彼此之间都没有关系
  • word embedding

Example2:语音处理
在这里插入图片描述
创建window(长度通常25ms),把window映射成向量,为了描述一整段声音信号,我们移动window(步长通常为10ms)。

window映射成向量常见方法:
在这里插入图片描述
Example3:图
在这里插入图片描述
图也是一堆向量,把每个点看成向量。

输出是什么样的?

输入每一个向量都有一个标签(Sequence Labeling)

在这里插入图片描述

  • Example1:POS tagging(词性标注)
    在这里插入图片描述
  • Example2:根据已有音频材料预测音位
    在这里插入图片描述
  • Example3:是否购买
    在这里插入图片描述

输入一整个序列对应一个标签

在这里插入图片描述

  • Example1:情感分析
    在这里插入图片描述
  • Example2:语音辨认是谁讲的
    在这里插入图片描述
  • Example3:分子的亲水性
    在这里插入图片描述

模型自己决定标签数目(Seq2Seq)

在这里插入图片描述


一、Sequence Labeling的方法

全连接(fully-connected)

在这里插入图片描述
但是fully-connected network对于前后一样的saw无法输出一个是动词,一个是名词不一样的结果。

那有没有可能让fully-connected network考虑上下文信息呢?
在这里插入图片描述
那这个向量与前后两个向量都串起来,构成一个向量,丢到fully-connected network就结束了。

但是现在如果某个任务不是考虑window就能解决,而是要考虑整个序列怎么办?
那么我开一个window把整理序列都盖住,但序列有长有短,你就要统计最长的序列长度,那么fully-connected network参数很多,就容易Overfitting

二、Self-Attention

在这里插入图片描述
self-Attention可以叠加多层
在这里插入图片描述
在这里插入图片描述
下面看如何产生 b 1 b_1 b1这个向量:
在这里插入图片描述
根据 a 1 a_1 a1在序列中找出与 a 1 a_1 a1相关的向量
在这里插入图片描述
那么如何确定两个向量的关联性 α \alpha α呢?
在这里插入图片描述
那么就需要两个计算Attention的模组
那么就需要两个向量做输入,输出 α \alpha α,当做两个向量的关联程度。

  • Dot-product
    在这里插入图片描述

  • Additive
    在这里插入图片描述

α \alpha α,两个向量的关联程度的计算方法有很多,我们只讨论Transformer里面也是最常见的计算方法,就是Dot-product。

下面讨论怎么把Dot-product用在self-Attention里面呢?

计算 a 1 a_1 a1与其他的关联性
在这里插入图片描述
做normalization比如Softmax
在这里插入图片描述
基于attention score抽取信息
在这里插入图片描述
如果说 a 1 a_1 a1 a 2 a_2 a2的关联性很强,那么 b 1 b_1 b1就会很接近 v 2 v_2 v2

在这里插入图片描述
那么就完成了从输入到 b 1 b_1 b1.

矩阵表述:

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

在这里插入图片描述

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

多头注意力

多头的原因是相关性的定义是多样的,每个头自己做运算在拼一起
在这里插入图片描述
在这里插入图片描述

Position Encoding – self-attention是缺少位置信息的

给每个位置都有唯一的位置向量
在这里插入图片描述
每一列都表示一个位置向量:
在这里插入图片描述
在这里插入图片描述
一些对Position Encoding的研究
https://arxiv.org/abs/2003.09229

self-attention被广泛应用:

  • 如NLP
    在这里插入图片描述
  • 当然他也可以用在语音处理:
    在这里插入图片描述
    在这里插入图片描述

由于语言是非常长的序列,变成向量会非常长,所以我们要做变动。
如果序列非常长,矩阵维度高,占内存大。
在这里插入图片描述
所以我们可以采用截断自注意力(Truncated Self-attention)
在这里插入图片描述

  • 图片处理
    图片也可看成一系列向量
    在这里插入图片描述
    在这里插入图片描述

Self-Attention v.s. CNN

CNN可以被看成简化版的self-attention
在这里插入图片描述
用数学的方式说明CNN是self-attention的特例 – https://arxiv.org/abs/1911.03584

在这里插入图片描述

Self-Attention v.s. RNN

在这里插入图片描述

  • Self-Attention 考虑了整个序列的信息,RNN只考虑了前面已经输入序列的信息。

当然我们使用双向RNN也可以考虑到右侧部分的信息,但是需要把最左面的信息存在memory里面,不能忘记,带到最右边才能在最后一个时间点被考虑。但是self-attention即使很远,也可以容易抽取信息。
在这里插入图片描述

  • RNN没办法平行化
    在这里插入图片描述
    在这里插入图片描述
    各种研究,减少计算量是研究的重点。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔下万码生谋略

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值