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}$$
