1. Dropout
Dropout 是一种正则化技术,通过在训练过程中随机移除部分神经元及其连接,从而减少神经网络对特定神经元的依赖,提升模型的泛化能力。具体而言,Dropout 相当于在训练过程中从原始网络中随机采样出“更薄的”子网络,每个子网络的神经元数量较少。在前向传播和反向传播过程中,模型基于多个稀疏子网络进行训练,这可以视为一种模型平均化的形式。
Dropout 的动机
在使用 Dropout 训练的神经网络中,每个隐藏单元都需要与随机选择的其他单元一起工作,因此每个单元变得更加健壮,不再依赖于特定的其他神经元。通过随机丢弃神经元,Dropout 阻止了神经元共适应性的发生,即某些神经元仅在特定神经元存在时有效。由于每次训练的神经元子集是随机的,网络被迫学习更鲁棒的特征,这些特征在不同的神经元组合中依然存在和有效。
Dropout 通过迫使每个神经元独立学习有用的特征,避免了模型对某些固定特征组合的依赖,从而提高了模型的泛化能力,减少过拟合。
以下是基于所述的 Dropout 实现流程的总结:
Dropout 实现流程:
-
初始化阶段:在神经网络的每一层中,设置一个 dropout rate(通常为 0.5),表示训练时每次迭代随机丢弃神经元的比例。输入层和输出层的神经元不会被丢弃,只有隐藏层的神经元会被随机选择。
-
前向传播:在每次迭代的前向传播阶段,随机选择隐藏层中的一部分神经元,并将其临时丢弃(设其输出为 0)。通常,丢弃的比例等于 dropout rate。例如,当 dropout rate 为 0.5 时,随机丢弃 50% 的隐藏层神经元。
-
参数更新:将输入数据通过修改后的网络进行前向传播,计算得到的损失。 通过修改后的网络进行反向传播,根据损失对未被丢弃的神经元进行梯度更新(如随机梯度下降法)。被丢弃的神经元的参数不会更新,保持原样。
-
循环过程:
- 恢复被丢弃的神经元:恢复之前被临时丢弃的神经元,使其在下一次迭代中重新参与训练。
- 重新随机丢弃神经元:在下一次迭代中,重新随机选择隐藏层中的部分神经元进行丢弃。每次 mini-batch 训练时,都会随机选择不同的神经元进行丢弃,确保模型每次训练的子网络都不同。
- 重复上述的前向传播、参数更新、恢复和重新丢弃神经元的过程,直到训练完成。
-
测试阶段:在测试阶段,Dropout 不再丢弃任何神经元。为了保持训练和测试时的数值一致性,模型会将所有隐藏层神经元的输出按丢弃比例缩放(例如,如果 dropout rate 是 0.5,则乘以 0.5),以确保训练和推断时的激活值保持一致。
Dropout 流程的关键点
- 随机丢弃神经元:每次训练随机选择一部分神经元,并将它们临时丢弃,以防止模型过度依赖某些特定神经元,从而提高泛化能力。
- 参数更新:只有未被丢弃的神经元参与梯度更新,丢弃的神经元在当前 mini-batch 迭代中保持不变。
- 恢复丢弃神经元:每次训练结束后恢复所有神经元,保证每一轮训练时使用的神经元组合不同。
- <