深度学习的实践层面

目录

1、训练、验证、测试集

2、偏差、方差

3、正则化

4、dropoout正则化

5、其他正则化方法

6、归一化输入

7、梯度消失和梯度爆炸

8、梯度的数值逼近

9、梯度检验

10、梯度的数值逼近和梯度检验的区别


1、训练、验证、测试集

(1)、早期机器学习领域普遍认可的最好的实践方法:机器学习发展的小数据量时代,常见做法

是将所有数据三七分,就是人们常说的 70%验证集,30%测试集,如果没有明确设置验证集也可

以按照 60%训练,20%验证和 20%测试集来划分

(2)、在机器学习中,通常将样本分成训练集,验证集和测试集三部分,数据集规模相对小,适
用传统的划分比例,数据集规模较大的,验证集和测试集要小于数据总量的 20% 10%

2、偏差、方差

 (1)、欠拟合(高偏差)指机器学习模型在训练数据集上的表现较差,无法很好地拟合数据。这

通常是因为模型的复杂度过低,无法捕捉到数据中的关键特征,或者在训练过程中没有足够的学习

时间。在欠拟合的情况下,模型往往不能很好地预测新的数据,因为它不能很好地适应训练数据集

中的变化和噪音。欠拟合问题可以通过增加模型的复杂度、增加训练数据的数量或增加训练时间来

解决。

(2)、过拟合(高方差)指机器学习模型过度拟合训练数据集,导致对新数据的泛化能力较差。
当模型过于复杂或训练数据过少时,模型可能会在训练数据上表现得非常好,但对于未见过的数据
则表现失效。在过拟合的情况下,模型记住了训练数据中的噪声和细节,而忽略了数据的整体趋
势。这导致了在测试数据上的表现不佳。
解决过拟合问题的方法通常包括 增加训练数据的数量 、对数据进行清洗和预处理、 采用正则化方法 (如L2正则化、dropout等)来减小模型复杂度,以及使用更简单的模型。

3、正则化

(1)、L1正则化

(2)、L2正则化:2𝑚 乘以𝑤范数的平方,𝑤欧几里德范数的平方等于𝑤𝑗(𝑗 值从 1 𝑛𝑥)平方的

和,也可 表示为𝑤𝑇𝑤,也就是向量参数𝑤 的欧几里德范数(2 范数)的平方,此方法称为𝐿2正则

化。 因为这里用了欧几里德法线,被称为向量参数𝑤𝐿2范数

为什么只正则化参数𝑤 ?因为𝑤 通常是一个高维参数矢量,已经可以表达高偏差问题, 𝑤 可能包含
有很多参数, 我们不可能拟合所有参数,而𝑏 只是单个数字,所以 𝑤 几乎涵盖所有参数,而不是 𝑏
如果加 了参数𝑏 ,其实也没太大影响,因为 𝑏 只是众多参数中的一个,所以通常省略不计,如果你
想加上这个参数,完全没问题。

 (3)、在神经网络中实现L2正则化

 神经网络含有一个成本函数,该函数包含𝑊[1]𝑏 [1]𝑊[𝑙]𝑏 [𝑙]所有参数,字母𝐿是神经 网络所含的层数,因此成本函数等于𝑚个训练样本损失函数的总和乘以 1 /𝑚,正则项为,

称||𝑊[𝑙] || 2为范数平方,这个矩阵范数||𝑊[𝑙] || 2(即平方范数),被定义 为矩阵中所有元素的平

方求和

公式的具体参数,第一个求和符号其值 𝑖 1 𝑛 [𝑙−1] ,第二个其 𝐽 值从 1 到 𝑛 [𝑙] ,因为 𝑊 是一个 𝑛
[𝑙] × 𝑛 [𝑙−1] 的多维矩阵, 𝑛 [𝑙] 表示 𝑙 层单元的数量, 𝑛 [𝑙−1] 表示第 𝑙 − 1 层隐 藏单元的数量

 (4)、该如何使用该范数实现梯度下降呢?

backprop 计算出 𝑑𝑊 的值, backprop 会给出 𝐽 𝑊 的偏导数,实际上是 𝑊 [𝑙] ,把 𝑊 [𝑙] 替 换为
𝑊 [𝑙] 减去学习率乘以 𝑑𝑊
这就是之前我们额外增加的正则化项,既然已经增加了这个正则项,现在我们要做的就 是给𝑑𝑊
上这一项𝜆/𝑚 *𝑊[𝑙] ,然后计算这个更新项,使用新定义的 𝑑𝑊 [𝑙] ,它的定义含有相关 参数代价函数
导数和,以及最后添加的额外正则项,这也是𝐿2 正则化有时被称为 权重衰减 ”的原因

