美文网首页
Sequence to Sequence模型笔记

Sequence to Sequence模型笔记

作者: ioiogoo | 来源:发表于2019-01-04 10:59 被阅读0次

    点击查看原文

    背景介绍

    Sequence to Sequence模型最早是由google工程师在2014年Sequence to Sequence Learning with Neural Networks论文中提出。

    之后广泛应用于机器翻译中,该论文提出了一种新的Encoder-Decoder模型。之后在该模型结构上又发展出Sequence to Sequence with Attention模型也在NLP领域中得到广泛使用。

    模型优点

    在之前的序列模型中,通常使用RNN结构来对序列进行处理,每个cell使用上一个hidden state来输出对应的hidden state + output,然后使用每个时刻的output或者最后时刻的hidden state来输出结果。这使得模型的输入和输出的比例只能是t:t或者是t:1t表示序列长度。
    使用Encoder-Decoder结构能够让输出序列通过Encoder得到一个语义编码,该编码代表了输入序列的语义表示,再使用Decoder对其进行解码,得到的长度由解码器和语义编码决定,这在机器翻译任务中有着天然的优势。

    模型结构

    论文中的模型结构如图:

    seq2seq
    该模型读取输入序列“ABC”,得到输出序列“WXYZ”。<EOS>代表输入结束或者停止预测的标识。个人习惯使用<S><E>来代表开始解码和停止解码的标识,更加方便理解。

    该模型包含EncoderDecoder两部分。

    encoder

    用于对输入序列进行编码得到一个语义表示供解码器使用。


    encoder cell

    encoder通常使用LSTM cell,也有使用CNN的。
    这里以LSTM来解释模型的输入输出。
    模型以上一时刻的hidden state ht-1和当前时刻的输入Xt作为输入, 得到的outputOt直接舍弃,ht作为下一时刻的输入。h0为初始输入,通常用0代替。

    decoder
    decoder cell

    deocder也是一样,通常用LSTM
    模型以上一时刻ct-1yt-1作为输入,直到yt<E>结束。
    <S>为初始输入,表示解码器开始解码。

    训练阶段

    一共有三个输入:

    • encoder_input
      • 原始序列作为输入
    • decoder_input
      • 解码器的输入,训练时将decoder_target往后移一位,第一位是<S>,例如原序列为“ABC”,输出序列为“WXYZ”,那么训练时decoder_input<S>WXYZ
    • decoder_target
      • 原序列的输出序列
    预测阶段

    一共两个输入:

    • encoder_input
      • 预测序列
    • decoder_input
      • 第一位输入使用<S>,其后使用上一时刻的输出作为输入

    实际应用

    实际应用中,语义编码可以作为decoder的初始输入也可以是所有decoder的输入。


    或者


    tips

    在论文中有提到,实际应用中,如果将原始序列顺序颠倒后输入,比如原序列为“ABC”,训练时将“CBA”作为输入,效果会有提升,但是具体原因,原作者也不知道,这就是深度学习magic的地方。

    上面我只讲了单层的模型,也可以使用多层模型来做,结构大致一样。后续还会写Sequence to Sequence with Attention的模型结构。

    相关文章

      网友评论

          本文标题:Sequence to Sequence模型笔记

          本文链接:https://www.haomeiwen.com/subject/dsxhrqtx.html