RNN

https://zhuanlan.zhihu.com/p/28054589


* 单层网络


经典RNN结构 (N VS N)

* 针对序列数据的输入

*隐层

* 输出的设计

* 其余的输出类似

* 经典的RNNN

  • Char RNN

http://karpathy.github.io/2015/05/21/rnn-effectiveness/

  • 它的输入是x1, x2, .....xn,输出为y1, y2, ...yn,也就是说,输入和输出序列必须要是等长的。

* 缺陷

由于这个限制的存在,经典RNN的适用范围比较小,但也有一些问题适合用经典的RNN结构建模,如:

  • 计算视频中每一帧的分类标签。因为要对每一帧进行计算,因此输入和输出序列等长。
  • 输入为字符,输出为下一个字符的概率。这就是著名的Char RNN(详细介绍请参考:The Unreasonable Effectiveness of Recurrent Neural Networks,Char-RNN可以用来生成文章,诗歌,甚至是代码,非常有意思)

N vs 1

  • 输入是一个序列,输出是一个单独的值而不是序列的建模

* 应用

  • 这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

1 vs N

* 应用

这种1 VS N的结构可以处理的问题有:

  • 从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子
  • 从类别生成语音或音乐等

N vs M

  • RNN最重要的一个变种:N vs M。这种结构又叫Encoder-Decoder模型,也可以称之为Seq2Seq模型。
  • 原始的N vs N RNN要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。

  • 得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。


Attention模型

  • 在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个c可能存不下那么多信息,就会造成翻译精度的下降。

* Attention机制通过在每个时间输入不同的c来解决这个问题,下图是带有Attention机制的Decoder:

* 例子

* $$a_{2j}$$

* $$a_{3j}$$

* 带有Attention的Encoder-Decoder模型计算的全过程

results matching ""

    No results matching ""