社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

放假速通机器学习深度学习——Dropout

人工智能学习指南 • 1 月前 • 60 次点击  

在深度学习中,Dropout layer 是一种常见的正则化方法,常用于防止神经网络的过拟合。

但是为什么dropout layer这么常见?它的内部工作原理是怎样的?它解决了什么问题?是否存在替代方案?

这篇文章将带大家深入了解dropout layer背后的复杂机制。


概览

本文分为以下几个部分:

  • 引言:它试图解决的问题

  • 什么是Dropout?

  • 它是如何解决问题的?

  • Dropout的实现

  • 推理时的Dropout

  • Dropout的构想

  • 结论

引言

在深入探索dropout layer之前,让我们先思考一个问题,我们试图解决的是什么问题?

深度神经网络具有不同的架构,有时较浅,有时很深,旨在在给定的数据集上进行泛化。

但是在从数据集中学习不同特征的过程中,它们有时会学习到数据集中的统计噪声。

这确实提高了模型在训练数据集上的性能,但在新的数据点(测试数据集)上却表现糟糕,这就是过拟合问题。

为了解决这个问题,我们采用了各种正则化技术来惩罚网络的权重,但这还不够。

减少过拟合或正则化固定大小模型的最佳方法是获取所有可能参数设置下的平均预测,并汇总最终输出。

但是,这计算成本太高,对于实时推理/预测来说并不可行。

另一种方法受到了集成技术(如AdaBoost、XGBoost和随机森林)的启发,其中我们使用不同架构的多个神经网络。

但是,这需要训练和存储多个模型,随着时间的推移,随着网络变得越来越深,这成为了一个巨大的挑战。

所以这个时候我们就可以用一个很合适的解决方案,即dropout layer。



图1


什么是Dropout?

“Dropout”是指在一个神经网络中丢弃节点(输入层和隐藏层中的节点),如图1所示。

与丢弃节点相连的所有前向和后向连接都会被暂时移除,从而从父网络中创建出一个新的网络架构,节点按丢弃概率p进行丢弃。

让我们通过给定的输入x:{1, 2, 3, 4, 5}到全连接层来理解这一点。

我们有一个丢弃层,其概率p=0.2(或保留概率=0.8),在输入x的前向传播(训练)过程中,20%的节点将被丢弃,即x可能变为{1, 0, 3, 4, 5}或{1, 2, 0, 4, 5}等,同样,这也适用于隐藏层。

例如,如果隐藏层有1000个神经元(节点),并且应用丢弃的概率为0.5,那么在每次迭代(批次)中,将随机丢弃500个神经元。

通常,对于输入层,保留概率(即1-丢弃概率)更接近1,作者建议的最佳值为0.8。

对于隐藏层,丢弃概率越大,模型越稀疏,其中0.5是最优化的保留概率,表示丢弃50%的节点。


Dropout是如何解决过拟合问题的?

在过拟合问题中,模型学习了统计噪声,确切地说,训练的主要目的是在所有单元(神经元)给定的情况下,减小损失函数。

因此,在过拟合中,一个单元可能会以修正其他单元错误的方式发生变化。

这会导致复杂的协同适应,进而导致过拟合问题,因为这种复杂的协同适应无法在未见数据集上进行泛化。

现在,如果我们使用Dropout,它会阻止这些单元修正其他单元的错误,从而防止协同适应,因为在每次迭代中,单元的存在都是高度不可靠的。

因此,通过随机丢弃一些单元(节点),它迫使各层通过概率方法或多或少地对输入负责。

这确保了模型得到泛化,从而减少了过拟合问题。



图2


从图2可以很容易地看出,带有丢弃的隐藏层学习的是更多的泛化特征,而不是没有丢弃的层中的协同适应。

很明显,丢弃打破了这种单元间的关系,并更加关注泛化。


Dropout的实现

光说不练假把式,现在让我们来了解一下丢弃的数学解释。

图3