我们用 𝑑𝑊 [𝑙] 的定义替换此处的 𝑑𝑊 [𝑙] ,可以看到, 𝑊 [𝑙] 的定义被更新为 𝑊 [𝑙] 减去学习率 𝑎 乘以 backprop 再加上𝜆 /𝑚 *𝑊[𝑙]

该正则项说明,不论 𝑊 [𝑙] 是什么,我们都试图让它变得更小,实际上,相当于我们给矩
W 乘以 (1 − 𝑎 *𝜆/𝑚 )倍的权重,矩阵 𝑊 减去 𝛼 *𝜆 /𝑚倍的它,也就是用这个系数(1 − 𝑎
𝜆 /𝑚 )乘以矩阵 𝑊,该系数小于 1 ,因此 𝐿2 范数正则化也被称为 权重衰减 ,因为它就像一般的梯
度下降, 𝑊被更新为少了 𝑎 乘以 backprop 输出的最初梯度值,同时 𝑊 也乘以了这个系数,这个系
数小 于 1 ,因此 𝐿2 正则化也被称为 权重衰减

 (5)、为什么正则化有利于预防过拟合呢?为什么它可以减少方差问题?

  •  高方差是指模型在训练集上表现良好,但在测试集上表现较差的情况,这通常表明模型过于复杂,过度拟合了训练数据。 正则化是一种广泛使用的减小过拟合的方法,它通过在模型损失函数中添加额外的约束条件来限制模型的复杂度。这些约束条件通常以惩罚项的形式出现,例如L1正则化或L2正则化,它们会使得模型参数的值偏向于较小的值。 正则化有利于预防过拟合,因为它限制了模型的复杂度,使得模型更加简单,更易于泛化到未见过的数据上。正则化对于减少方差问题也很有效,因为它有助于减小模型参数的值,从而减少了模型在训练数据中的波动,使得模型更加稳定。正则化可以被视为一种牺牲一定的训练集精度以换取更好的泛化能力的方式。
  • 直观上理解就是如果正则化𝜆设置得足够大,权重矩阵𝑊被设置为接近于 0 的值,直观 理解就是把多隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响。如果是 这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单 元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。
  • 但是 𝜆 会存在一个中间值,于是会有一个接近 Just Right 的中间状态。
    直观理解就是 𝜆 增加到足够大, 𝑊 会接近于 0 ,实际上是不会发生这种情况的,我们尝
    试消除或至少减少许多隐藏单元的影响,最终这个网络会变得更简单,这个神经网络越来越
    接近逻辑回归,我们直觉上认为大量隐藏单元被完全消除了,其实不然,实际上是该神经网
    络的所有隐藏单元依然存在,但是它们的影响变得更小了。神经网络变得更简单了,貌似这
    样更不容易发生过拟合,因此我不确定这个直觉经验是否有用,不过在编程中执行正则化时,
    你实际看到一些方差减少的结果

4、dropoout正则化

  • Dropout正则化是一种常用的神经网络正则化方法,它可以在训练过程中随机地将一些神经元的输出置为0,以防止过度拟合。具体地,Dropout在每次迭代中以一定的概率随机丢弃一些神经元,这样在训练过程中,每个神经元都有可能被丢弃,从而强制网络去学习多个独立的子模型。在测试过程中,所有的神经元都会被保留,但是每个神经元的输出会被乘以一个训练中的缩放因子,以保持总体输出的期望值不变。
  • Dropout正则化可以有效地降低神经网络的过拟合程度,因为它迫使网络去学习多个独立的子模型,从而增加了网络的鲁棒性和泛化能力。此外,Dropout还可以使得网络的训练更加高效,因为它可以降低神经元之间的耦合程度,从而减少了对于任何一个神经元的梯度更新的依赖。
  • 需要注意的是,Dropout正则化通常需要对网络超参数进行调节,例如丢弃率、缩放因子等。通常建议在应用Dropout时,根据实际情况进行超参数的调整,以获得最佳的效果。

5、其他正则化方法

(1)、数据扩增
通过随意翻转和裁剪图片,我们可以增大数据集,额外生成假训练数据。和全新的,独
立的猫咪图片数据相比,这些额外的假的数据无法包含像全新数据那么多的信息,但我们这
么做基本没有花费,代价几乎为零,除了一些对抗性代价。以这种方式扩增算法数据,进而
正则化数据集,减少过拟合比较廉价。
(2)、 early stopping
还有另外一种常用的方法叫作 early stopping ,运行梯度下降时,我们可以绘制训练误
差,或只绘制代价函数 𝐽 的优化过程,在训练集上用 0-1 记录分类误差次数。呈单调下降趋
势,如图

