本篇介绍目前NLP领域的“网红”特征抽取器Transformer。首先,作为引子,引入 Transformer是什么的问题;接着,详细介绍了Transformer的结构和其内部的机制;最后,再总结Transformer的本质和定义。

作者&编辑 | 小Dream哥

1 Transformer是什么?

很早就不断的有读者问小Dream哥什么时候介绍Transformer。确实,Transformer是现在NLP领域最大的网红特征抽取器,基本现在所有的前沿研究都基于Transformer来做特征提取,不奇怪大家对他颇有兴致。

但是,小Dream哥其实并不是很想写Transformer,主要是网上写它的文章真的太多太多了,基本上能说的,各路神仙都把它说了一遍,要写出新意真的太难。

今天小Dream哥就在这里说说,我所理解的Transformer吧,如有不对的地方,请大家指正。

在《Attention is all you need》中,Transformer是一个用于机器翻译的编解码结构,这也是它为什么叫Transformer的原因。后来,因为在序列编码中强大的特征抽取能力和高效的运算特性,Transformer被从编解码结构里抽离出来,成为了在NLP领域,目前最流行的特征抽取器。

我们暂且把对Transformer的认知,停留在这个层面,看完Transformer里到底有什么之后,再来思考这个问题,看能不能有更多的收获。

2 Transformer里有什么

安利一下,上图来自http://jalammar.github.io/illustrated-transformer/该篇博客讲tranformer的网络结构讲的非常细和形象,想要了解这方面的读者开源仔细读一下。

上图是Transformer中,第一个sub-layer的结构示意图。其特别之处只有输入接收的为字向量和位置编码的和,其他sub-layer的输入为上一层sub-layer的输出。每一个sub-layer,除上述差异之外,别无二致,所以我们只需要了解一个就可以。

通常,会有多层这样的sub-layer,在Bert-base中,有12层,GPT-2.0则更深,所以参数量都很大。GPT-2.0的参数量达到了“丧心病狂”的3亿之多,是名副其实的大模型了。曾经刚入NLP坑的时候,会庆幸自己不用像CV的同学那样,天天看着贵的显卡乍舌叹气。不过小Dream哥现在也不用看了,训练最新模型的显卡,是一定买不起了。话说回来,NLP中,模型参数已经大大超过了CV模型的参数量,正在朝着超大规模网络的方向狂奔。真有点担心,这样下去,后面NLP的玩家就只剩下那几个大玩家了。

好了,我们先看看sub-layer都有些什么内容。

(1) self-attention

上图是Transformer中self-attention的计算过程。其实在Transformer中,Q,K,V指的都是输入序列乘上不同的权重W_Q,W_K,W_V。上述过程,可以用如下的公式概括:

看过我们上一篇Attention文章的同学,应该对这个公式很熟悉。在Transformer中,主要通过这样一层self-Attention对输入序列进行编码。

该编码过程的一个特点是,在编码序列中的某一个词时,让该词充分的与序列中的其他词进行运算,从而能够得到该词与序列中所有词的句法和语义关系编码

该编码过程的另外一个重要的特点是,序列是并行输入的,因此运算效率很高

(2) Multi-head Attention


Multi-head Attention,即多头注意力机制。大概的处理流程如下图所示:

更多的细节,读者可以参考原文,这里不再详述。总的来说,多头机制就是8组权重,计算出了8个不同的输出,再通过拼接和运算得到新的序列编码

那么,增加了8倍的参数和运算量。引入这样的机制有什么好处呢?

1) 极大的增强了模型的序列编码能力,特别是序列内词之间关系的语义表征能力。这个可以这样去想,假如只有一个头的话,因为是self-attention,在计算过程中,很有可能该词与该词的的计算结果可能会比较大,从而词与自身的运算占据了很大的影响。如果引入多头机制,不同的权重,则可以避免这种弊端,增强模型的编码能力。

2) 实现了Attention的多个表征子空间。这样的好处是,每个子空间可以表征序列不同方面语义信息。这方面小Dream哥也没有看到相关论文的解释和支撑,就不多说了,了解的小伙伴可以留言指教。

(3) Feed-forward


每一个sub-layer还会接一个Feed-forward Neural Network(FNN),FNN的计算公式如下:

