zoukankan      html  css  js  c++  java
  • Pointer Networks

     原文链接:https://arxiv.org/abs/1506.03134

    Motivation

    现有的序列化预测通常使用RNN。RNN的问题在于输出数量固定,对于答案长度动态变化的问题并不适用。

    作者以凸包问题(Convex Hull)为例。给定一定数量的点,希望找到一系列点组成凸多边形,使得任一点或者在多边形内部,或者为多边形顶点。

    显然对于固定总数的点,其凸包顶点数量可变,采用seq2seq的序列模型难以实现比较好的效果。

    因此,作者提出了指针网络(Pointer Networks),以解决答案长度可变的问题,通过生成由输入到输出的答案指针,实现答案从输入的拷贝。 

    Review:seq2seq Model

    RNN序列模型如图所示。输入一系列序列,在模型前半部分进行编码,后半部分进行解码。解码部分的每一步依据模型参数、输入序列、此前所有步的输出生成当前步的输出。

    在给定的输入序列P和RNN模型参数θ的情况下,模型预测一系列答案CP(C1 ~ Cm(P))的概率可以用以下的条件概率乘积表示:

     其中模型参数θ可以通过最大化正确答案概率(对数和)来调整:

    Review:Attention

    注意力机制如图所示。当前步的输出通过对每一个输入(经过encode编码)加权求和产生。

    对于第i步的输出,首先对于每一步输入编码计算权重uji,将该步编码ej与第i步解码di分别进行线性变换并相加,通过tanh激活并乘以参数v,最后得到uji。

    将uji经过softmax得到aji,作为最终权重。以aji作为权重对此前每一步的编码ej进行加权平均,得到第i步的输出。

    Pointer Networks

    作者提出指针网络,通过将输入直接拷贝作为输出,实现对可变长度答案的预测。

    首先使用与Attention同样的方法,得到每一步的权重。

     然后直接将权重最大的输入项作为输出,即将softmax后的权重(Attention中的aji作为预测为第j个输入的概率。

    直观来讲,就是将Attention中的权重作为指针,将输入指向输出,生成针对输入序列的概率分布。 

  • 相关阅读:
    判断进程是64bit还是32bit
    判断是否是64位系统(之前那个是判断是否是64位进程不一样。注意区分)
    以程序的方式操纵NTFS的文件权限
    Windows平台内核级文件访问
    TLSAlloc()
    Android开发效率的小技巧
    二分查找法
    unittest 框架
    ASP.NET MVC中使用Ninject
    Java内存区域与内存溢出异常
  • 原文地址:https://www.cnblogs.com/zkwang/p/12919936.html
Copyright © 2011-2022 走看看