首先感谢李宏毅老师的分享,让我受益匪浅。部分图片也直接引用李宏毅老师的ppt 截图
image今天我们将介绍 Bert,那么什么是 Bert 呢? Bert 就是无监督学习 transformer。所以大家又会问什么是 transformer 呢?transformer 就是应用了 self-attention 的 seq2seq。在这句话又出现了两个新概念 self-attention 和 seq2seq。不过今天只会解释 self-attention 而不会去解释什么是 seq2seq,seq2seq 不是今天解释范围。
有关循环神经网可以参见我的简书分享
-
2020机器学习循环神经网(1)
-
2020机器学习循环神经网(2)
-
2020机器学习循环神经网(3)
这里在开始开始介绍 self-attention 我们先介绍一下什么是注意力机制,以及我们为什么需要注意力机制。这里我们举一个自然语言翻译的中问题。
-
我喜欢机器学习
-
I like studying machine learning
这是两个序列,在seq2seq 中我们每一个输出序列对于输入序列信息获取都是均等的,也就是 like 对我、喜欢、机器和学习这些词关注都是等同。但我们都知道 like 可能更关注喜欢。这也就是我们引入注意力机制的原因,我们想让输出某一时刻输出,对每一个时刻关注度是不同的。
在 transformer 中大量的用到了 self-attention 层,我们为什么要在 seq2seq 中用 self-attention 层,这是为了解决 RNN 因为是时间顺序上的限制而无法做平行计算。
处理序列问题中,我们最常用的就是 RNN,输入和输出都是序列。所以 seq2seq 特别适合处理时间上有一定顺序的语言模型等问题。
image由于 RNN 在时间上限制而无法进行平行计算,这是因为这个原因,有人想要拿 CNN 来代替 RNN 来做序列问题。
image用 CNN 的确也可以做到输入序列和输出序列,但是格式每一个 CNN 只能考虑有限内容,但是CNN没有办法考虑更深CNN 在深层CNN 就可以看到更广阔的序列信息。而 CNN 好处是可以平行化。但是 CNN 缺点是需要叠加很多层才能实现和 RNN。
image但是今天有一种更好实现,也就是 self-attention 层,self-attention 合理地解决了 RNN 无法实现平行计算问题,今天几乎所有的 Seq2Seq 都使用了self-attention 重新刷新了一遍,效果让大家惊呼 awesome
image-
首先每一个输入经过 Embedding 层得到
image -
接下来就是 self-attention 层,每一个输入都进行 3 次线性变换分别得到
image
三个向量
这里注意力也就是 image
这里 d 就是 和 的维度,为什么要除以 ,paper 给出解释就是 和 维度越大,他们的方程(variance)也就是越大,为消除维度对结果影响所以除以
-
image
这里用于通过和每一个进行匹配来进行查询
-
image
这里也就是键值(key),k 是 key 缩写,k 用来和 q 进行匹配的。
-
image
这里 v 是 value 也就是从 中抽取的信息,也就是等价于输入
-
接下来做 softmax 来根据,通过softmax 后就会得到输出在各个时刻输入注意力概率分布
- image
-
接下来就是计算出来分别和相乘得到
image
接下我们通过矩阵形式将上面解释内容用矩阵来表示,其实这都是一些列线性变换,所以可以进行并行计算。
image 我们知道乘以就会变成,这样从到依次乘以就得到 image,在上面式子中,可以将到组成矩阵看成 I。同理我们可以得到 K 和 V
image这样我们就有了三个矩阵将计算 Q,K 和 V 矩阵表示。有了这些矩阵,接下来工作就是使用 q 去与 k 进行匹配
image- 这里用的转置和进行点乘计算出 这样就计算出与之间关系, 也就是表示对 的关注度。这些可以用矩阵形式来表示
接下来我们做 softmax 来得到,这里做 softmax 就是为了以概率形式表示我们在某一个时刻对整个序列中不同时刻输入注意力分配。以概率形式表示表示注意力分配。
image image 接下来我们与 image 相乘得到 经过循环执行这部分内容我们就得到序列。 image image通过以上解释我们现在应该了解到在 transformer 中是如何使用 self-attention 层实现了,输出对不同时刻输入内容注意力分配。
网友评论