【李宏毅】RNN

Recurrent Neural Network:有记忆的network,因为它储存了记忆,所以就算给它一样的input,output也有可能不一样,因为memory不一样。改变input的顺序,output也会不一样。

RNN也可以用gradient decent训练,用BPTT(Backpropergation Through Time)

【李宏毅】RNN_第1张图片

【李宏毅】RNN_第2张图片

为什么同样的输入得到的输出不一样?

【李宏毅】RNN_第3张图片

Elman Network是把hidden layer的值存起来,在下一个时间点再读出来。

Jordan Network是把整个network的output的值存起来,然后在下一个时间点再读出来。

Jordan Network 可以得到更好的控制效果,因为在Elman Network中存储的上一个时间点的hidden layer的值是没有target的,所以难以控制它学到了什么东西;而Jordan Network是有target的,所以我们可以比较清楚放在memory中的是什么。

【李宏毅】RNN_第4张图片

Recurrent Neural Network 还可以是双向的——Bidirectional RNN

可以同时train一个正向的和一个反向的,一起产生output。

【李宏毅】RNN_第5张图片

LSTM(long short-term memory)

TODO

【李宏毅】RNN_第6张图片

为什么用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)

 

你可能感兴趣的:(【李宏毅】RNN)