• 聊聊RNN与Attention


    RNN系列:
    聊聊RNN&LSTM
    聊聊RNN与seq2seq

    attention mechanism,称为注意力机制。基于Attention机制,seq2seq可以像我们人类一样,将“注意力”集中在必要的信息上。

    Attention的结构

    seq2seq存在的问题

    seq2seq中使用编码器对时序数据进行编码,然后将编码信息传递给解码器。此时,编码器的输出是固定长度的向量。从正常的理解来看,固定长度的编码器输出迟早会有溢出上下文信息的情况。

    编码器的改进

    目前的seq2seq结构,只将LSTM层的最后的隐藏状态传递给解码器,但是编码器的输出的长度应该根据输入文本的长度相应地改变。因此我们可以使用LSTM各个时刻(各个单词)输出的隐藏状态向量,可以获得和输入的单词数相同数量的向量。使用编码器各个时刻(各个单词)的LSTM层的隐藏状态(这里表示为hs):
    image.png

    有一点可以确定的是,各个时刻的隐藏状态中包含了大量当前时刻的输入单词的信息。因此,最终编码器的输出hs具有和单词数相同数量的向量,各个向量中蕴含了各个单词对应的信息:
    image.png

    解码器的改进

    改进一

    由于编码器的输出包含了各个时刻的隐藏状态向量,因此解码器的输入,也需要增加这一层输入。因此解码器中就包含了某个时刻下,当前单词的主要信息,而如果可以找到这些主要信息并提取出来,对其做翻译,就能实现我们的目标。
    从现在开始,我们的目标是找出与“翻译目标词”有对应关系的“翻译源词”的信息,然后利用这个信息进行翻译。也就是说,我们的目标是仅关注必要的信息,并根据该信息进行时序转换。这个机制称为Attention。

    以上的逻辑流程其实就是在模仿人在翻译单词时的过程,尤其是中式翻译;逐字/成对的将中文汉字转换为对应的英语讲出来,我想这种例子在我们身边是很常见的。哈哈哈哈,很有画面感!
    这个过程,也被称为 "对齐"。

    改进二

    增加一个表示各个单词重要度的权重(记为a)。此时,a像概率分布一样,各元素是0.0~1.0的标量,总和是1。然后,计算这个表示各个单词重要度的权重和单词向量hs的加权和,可以获得目标向量。其计算流程如下:
    image.png

    即 hs 向量 与 a 权重向量 的内积

    计算单词向量的加权和,这里将结果称为上下文向量,并用符号c表示。

    改进三

    有了表示各个单词重要度的权重a,就可以通过加权和获得上下文向量,从而获取到主要信息。那么,怎么求这个a呢?
    首先,从编码器的处理开始,到解码器第一个LSTM层输出隐藏状态向量的处理为止,流程如下
    image.png
    用h表示解码器的LSTM层的隐藏状态向量。此时,我们的目标是用数值表示这个h在多大程度上和hs的各个单词向量“相似”。
    因此,可以直接将隐藏状态向量h 与编码器全时刻向量hs做点积
    image.png
    这里通过向量内积算出h和hs的各个单词向量之间的相似度,并将其结果表示为s。不过,这个s是正规化之前的值,也称为得分。再经过softmax函数对点积结果归一化
    image.png
    计算各个单词权重的计算图
    image.png

    hr向量只是扩大了h向量的部分,使其与hs向量行列一致。

    汇总

    如上,现在将单词权重的计算与权重加权两层逻辑合并起来,如下展示了获取上下文向量c的计算图的全貌
    image.png
    图中分为Weight Sum层和Attention Weight层进行了实现。
    这里进行的计算是:Attention Weight层关注编码器输出的各个单词向量hs,并计算各个单词的权重a;
    Weight Sum层计算a和hs的加权和,并输出上下文向量c。我们将进行这一系列计算的层称为Attention层。
    image.png
    以上就是Attention技术的核心内容。关注编码器传递的信息hs中的重要元素,基于它算出上下文向量,再继续流转传递。
    编码器的输出hs被输入到各个时刻的Attention层,并输出当前时刻的上下文向量信息。最终,具有Attention层的解码器的层结构,如下所示,
    image.png

    总结

    编码器层输出各个时刻的向量信息数据,不仅可以伸缩编码层的长度限制,更是存储了更重要的时序时刻数据信息。
    而解码器层,根据Attention架构(注意力机制),增加权重矩阵a,计算出当前时刻的上下文向量信息,提取出对齐单词,进行翻译。

  • 相关阅读:
    04-快速掌握Redis,了解Redis中常见的结构类型及其应用场景
    SecretFlow学习指南(2)学习路径
    如何做好一个配置中心
    Spring Bean的生命周期理解
    数学笔记查阅
    协程 VS 线程,Kotlin技术精讲
    Geoserver中使用CQL过滤要素
    chatgpt赋能python:Python改定位:从脚本语言到全栈语言的转变
    Sulfo-CY3 azide水溶性荧光探针 星戈瑞
    7-10 成绩排序
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/17802698.html