系列文章目录

深度学习NLP(一)之Attention Model;
深度学习NLP(二)之Self-attention, Muti-attention和Transformer
深度学习NLP(三)之ELMO、BERT、GPT
深度学习NLP(四) 之IMDB影评情感分析之BERT实战


什么是Self-attention, Muti-attention和Transformer

  • 系列文章目录
  • 1. RNN与CNN在Seq2Seq的缺点
  • 2. 什么是Self-attention
    • 怎么计算每个输入值的Attention
  • 3. 什么是Multi-Head Self-attention
  • 4. 为什么用Multi-Head Self-attention
  • 5. 什么是Positional Encoding
  • 6. self-attention 在seq2seq里怎么用的
  • 7. Transformer
  • 8. 总结
  • 参考资料

1. RNN与CNN在Seq2Seq的缺点

下图左边是Seq2Seq的RNN的实现,缺点是不能并行。
右边是CNN, 可以通过加多层叠加间接解决长期数据依赖的问题。优点是可以并行(并行训练,并行执行)

2. 什么是Self-attention

2017已经出现在论文里了。 论文的标题是“Attention is all you need”. 意思是你不需要CNN,RNN. 你唯一需要的是Attention.

下图左边是RNN实现的Seq2Seq.
右边是Self-attention的实现。Self-attention的优点是b1,b2,b3,b4b^1,b^2,b^3,b^4b1,b2,b3,b4可以并行执行的。而且Self-attention也不是RNN实现的。

q: query 它要去match其它人的。
k: key 它是被match的
V: value

怎么计算每个输入值的Attention

计算a1a^1a1的attention值, 用各自的q1q^1q1乘以其它的kik^iki然后除以d\sqrt{d}d

,
为什么除以d\sqrt{d}d

, 因为矩阵之间点乘后值可能过高,

然后在经过softmax层,就等到了每个概率。并且a^1,1+a^1,2+a^1,3+a^1,4=1\hat{a}_{1,1}+\hat{a}_{1,2} + \hat{a}_{1,3}+ \hat{a}_{1,4} = 1a^1,1+a^1,2+a^1,3+a^1,4=1
下图最上边这个公式就是softmax函数

有了a^1,1,a^1,2,a^1,3,a^1,4\hat{a}_{1,1}, \hat{a}_{1,2} , \hat{a}_{1,3}, \hat{a}_{1,4}a^1,1,a^1,2,a^1,3,a^1,4后, 然后让它们各自乘以对应的viv^ivi, 最后相加,就等到了第一个Seq2Seq的输出值b1b^1b1

你会发现产生b1过程中,其实你是看到a1到a4的所有值的。
如果你想只考虑local information,也是可以做到的。把a^1,2,a^1,3,a^1,4\hat{a}_{1,2} , \hat{a}_{1,3}, \hat{a}_{1,4}a^1,2,a^1,3,a^1,4都改为0就可以。
如果你是考虑global information , 下图就是这样的。

其它b2,b3,b4b^2, b^3, b^4b2,b3,b4 都是类似的,下图是计算b2b^2b2的过程,和b1b^1b1是也样的。

最后b1,b2,b3,b4b^1, b^2, b^3, b^4b1,b2,b3,b4 都被平行的计算出来了。 和CNN是一样的。

下图是一个具体实现过程-怎么用矩阵计算的。a1,a2,a3,a4{a^1,a^2,a^3,a^4}a1,a2,a3,a4 整个看成一个矩阵I

有了上图的K的矩阵,就可以通过KT∗qi=(a1,1,a1,2,a1,3,a1,4)K^T*q^i = (a_{1,1} ,a_{1,2},a_{1,3},a_{1,4})KTqi=(a1,1,a1,2,a1,3,a1,4)

其实{q1,q2,q3,q4q^1, q^2, q^3, q^4q1,q2,q3,q4}一起可以看作是Q矩阵。
{k1,k2,k3,k4k^1, k^2, k^3, k^4k1,k2,k3,k4}一起可以看作是K矩阵。
{ai,1,ai,2,ai,3,ai,4a_{i,1} ,a_{i,2},a_{i,3},a_{i,4}ai,1,ai,2,ai,3,ai,4}, i 从1到4,一起可以看作是A矩阵。

下图计算b1,b2,b3,b4b^1,b^2, b^3,b^4b1,b2,b3,b4的过程,

下图是上面矩阵计算的一个总结,你会发现整个过程是都是矩阵计算,而矩阵计算是可以用GPU加速的。

3. 什么是Multi-Head Self-attention

