热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

transformer中attention计算方式_拆解训练数据如何一层一层“流”过TransformerXL网络...

想要洞悉某个神经网络结构,一个好的步骤是:“从整体上看看每一部分的作用,再一块一块单独细致的研究,最后举一反三”。这篇文章&
5db344dcd6d14901af3b747424251ff3.png

想要洞悉某个神经网络结构,一个好的步骤是:“从整体上看看每一部分的作用,再一块一块单独细致的研究,最后举一反三”。这篇文章,就是从整体上着眼,先把Transformer-XL的整个结构的框架勾勒出来,看看每一部分对数据起到的作用。

约定

  • 为简化问题,本文统一使用“A B C D E F G H I J K L M N O P Q R S T U V W X Y Z”这样一个语料数据来讨论问题。其中每一个字母可以当做是一个英文单词、一个中文词语或者一个汉字等Token。
  • 本文提到的“RNN”指:RNN以及所有RNN变种。
  • 为了关注结构本身,数据不序列化、不预处理、不增加开始符和结束符。

从RNN和Vanilla Transformer到Transformer-XL

RNN和Vanilla Transformer的具体实现原理就不展开讨论了。我尝试用更加生动的方式讲一讲思路层面的递进。然后重点放在后面章节的Transformer-XL的解析。

语言模型其实非常类似人类的阅读。而这三种语言模型,分别对应了一种“阅读习惯”。

  • RNN:一个字一个字阅读,每读一个字都把这个新字融入记忆,然后预测下一个字。如下图所示,我们看到从起始字符开始,我们在不停维护一份Mem(隐层状态)用来刻画自己已经读到的内容,然后用当前字符和Mem作为依据,预测下一个字,并更新Mem。
9360e35fae661e027e666213e2d8bda9.png
  • Vanilla Transformer:清空大脑,一次阅读一大段文字,预测下一个字。如下图所示,对于Transformer来说,他有能力一次性阅读一大段的字符,然后预测下一个字符。但Transformer没有任何记忆能力。也就是每一次阅读,都是一个新的开始。
9ac213e42421b6cad0e23c78a899c0a0.png
  • Transformer-XL:一段一段阅读,把每段的内容更新到记忆中,预测下一个字。Transformer-XL让我想到了初中时候看过的一个“速读”教材(虽然到最后都没练会)。这种方式就是整句整句阅读,串起来对全文有一个了解。
5e9b89ec9754f24b38d47104d5ac4332.png

看图就明显能感觉到,Transformer-XL思路上是RNN和Vanilla Transformer的融合。也就是把RNN的记忆单元及递归训练和Transformer的一次阅读一段的能力结合到了一起。

思路上理清楚之后,我们马上就进入今天的主题,Transformer-XL训练阶段流程的详细解析。

Batch化数据

对于大多数NLP任务来说,标注数据是极其缺少且珍贵的。但这里不包括语言模型,语言模型的训练只需要无监督数据即可,也就是一部小说、网上爬下来的海量文字等,都可以作为训练数据。这也就是NLP任务中,预训练可能性的基石。

我们还是使用“ABC……”这个语料来简化问题。设Batch size为2,Target len为3。

e585340855c1ea7db31fceceed0f4123.png

如上图,首先按照 batchsize 分成多行,这样每一行从开始到结尾,在原文中都是连续的。然后每一行都按照 tgt_len 分成多个batch。最后将数据错开一位,生成X对应的y。X作为输入进入网络计算;y作为目标,用来计算Loss。这样数据就处理好,可以输入到训练网络用于训练了。

从数据到Loss

已经成Batch的训练数据按照顺序进入训练网络。宏观上的模块顺序如下图所示。

a57580e878b92014a162691e7b649551.png

①:上一个Batch数据训练之后得到的新的记忆单元数据,是当前Batch的输入。

