李宏毅老师《机器学习》课程笔记-4.1 Self-attention

本文是作者学习李宏毅《机器学习》课程关于Sequence as input的笔记,重点讲解Self-attention原理、改进及应用。Self-attention在处理变长输入时,通过考虑上下文信息,解决了传统方法的局限性。它在NLP、语音识别和图像处理等领域有广泛应用,并与RNN进行了对比,突显其并行计算和灵活性优势。
摘要由CSDN通过智能技术生成

注:本文是我学习李宏毅老师《机器学习》课程 2021/2022 的笔记(课程网站 ),文中有一张图片来自于 The Illustrated Transformer ,其余图片均来自课程 PPT。欢迎交流和多多指教,谢谢!

Lecture 4-Sequence as input

前一节课介绍了 Deep Learning 在图像处理的应用,本节课将会介绍 Deep Learning 在自然语言处理 (NLP) 的应用。

我们先来回顾一下,前面分析的 Model (Deep Neural Network) 输入的每个 sample 是 Vector 或 Matrix (e.g. image) 的形式。其实 Matrix 可以看成是把 Vector 做了一个维度变换,从一维变成三维或更多维。这样看来,输入是 Vector 或 Matrix 时,每个 sample 的维度是固定的。

在这里插入图片描述

当输入的一个 sample 是一组 vectors时,不同 sample 包含的 vectors 个数可能不同。这样,sample 的维度不再固定,是变化的。这种输入也被称为 Sequence 或 vector set。就像我们说的每一句话有长有短,sequence 的长度也是变化的。这给我们提出了新的问题:变长的输入要怎么处理呢?别急,本节课将为你介绍。

输入是 Sequence(序列)的情况

我们先来看看,有哪些应用是以序列 (Sequence) 作为输入呢?

1.文本。一句话有很多字词。每个字词可以用一个 vector 表示,这样,一个句子就是一个 vector set。

字词怎么用 vector 表示呢?

方法一:One-hot Encoding. 取一个很大的词汇表,囊括了所有的词汇,每个词唯一表示。

存在问题:词汇表很大,产生的向量是稀疏高维向量,空间占用大。而且,这种向量表示不包含语义信息。如下图所示,cat, dog 都是动物,one-hot encoding 体现不出它们的相似性。

方法二:Word Embedding. 加入了语义信息,如下图所示,同属于动物的 dog, cat, rabbit 离得更近,同属于植物的 tree, flower 离得更近。而且,产生的向量维数更少。

在这里插入图片描述

2.语音识别:把语音信号按帧 (frame) 划分,识别其中的 phoneme。每一段 frame 是一个 vector,一段语音就是 vector set。

在这里插入图片描述

3.图网络:社交网络就是一个 Graph(图网络),其中的每一个节点(用户)都可以用 vector 来表示属性,这个 Graph 就是 vector set。

在这里插入图片描述

4.分子结构:在药物研发、材料研发中,可以用于分析分子特性。每个节点上的原子当作一个 vector,这个 vector 用 One-hot Encoding 表示,整体的分子结构就是 vector set.

输出有三种形式
1.输出序列长度与输入序列相同。

Each vector has a label. 每个 vector 都有一个对应的 label 输出,这样输出序列长度与输入序列长度相同。这是本节课研究的重点

应用举例:(1)词性标注 (POS tagging)。(2)语音识别(声音–>phoneme(也就是元音辅音))。(3)社交网络中的用户行为预测。

在这里插入图片描述

2.输出序列长度为1。

The whole sequence has a label. 整个序列输出一个 label。

应用举例:(1)Sentiment analysis,通过评论分析其中的情感 (positive, neural, negative)。(2)说话人识别。(3)判断分子特性(如亲水性)。

在这里插入图片描述

3.模型决定输出序列长度。

Model decides the number of labels itself. 由模型决定输出 label 的个数,也就是输出长度。这种情况也叫做 seq2seq 任务,将在 Lecture 5 介绍。

应用举例:(1)翻译,译文和原文的长度可能不一样。(2)语音识别,输入一段语音,输出一段文字。注意,与第一类输出形式中介绍的语音识别例子不同,这里输出的不是语音的最小单位 phoneme(也就是元音辅音),而是字词,因此与输入长度不一定相同。

在这里插入图片描述

Self-attention 原理

接下来,我们看看输入和输出序列长度相同时(这种情况也叫 Sequence Labeling),模型要如何设计?

首先,一个直觉的想法就是各个击破,还是用输入是 vector 的处理方法。vector set 也无非就是 vector 从一个变成多个,把这组 vectors 送入 Fully Connected Network 就好了。

但是,很快你会发现,这样存在问题。比如,对这个句子做词性标注: “ I saw a saw. ” 如果用输入是 vector 的方法来处理,机器会认为这两个 saw 是一样的。其实它们不一样,第一个是动词(看见),第二个是名词(锯子)。语音也是这样,一个音标,可以有不同的字母形式。也就是说,vector set 中的 vectors 不是独立的,它们之间有联系。我们要考虑 context(上下文)。这一点我在分享英语学习方法的文章中也提到过,就是单词的意思要放在句子(上下文语境)中记忆。我还举了几个一词多义的小例子,感兴趣的朋友欢迎点击阅读:怎样才能又快又好地记单词?

解决办法一:设置 window.

像 homework2 语音识别中使用的方法一样,设置一个包括相邻 vectors 的 window,这不就考虑到 context 了吗?

存在问题:这对于 Sequence 并不现实。试想一下,Window 设多大合适呢?对于一段文字,只有先看其中最长的句子有多长,然后开一个这么大的 window。这样一来,运算量大,参数多,容易 overfitting。

还有一种办法,在每个 vector 中融入 context 信息。这样,vector set 长度不变,但是,它们已经不是之前的 vectors 了。这就是 Self-attention 方法。

解决办法二:Self-attention.

如下图所示,把 sequence (vector set) 输入 Self-attention 模块,输出的 sequence 中每个 vector 都带有 context 信息。然后把这些 vectors 送入 Fully Connected Network,和输入是 vector 一样来处理。与方法一相比,self-attention 不会增加参数,而且考虑了整个句子的上下文信息。

在这里插入图片描述

和 CNN 的 Convolutional Layer 一样,Self-attention+Fully Connected Layer 也可以叠几层,如下图所示。因此,self-attention 的输入层可以是 input 或 hidden layer。

在这里插入图片描述

Self-attention 要做什么呢?

寻找 vector 之间的关系。如下图所示,对于某一个 vector,求出其与 sequence 中其它 vectors 的相关性。我们可以用 α \alpha α 来表示相关性。

在这里插入图片描述

怎么计算 α \alpha α:用 Dot-product(点乘)或 Additive 都可以,如下图所示。Dot-product 更加常见,本文例子中使用 Dot-product。

在这里插入图片描述

通过输入 a i a^i ai 求出 q i q^i qi (query) 和 k i k^i ki (key),

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值