一. 回归问题要谨慎使用Dropout的原因
在做NLP的回归任务时,若直接套用做分类问题的代码,仅仅修改损失函数,会发现验证损失一直在震荡波动,不收敛,但别人的代码loss却能够稳定下降,最终下降到0.1左右,而这个却一直飘,最终只能下降到0.14如下图:
通过对比别人的代码,发现主要是有两行代码的差异:
于是,尝试把bert内部的dropout全部关掉,最终得到以下的一个loss,对比可得,这个loss下降就非常平稳,模型收敛。
可是,dropout相当于ensemble,能随机砍掉一些结果,按理应该是能够防止过拟合,增加模型稳健性得,为什么这里用了dropout反而性能损失这么大?
二. 原因阐述
回顾dropout用法:
dropout在训练时会以 p 的概率将隐藏层的神经元设置为0,同时会将其他神经元乘以 1/1-p, 保证输出期望的一致性。
然后推导一下dropout输出值的均值和方差,可以发现其经过dropout后,
均值并没有发生变化,而方差发生了变化。
由于经过dropout的输出还要经