机器学习笔记(李宏毅 2021/2022)——第四节:self-attention

相关视频

2021-self-attention(上)
2021-self-attention(下)
选修-RNN(上)
选修-RNN(下)
选修-GNN(上)
选修-GNN(下)
选修-Unsupervised learning:Word Embedding

一、self-attention

1. Vector Set as Input

从前我们都是输入一个vector,现在有些情况下,我们需要输入一个vector set。

  • 文字处理
    文字信号有两种处理方式
    1. one- hot encoding
      但是对于文字处理来说,由于文字数多,存在纬度高,彼此之间无关联的缺点。
    2. word embedding
      单词嵌入,把x所属空间的单词映射到y空间的多维向量。

顺便记录一下什么是embedding?
Embedding在数学上表示一个mapping,F:X->Y,且它是
Injective(单射函数,每个Y只有一个X对应,反之亦然);
Structure-presserving(结构保存,比如X所属空间 x 1 x_1 x1 < x 2 x_2 x2,则在Y所属空间, y 1 y_1 y1 < y 2 y_2 y2

  • 声音信号
    在这里插入图片描述


  • 在这里插入图片描述

  • 分子信息
    在这里插入图片描述

2. Output

与此同时,输出也可以是有三种可能性。

  • 每一个向量都有一个对应的Label
  • 一整个Sequence,只需要输出一个Label
  • .机器要自己决定,应该要输出多少个Label(seq2seq)

3. self-attention介绍

首先,先来看一下self-attention的结构。
Self-Attention的运作方式就是,Self-Attention会吃一整个Sequence的资讯。
如此一来你这个Fully-Connected的Network,它就不是只考虑一个非常小的范围,或一个小的Window,而是考虑整个Sequence的资讯,再来决定现在应该要输出什麼样的结果,这个就是Self-Attention。
在这里插入图片描述
同时,self-attention可以套用多次。
在这里插入图片描述
其次,我们来看一下self-attention里面的样子。该图展示的是一个输出b1的产生过程。(注意,黄框部分省略了一个soft-max)
在这里插入图片描述

  • 首先我们的每个输入 a i a_i ai都会分别乘三个weight,产生 q i q_i qi, k i k_i ki, v i v_i vi三个向量。(其中q叫做query,k叫做key)
  • 然后计算 a 1 , i a_{1,i} a1,i,即用 a 1 a_1 a1的query和 a i a_i ai的key计算关联性。
  • 然后通过一个softmax生成 a 1 , i ′ a_{1,i}' a1,i.。
  • 最后把所有的 a 1 , i ′ a_{1,i}' a1,i乘于对应的 v i v_{i} vi相加,即求得了b1。在这里插入图片描述
    关联性的计算方式有两种(本文采用的是Dot-product)
    在这里插入图片描述
    然后,b2的产生过程也是类似。(需要注意的是,这几个b是同时算出来的,不是依次计算得出的)
    在这里插入图片描述
    从矩阵的角度来看,
    在这里插入图片描述
    最后,补充两点。
    1.如果你觉得位置信息很重要,可以使用positional encoding的技术。
    你為每一个位置设定一个 vector,叫做 positional vector,这边用 e i e^i ei来表示,上标 i 代表是位置,每一个不同的位置,就有不同的 vector,不同的位置都有一个它专属的 e,然后把这个 e 加到 a i a^i ai上面,就结束了。
    在这里插入图片描述
    2.Multi-head self-attention
    我们在做这个 Self-attention 的时候,我们就是用 q 去找相关的 k,但是相关这件事情有很多种不同的形式,有很多种不同的定义,所以也许我们不能只有一个 q,我们应该要有多个 q,不同的 q 负责不同种类的相关性。
    至于要几个head,就又是一个hyper-parameter了。
    在这里插入图片描述

4.CNN vs self-attention

在这里插入图片描述

  • 所以如果我们比较 CNN 跟 Self-attention 的话,CNN 可以看作是一种简化版的 Self-attention,因為在做CNN的时候,我们只考虑 receptive field 裡面的资讯,而在做 Self-attention 的时候,我们是考虑整张图片的资讯,所以 CNN,是简化版的 Self-attention。
  • 或者是你可以反过来说,Self-attention 是一个复杂化的 CNN,考虑整张图的资讯,就好像机器自动学出了receptive field。

5.RNN vs self-attention

  • 一般RNN只考虑左边的输入,未考虑右边
  • 双向RNN需要memory额外记录左边的输入
  • RNN没法平行化,效率低于Self-attention
  • 现在许多RNN应用,在逐渐改成self-attention的架构

二、RNN

在这里插入图片描述

  • RNN可以deep
  • RNN可以双向
  • RNN的BP采用BPTT

三、LSTM

1.LSTM长啥样

LSTM有四个输入(分别是输入门,遗忘门,输出门和原始输入),一个输出 。在这里插入图片描述
具体计算如图所示
在这里插入图片描述

2. LSTM解决了啥

在这里插入图片描述
RNN的训练通常比较困难,因为它的error surface很陡峭或者平坦。
容易产生梯度爆炸或者梯度消失
在这里插入图片描述

利用LSTM可以解决梯度消失问题。
原因是:
1.Memory和Input是相加的(在RNN中每个时间点的memory会被洗掉)
2.只要forget gate不关,cell的影响始终存在

3.RNN和LSTM区别

在这里插入图片描述

四、GRU

这里推荐一下人人都能看懂的GRU一文。

  • GRU的提出目的同LSTM,是为了解决长期记忆和反向传播中的梯度问题提出的。
  • 但是对比LSTM,GRU的效果近似,且更容易计算。

这里直接贴一下GRU的结构,与LSTM相比,GRU内部少了一个”门控“,只有resnet gate 和update gate,参数比LSTM少,但是却也能够达到与LSTM相当的功能。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/toro180/article/details/125498102
今日推荐