Keras:LSTM dropout和LSTM循环dropout的区别

99

来自Keras文档:

dropout: 0到1之间的浮点数,表示输入线性变换中要丢弃的单元的比例。

recurrent_dropout: 0到1之间的浮点数,表示循环状态的线性变换中要丢弃的单元的比例。

有人能指出以下图片中每个丢弃操作发生的位置吗?

enter image description here


对于输入的线性变换,即 x_t. - Thomas Jungblut
2个回答

99
我建议先看一下这篇论文的前半部分:链接。常规的dropout被应用于输入和/或输出,这意味着从x_th_t的垂直箭头处会进行dropout。在您的情况下,如果将其作为参数添加到您的层中,它将掩盖输入;您可以在循环层之后添加一个Dropout层来掩盖输出。循环dropout掩盖(或“丢弃”)循环单元之间的连接;那将是您图片中的水平箭头处。
这张图片摘自上面提到的论文。左边是对输入和输出进行常规dropout。右边是对输入和输出进行常规dropout PLUS 循环dropout: 这张图片摘自上面提到的论文。左边是对输入和输出进行常规dropout。右边是对输入和输出进行常规dropout PLUS 循环dropout。 (忽略此情况下箭头的颜色;在论文中,他们进一步指出在每个时间步长使用相同的dropout掩码)

1
谢谢,@michetonu。链接的论文和你的解释很有帮助。你能指出一些如何在Keras中正确使用regular_dropout和recurrent_dropout进行时间序列预测的方法吗?似乎有些例子将这两种dropout结合在一起,而有些则只使用recurrent_dropout。 - Kim Miller
1
从我遇到的情况来看,似乎在使用其中一种方法或另一种方法方面并没有太多的科学依据,也不知道哪种方法更好(至少目前还不知道)。我倾向于优化两种方法,并选择最有效的组合。 - Michele Tonutti
14
将(正常的)dropout参数应用于一层与单独使用dropout层似乎存在差异。这些方法之间的有效差异是什么? - Kim Miller

18
上面的答案强调了一种经常使用的dropout方法,但这种方法不是由Tensorflow和Keras使用的。Tensorflow Doc
Keras/TF提到了Semeniuta et al提出的一种循环方法。此外,请查看下面比较不同循环dropout方法的图像。在上面的答案中提到的Gal and Ghahramani方法位于第二个位置,而Semeniuta方法位于最右侧。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接