和Self-attention 相比, 变化的地方就是
qiq^iqi经过矩阵运算变成了两个qi,1和qi,2q^{i,1}和q{i,2}qi,1qi,2
kik^iki经过矩阵运算变成了两个ki,1和ki,2k^{i,1}和k{i,2}ki,1ki,2
viv^ivi经过矩阵运算变成了两个vi,1和vi,2v^{i,1}和v{i,2}vi,1vi,2
相乘的时候的qi,1q^{i,1}qi,1只和ki,1与kj,1k^{i,1}与k^{j,1}ki,1kj,1相乘。其它都一样的。

下图是说明bib^ibi是怎么转为bi,1与bi,2b^{i,1}与b^{i,2}bi,1bi,2

4. 为什么用Multi-Head Self-attention

每个head关注的点不一样,举例来说,有的head它可能关注local information. 有的head关注的是global information。
有了multi-head后, 每个head就可以各司其职,每个head就可以做自己想做的事。

这个head是超参可以调的。不是固定为2的。

5. 什么是Positional Encoding

因为你会看到其实self-attention是和输入位置的没有关系。因为每个q都和其它的k做乘积,所以和距离没有关系的。
也就是没有sequence的次序。这个显然不是我们要的。我们希望能把input的sequence的次序考虑进去。

下图eie^iei 就是xix^ixi对应位置的信息。

那有人问ei+aie^i+a^iei+ai为什么要相加而不是连接起来呢?
如果假设每个词的文字信息用one-hot来表示pip^ipi。那么如下图所示wp+pi=eiw^p + p^i = e^iwp+pi=ei

下图右边就是WpW^pWp画出的样子。WpW^pWp其实是一个比较复杂的式子产生的。

6. self-attention 在seq2seq里怎么用的

Seq2seq 有两部分, encoder与decoder.

把中间的RNN那部分换成self-attention layer就可以了。就这么简单。

7. Transformer

下图就是Transformer,包含两大部分,encoder与decoder,
每个部分都可以是多个。
举个翻译的例子。输入是”机器学习“,输出是”machine learning“

Decoder和Encoder的结构差不多,但是多了一个attention的sub-layer,这里先明确一下decoder的输入输出和解码过程:

输出:对应i位置的输出词的概率分布
输入:encoder的输出 & 对应i-1位置decoder的输出。所以中间的attention不是self-attention,它的K,V来自encoder,Q来自上一位置decoder的输出
解码:这里要特别注意一下,编码可以并行计算,一次性全部encoding出来,但解码不是一次把所有序列解出来的,而是像rnn一样一个一个解出来的,因为要用上一个位置的输入当作attention的query

下图是对tranformer中每一个部分做详细的说明。
下面是Encoder的详细说明:

  1. 输入经过Input Embeding 的到word vector.
  2. 然后加上位置信息(Postional encoding)
  3. 经过Mutl-head attention – 输入是一个序列, 输出是一个序列 – 具体的上面已经讲过了
  4. 将输入mutl-head之前的a与输出的b 相加 ,然后经过layer normalization.
  5. 然后进入feed foward进行计算。
  6. 将输入feed foward之前的a与输出的b 相加 ,然后经过layer normalization.

下面是Decoder的详细说明:
7. 输入前一个timeset所产生的output。
8. 经过output embeding 加上postional encoding…
9. 进入灰色的buck, 这个灰色的buck, 会重复多次。
10. 进入Masked multi-head attention.
11.然后经过add & Norm --和encoder上面一样的。
11. 输入加Encoder的输出做为Multi-head attention的输入部分
12. 下面就简单了。自己看看懂了。

Feed Foward是指fully connected feed-forward network 前馈神经网络-其实就是BP网络-可以是全连接网络
Masked multi-head attention是指这个它只会attend到已经产生出来的sequence上。没有产生出来根本都不存在,这是合理的。

下图是Multi-head attention 达到的效果,其中线越粗关系越密切。
你可以看到,它已经做到了不光和近的有联系,也和远的也有联系。

下图说的是你可以用transformer模型输入上万个word, 输出的是上千个word, 这个是RNN做不到的。

8. 总结

Transformer是第一个用纯attention搭建的模型,不仅计算速度更快,在翻译任务上也获得了更好的结果。Google现在的翻译应该是在此基础上做的,但是请教了一两个朋友,得到的答案是主要看数据量,数据量大可能用transformer好一些,小的话还是继续用rnn-based model

参考资料

[1] 李宏毅老师在B站的视频
[2] Attention is all you need

