【机器学习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训练的网络权重实际上是众多子网络权重的加权平均,类似于集成学习中的模型平均,有助于减少模型的方差,提高泛化性能。

相关推荐
冷眼看人间恩怨9 分钟前
【话题讨论】AI大模型重塑软件开发:定义、应用、优势与挑战
人工智能·ai编程·软件开发
2401_8830410810 分钟前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
AI极客菌1 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭1 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^1 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
Power20246662 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k2 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫2 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班3 小时前
复现LLM:带你从零认识语言模型
人工智能·语言模型
数据猎手小k3 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型