即在每个sub-layer,针对self-Attention层的输出,先使用一个线性变换,再针对该线性变换的输出使用RELU函数,最后再针对RELU函数的输出使用一个线性变化。那么,做这么繁琐的变换有什么意义呢?

我们将FNN与CNN做对比,其实可以发现,其效果与加上一层卷积核大小为1*1的CNN是一样的。那么这就好理解了,这层所谓的FNN其实也是做特征提取的。至于它为什么不直接取名为1*1CNN layer,这就要去问Tranformer的发明者了。

在Transformer中,还有其他的层,例如Poition-Encoding层,The Residuals残差连接等,这些都好理解,读者可以参考前面推荐的Jay Alammar的博客。

3 再说Transformer

前面大概讲述了Transformer的结构及其每个sub-layer的组成。那么我们再来讨论一下,Transformer到底是什么?

我们可不可以这样说,Transformer其实是一个用于对序列输入进行特征编码的工具。它以self-Attention机制为基础,从而能够编码序列输入的语义信息,对序列输入内不同词之间的关系也具有较强的编码能力,特别是Multi-Attention的引入,极大的增强了其编码能力。同时,Transformer内其实还有CNN的影子,尽管原作者避免提及。并且,因为其结构上的优势,像CNN一样,Transformer天然就能够并行计算,这一点是RNN等模型无法具备的。

总结

Transformer中最重要的特点就是引入了Attention,特别是Multi-Head Attention。作为一个序列输入的特征抽取器,其编码能力强大,没有明显的缺点。短期内难以看到可以匹敌的竞争对手。NLP领域的同学们,务必好好研究。

读者们可以留言,或者加入我们的NLP群进行讨论。感兴趣的同学可以微信搜索jen104,备注"加入有三AI NLP群"

下期预告:说一说NLP领域的“当红辣子鸡”BERT

知识星球推荐

扫描上面的二维码,就可以加入我们的星球,助你成长为一名合格的自然语言处理算法工程师。

知识星球主要有以下内容:

(1) 聊天机器人。考虑到聊天机器人是一个非常复杂的NLP应用场景,几乎涵盖了所有的NLP任务及应用。所以小Dream哥计划以聊天机器人作为切入点,通过介绍聊天机器人的原理和实践,逐步系统的更新到大部分NLP的知识,会包括语义匹配,文本分类,意图识别,语义匹配命名实体识别、对话管理以及分词等。

(2) 知识图谱。知识图谱对于NLP各项任务效果好坏的重要性,就好比基础知识对于一个学生成绩好坏的重要性。他是NLP最重要的基础设施,目前各大公司都在着力打造知识图谱,作为一个NLP工程师,必须要熟悉和了解他。

(3) NLP预训练模型。基于海量数据,进行超大规模网络的无监督预训练。具体的任务再通过少量的样本进行Fine-Tune。这样模式是目前NLP领域最火热的模式,很有可能引领NLP进入一个全新发展高度。你怎么不深入的了解?

转载文章请后台联系

侵权必究

往期精选

  • 【NLP】自然语言处理专栏上线,带你一步一步走进“人工智能技术皇冠上的明珠”。

  • 【NLP】用于语音识别、分词的隐马尔科夫模型HMM

  • 【NLP】用于序列标注问题的条件随机场(Conditional Random Field, CRF)

  • 【NLP】经典分类模型朴素贝叶斯解读

  • 【NLP】 NLP专栏栏主自述,说不出口的话就交给AI说吧

  • 【NLP】 深度学习NLP开篇-循环神经网络(RNN)

  • 【NLP】 NLP中应用最广泛的特征抽取模型-LSTM

  • 【NLP】 聊聊NLP中的attention机制

  • 【技术综述】深度学习在自然语言处理中的应用发展

