【李宏毅】RNN
Recurrent Neural Network:有记忆的network,因为它储存了记忆,所以就算给它一样的input,output也有可能不一样,因为memory不一样。改变input的顺序,output也会不一样。
RNN也可以用gradient decent训练,用BPTT(Backpropergation Through Time)
为什么同样的输入得到的输出不一样?
Elman Network是把hidden layer的值存起来,在下一个时间点再读出来。
Jordan Network是把整个network的output的值存起来,然后在下一个时间点再读出来。
Jordan Network 可以得到更好的控制效果,因为在Elman Network中存储的上一个时间点的hidden layer的值是没有target的,所以难以控制它学到了什么东西;而Jordan Network是有target的,所以我们可以比较清楚放在memory中的是什么。
Recurrent Neural Network 还可以是双向的——Bidirectional RNN
可以同时train一个正向的和一个反向的,一起产生output。
LSTM(long short-term memory)
TODO
为什么用LSTM?
LSTM 可以解决RNN中gradient vanishing 的问题(不能解决gradient explode的问题)
为什么LSTM可以解决gradient vanishing的问题?
在LSTM中,memory和input是相加的。
如果weight可以影响到memory的值,一旦发生影响,这个影响就不会消失,除非forget gate关闭(forget gate 在多数情况下是开启的);而RNN里在下一个时间点影响会被forget。
GRU(Gate Recurrent Unit):有两个gate,需要的参数量比较少,比LSTM简单,如果overfitting比较严重,可以换成GRU。GRU在input gate开的时候forget gate会关闭(forget memory)