序列数据建模-RNN & Attention & self-Attention

作者: MoBaiGeneral 分类: RNN,人工智能,注意力机制,自然语言处理 发布时间: 2021-10-23 20:19 访问量:13,414
FavoriteLoading收藏

全连接神经网络具有层间相互连接,层内相互独立,输入和输出维数固定的特点,在针对不等尺寸图像、不定长度语句、不同词义字符等无约束序列长度,有约束序列依赖的输入数据建模时总会表现出一定的局限性。

在这里插入图片描述

1 循环神经网络

循环神经网络(RNN)的主要特点表现为t时刻的隐层(输出层)由第t-1时刻的隐层(输出层)与第t时刻的输入共同决定,其能够有效解决模型非定长输入与时序依赖问题。然而,当循环神经网络的结构过长时,较前输入对模型的影响会随着模型输入的更新不断降低,过长的梯度传播过程也容易引发梯度消失现象。虽然可以采用Relu函数或其它模型代替非线性激活函数,但更一般的做法是对其网络架构做出改进。

在这里插入图片描述

为了解决网络的长期依赖问题,提出了长短时记忆神经网络(LSTM)。该模型引入了一组记忆单元,允许网络学习何时遗忘历史信息,何时用新信息更新记忆单元,引入了元素取值为[0,1]的输入门、遗忘门和输出门,通过门机制控制信息流。门可选性地允许信息流动,由一个Sigmoid神经网络层与一个点乘运算组成,Sigmoid神经网络层输出0和1之间的数字,决定了流通信息量。其中,时刻t的遗忘门定义了将要丢弃记忆单元中的信息流内容;输入门利用Sigmoid层定义需要更新的值,tanh层创建累加到存储的候选向量,两者点积控制了记忆单元中将要存储的信息流内容;t时刻的记忆单元由t时刻的遗忘门与t-1时刻的记忆单元点乘所定义的遗忘信息,以及t时刻的输入门所定义的存储信息共同决定;输出门基于当前状态决定输出,通过Sigmoid函数获悉记忆单元的待输出部分,以tanh函数将t时刻的记忆单元规范化到-1到1之间,两者结果作点积输出。

在这里插入图片描述

门限循环单元(GRU)是一种比LSTM更加简化的版本,在LSTM中,输入门和遗忘门是互补关系,但同时使用两个门具有一定的冗余,GRU则将输入门与遗忘门合并为一个门,即更新门,并且同时还合并了记忆单元和隐藏神经元。该架构利用t-1时刻的隐层状态和t时刻的输入定义了更新门和重置门,重置门对t-1时刻的隐层状态重置,联合t时刻的输入产生新信息,新信息由更新门点积接收,并与t-1时刻的非更新隐层状态共同构造了t时刻的隐层状态。

在这里插入图片描述

堆叠循环神经网络(Stack)是深度较深的循环神经网络,但在某种程度上,将循环神经网络按时间展开,其不同时刻的状态之间存在非线性连接,已然是一个非常深的网络,更一般情况下,为了改善循环神经网络性能,并不加深其深度,而是使用双向循环结构,即双向循环神经网络。该网络包括了前向循环结构和后向循环结构两个部分,前向过程是由初始时刻向终止时刻正向计算,存储每个时刻的向前隐隐层输出,而后向过程是由终止时刻向初始时刻反向计算,存储每个时刻的后向隐藏层输出,最终将每一时刻的前向输出和后向输出结合。

循环神经网络的应用主要表现在以下几个方面:其一,输入为不定长度序列,输出为类别,如文本分类;其二,同步序列输入与输出,亦即输入与输出同步,每一时刻都有输入与输出,且输入输出序列长度相等,如序列标注等;其三,异步序列输入输出,即输入与输出序列间不需要有严格的对应关系,如机器翻译、文本摘要、图像描述等;

2 注意力与自注意力机制

