Why we need RNN?
对于全连接网络,层与层之间是全连接的,但是每层之间的节点是无连接的,因此全连接网络只能够处理单独的输入(即输入之间没有关联),前一个输入和后一个输入时完全没有关系的,无法处理相互之间关联的数据。
例如,我们输入两句话
arrive BeiJing on November 2nd
leave BeiJing on November 2nd
上面这两句话后四个单词都是一样的,但是前两个单词决定了这两句话的含义是完全不同的,即前一个单词对当前单词的含义有很大的影响,而全连接网络无法分辨出这种不同,因此我们需要Neral Network具备记忆功能,即在输入下一个单词之前记住前一个单词。
根据上面我们可以知道RNN用来处理遗传相互依赖的数据流,其用途十分广泛,例如文章中的文字、语音里的音频、股票的价格走势……
The Structural of RNN
包括四个部分:输入层、隐藏层、循环层、输出层;
输入层经过权重求值之后,在隐藏层经过激活函数得到一个值,这个值进行权重求解之后到输出层的同时,也会保存到循环层存储起来,在下一次有输入的时候,循环层存储的值会再次与输入层的值一起经过激活函数到输出层。
我们举个例子来说明一下:
假设所有的权重均为1,没有bias;所有的激活函数都是线性的;
输入队列分别是:[1 1] 、[1 1]、[2 2]
当第一次输入[x1 x2]=[1 1]时,隐藏层得到的结果是[2 2],这个结果会被存储到循环层[a1 a2]=[2 2],隐藏层进行加权求值,得到输出层结果[4 4];
当第二次输入[x1 x2]=[1 1]时,隐藏层得到的结果是[6 6],因为这个结果不仅考虑了输入值,还会考虑循环层的值,这个结果会被存储到循环层[a1 a2]=[6 6],隐藏层进行加权求值,得到输出层结果[12 12];
当第三次输入[x1 x2]=[2 2 ]时,隐藏层得到的结果是[16 16],同样是因为这个结果考虑输入层和循环层,这个结果会被存储到循环层[a1 a2]=[16 16],隐藏层进行加权求值,得到输出层结果[32 32 ];
如果对上面的过程还是不理解,可以自己手动带入推演一下即可。
上面讲解的只是一个层次,深度学习需要多个层次,因此我们需要把许多层连接起来
RNN优化算法(持续更新)
Long Short-term Memory(LSTM)
参考