【机器学习300问】75、如何理解深度学习中Dropout正则化技术?

一、Dropout正则化的原理是什么?

**Dropout(随机失活)正则化是一种用于减少神经网络中过拟合现象的技术。**Dropout正则化的做法是:

训练过程 中的每次迭代中,随机将网络中的一部分权重临时"丢弃"(即将它们的值设为0),确保它们不参与前向传播和后向传播。换句话说,每个神经元有一定的概率被暂时从网络中移除。通过这种方式,网络的每次训练迭代都是在一种略微不同的架构下完成的。这相当于在训练一个由多个不同网络组成的大型网络组合。

通常,丢弃的概率(dropout rate)是一个预先设定的值,如0.5,意味着在每一轮训练中,大约有一半的隐藏层神经元会被暂时忽略。有时候也反过来设置一个保留概率(keep-prob)操作和上面类似。

二、如何具体实现Dropout?

用下面这幅图为例来详细说明一下Dropout的步骤

(1)确定Dropout率

dropout_rate 是一个超参数,表示在每次训练迭代中神经元被丢弃的概率。设定为 p,通常在0.2到0.5之间。

python 复制代码
keep_prob = 1 - dropout_rate

(2)生成随机的Dropout掩码

Dropout最常用的方法,即inverted dropout(反向随机失活),首先要定义Dropout掩码向量dropout_mask 。然后看它是否小于某数,我们称之为keep_probkeep_prob 是一个具体数字,而本例将它设为0.8,它表示保留某个隐藏单元的概率,此处keep-prob等于0.8,它意味着消除任意一个隐藏单元的概率是0.2,它的作用就是生成随机矩阵。

python 复制代码
dropout_mask = np.random.rand(activations.shape[0], activations.shape[1]) < keep_prob

接下来要做的就是从某一层中获取激活函数,这里我叫它activationsactivations其中含有要计算的激活函数。

(3)应用掩码

activationsdropout_mask 相乘,它的作用就是让dropout_mask 中所有等于0的元素(输出),而各个元素等于0的概率只有20%,乘法运算最终把dropout_mask 中相应元素输出,即让dropout_mask 中0元素与activations中相对元素归零。

python 复制代码
activations *= dropout_mask  # 将神经元的输出乘以0或1

(4)Dropout缩放

在测试或使用神经网络进行预测时,通常不会应用Dropout。但是,为了平衡那些在训练时被"保留下来"的权重,我们对网络中每个权重乘以保留(未丢弃)概率,或者是在测试时使用所有权重的平均值。这种方法称为"Dropout缩放",它确保了训练时和测试时网络的表现是一致的。

python 复制代码
activations /= keep_prob     # 缩放未丢弃的神经元的输出

(5)总结

将上面的步骤总结起来,可以写成这样:

python 复制代码
def apply_dropout(activations, dropout_rate):
    # Step 1: 确定保留的神经元的概率
    keep_prob = 1 - dropout_rate
    
    # Step 2: 生成随机的Dropout掩码
    dropout_mask = np.random.rand(activations.shape[0], activations.shape[1]) < keep_prob
    
    # Step 3: 应用掩码并缩放
    activations *= dropout_mask  # 将神经元的输出乘以0或1
    activations /= keep_prob     # 缩放未丢弃的神经元的输出
    
    return activations

需要特别说一下的是,不同层的keep_prob 是可以不同的,因为不同层的W权重矩阵的大小不同,一般我们担心这些层更容易发生过拟合,对很大的权重矩阵设置比较低的keep_prob 假设是0.5。对于其它层,过拟合的程度可能没那么严重,它们的keep-prob 值可能高一些,可能是0.7。如果在某一层,我们不必担心其过拟合的问题,那么keep-prob 可以为1意味着保留所有单元,并且不在这一层使用dropout。

三、为什么Dropout会起作用?它是怎么解决过拟合的?

这种随机性的丢弃操作带来了几个重要的好处。

(1)抑制神经元对单一特征的过度依赖

如果某些神经元对应的权重值过大,它们对输入信号的响应将显著超过其他神经元,使得模型在做决策时过度依赖这些神经元所代表的特征,形成了对单一特征的过度敏感。

Dropout通过随机失活隐藏层神经元,打破了神经元对单一特征的固定依赖关系,迫使模型在不同训练迭代中学习不同的特征组合,降低了对特定特征的敏感度。

(2)抑制神经元之间过度依赖

在没有Dropout的情况下,某些神经元可能会形成过于紧密的协作关系,对训练数据中的特定模式过拟合,导致模型在遇到未见过的数据时表现不佳。

Dropout通过随机移除部分神经元,迫使剩余神经元独立地学习更通用、更稳健的特征表示,降低模型对个别特征或特征组合的敏感度,**强制网络在训练时不能过度依赖任何一组特定的神经元,因为特定的神经元随时有可能被失活。**从而减轻过拟合现象。

(3)模拟集成学习

**Dropout过程可以被视为对神经网络进行集成学习的一种近似。**由于每次前向传播时神经元的失活是随机的,网络在训练过程中实际上经历了大量不同的子网络配置。这些子网络可以看作是原始网络的多个变体,每个变体以不同的方式对输入数据进行处理。

尽管在测试阶段所有神经元都会恢复工作,但经过Dropout训练的网络权重实际上是众多子网络权重的加权平均,类似于集成学习中的模型平均,有助于减少模型的方差,提高泛化性能。

相关推荐
桃花键神7 分钟前
AI可信论坛亮点:合合信息分享视觉内容安全技术前沿
人工智能
野蛮的大西瓜28 分钟前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
CountingStars6191 小时前
目标检测常用评估指标(metrics)
人工智能·目标检测·目标跟踪
tangjunjun-owen1 小时前
第四节:GLM-4v-9b模型的tokenizer源码解读
人工智能·glm-4v-9b·多模态大模型教程
冰蓝蓝1 小时前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
橙子小哥的代码世界1 小时前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
新加坡内哥谈技术2 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
fanstuck2 小时前
Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写
人工智能·数据挖掘·openai
lovelin+v175030409662 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
wydxry3 小时前
LoRA(Low-Rank Adaptation)模型微调
深度学习