神经网络学习笔记——神经网络基础(三)

神经网络学习笔记------神经网络基础(三)

六、正则化(Dropout丢弃层 )

在训深层练神经网络时,由于模型参数较多,在数据量不足的情况下,很容易过拟合。Dropout 就是在神经网络中一种缓解过拟合的方法。

原理

缓解过拟合的方式就是降低模型的复杂度,而 Dropout 就是通过减少神经元之间的连接,把稠密的神经网络神经元连接,变成稀疏的神经元连接,从而达到降低网络复杂度的目的。

将 Dropout 层的概率 p 设置为 0.8,此时经过 Dropout 层计算的张量中就出现了很多 0 , 概率 p 设置值越大,则张量中出现的 0 就越多。计算过程如下:

  1. 先按照 p 设置的概率,随机将部分的张量元素设置为 0
  2. 为了校正张量元素被设置为 0 带来的影响,需要对非 0 的元素进行缩放,其缩放因子为: 1/(1-p),上面代码中 p 的值为 0.8, 根据公式缩放因子为:1/(1-0.8) = 5
  3. 比如:第 3 个元素,原来是 5,乘以缩放因子之后变成 25。
    经过 Dropout 层之后有一些梯度为 0,这使得参数无法得到更新,从而达到了降低网络复杂度的目的。

dropout 层其作用用于控制网络复杂度,达到正则化的目的,类似于 L2 正则化对线性回归的作用。

七、批量归一化

1.mini batch

在数据量大的时候,只进行一次梯度下降叫做full batch。

例如我们把100万样本分成1000份, 每份1000个样本, 这些子集就称为mini batch。然后我们分别用一个for循环遍历这1000个子集。 针对每一个子集做一次梯度下降。 然后更新参数w和b的值。接着到下一个子集中继续进行梯度下降。 这样在遍历完所有的mini batch之后我们相当于在梯度下降中做了1000次迭代。 我们将遍历一次所有样本的行为叫做一个 epoch,也就是一个世代。 在mini batch下的梯度下降中做的事情其实跟full batch一样,只不过我们训练的数据不再是所有的样本,而是一个个的子集。 这样在mini batch我们在一个epoch中就能进行1000次的梯度下降,而在full batch中只有一次。 这样就大大的提高了我们算法的运行速度。

2.批量归一化

神经网络的学习其实在学习数据的分布,随着网络的深度增加、网络复杂度增加,一般流经网络的数据都是一个 mini batch,每个 mini batch 之间的数据分布变化非常剧烈,这就使得网络参数频繁的进行大的调整以适应流经网络的不同分布的数据,给模型训练带来非常大的不稳定性,使得模型难以收敛。

对每一个 mini batch 的数据进行标准化之后,数据分布就变得稳定,参数的梯度变化也变得稳定,有助于加快模型的收敛。
数据在经过 BN 层之后,无论数据以前的分布是什么,都会被归一化成均值为 β,标准差为 γ 的分布。

接口函数

python 复制代码
torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True)

实验

掌握构建分类模型流程

代码和数据

https://blog.csdn.net/qq_38343151/article/details/102886304

相关推荐
小白郭莫搞科技4 小时前
鸿蒙跨端框架Flutter学习:CustomTween自定义Tween详解
学习·flutter·harmonyos
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)
linux·运维·数据库·sql·学习
phoenix@Capricornus6 小时前
CNN中卷积输出尺寸的计算
人工智能·神经网络·cnn
A9better7 小时前
嵌入式开发学习日志53——互斥量
stm32·嵌入式硬件·学习
~kiss~7 小时前
大模型中激活函数、前馈神经网络 (FFN) 的本质
人工智能·深度学习·神经网络
进阶小白猿7 小时前
Java技术八股学习Day30
java·开发语言·学习
近津薪荼7 小时前
优选算法——双指针6(单调性)
c++·学习·算法
Keep_Trying_Go7 小时前
基于GAN的文生图算法详解ControlGAN(Controllable Text-to-Image Generation)
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·文生图
三水不滴8 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
修修修也8 小时前
【无标题】技术欲望是怎样渐进增长的?
学习