Embedding层后加Dropout层与LSTM的dropout参数效果是否一致?额外添加有何影响?
关于Keras Sequential模型中Dropout应用的差异解答
首先直接给你明确结论:这两种Dropout的应用方式效果完全不同,额外添加Dropout层肯定会给模型带来明显差异,具体拆解如下:
1. 两种Dropout的作用阶段完全不同
- Embedding层后单独加
Dropout(0.25):这个Dropout是直接作用在Embedding层输出的词向量张量上——也就是在词向量生成后,立刻随机丢弃25%的特征维度(每个样本的词向量都会被独立处理),处理后的结果才会输入到LSTM层。 - LSTM的
dropout=0.5参数:这个Dropout是LSTM层内部的机制,它只会对输入到LSTM单元的张量(也就是Embedding层的输出,或者前面Dropout层的输出)在进入LSTM计算前,随机丢弃50%的特征维度。简单说,它是LSTM层自己对输入做的Dropout,而不是独立在层外处理。
2. 同时使用两者的实际效果差异
当你同时添加独立的Dropout层和设置LSTM的dropout=0.5时,相当于对Embedding的输出做了两次连续的Dropout:
- 首先,Embedding输出先经过
Dropout(0.25),每个特征被保留的概率是75%; - 接着,这个经过一次Dropout的结果再被LSTM的
dropout=0.5处理,每个特征再次被保留的概率是50%; - 最终,一个特征能完整进入LSTM计算的概率是
0.75 * 0.5 = 0.375,也就是有62.5%的概率被丢弃——这和只使用LSTM的dropout=0.5(特征保留概率50%)的效果天差地别。
另外补充一点:LSTM的recurrent_dropout=0.5是另一回事,它是对LSTM内部循环传递的隐藏状态做Dropout,和输入侧的Dropout完全不相关,不会影响我们上面讨论的两种输入侧Dropout的差异。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

