Dropout解决过拟合问题
参考:
Dropout解决过拟合问题
Dropout原理与实现
Dropout详解
Dropout的定义
- 在神经网络的训练过程的前向传播中,每个batch的迭代时,以概率p随机关闭神经元(每个neuron, 有p%的可能性被去除;(注意不是去除p比例的神经元),本次反向传播时,只更新未关闭的神经元;
- 下一个batch训练时,恢复上一轮被关闭的神经元,然后重复操作1。
训练与测试时的输出
测试时需要关闭dropout,否则仍然按概率抛弃神经元会导致网络不稳定,即同一样本多次预测结果不同。
为了平衡训练与测试的差异,可以采取使得训练与测试的输出期望值相等的操作:
首先假设一层神经网络中有n个神经元,其中一个神经元的输出是x,输出期望也是x。加上dropout后,有p的概率这个神经元失活,那么这个神经元的输出期望就变成了(1-p)*x+p*0=(1-p)x,我们需要保证这个神经元在训练和测试阶段的输出期望基本不变。那么就有两种方式来解决:
- 第一种方式是在训练的时候,让这个神经元的输出放大1/(1-p)倍,那么它的输出期望就变成(1-p)x/(1-p)+p*0=x,和不dropout的输出期望一致;
- 第二种方式是在测试的时候,让这个神经元的输出乘以(1-p),那么它的输出期望就变成了(1-p)x,和训练时的期望是一致的。
为什么dropout可以减轻过拟合
- ensemble效果:训练过程中每次随机关闭不同的神经元,网络结构已经发生了改变,整个dropout的训练过程就相当于很多个不同的网络取平均,进而达到ensemble的效果。
- 减少神经元之间复杂的共适应关系(co-adaption):dropout导致每两个神经元不一定每一次都在网络中出现,减轻神经元之间的依赖关系。阻止了某些特征仅仅在其它特定特征下才有效果的情况,从而迫使网络无法关注特殊情况,而只能去学习一些更加鲁棒的特征。
所谓co-adaption,是指网络中的一些节点会比另外一些节点有更强的表征能力。这时,随着网络的不断训练,具有更强表征能力的节点被不断的强化,而更弱的节点则不断弱化直到对网络的贡献可以忽略不计。这时候只有网络中的部分节点才会被训练,浪费了网络的宽度和深度,进而导致模型的效果上升收到限制。而Dropout的提出解决了co-adaption问题,从而使得训练更宽的网络成为可能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通