在丢弃层的原始实现中,在训练期间,以保留概率(1-丢弃概率)选择层中的一个单元(节点/神经元)。

这会在给定的训练批次中创建一个更薄的架构,并且每次这个架构都是不同的。

在标准神经网络中,前向传播有以下方程:



图4


其中:
z:表示层(l+1)在激活之前的输出向量
y:表示层l的输出向量
w:层l的权重
b:层l的偏置


此外,通过激活函数,z被转换为层(l+1)的输出。

现在,如果我们有丢弃,前向传播方程将按以下方式改变:



图5


在计算z之前,对层的输入进行采样,并将其与独立的伯努利变量逐元素相乘。

r表示伯努利随机变量,每个变量有p的概率为1,r作为输入变量的掩码,确保仅根据丢弃的保留概率保留一些单元。

这确保了我们有稀疏的输出“y(bar)”,它在前向传播期间作为层的输入。


图6


在神经网络中,Dropout是一种正则化技术,用于减少过拟合。

它通过在训练过程中随机丢弃(即“drop out”)网络中的一部分神经元(或单元)来实现这一点。

但是,在模型进行预测(或称为推理)时,我们应该如何处理这些 Dropout 层呢?


推理时的 Dropout

在推理过程中,我们通常会移除 Dropout 层,意味着使用网络中的所有神经元进行预测。

然而,由于在训练时部分神经元被丢弃,直接这样做会导致最终权重相对于训练时的期望权重偏大。

为了解决这个问题,我们通常会根据选定的 Dropout 比例对权重进行缩放。

具体来说,如果在训练时一个神经元以概率 p 被保留,那么在推理阶段,该神经元的输出权重会被乘以 p。

这样做的目的是确保网络在推理时能够基于正确的权重比例进行预测。


Dropout 的灵感来源

Dropout 的概念是受到多种现象的启发而提出的:

  1. Google Brain 的启发:大规模神经网络(如 Google Brain)的学习能力强大,但硬件效率不高,因为不同的模型可能需要独立地发现相同的特征。Dropout 通过在不同的迭代中使用不同的神经元子集来解决这个问题。

  2. 银行出纳员的例子:经常更换出纳员可以减少员工之间合谋欺诈的机会。类似地,Dropout 通过随机选择不同的神经元子集来防止神经元学习特定的共同适应性,从而减少过拟合。


结论

Dropout 是一种强大的正则化技术,可用于大多数类型的神经网络,以减少过拟合。它比许多现有的正则化方法更有效,并且可以与最大范数归一化等技术结合使用,以进一步提升性能。

通过了解 Dropout 的工作原理和灵感来源,我们可以更好地理解和应用这一技术,从而构建更加稳固和准确的神经网络模型。


另外我们精心打磨了一套基于数据与模型方法的 AI科研入门学习方案(已经迭代过5次),对于人工智能来说,任何专业,要处理的都只是实验数据,所以我们根据实验数据将课程分为了三种方向的针对性课程,包含时序、图结构、影像三大实验室,我们会根据你的数据类型来帮助你选择合适的实验室,根据规划好的路线学习 只需 5 个月左右(很多同学通过学习已经发表了 sci 二区及以下、ei会议等级别论文)学习形式为 直播+ 录播,多位老师为你的论文保驾护航,如果需要发高区也有其他形式。



大家感兴趣可以直接添加小助手微信:ai0808q  通过后回复咨询既可!



大家想自学的我还给大家准备了一些机器学习、深度学习、神经网络资料大家可以看看以下文章(文章中提到的资料都打包好了,都可以直接添加小助手获取)

<


 人工智能资料分享 



>








零基础学习路线(点击图片即可跳转)











深度学习中文教程书(点击图片即可跳转)


神经网络学习资料(点击图片即可跳转)


大家觉得这篇文章有帮助的话记得分享给你的死党闺蜜、同学、朋友、老师、敌蜜!

B站:AI秃秃学长小墨



关注小墨

获取最新AI技能+最肝AI干货

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178481
 
60 次点击