【李宏毅机器学习】Transformer(p23) 学习笔记

老二次元了。。。

文章目录

  • Transformer
    • Sequence
      • 用CNN取代RNN
    • Self-Attention
    • Self-attention is all you need.
      • 流程
      • Self-attention是如何并行计算的? 矩阵运算!
    • Self-attention的变形 Multi-head Self-attention
    • Position Encoding
    • Seq2Seq with Attention
    • Transformer
    • Example Application
    • Universal Transformer

Transformer

Transformer的知名应用——BERT——无监督的训练的Transformer

【李宏毅机器学习】Transformer(p23) 学习笔记_第1张图片

Transformer是一个seq2seq模型,并且大量用到了"Self-attention",接下来就要讲解一下"Self-attention"用到了什么东西
【李宏毅机器学习】Transformer(p23) 学习笔记_第2张图片

Sequence

Sequence就会想到RNN,单方向或者双向的RNN。

RNN输入是一串sequence,输出是另外一串sequence。

RNN常被用于输出是一个序列的情况,但是有一个问题——不容易被平行化(并行)。

单向RNN的时候,想要算出b4,必须先把a1,a2,a3都看过才可以算出a4。双向则得全部看完才会有输出。


用CNN取代RNN

于是有人提出用CNN取代RNN

一个三角形是一个filter,输入为sequence中的一段,此刻是将三个vector作为一个输入,输出一个数值。

  • 将三个vector的内容与filter内部的参数做内积,得到一个数值,将filter扫过sequence,产生一排不同的数值。
  • 会有多个filter,产生另外一排不同的数值

【李宏毅机器学习】Transformer(p23) 学习笔记_第3张图片
【李宏毅机器学习】Transformer(p23) 学习笔记_第4张图片
我们可以看到,用CNN也可以做到和RNN类似的效果:输入一个sequence,输出一个sequence。

表面上CNN和RNN都可以有同样的输入输出。

但是每个CNN只能考虑很有限的内容(三个vector),而RNN是考虑了整个句子再决定输出。

CNN也可以考虑更长的信息,只要叠加多层CNN,上层的filter就可以考虑更加多的信息。

eg:先叠了第一层CNN后,叠加第二层CNN。第二层的filter会把第一层的output当作输入,相当于看了更多的内容。

CNN的好处在于可以并行化。
CNN的缺点在于必须叠加多层,才可以看到长时间的信息,如果要在第一层filter就要看到长时间的信息,那是无法做到的。
【李宏毅机器学习】Transformer(p23) 学习笔记_第5张图片

所以,我们引入了 一个新的想法:Self-Attention

Self-Attention

Self-Attention做的事情就是取代RNN原本要做的事情。
关键: 有一种新的layer—— Self-Attention,输入输出与RNN一样,都是sequence。

特别的地方在于,和双向RNN有同样的能力,每一个输出都是看过整个input sequence,只不过b1 b2 b3 b4是可以同时算出来的,可以并行计算!

【李宏毅机器学习】Transformer(p23) 学习笔记_第6张图片

Self-attention is all you need.

输入sequence x1~x4,通过乘上一个W matrix来得到embedding a1~a4,丢入Self-attention,每一个输入都分别乘上三个不同的transformation matrix,产生三个不同的vector q,k,v。

  • q代表query,用来match其他人
  • k代表key,用来被匹配的
  • v代表要被抽取出来的信息

【李宏毅机器学习】Transformer(p23) 学习笔记_第7张图片

流程

  1. 拿每个query q去对每个key k做attention

attention本质就是输入两个向量,输出一个分数。

除以 d \sqrt{d} d 的一个原因是:d是q和k的维度,q和k做inner product,所以q和k的维度是一样的为d。除以 d \sqrt{d} d 的直观解释为q和k做内积/点积的数值会随着维度增大 他的variance越大,所以除以 d \sqrt{d} d 来平衡。
【李宏毅机器学习】Transformer(p23) 学习笔记_第8张图片

不除以d会梯度爆炸,不收敛,推一推梯度就能的到结果

  1. 通过一个softmax函数
    【李宏毅机器学习】Transformer(p23) 学习笔记_第9张图片

  2. 如图
    【李宏毅机器学习】Transformer(p23) 学习笔记_第10张图片
    上图中,产生b1的时候已经考虑了全部句子的信息。
    如果现在只想考虑局部的信息,而不是全局的,也是可以做到的,即只需要让右边那些 α \alpha α产生出来的值变成0,就只考虑局部了。
    如果要考虑全局的信息,就要考虑离他最远的input的vector值的话,只要让那个attention ( α \alpha α)有值即可。

刚刚只是计算了b1,同时也可以计算其他的b
【李宏毅机器学习】Transformer(p23) 学习笔记_第11张图片
最终:

self-attention做的和RNN的事情是一样的,只不过是平行计算出来的。
【李宏毅机器学习】Transformer(p23) 学习笔记_第12张图片

Self-attention是如何并行计算的? 矩阵运算!

将a1~a4拼起来作为一个matrix I,用 I 再乘以Wq,一次得到matrix Q,里面的每一列代表一个q。

其他同理。
【李宏毅机器学习】Transformer(p23) 学习笔记_第13张图片
【李宏毅机器学习】Transformer(p23) 学习笔记_第14张图片
对每一列做softmax
【李宏毅机器学习】Transformer(p23) 学习笔记_第15张图片
【李宏毅机器学习】Transformer(p23) 学习笔记_第16张图片


回顾一下过程:
【李宏毅机器学习】Transformer(p23) 学习笔记_第17张图片

Self-attention的变形 Multi-head Self-attention

【李宏毅机器学习】Transformer(p23) 学习笔记_第18张图片

Position Encoding

对于Self-attention来说,输入的sequence的顺序是不重要的。因为他做的事情就是对每一个输入的vector都做attention,所以对他来说“邻居”和“天涯”是一样的。

在原始paper中, e i e^i ei是人手设置的,不是学习出来的。 e i e^i ei代表了位置信息,每个位置 e i e^i ei不同。
paper中将 e i e^i ei加上 a i a^i ai得到一个新的vector,之后和Self-attention操作一样。

Q:那么为什么是 e i e^i ei a i a^i ai相加呢?而不是拼接起来呢?
A:把 x i x^i xi再append一个one-hot向量 p i p^i pi,由图可知,结果是一样的。

【李宏毅机器学习】Transformer(p23) 学习笔记_第19张图片
W p W^p Wp如图
【李宏毅机器学习】Transformer(p23) 学习笔记_第20张图片

Seq2Seq with Attention

【李宏毅机器学习】Transformer(p23) 学习笔记_第21张图片
【李宏毅机器学习】Transformer(p23) 学习笔记_第22张图片

Transformer

【李宏毅机器学习】Transformer(p23) 学习笔记_第23张图片
【李宏毅机器学习】Transformer(p23) 学习笔记_第24张图片
【李宏毅机器学习】Transformer(p23) 学习笔记_第25张图片
【李宏毅机器学习】Transformer(p23) 学习笔记_第26张图片
【李宏毅机器学习】Transformer(p23) 学习笔记_第27张图片

Example Application

可以用seq2seq的就可以用transformer

机器读了document set,然后可以写出维基
【李宏毅机器学习】Transformer(p23) 学习笔记_第28张图片

Universal Transformer

【李宏毅机器学习】Transformer(p23) 学习笔记_第29张图片
transformer可以用在文字,也可以用在图像上

让每一个像素与其他像素做attention

【李宏毅机器学习】Transformer(p23) 学习笔记_第30张图片

你可能感兴趣的:(Machine,Learning,机器学习,李宏毅,学习笔记)