[深度学习-NLP]什么是Self-attention, Muti-attention和Transformer相关推荐

  1. 一文概述2017年深度学习NLP重大进展与趋势

    本文,我将概述 2017 年深度学习技术在 NLP 领域带来的进步.可能会有遗漏,毕竟涵盖所有论文.框架和工具难度太大.我想和大家分享这一年我最喜欢的一些研究.我认为 2017 年是 NLP 领域的重 ...

  2. 深度学习(1)---2017年深度学习NLP重大进展与趋势

    深度学习(DL)架构和算法在图像识别.语音处理等领域实现了很大的进展.而深度学习在自然语言处理方面的表现最初并没有那么起眼,不过现在我们可以看到深度学习对 NLP 的贡献,在很多常见的 NLP 任务中 ...

  3. 【自然语言处理】一文概述2017年深度学习NLP重大进展与趋势

    选自 tryolabs 机器之心编译 参与:路雪.黄小天.蒋思源 作者通过本文概述了 2017 年深度学习技术在 NLP 领域带来的进步,以及未来的发展趋势,并与大家分享了这一年中作者最喜欢的研究.2 ...

  4. 今日头条李航:深度学习NLP的现有优势与未来挑战

    近日,AI 技术大牛李航博士(已加入今日头条)在<国家科学评论>(National Science Review,NSR)上发表了一篇题为<Deep Learning for Nat ...

  5. 保健中的深度学习nlp技术用于决策

    介绍 (Introduction) The ubiquitous adoption of electronic health records in hospitals and other health ...

  6. Python深度学习-NLP实战:字向量的训练与生成

    系列文章目录 Python深度学习-NLP实战:深度学习系列培训教程 Linux服务器软件的简单使用 Linux命令的简单使用 训练集.测试集.验证集的介绍及制作 字向量的训练与生成 文本分类之SVM ...

  7. Python深度学习-NLP实战:命名实体识别(NER)之分词与序列标注、实体识别任务简介

    系列文章目录 Python深度学习-NLP实战:深度学习系列培训教程 Linux服务器软件的简单使用 Linux命令的简单使用 训练集.测试集.验证集的介绍及制作 字向量的训练与生成 文本分类之SVM ...

  8. 深度学习(五)——DRN, Bi-directional RNN, Attention, seq2seq, DMN

    https://antkillerfarm.github.io/ 神经元激活函数进阶 ReLU的缺点(续) 为了解决上述问题,人们提出了Leaky ReLU.PReLU.RReLU.ELU.Maxou ...

  9. 系统学习NLP(二十四)--详解Transformer (Attention Is All You Need)

    转自:https://zhuanlan.zhihu.com/p/48508221 推荐:http://jalammar.github.io/illustrated-transformer/ 前言 注意 ...

最新文章

  1. Spark的transformation和action算子简介
  2. Xinlinx 7系列 FPGA 总览
  3. python与c语言在语法上的区别-Python与C语言基础对比(Python快速入门)
  4. 【算法】《algorithm-note》算法笔记中文版正式发布!
  5. SAP Spartacus B2B User list页面的数据加载逻辑
  6. OPA 22 - sinor fake xml http request
  7. 在VMware workstation 9.0中安装Windows server 2012 和 Hyper-v(虚拟机中安装虚拟机)
  8. 〔总结〕容易遗忘的JS知识点整理
  9. 博客6:磁盘以及创建文件系统的相关知识点
  10. matlab无法识别VS编译器的办法
  11. twaver html5软件价格,TWaver数据中心可视化软件
  12. 资本纷纷入局,咖啡赛道还能香多久?
  13. mvc4.0 @ViewBag.Title
  14. 利用NEO与Unity制作游戏(第2部分)
  15. 杂谈|程序员还是工程师
  16. 悲观锁、乐观锁以及分布式锁
  17. Linux - iptable(防火墙)
  18. IC工程师入门必学《Verilog超详细教程》(附下载)
  19. 欧氏距离 VS 余弦距离
  20. 研发团队管理激励机制

热门文章

  1. sequelize常见操作使用方法
  2. Java中的位移运算符
  3. asp.net EF+MVC2实战2
  4. 国外开源的PACS服务器
  5. 设置网格_500ETF网格设置
  6. Python——五分钟理解函数式编程与闭包
  7. #JAVA# 判断从键盘输入的字符串是否为回文
  8. 【springboot 踩坑记录】拦截器中无法注入bean
  9. leetcode 整数反转
  10. wdinow 下 使用 docker 安装  code-server (web 版 vscode)