第零部分:前言

        2017年,谷歌(Google)发布了一篇名为《Attention Is All You Need》的文章,这段标题直译过来就是“注意力机制就是你所需要的一切”。这篇文章迅速在大模型、人工智能等领域掀起轩然大波,因其可以完全摒弃传统而复杂的循环神经网络RNN和卷积神经网络CNN,采用独特的注意力机制连接编码器和解码器,在使得神经网络的架构更为简单的同时,预测输出的效果更为准确。目前而言,《Attention Is All You Need》可谓AI界的旷世之作,在其发表之后诞生的bert、GPT等模型都采用了Transformer的部分架构,深刻影响了整个大模型乃至人工智能领域。在当下,大多数的模型都是基于Transformer演变而来。可以说,每一个AI领域从业人员和需要将AI融入业务领域的从业人员,都不可避免地需要了解这篇文章的内容和地位。
        原文链接:https://arxiv.org/pdf/1706.03762


第一部分:摘要

        摘要的核心内容如下:Google提出了一种新型神经网络,名为Transformer,其完全摒弃了复杂的循环和卷积结构,是一种通过注意力机制连接编码器和解码器的简单神经网络,在两项机器翻译任务上,Transformer的效果比循环和卷积神经网络效果更好。
        Transformer的特点还有:
        ① 训练所需时间更短,成本更低
        ② 具有更高的并行性



第二部分:模型简介   

        原文如下,绿色部分为文献引用序列号:

        循环神经网络,尤其是长短期记忆网络与门控循环神经网络,目前已被公认为处理序列建模与转导问题(如语言建模和机器翻译)的最先进方法。众多研究持续推动着循环语言模型与编码器-解码器架构的发展边界。

        循环模型通常沿着输入和输出序列的符号位置进行逐步计算。通过将位置对应到计算时间步,这些模型会根据前一个隐藏状态ht-1及当前位置t的输入,生成当前隐藏状态ht。这种固有的顺序特性阻碍了在训练样本内部实现并行计算,当处理较长序列时,这一问题尤为关键——因为内存限制会制约跨样本的批处理能力。近期研究通过因子分解技术和条件计算的方法,在提升模型性能的同时显著改善了计算效率。然而,顺序计算的根本限制依然存在。

        注意力机制已成为各种序列建模与转导任务中不可或缺的组成部分,它能够直接建立输入或输出序列中任意位置间的依赖关系,而不受其相对距离的影响。不过除少数特例外,现有的注意力机制通常仍与循环网络结合使用。

        本研究提出Transformer这一新型模型架构,该架构摒弃了循环结构,完全依赖注意力机制来建立输入与输出之间的全局依赖关系。Transformer实现了更高程度的并行化,仅在8张P100 GPU上训练12小时后,即可在翻译质量方面达到新的技术巅峰。

第三部分:背景介绍   

        原文如下:

        降低序列计算复杂度的目标同样是扩展神经GPU、字节网络和ConvS2S等模型的核心基础。这些模型均采用卷积神经网络作为基本构建模块,能够并行计算所有输入和输出位置的隐藏表示。然而在这些模型中,关联两个任意输入或输出位置信号所需的操作次数会随位置间距增长而增加——ConvS2S呈线性增长,字节网络呈对数增长。这导致模型难以学习远距离位置间的依赖关系。在Transformer中,这一操作复杂度被降至常数级别,尽管代价是由于对注意力加权位置进行平均化处理而降低了有效分辨率,我们通过第3.2节所述的多头注意力机制来缓解这一问题。

        自注意力(又称内部注意力)是一种通过关联单个序列中不同位置来计算序列表示的注意力机制。该机制已在多项任务中成功应用,包括阅读理解、抽象摘要、文本蕴含学习以及任务无关的句子表示学习。

        端到端记忆网络则基于循环注意力机制而非序列对齐的循环架构,已被证明在简单语言问答和语言建模任务中表现优异。

        但据我们所知,Transformer是首个完全依赖自注意力机制来计算输入输出表示,而不使用序列对齐循环神经网络或卷积的转导模型。在后续章节中,我们将详细阐述Transformer架构,阐释自注意力原理,并探讨其相较于其他模型的优势