Early stopping 的优点是,只运行一次梯度下降,你可以找出 𝑤 的较小值,中间值和较大
值,而无需尝试 𝐿2 正则化超级参数 𝜆 的很多值

6、归一化输入

(1)、提高模型的收敛速度和稳定性。当输入数据的值域差异较大时,需要更多的迭代次数才能使模型收敛,而且模型的收敛速度也很慢。归一化可以缩小输入数据的值域,使得模型更容易收敛。

(2)、避免特征权重的影响。当输入特征的值域差异很大时,某些特征可能会被赋予过高的权重,从而影响模型的泛化性能。归一化可以消除这种影响,使得所有特征都处于同一数量级。

(3)、提高模型的泛化能力。当输入数据的值域差异很大时,模型在训练集上可能会出现很高的拟合效果,但在测试集上的表现很差。归一化可以消除这种差异,提高模型的泛化能力。

7、梯度消失和梯度爆炸

(1)、梯度消失和梯度爆炸都是指在神经网络训练中,梯度值出现的问题

(2)、梯度消失是指在神经网络的反向传播中,梯度值逐渐变小,直到变得非常小,甚至接近于

零。这种情况通常发生在深层网络中,因为每次反向传播都需要求解多个激活函数的导数,而激活

函数的导数通常在接近于0的区域取值,因此在多个层级上累积,就会导致梯度值逐渐变小,最终

无法对神经网络的权重进行有效的更新,从而影响模型的性能。

(3)、梯度爆炸是指在神经网络的反向传播中,梯度值逐渐变大,直至变得非常大,甚至超过了

计算机能够处理的范围,导致算法不收敛或者无法更新网络权重。这种情况通常发生在网络中存在

大量的权重共享或者层数较多时,因为这样会导致梯度值的指数级增长,使得网络无法进行有效的训练。

(4)、为了避免梯度消失和梯度爆炸的问题,可以使用一些技巧来稳定神经网络的训练,例如:

  • 使用激活函数时,尽可能选用导数在整个取值范围内都较为稳定的激活函数,如ReLU激活函数。
  • 使用批量归一化技术,来减少输入特征的相关性,增加网络的稳定性,并且可以加速收敛速度。
  • 使用梯度裁剪技术,保保证梯度的范围在一定的范围内。
  • 使用稀疏初始化、正交初始化等技术,来确保网络的权重在训练过程中

8、梯度的数值逼近

(1)、在实施 backprop 时,有一个测试叫做梯度检验,它的作用是确保 backprop 正确实施。
因为有时候,虽然写下了这些方程式,却不能 100% 确定,执行 backprop 的所有细节都是
正确的。
(2)、梯度的数值逼近是一种计算梯度的方法,它通过数值方式来逼近梯度的值。在机器学习
中,梯度通常是目标函数的导数,用于指导参数的更新方向。
(3)、梯度的数值逼近方法通常用于检查数值实现的梯度是否正确,或者用于对比自己实现的梯
度和数值逼近的梯度之间的差。

9、梯度检验

(1)、梯度检验是一种用于验证计算出的梯度是否正确的方法。它通过比较数值逼近梯度和解析

梯度之间的差异来判断计算出的梯度是否准确。

(2)、梯度检验的优点是可以帮助我们在实现梯度计算时发现错误,避免因为梯度计算错误而导

致模型训练失败。缺点是梯度检验需要更多的计算资源,而且由于数值逼近梯度和解析梯度的计算

方法不同,两者之间的差异可能会导致计算误差。

10、梯度的数值逼近和梯度检验的区别

(1)、梯度的数值逼近和梯度检验都是用于验证反向传播算法的正确性和准确性的方法,但它们

的实现方式和目的略有不同

(2)、梯度的数值逼近是一种简单的数值计算方法,用于近似地计算一个函数的导数。在梯度的

数值逼近中,我们通过微小地改变输入变量,计算相应的输出变量的变化量,然后将其除以微小变

化量,得到近似的梯度值。这种方法的主要目的是验证反向传播算法的实现是否正确,以及检查梯

度的变化是否符合预期

(3)、梯度检验是一种更严格的方法,用于检查反向传播算法的梯度计算是否准确。在梯度检验

中,我们通过比较数值逼近的梯度和反向传播算法计算得到的梯度之间的差异来判断梯度计算的准

确性。如果差异较大,则可能表示反向传播算法实现有误

(4)、梯度的数值逼近是一种简单而直接的方法,但计算成本较高,因为它需要进行多次模型的

前向传播和反向传播。而梯度检验则是一种相对复杂的方法,它需要对每个权重和偏置进行计算,

并且需要额外的计算和存储资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q渡劫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值