台大李宏毅自注意力机制和Transformer详解

台大李宏毅自注意力机制和Transformer详解!

0 前言

本文主要是对李宏毅老师讲的自注意力机制部分进行的记录。视频链接如下:

10.【李宏毅机器学习2021】自注意力机制 (Self-attention) (上)_哔哩哔哩_bilibili

本文只是对self-attention的总结,transformer的总结见
台大李宏毅自注意力机制和Transformer详解(续)!

1 总结

把总结写在前面是为了以后再返回来回忆知识点的时候,不用拉到最下方去看总结。所以总结如下:

1)很多应用需要考虑上下文的内容,比如对“I saw a saw”进行词性标注,前后两个saw显然是不一样的,这需要考虑上下文的关系。

2)滑动窗口的方式可以考虑上下文,但是不灵活,毕竟句子可长可短,长度不一。self-attention可以很好的处理这种情况(更灵活的考虑变长序列的上下文关系)。

3)self-attention就是从一个序列 { a i } \{a^i\} {ai}得到另一个序列 { b i } \{b^i\} {bi},其中任意一个 b i b^i bi都考虑了所有 a i a^i ai,用课程最具有总结性的一张slide总结如下:
在这里插入图片描述

4)self-attention可以叠加很多次。也就是self-attention与FC交替使用。self-attention负责融合整个seq的信息,FC专注特定位置

5)谷歌提出了transformer的架构,transformer里面最重要的模块就是self-attention

2 正篇开始

在这里插入图片描述
模型的输入有可能是一个向量,比如MLP,有的时候输入也会是一串向量,而且串的长度还可能是变化的。

在这里插入图片描述
输入是一串向量的情形的举例1:一个句子,每个词是一个向量。至于怎么把词映射成向量,有很多种方法。

在这里插入图片描述
输入是一串向量的情形的举例2:一长段语音,每个小语音段可以用一个向量表示(也是有很多方法),然后平移一个窗口,这样一长段语音就有小段语音的向量表示串起来表示
在这里插入图片描述
在这里插入图片描述

输入是一串向量的情形的举例3:一个graph(社交网络,分子结构),每个节点可以用一个向量表示

在这里插入图片描述
输出也是有多种方式:方式1:每个输入向量对应一个输出的label。举例:1)句子词性识别;2)语音音标识别;3)推荐(客户是否购买商品)

在这里插入图片描述
方式2:整个向量串对应一个输出的label。举例:1)句子好坏识别;2)语音speaker识别;3)分子结构毒性识别

在这里插入图片描述

方式3:输出长度不固定,对应seq2seq,举例:对话

在这里插入图片描述
本次课先只讲第一种情形:输出label个数与输入向量个数一样,称为sequence labeling。可以让每个vector 输入到一个FC里面,分别输出预测。但是这样就忽略了这些向量之间的上下文关系(很重要)。比如上面课件里的第一个saw和第二个saw词性是不一样的,需要考虑到上下文才可以。

在这里插入图片描述
这样弄一个窗口就可以了,但是这样的话,窗口的size不好固定,因为句子的长度是变化的。为了解决这个问题,(为了更好的解决整个input sequence信息)self-attention就来了。
在这里插入图片描述
self-attention机制:将整个seq全部输入,有几个向量就输出几个向量,输出的向量是考虑整个seq后得到的。(至于如何考虑整个seq后面讲)。把考虑了整个seq后的向量再前馈到FC中,来决定他是什么类别。这样FC就考虑了所有的seq包含的信息。

在这里插入图片描述
self-attention可以叠加很多次。也就是self-attention与FC交替使用。self-attention负责融合整个seq的信息,FC专注特定位置。

在这里插入图片描述
self-attention最著名的文章就是《Attention is all you need》。在这片文章里,谷歌提出了transformer的架构,transformer里面最重要的模块就是self-attention

在这里插入图片描述
self-attention:每个输出b都是考虑了所有的输入a。

在这里插入图片描述
下面看看怎么产生 b 1 b^1 b1这个向量(其他的都一样)。第一个步骤:根据 a 1 a^1 a1找到seq里面与 a 1 a^1 a1相关的其他向量。self-attention的目的就是要考虑整个seq,但是又不希望弄在一个窗口里。所以有个机制,就是找出整个seq里面,找出那些与判断 a 1 a^1 a1是相关性很大的。这个关联程度用 α \alpha α表示。接下来的问题就是,self-attention怎么自动决定,两个向量之间的关联性呢?

在这里插入图片描述
有多种方式,以上是两种方式。本课程只考虑内积的方式(最常用,也是用在transformer里面的方法)。怎么把这个运算用到self-attention里面呢?

在这里插入图片描述
首先用 W q a 1 W^qa^1 Wqa1计算 q 1 q^1 q1,q叫query,然后用 W k a i W^ka^i Wkai得到 k i k^i ki,称为 k e y key key。然后做内积得到 α 1 , i \alpha_{1,i} α1,i(attention score)

在这里插入图片描述
实际中,也要计算与自己的关联性,所以要计算 k 1 k^1 k1。然后做softmax得到 α 1 , i ′ \alpha'_{1,i} α1,i,也可以做其他。然后从这些attention score中提取信息。如何提取信息?看下张slide

在这里插入图片描述
b 1 b^1 b1的值是加权平均,attention score是权重,attention score度量了输入向量之间的关联程度。所以 b 1 b^1 b1的值与与 a 1 a^1 a1关联性强的 v i v^i vi更接近。

在这里插入图片描述
b i b^i bi的计算是并行的,没有先后.下面再以 b 2 b^2 b2为例。

在这里插入图片描述
下面从矩阵乘法的角度来讲self-attention是怎么运作的

第一步:得到q、k、v

在这里插入图片描述
第二步:根据得到的q、k、v计算attention score,attention score度量了相关性的大小

在这里插入图片描述
在这里插入图片描述
下一步:根据attention score计算 b i b^i bi
在这里插入图片描述

总结起来就是下面的过程,整个过程只有三个W需要学习。

在这里插入图片描述
有些任务用多个head会效果好,比如翻译、语音识别。可能会有多种相关性,多几个q,每个q负责一种相关性,多个q负责多个相关性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值