第四部分:模型架构

        原文如下:

        绝大多数具有竞争力的神经序列转导模型都采用编码器-解码器结构。其中,编码器将符号表示的输入序列映射为连续表示序列。基于这个连续表示序列,解码器逐步生成符号表示的输出序列,每次生成一个元素。在每一步生成过程中,该模型采用自回归方式,将之前已生成的符号作为生成下一个元素的附加输入。

        Transformer沿用了这一整体架构,在编码器和解码器中均采用堆叠的自注意力机制与逐点全连接层组合,具体结构分别对应图示左右两部分。
        Transformer的架构图如下:

        如图,Transformer架构可以分为四个大部分:输入层、编码器层(Encoder)、解码器层(Decoder)、输出层


        1、输入层

        如图所示为输入层:

        左边的Inputs是最初始的输入,在经过词嵌入层Input Embedding后,转化为模型能够识别词向量,然后与位置编码Positional Encoding拼接后输入编码器Encoder中。
        位置编码的作用:相同词在不同位置的语义会有不同,为了区分这些词,加入位置编码,以更好地捕捉词之间的语义关系

        右边的Outputs是编码器Encoder的输出,也是解码器Decoder的输入,其有两种情况:
        ① 模型处于训练模式时。由于在模型训练时,我们知道正确的预测结果,因此此时的outputs实际上是正确结果向右偏移一位(shifted right)的序列。例如,输入的训练序列为“I love you”,翻译为中文的正确序列为“我 爱 你”,那么outputs就是[<start>, “我”, “爱”]。
        为什么要向右偏移:防止模型提前看到正确的预测结果,导致无法学习到词之间的语义关系

        ② 模型处于预测模式时。此时的outputs就 是模型在前一个时间步中自己生成的部分序列,从 <start> 标记开始,逐步累积


        2、编码器(Encoder)

       2.1 编码器整体概述


        这是编码器的整体架构图:


        编码器由N个编码器层构成,在transformer中,这个数通常为6。
        在上图中,整个灰色方框内的内容都是单个编码器层的内容,左边的Nx代表由N个编码器层拼接为编码器。
        每个编码器层包括两个子层:第一个子层包括一个多头自注意力子层、规范化层及一个残差连接;第二个子层包括一个前馈全连接子层、规范化层及一个残差连接。如下图。
        

       2.2 多头自注意力子层

        2.3规范化和残差连接子层


        在介绍残差连接子层的作用之前,我们需要知道神经网络所面临的一大难题:梯度消失。
        如果你是小白,你需要知道,在模型通过神经网络进行训练的过程中,主要需要经过前向传播梯度清零反向传播(从第一步计算出的最终损失值开始,利用链式法则,沿着第一步构建的计算图反向计算损失函数对于模型中每一个可训练参数(权重和偏置)的梯度)和梯度更新
        ☆
前向传播:数据正向经过神经网络进行输出预测
        梯度清零:将优化器中所有参数的梯度手动重置为零。目的是防止梯度累积。因为在PyTorch中,默认情况下,每次调用.backward()反向传播时,计算出的梯度会累加到上一次的梯度上(而不是替换)。如果不清零,下一个批次的梯度会与上一个批次的梯度加在一起
        反向传播这是整个训练过程的核心。从第一步计算出的最终损失值开始,利用链式法则,沿着第一步构建的计算图反向计算损失函数对于模型中每一个可训练参数(权重和偏置)的梯度
        ☆
梯度更新:使用优化器,根据第二步计算出的梯度来更新模型的所有参数,以降低损失
        在非常深的网络中,当误差反向传播时,梯度需要经过很多层。如果每一层都对梯度有一点缩小作用,经过很多层之后,梯度可能会变得非常小,以至于接近零(梯度消失)。这会导致靠近输入的层几乎得不到更新,训练停滞。这就是所谓的“梯度消失”问题。即使梯度没有完全消失,过深的网络也可能变得难以优化,性能反而下降,即“网络退化”。

        未完持续...


        3、解码器(Decoder)


        4、输出层

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