本文分享自华为云社区《espnet中的transformer和LSTM语言模型对比---以aishell为例》,作者: 可爱又积极 。

NLP特征提取器简介 - RNN和Transformer

近年来,深度学习在各个NLP任务中都取得了SOTA结果,我们先了解一下现阶段在自然语言处理领域最常用的特征抽取结构。

长短期记忆网络(LSTM)

传统RNN的做法是将所有知识全部提取出来,不作任何处理的输入到下一个时间步进行迭代。就像参加考试一样,如果希望事先把书本上的所有知识都记住,到了考试的时候,早期的知识恐怕已经被近期的知识完全覆盖了,提取不到长远时间步的信息是很正常的。而人类是这样做的吗?显然不是的,我们通常的做法是对知识有一个理性判断,重要的知识给予更高的权重,重点记忆,不那么重要的可能没多久就忘了,这样,才能在面对考试的时候有较好的发挥。在我看来,LSTM的结构更类似于人类对于知识的记忆方式。理解LSTM的关键就在于理解两个状态ct和at和内部的三个门机制:

图中我们可以看见,LSTM Cell在每个时间步接收上个时间步的输入有两个,传给下一个时间步的输出也有两个。通常,我们将c(t)看作全局信息,at看作全局信息对下一个Cell影响的隐藏状态。

遗忘门、输入门(图中的update gate)和输出门分别都是一个激活函数为sigmoid的小型单层神经网络。由于sigmoid在(0,1)范围内的取值,有效的用于判断是保留还是“遗忘”信息(乘以接近1的值表示保留,乘以接近0的值表示遗忘),为我们提供了信息选择性传输的能力。

这样看下来,是不是觉得LSTM已经十分"智能"了呢?但实际上,LSTM还是有其局限性:时序性的结构一方面使其很难具备高效的并行计算能力(当前状态的计算不仅要依赖当前的输入,还要依赖上一个状态的输出),另一方面使得整个LSTM模型(包括其他的RNN模型,如GRU)总体上更类似于一个马尔可夫决策过程,较难以提取全局信息。

GRU可以看作一个LSTM的简化版本,其将at与ct两个变量整合在一起,且讲遗忘门和输入门整合为更新门,输出门变更为重制门,大体思路没有太大变化。两者之间的性能往往差别不大,但GRU相对来说参数量更少。收敛速度更快。对于较少的数据集我建议使用GRU就已经足够了,对于较大的数据集,可以试试有较多参数量的LSTM有没有令人意外的效果。

Transformer

图中红框内为Encoder框架,黄框内为Decoder框架,其均是由多个Transformer Block堆叠而成的。这里的Transformer Block就代替了我们LSTM和CNN结构作为了我们的特征提取器,也是其最关键的部分。

作者采用Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算限制为是顺序的,也就是说RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:

  1. 时间片t的计算依赖t-1时刻的计算结果,这样限制了模型的并行能力;
  2. 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。

Transformer的提出解决了上面两个问题,首先它使用了Attention机制,将序列中的任意两个位置之间的距离是缩小为一个常量;其次它不是类似RNN的顺序结构,因此具有更好的并行性,符合现有的GPU框架。

从语义特征提取能力:Transformer显著超过RNN和CNN,RNN和CNN两者能力差不太多。

长距离特征捕获能力:CNN极为显著地弱于RNN和Transformer,Transformer微弱优于RNN模型,但在比较远的距离上(主语谓语距离大于13),RNN微弱优于Transformer,所以综合看,可以认为Transformer和RNN在这方面能力差不太多,而CNN则显著弱于前两者。这部分我们之前也提到过,CNN提取长距离特征的能力收到其卷积核感受野的限制,实验证明,增大卷积核的尺寸,增加网络深度,可以增加CNN的长距离特征捕获能力。而对于Transformer来说,其长距离特征捕获能力主要受到Multi-Head数量的影响,Multi-Head的数量越多,Transformer的长距离特征捕获能力越强。

任务综合特征抽取能力:通常,机器翻译任务是对NLP各项处理能力综合要求最高的任务之一,要想获得高质量的翻译结果,对于两种语言的词法,句法,语义,上下文处理能力,长距离特征捕获等方面的性能要求都是很高的。从综合特征抽取能力角度衡量,Transformer显著强于RNN和CNN,而RNN和CNN的表现差不太多。

并行计算能力:对于并行计算能力,上文很多地方都提到过,并行计算是RNN的严重缺陷,而Transformer和CNN差不多。

espnet中的transformer和LSTM语言模型对比实验

espnet所有的例子中语言模均默认是LSTM,这里我以aishell为例,epoch设置为20,batchsize=64。

LSTM结构配置:

LSTM结果:

将语言模型换为transformer。transformer结构配置:

transformer结果:

实验结论: transformer语言模型的loss确实比lstm要小,但由于语言模型序列信息是非常重要的,transformer只能获取模糊的位置信息,因此transformer的困惑度比lstm要大!后续应该就这一方面进行改进。

点击关注,第一时间了解华为云新鲜技术~

espnet中的transformer和LSTM语言模型对比实验相关推荐

  1. 语音中的 Transformer一文打尽!

    写在前面-- 自 2017 年 Transformer 技术出现以来,便在 NLP.CV.语音.生物.化学等领域引起了诸多进展. 知源月旦团队期望通过"Transformer+X" ...

  2. 收藏 | 计算机视觉中的Transformer

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨Ch ...

  3. java如何给一个链表定义和传值_如何在CUDA中为Transformer编写一个PyTorch自定义层...

    如今,深度学习模型处于持续的演进中,它们正变得庞大而复杂.研究者们通常通过组合现有的 TensorFlow 或 PyTorch 操作符来发现新的架构.然而,有时候,我们可能需要通过自定义的操作符来实现 ...

  4. 计算机视觉中的Transformer的最新进展!

    在公众号[计算机视觉联盟]后台回复[9076]获取独家200页手推AI笔记:我的微信:PursueWin:    --by Sophia 中科院学霸 | 上市AI算法工程师 | CSDN博客专家 将T ...

  5. 大模型系统和应用——Transformer预训练语言模型

    引言 最近在公众号中了解到了刘知远团队退出的视频课程<大模型交叉研讨课>,看了目录觉得不错,因此拜读一下. 观看地址: https://www.bilibili.com/video/BV1 ...

  6. 量化感知训练_一文速览EMNLP 2020中的Transformer量化论文

    花了几天看了三篇EMNLP 2020中关于Transformer模型量化的相关论文,快速记一下要点. Fully Quantized Transformer for Machine Translati ...

  7. 大盘点!自动驾驶中基于Transformer的单目BEV感知

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 今天自动驾驶之心很荣幸邀请到Garfield,为大家分享自动驾驶中基于Transformer的单目BEV感知! ...

  8. 【组队学习】【30期】7. CV中的Transformer

    CV中的Transformer 航路开辟者:安晟 领航员:尚育鹏 航海士:安晟.袁明坤.闫永强 基本信息 开源内容:https://github.com/datawhalechina/dive-int ...

  9. 推荐系统中常用算法 以及优点缺点对比

    推荐系统中常用算法 以及优点缺点对比 2014/09/20 [Martin导读]随着互联网特别是社会化网络的快速发展,我们正处于信息过载的时代.用户面对过量的信息很难找到自己真正感兴趣的内容,而内容提 ...

  10. 【数据结构与算法】5. C++中 list、deque、vector对比

    C++中list.deque以及vector对比 C++的容器类包括两大类: 1.顺序存储结构,包括vector.list.deque等等: 2.关联存储结构,包括set.map.multiset等等 ...

最新文章

  1. -bash:syntax error near unexpected token '('
  2. asp.net模版页面的高级应用
  3. web 日志分析工具 awstats 简单安装
  4. 如何移除项目中无用的 console.log 代码
  5. 忘记手势密码的解决办法
  6. mysql远程访问 linux_Linux中开启mysql远程访问功能
  7. 使用Iterator 或for-each注意:java.util.ConcurrentModificationException
  8. 销售行业ERP数据统计分析都有哪些维度?
  9. 分布式存储系统设计的关键问题
  10. 推荐几个对编程有帮助的游戏
  11. AR、VR,到底哪个才是未来的发展趋势?
  12. 51单片机60秒倒计时 数码管显示
  13. 笨鸟的平凡之路-KETTLE的安装
  14. 视频剪辑完成,应该如何给视频配音?三种配音方法快来学
  15. 纯css实现向上箭头动画显示
  16. 【DAPDM 四】--- dapm机制深入分析(下篇)
  17. C语言中的静态变量和静态函数
  18. android待机动画,Android 忆童年 DVD机待机 loading 动画
  19. 保护终端信息安全的意义何在?
  20. html5 we3c,TWDDMM8DRT供应

热门文章

  1. Elasticsearch08:es-ik添加自定义词库、热更新词库
  2. 中国大学mooc慕课python答案_中国大学MOOC(慕课)Python编程基础答案
  3. 把PDF转换成图片,大家都这么做
  4. Bug系列路径规划算法原理介绍(三)——Tangent BUG算法
  5. Unicast与Multicast
  6. SpringCloud Gateway详解与配置
  7. vue3警告[Vue warn]: Extraneous non-emits event listeners (getVal) were passed to component but could n
  8. 数据库服务器使用的RAID存储架构初步介绍
  9. zend php5.2,phpstudy v8 php5.2安装zend
  10. The Boys x PUBGMOBILE 联动火热来袭!来看最新游戏海报