【NLP】 理解NLP中网红特征抽取器Tranformer相关推荐

  1. 放弃幻想,全面拥抱Transformer:NLP三大特征抽取器(CNN/RNN/TF)比较

    作者 | 张俊林,中国中文信息学会理事,目前在新浪微博 AI Lab 担任资深算法专家.在此之前,张俊林曾经在阿里巴巴任资深技术专家,以及在百度和用友担任技术经理及技术总监等职务.同时他是技术书籍&l ...

  2. NLP三大特征抽取器(CNN/RNN/TF)比较:全面拥抱Transformer

    作者 | 张俊林,中国中文信息学会理事,目前在新浪微博 AI Lab 担任资深算法专家.在此之前,张俊林曾经在阿里巴巴任资深技术专家,以及在百度和用友担任技术经理及技术总监等职务.同时他是技术书籍&l ...

  3. 理解NLP中的卷积神经网络(CNN)

    此篇文章是Denny Britz关于CNN在NLP中应用的理解,他本人也曾在Google Brain项目中参与多项关于NLP的项目.  ·  翻译不周到的地方请大家见谅. 阅读完本文大概需要7分钟左右 ...

  4. 谷歌AI论文BERT双向编码器表征模型:机器阅读理解NLP基准11种最优(公号回复“谷歌BERT论文”下载彩标PDF论文)

    谷歌AI论文BERT双向编码器表征模型:机器阅读理解NLP基准11种最优(公号回复"谷歌BERT论文"下载彩标PDF论文) 原创: 秦陇纪 数据简化DataSimp 今天 数据简化 ...

  5. 【NLP】 NLP中应用最广泛的特征抽取模型-LSTM

    本篇介绍在NLP中应用最为广泛的特征抽取模型LSTM.详细介绍LSTM提出的由来及其模型结构,并由此分析了LSTM能够解决RNN不能够对长序列进行处理和训练的原因. 作者&编辑 | 小Drea ...

  6. NLP 神经网络训练慎用 Adam 优化器

    https://www.jianshu.com/p/48e71b72ca67 NLP 神经网络训练慎用 Adam 优化器 theoqian关注 12019.02.10 16:01:45字数 499阅读 ...

  7. NLP工具——自制zero-shot事件抽取器

    NLP工具--自制zero-shot事件抽取器 0. 简介 1. 抽取全部潜在的事件 2. 抽取特定类型的事件 3. 结语 0. 简介 在事件抽取任务中,数据的获取是一件非常关键工作,由于数据标注的成 ...

  8. [深度学习概念]·理解NLP的卷积神经网络

    理解NLP的卷积神经网络 当我们听说卷积神经网络(CNN)时,我们通常会想到计算机视觉.CNN负责图像分类方面的重大突破,是目前大多数计算机视觉系统的核心,从Facebook的自动照片标签到自动驾驶汽 ...

  9. 全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较

    放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较 在辞旧迎新的时刻,大家都在忙着回顾过去一年的成绩(或者在灶台前含泪数锅),并对2019做着规划,当然也 ...

最新文章

  1. 当前上下文中不存在viewbag
  2. WebSocket探秘
  3. 【转载】Linux Shell-条件测试
  4. Linux wget 命令详解
  5. jQuery Mobile 笔记(1)- jQuery Mobile页面结构
  6. 30 多年的软件经验,总结出 10 个编写出更好代码的技巧
  7. 【一天一个shell命令】好管家-磁盘-du
  8. oracle查看本机字符集,查看、修改oracle字符集,查看oracle版本
  9. linux ubuntu内核安装位置,在Ubuntu中安装或升级内核 linux kernel
  10. 软件是怎么开发出来的?怎么进行软件开发流程
  11. android项目版本,怎查看Android项目的Android版本
  12. Win10怎么设置每天自动开机
  13. word2016页码都是一样的这样解决,详细全过程
  14. 获取微信昵称时 过滤特殊字符
  15. 诸葛:分析师是如何写好数据研究报告的?
  16. 智慧公厕智能镜子厕所管理系统一站式服务
  17. 关于拖延症的一些小思考
  18. 【错题集】python基础之字符串的格式化循环语句与注释
  19. 用python使图形动起来?
  20. CodeForces 103B Cthulhu

热门文章

  1. IDEA 2020 本土化,真的是全中文了,新手,开心了!
  2. 带你学python基础:变量和基本数据类型
  3. springboot 开发入门,及问题汇总
  4. 崔家桥计算机学校,汉寿县崔家桥中学
  5. python开发的模型部署_使用Python部署机器学习模型的10个实践经验
  6. (仿头条APP项目)6.点击过的新闻列表文字变灰和下拉刷新与滚动加载新闻数据
  7. 在Windows上使用putty连接一台Linux主机
  8. Gentoo 安装日记 13 (配置内核 :可执行文件安格式和网络)
  9. 教你从0到1搭建秒杀系统-抢购接口隐藏与单用户限制频率
  10. linux debian硬盘安装,硬盘安装linux debian如何配置grub文件