②:Vanilla Transformer中采用了“绝对位置编码”,这是由于对于Vanilla Transformer每一次阅读都是一次全新的阅读,绝对位置编码就给与了足够的位置信息。

但是Transformer-XL中,上一个章节是下一个章节的上文,若是还采用绝对位置编码,就给与了不同章节第一个位置字符同样的编码,这是不能接受的。所以Transformer-XL中采用了“相对位置编码”。这里我们不展开来说,后面再单独写一篇文章来剖析相对位置编码是如何起作用的。对于相对位置编码我们暂时只需要知道:1. 相对位置编码是用来取代Vanilla Transformer中绝对位置编码的。2.为位置不敏感的Attention网络提供了位置信息。

③:Embedding是NLP任务的常规操作了,如果有兴趣可以看看我19年初写的:

小狼:词嵌入基本理念及组织代码的方法论​zhuanlan.zhihu.com
8a1647d2f35bd8c5bfc594e0f38851ea.png

这里,需要我们稍微注意的是,Embedding层和Logit Output层的矩阵是参数共享的,使用了同一个矩阵。

④:Attention Layer是Transformer的计算核心,和Vanilla Transformer中的Self-Attention大部分相同。但本文还是专注于整体,详细解析另外单独写文章剖析。但想要理解数据是如何在Transformer-XL中起作用,Mask的运用是无论如何都没办法绕过的,我们先在宏观上对Mask的作用有一定的了解。还是先上图:

b6f924c32704f83257c0c504a11c3bfe.png

在Self-Attention中,使用Q矩阵来计算每个向量的权重,也就是俗称的Attention Score。而我们想要在需要的时候屏蔽掉某些信息,就是在Attention Score进行Softmax计算前乘一个Mask值。例如上图,在预测C的时候,我们肯定不能使用C的信息,因为那样就是作弊,训练就失效了。所以在C的计算结果上,我们乘一个很小很小的负值,在做指数计算时,就约等于0了。

在传统Transformer的Decoder Layer中也采用了类似的Mask机制,详细公式和代码在后续文章中在说吧。

⑤:最后,在经历了N个Attention Layer和最终的逻辑层计算之后,我们终于可以计算出Loss了,也就是Softmax加交叉熵的组合。

至此,我们已经得到了Loss,就可以通过优化器对Loss反向传播来训练模型了。

小结:

这篇文章旨在宏观上画出Transformer-XL训练的轮廓,相信很多底子好但没接触过Transformer-XL的朋友已经足够去着手自己研究学习了。后续我还会继续努力,对一些模块内部细节进行讨论。

感谢您的阅读,欢迎各种批评指正!

参考:

https://ai.googleblog.com/2019/01/transformer-xl-unleashing-potential-of.html

https://github.com/kimiyoung/transformer-xl

(标题背景图来源于网络,侵删)



推荐阅读
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 探索Web 2.0新概念:Widget
    尽管你可能尚未注意到Widget,但正如几年前对RSS的陌生一样,这一概念正逐渐走入大众视野。据美国某权威杂志预测,2007年将是Widget年。本文将详细介绍Widget的定义、功能及其未来发展趋势。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 命令模式是一种行为设计模式,它将请求封装成一个独立的对象,从而允许你参数化不同的请求、队列请求或者记录请求日志。本文将详细介绍命令模式的基本概念、组件及其在实际场景中的应用。 ... [详细]
  • Scrum立会报告+燃尽图(十月十七日总第八次):分配Alpha阶段任务
    此作业要求参见:https:edu.cnblogs.comcampusnenu2018fallhomework2246项目地址:https:git.co ... [详细]
  • 通过手机获取的GPS坐标在手机地图上存在约100-200米的偏差,但在Google Maps中搜索同一坐标时,定位非常精确。这种偏差可能出于安全或隐私考虑而被有意引入。此外,不同设备和环境下的GPS信号强度和精度也会影响最终的定位结果。 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
author-avatar
tuigone
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有