当更加关注输入序列的不同部分对输出序列的重要性不同时,提出了注意力机制与循环神经网络配套使用。在seq2seq模型中,利用编码器将输入序列编码为定长中间向量c,此向量在某一序列更新输入过程中是恒定不变的,即在输入该序列的任一子片段过程中,该序列都被编码器编码为相同的向量。对某输入序列不同片段处理时,对该序列做不同的编码,以突显序列中对该片段的重要信息,选取与该片段最相关的上下文。则可定义编码c为源序列的线性组合,而组合权重动态变化,处理不同片段时源序列中的各个子信息权重不同。而权重则定义为目标片段与源序列的能量函数,能量函数由一人用于衡量j位置输入与i位置输出的匹配程度的对齐模型定义,显然,同一片段的对齐概率在不同的输出时刻是不同的,即对齐模型是关于时间t的函数,t时刻的对齐模型与t-1时刻的模型输出有关。

循环神经网络的注意力机制是针对历史信息而言的,它将已经处理过的前面所有片段的表示与它正在处理的当前单词结合起来,其模型训练过程速度慢,计算过程涉及大部分的串行运算。与其不同,自注意机制将所有单词的理解融入到正在处理的单词中,能够对全局信息进行提取并可以并行处理序列。Transform结构由编码组件、解码组件和它们之间的连接组成,编码组件由一堆编码器组成,解码组件由一堆相同数量的解码器组成。所有的编码器在结构上都是相同的,但是它们并不共享参数,每一个编码器又可以近一步分解为两个子层,即自注意力层和前馈神经网络层。从编码器输入的句子首先会经过一个自注意力层,在对每个输入片段编码时关注输入句子的其它片段;其后自注意力层的输出会传递到前馈神经网络中,每个位置的片段对应的前馈神经网络都完全一样。解码器中也存在编码器中的自注意力层和前馈层,但与编码器不同的是,解码器的这两层架构内还包含了一个编码-解码注意力层,用来关注输入句子的相关部分,与seq2seq模型中注意力作用相似。值得注意的是,输入序列中每个位置的片段都由自己独特的路径流入编码器,在自注意力层中这些路径间存在相互依赖关系,而前馈层是完全相同的网络,每个位置的片段都没有依赖关系,因此在前馈层时可以并行执行各种路径。

在这里插入图片描述

在这里插入图片描述

注意力机制中注意力通过对齐模型所构造的能量函数计算得到,而自注意力的计算过程类似于w*x形式的编码。通过初始化一组权重矩阵:查询权重矩阵、键权重矩阵以及值权重矩阵,由每个编码器的输入向量分别与这三个权重矩阵相乘得到查询向量q,键向量k和值向量v,此处为第一次w$\ast$x运算,w与x均为矢量。当计算某一片段的自注意力值时,首先使用该片段的查询向量与所有片段的键向量分别作点乘,此处为第二次w*x运算,w为标量,x为矢量,为了防止梯度消失或梯度爆炸,可近一步对点积结果作归一化等二次处理,接着利用softmax函数处理点积结果,使各个点击结果之和表现为概率形式,即累加为1。最后概率值与值向量点积,即各值向量在概率值分布下做加权求和,此处为第三次w*x,w与x均为矢量。某种程序上讲,一组权重矩阵可以看成一种子空间映射方式,可以通过初始化多组权重矩阵,并通过简单的合并操作将多组自注意力结果卷积为一组。

值得注意的是,顶端编码器的输出将转化为一个包含键向量k和值向量v的注意力向量集,这些向量将被每个解码器用于自身的“编码-解码注意力层”,该层能帮助解码器聚集在输入序列中的合适位置。此外,解码器中的自注意层的表现模型与编码器不同,在解码器中,自注意力层只被允许处理输出序列中更靠前的那些位置,在softmax步骤前,它会把后面的位置隐去。

参考文献:https://aistudio.baidu.com/aistudio/education/group/info/1671

     

如果觉得小墨的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

2条评论
  • 头像

    Eden

    2021年10月25日 下午7:57

    下次抄图的时候,记得把水印去了

    1. MoBaiGeneral

      MoBaiGeneral

      2021年10月25日 下午8:11

      Thanks for your comments, and the watermark is reserved to better reflect the image source.

发表评论