Dropout 率2025年6月18日 | 阅读 5 分钟 Dropout 是机器学习中非常有效的正则化技术之一,它在训练过程中随机选择神经元进行忽略。这些神经元被暂时“丢弃”,意味着在前向传播过程中,它们对下游神经元激活的贡献被移除。在反向传播过程中,与这些神经元相关的所有权重更新都不会被应用。这种随机性有助于避免过拟合,因为它不会过度依赖少数几个神经元。 当神经网络学习时,其神经元的权重会发生变化,以在网络中形成特定的模式或上下文。专门化有助于网络学习得更快,但通常会导致模型变得脆弱,与特定神经元建立过多的连接。这通常被称为复杂的协同适应(complex co-adaptation)。其结果是模型在训练数据上泛化得很好,但在新的、未见过的数据上泛化能力较差。在训练期间随机丢弃神经元会迫使网络将其表示分布到其他神经元上,从而促进冗余,并允许模型学习多种独立的内部表示,从而提高泛化能力和鲁棒性。这种 dropout 技术有效地降低了网络对单个神经元权重的敏感性,从而减少了过拟合的可能性。完整的网络用于进行预测;dropout 仅在训练期间使用,而不在评估期间使用。 在 Keras 中实现Keras 中的 Dropout 通过在权重更新周期中以某个概率(比如 20%)随机丢弃节点来工作。让我们继续学习如何在一个简单的二元分类任务中使用 Sonar 数据集应用 dropout。该数据集是基于声纳啁啾返回信号对岩石和模拟水雷进行分类。这是一个很好的神经网络测试案例,因为输入值是数值型且经过均匀缩放的。 我们将使用 scikit-learn 中提供的 10 折交叉验证,以便公平地比较模型性能的差异。Sonar 数据集有 60 个输入特征和一个输出标签。输入在送入网络前会进行标准化。基线模型将有两个隐藏层。第一个隐藏层有 60 个单元,第二个有 30 个单元。它通过 SGD(随机梯度下降)进行训练,学习率较低并带有动量。 输出 ['sonar.csv'] 让我们寻求一些种子可复现性。 我们需要创建一个基线模型。 输出 Base Model Accuracy (Standard Deviation): 84.57% (4.78%) 另一个想法是在可见层(即网络的输入层)上使用 dropout。这为增加神经网络的泛化能力引入了更多方法。从输入层到第一个隐藏层的 Dropout 是通过在训练过程的每个更新周期中随机移除输入层的一部分神经元来实现的。例如,如果 dropout 设置为 20%,那么在每个更新周期,网络应该会丢弃大约五分之一的输入神经元。这种随机性有助于使网络减少对特定输入特征的依赖,从而实现更鲁棒的学习。除了输入 dropout,人们还可以使用约束来在训练期间进一步保持隐藏层权重的稳定性。 例如,将权重的最大范数设置为 3 会限制权重,使其在更新时不会变得过大。这可以通过在 Dense 层的配置中使用 `kernel_constraint` 参数来实现。另一个选择是提高学习率以使其更快收敛,并将动量设置为一个较高的值,例如 0.9,以获得更好的优化。这种方法通过利用输入 dropout 和权重约束以及优化网络超参数,可以更好地对抗网络中的过拟合。以下是一个示例代码,展示了将输入 dropout 与权重约束结合到基线架构中的实现。 输出 Visible Layer Accuracy (Standard Deviation): 85.02% (5.96%) Dropout 也可以很好地用于神经网络模型主体部分的隐藏神经元上,以提高其泛化能力。在隐藏层之间策略性地加入 dropout 层,会导致一部分隐藏神经元在每个更新周期中被随机排除。这促进了学习一种更具弹性的材料内部表示,并避免了对特定神经元的过度依赖。 例如,在两个隐藏层之间以及输出层和最后一个隐藏层之间都使用了 dropout。这里使用的 dropout 率是 20%。因此,在训练期间,每五个神经元中就有一个被随机省略。层上也应用了额外的权重约束;权重被进一步限制在一定的大小范围内,以进一步稳定系统并避免过拟合。这种 dropout 与权重约束的结合可以帮助网络发展出更好的泛化能力,同时使训练更高效。 输出 Hidden Layer Accuracy (Standard Deviation): 84.11% (5.75%) 正如您在上面所看到的,对于所选的网络配置,隐藏层中的 dropout 并没有提升性能。相反,性能比基线更差。 这可能是因为需要额外的训练周期或需要进一步调整学习率。 下一个主题流行的机器学习平台 |
我们请求您订阅我们的新闻通讯以获取最新更新。