Multi-Sample Dropout

1. 模型结构

orginal dropout  : 对单个样本,进行单次drop out。

original dropout vs multi-sample dropout

2. 思想

    stacking方法中的子模型。事实证明,用多个子模型做模型融合可以提高模型的性能。

    训练时,对原始数据进行变换,创建出多个分身。分身可能是带噪音,可能是不完整(此方法)。从而提高泛化能力。

3. 实现方法

    训练阶段,每次dropout首先会随机的选取50%(这个比例可以自己设置)的神经元,其他50%被丢弃。

    通过多次的dropout,从特征中选择了不同的特征子集进行训练,相当于重采样。

    再通过共享的全连接层和loss层。

    loss:每条样本,多个分身,得到的多个loss的平均值最小。

4. 优点

    加快收敛,性能提升。dropout只使用在最后的几层,而全连接层的训练时间较快。因此,对比更大的 mini-batch,虽然可以达到相同的效果,但是实际上会增加计算的耗时。

    实现简单:在 dropout 层后复制部分训练网络,并在这些复制的全连接层之间共享权重就可以了,无需新运算符。

5. 发散

    传统的机器学习算法,如排序中常用的树模型。stack思想下,得到了不同的树。如果就用一棵树呢??泛化能力能变强吗?

    Stacking是通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。基础模型利用整个训练集做训练,元模型将基础模型的特征作为特征进行训练。(N->1) 。基础模型通常包含不同的学习算法,因此stacking通常是异质集成。

6. 缺点

    1)模型的设计,存在训练和预测不一致问题。训练时,Dropout 往(某些层的)输入加上了乘性噪声。而预测时,理论上,应该是对同一个输入多次传入模型中(模型不关闭Dropout),然后把多次的预测结果平均值作为最终的预测结果。实际上,预测的时候用的是关闭Dropout的单模型,两者未必等价,这就是Dropout的训练预测不一致问题。

    2)损失函数的设计,只有交叉熵。如果只有交叉熵这一项,模型的训练结果是“不同的Dropout下,目标类的得分都大于非目标类的得分”。

链接:https://kexue.fm/archives/8496

你可能感兴趣的:(Multi-Sample Dropout)