RNN通常意义上是不能使用dropout的,因为RNN的权重存在累乘效应,如果使用dropout的话,会破坏RNN的学习过程。
但是,Google Brain在15年专门发表了一篇文章研究这个:recurrent neural network regularization
他们在非循环阶段使用了dropout,改善了过拟合的现象
论文在两个地方使用了dropout,图中虚线部分就是使用了dropout,实线部分没有使用
非循环阶段不存在权重的累乘效应,不会破坏RNN的学习过程
为了更加清楚的看,画了一幅图:
图中的dropout和recurrent_dropout都是dropout,只是作业在不同的地方,keras对其也有设置了参数:
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
还有就是我们可以在非RNN阶段也可以使用dropout,比如这样的:
model.add(..)
model.add(LSTM(10))
model.add(Dropout(0.5))
上面的的代码的意思是执行LSTM之后是可以使用dropout的