Dropout和R-Dropout的使用技巧

简介: 【8月更文挑战第4天】Dropout及其扩展R-Dropout在机器学习中的应用,包括Dropout解决过拟合问题的方法、最佳实践技巧以及R-Dropout如何通过两次前向传播和损失函数正则化来提高模型的泛化能力。

1 引言

在ML中存在两类严重的问题:过拟合学习时间开销大

当过拟合时,得到的模型会在训练集上有非常好的表现,但是对新数据 的预测结果会非常的不理想。为了解决过拟合问题,通常会采用训练多个模型来解决单模过拟合的问题。但又会带来时间开销大的问题。Dropout就很好的解决了这个问题,在单模内防止过拟合。对于时间开销大的地方是梯度下降,学习率衰减可以解决梯度下降中时间开销的问题。

Dropout是在训练过程中,随机地忽略部分神经元,即是在正向传播的过程中,这些被忽略的神经元对下游神经元的贡献暂时消失,在反向传播时,这些神经元也不会有任何权重的更新。

其他的具体介绍,可以转到深度学习中Dropout原理解析

2 Dropout使用技巧

(1)经过验证,隐含节点Dropout率等于0.5的时候最佳,此时Dropout随机生成的网络结构最多。Dropout也可以用在输入层,作为一种添加噪声的方法。输入层设为更接近1时,使得输入变化不会太大,比如0.8。

(2)通常在网络中Dropout率为0.2~0.5。0.2是一个很好的起点,太低的概率产生的作用有限,太高的概率可能导致网络的训练不充分。

(3)当在较大的网络上使用Dropout时,可能会获得更好的表现,因为Dropout降低了模型训练过程中的干扰

(4)在输入层和隐藏层上使用Dropout。或者在网络的每一层都使用Dropout能有更佳的效果。

(5)使用较高的学习率,使用学习率衰减和设置较大的动量值,将学习率提高10~100倍,且使用0.9或0.99的动量值。

Keras中,momentum就是动量值
sgd = SGD(lr=0.1,momentum=0.8,decay=0.0,nesterov=False)

(6)限制网络权重的大小,打的学习率可能导致非常大的网络权重,对网络权重大小进行约束,例如大小为4或5的最大范数正则化(Max-norm Regularizationi)。

Keras中,通过指定Dense中的kernel_constrain=maxnorm(x)来限制网络权重

参考资料:Dropout: A Simple Way to Prevent Neural Networks from Overfitting

3 Dropout的拓展R-Dropout

(1)简介

简单来说就是模型中加入dropout,在训练阶段的预测阶段,用同样的数据预测两次,去追求两次的结果尽可能接近,这种接近体现在损失函数上。虽然是同样的数据,但是因为模型中Dropout是随机丢弃神经元,会导致两次丢弃的神经元不一样,从而预测的结果也会不一样。R-Dropout思想就是去实现控制两次预测尽量保持一致,从而去优化模型。除了在NLP领域,其他的NLU、NLG、CV的分类等多种任务上都对R-Drop做了对比实验,大部分实验效果都称得上“明显提升”。

具体比较详细的讲解,参考

(2)使用方法

和普通的Dropout方法不同,有封装的API可以一行代码使用。R-Dropout的使用需要,自定义模型的输入和损失函数。举例如下,参考NLP 中Pytorch 实现R-Dropout

# define your task model, which outputs the classifier logits
model = TaskModel()

def compute_kl_loss(self, p, q pad_mask=None):

    p_loss = F.kl_div(F.log_softmax(p, dim=-1), F.softmax(q, dim=-1), reduction='none')
    q_loss = F.kl_div(F.log_softmax(q, dim=-1), F.softmax(p, dim=-1), reduction='none')

    # pad_mask is for seq-level tasks
    if pad_mask is not None:
        p_loss.masked_fill_(pad_mask, 0.)
        q_loss.masked_fill_(pad_mask, 0.)

    # You can choose whether to use function "sum" and "mean" depending on your task
    p_loss = p_loss.sum()
    q_loss = q_loss.sum()

    loss = (p_loss + q_loss) / 2
    return loss

# keep dropout and forward twice
logits = model(x)

logits2 = model(x)

# cross entropy loss for classifier
ce_loss = 0.5 * (cross_entropy_loss(logits, label) + cross_entropy_loss(logits2, label))

kl_loss = compute_kl_loss(logits, logits2)

# carefully choose hyper-parameters
loss = ce_loss + α * kl_loss
目录
相关文章
|
消息中间件 大数据 Kafka
【Kafka】kafka 发展历史分析
【4月更文挑战第5天】【Kafka】kafka 发展历史分析
|
机器学习/深度学习 存储 算法
时序数据特征工程浅析
内容摘要特征工程是指将原始数据标记处理为价值密度更高,更容易解释目标问题的工程化过程,在面向大量原始采集的数据集统计分析,尤其是对于高通量持续采集、且价值密度较低的时序数据更是如此。时序数据特征工程则是指利用有效方法,将原始时序数据转化为带有含义分类标签的序列数据片段或特征数值,例如,我们可以将指定时间窗口序列数据标识为特定异常关联数据,并保留平均、最大、最小值作为该序列的特征值。这样我们就可以围
3610 0
时序数据特征工程浅析
【python】使用matplotlib绘图使刻度线向内
成功使用代码实现matplotlib绘制的图刻度线朝内
【python】使用matplotlib绘图使刻度线向内
|
6月前
|
人工智能 搜索推荐
AI视频技术的发展是否会影响原创内容的价值
AI视频技术的发展显著降低了视频制作的门槛与成本,自动完成剪辑、特效添加等繁琐工作,大大缩短创作时间。它提供个性化创意建议,帮助创作者突破传统思维,拓展创意边界。此外,AI技术使更多非专业人士也能参与视频创作,注入新活力与多样性,丰富了原创内容。总体而言,AI视频技术不仅提升了创作效率,还促进了视频内容的创新与多样化。
|
11月前
|
算法 定位技术
路径规划算法 - 求解最短路径 - A*(A-Star)算法
路径规划算法 - 求解最短路径 - A*(A-Star)算法
434 1
|
JSON API 数据格式
Requests库:轻松实现Python中的HTTP请求
Requests是Python的第三方HTTP库,简化了HTTP请求的发送,支持GET、POST等方法。要安装,使用`pip install requests`。Requests以其简洁API和强大功能成为网络编程首选工具,为开发者提供高效稳定的网络交互体验。
336 5
|
监控 Unix Linux
windows和linux实时监控文本内容的命令
windows和linux实时监控文本内容的命令
330 1
|
存储 机器学习/深度学习 自然语言处理
Mini but Mighty | 简直就是微调ViT神器,有了Mimi微调方法,别的不用选了!又稳又快!
Mini but Mighty | 简直就是微调ViT神器,有了Mimi微调方法,别的不用选了!又稳又快!
298 1
|
机器学习/深度学习 负载均衡 算法
训练Backbone你还用EMA?ViT训练的大杀器EWA升级来袭
训练Backbone你还用EMA?ViT训练的大杀器EWA升级来袭
350 1
|
关系型数据库 MySQL 数据挖掘
当前时间的获取与利用:解析MySQL中的NOW()函数
在数据库管理中,记录数据的时间信息是至关重要的,而NOW()函数正是帮助我们获取当前日期和时间的有力工具。
655 0