自然语言处理(27)Transformer详解1

⾃然语⾔处理(27)Transformer详解1
前⼀段时间⾕歌推出的BERT模型在11项NLP任务中夺得STOA结果,引爆了整个NLP界。⽽BERT取得成功的⼀个关键因素是Transformer的强⼤作⽤。⾕歌的Transformer模型最早是⽤于机器翻译任务,当时达到了STOA效果。Transformer改进了RNN最被⼈诟病的训练慢的缺点,利⽤self-attention机制实现快速并⾏。并且Transformer可以增加到⾮常深的深度,充分发掘DNN模型的特性,提升模型准确率。在本⽂中,我们将研究Transformer模型,把它掰开揉碎,理解它的⼯作原理。
Transformer由论⽂《Attention is All You Need》提出,现在是⾕歌云TPU推荐的参考模型。论⽂相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的⼀部分。哈佛的NLP团队也实现了⼀个基于PyTorch的版本,并注释该论⽂。在本⽂中,我们将试图把模型简化⼀点,并逐⼀介绍⾥⾯的核⼼概念,希望让普通读者也能轻易理解。
卷积编码⽬录
1. Transformer宏观视⾓
⾸先将这个模型看成是⼀个⿊箱操作。在机器翻译中,就是输⼊⼀种语⾔,输出另⼀种语⾔。
那么拆开这个⿊箱,我们可以看到它是由编码组件、解码组件和它们之间的连接组成。
编码组件部分由⼀堆编码器(encoder)构成(论⽂中是将6个编码器叠在⼀起——数字6没有什么神奇之处,你也可以尝试其他数字)。解码组件部分也是由相同数量(与编码器对应)的解码器(decoder)组成的。
所有的编码器在结构上都是相同的,但它们没有共享参数。每个编码器都可以分解成两个⼦层。
从编码器输⼊的句⼦⾸先会经过⼀个⾃注意⼒(self-attention)层,这层帮助编码器在对每个单词编码时关注输⼊句⼦的其他单词。我们将在稍后的⽂章中更深⼊地研究⾃注意⼒。
⾃注意⼒层的输出会传递到前馈(feed-forward)神经⽹络中。每个位置的单词对应的前馈神经⽹络都完全⼀样(译注:另⼀种解读就是⼀层窗⼝为⼀个单词的⼀维卷积神经⽹络)。
解码器中也有编码器的⾃注意⼒(self-attention)层和前馈(feed-forward)层。除此之外,这两个层
之间还有⼀个注意⼒层,⽤来关注输⼊句⼦的相关部分(和seq2seq模型的注意⼒作⽤相似)。
2. 将张量引⼊图景
我们已经了解了模型的主要部分,接下来我们看⼀下各种向量或张量(译注:张量概念是⽮量概念的推⼴,可以简单理解⽮量是⼀阶张量、矩阵是⼆阶张量。)是怎样在模型的不同部分中,将输⼊转化为输出的。
像⼤部分NLP应⽤⼀样,我们⾸先将每个输⼊单词通过词嵌⼊算法转换为词向量。
每个单词都被嵌⼊为512维的向量,我们⽤这些简单的⽅框来表⽰这些向量。
词嵌⼊过程只发⽣在最底层的编码器中。所有的编码器都有⼀个相同的特点,即它们接收⼀个向量列表,列表中的每个向量⼤⼩为512维。在底层(最开始)编码器中它就是词向量,但是在其他编码器中,它就是下⼀层编码器的输出(也是⼀个向量列表)。向量列表⼤⼩是我们可以设置的超参数——⼀般是我们训练集中最长句⼦的长度(其他不够长的句⼦需要填充)。
将输⼊序列进⾏词嵌⼊之后,每个单词都会流经编码器中的两个⼦层。
接下来我们看看Transformer的⼀个核⼼特性,在这⾥输⼊序列中每个位置的单词都有⾃⼰独特的路径流⼊编码器。在⾃注意⼒层中,这些路径之间存在依赖关系。⽽前馈(feed-forward)层没有这些依赖关系。因此在前馈(feed-forward)层时可以并⾏执⾏各种路径。
然后我们将以⼀个更短的句⼦为例,看看编码器的每个⼦层中发⽣了什么。
开始编码
如上述已经提到的,⼀个编码器接收向量列表作为输⼊,接着将向量列表中的向量传递到⾃注意⼒层进⾏处理,然后传递到前馈神经⽹络层中,将输出结果(向量列表)传递到下⼀个编码器中。
输⼊序列的每个单词都经过⾃编码过程。然后,他们各⾃通过前向传播神经⽹络——完全相同的⽹络,⽽每个向量都分别通过它。
3. ⾃注意⼒机制宏观视⾓
不要被我⽤⾃注意⼒这个词弄迷糊了,好像每个⼈都应该熟悉这个概念。其实我之也没有见过这个概念,直到读到Attention is All You Need 这篇论⽂时才恍然⼤悟。让我们精炼⼀下它的⼯作原理。
例如,下列句⼦是我们想要翻译的输⼊句⼦:
这个“it”在这个句⼦是指什么呢?它指的是street还是这个animal呢?这对于⼈类来说是⼀个简单的问题,但是对于算法则不是。当模型处理这个单词“it”的时候,⾃注意⼒机制会允许“it”与“animal”建⽴联系。随着模型处理输⼊序列的每个单词,⾃注意⼒会关注整个输⼊序列的所有单词,帮助模型对本单词更好地进⾏编码。
如果你熟悉RNN(循环神经⽹络),回忆⼀下它是如何维持隐藏层的。RNN会将它已经处理过的前⾯的所有单词/向量的表⽰与它正在处理的当前单词/向量结合起来。⽽⾃注意⼒机制会将所有相关单词的
理解融⼊到我们正在处理的单词中。
当我们在编码器#5(栈中最上层编码器)中编码“it”这个单词的时,注意⼒机制的部分会去关注“The Animal”,将它的表⽰的⼀部分编⼊“it”的编码中。
请务必检查Tensor2Tensor notebook ,在⾥⾯你可以下载⼀个Transformer模型,并⽤交互式可视化的⽅式来检验。
4. ⾃注意⼒机制微观视⾓
⾸先我们了解⼀下如何使⽤向量来计算⾃注意⼒,然后来看它是怎样⽤矩阵(并⾏化)来实现。
计算⾃注意⼒的第⼀步就是从每个编码器的输⼊向量(每个单词的词向量)中⽣成三个向量。也就是说对于每个单词,我们创造⼀个查询向量、⼀个键向量和⼀个值向量。这三个向量是通过词嵌⼊与三个权重矩阵(需要学习)后相乘创建的。

本文发布于:2024-09-21 16:15:15,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/378306.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:向量   编码器   单词   模型   注意   列表   编码
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议