吴恩达深度学习_第二课(1)《深度学习实用层面》

训练集 验证集 测试集

有助于提高训练效率

通常流程

所有数据分为三种:训练,验证,测试

先用训练集训练网络,使用验证集在多种算法中,选择最好的模型,最终在测试集中,评估算法运行情况

小数据量的划分

  • 70%训练集 + 30%测试集
  • 60%训练集 + 20%验证集 + 20%测试集

大数据量的划分

  • 98%训练集 + 1%验证集 + 1%测试集
  • 99.5%训练集 + 0.25%验证集 + 0.25%测试集
  • 99.5%训练集 + 0.4%验证集 + 0.1%测试集

训练集和验证集分配不对应

例如训练集是高像素图片,验证集是低像素图片

请确保验证集和测试集数据来自同一个数据源

即使没有测试集也没关系,因为测试集是为最终选定的神经网络做无偏评估,如果不需要评估,可以不设置测试集

如果只有训练集和验证集,没有独立测试集,我们一般称这个验证集为测试集

偏差/方差

Bias(偏差): 训练过程中所有模型的预测输出模型的真实输出值之间的差异。

Variance(方差)是不同的训练集训练出的预测输出值(预测结果) 之间的离散程度,方差小,则模型稳定性更好。

高方差:过拟合

靶心是完美预测值,蓝色点是某个模型的预测值
在这里插入图片描述

可以通过观察训练集误差率,判断数据拟合情况。

训练错误率低,验证错误率高,高方差:过拟合

训练错误率和验证错误率差不多高,高偏差:欠拟合

在这里插入图片描述

机器学习基础

若训练集出现高偏差:更大的网络/更长的训练时间。
若验证集出现高方差:更多的数据/正则化减少过拟合 。

哪种处理方法都要记得找更合适的网络结构
在这里插入图片描述

正则化

处理高方差的过拟合问题
过拟合的原因一般是:模型太复杂 / 特征(参数个数)选的太多了 / 测试数据很少 / 参数范围太大

正则化就是通过对我们的参数进行约束,而使我们的模型更加的简单,使我们对训练集合的拟合更加的平滑

在这里插入图片描述

L1和L2正则化: 在代价函数计算中,添加 L1正则化项 or L2正则化项,因为:在训练过程中,我们通常期望损失函数越来越小,添加正则化项后,需要连同正则化项也越来越小,因此可以降低参数w的大小范围,降低模型复杂度

为什么只拟合参数w: 因为b只是一个偏移量(上下平移),并不能改变函数拟合的形状

范数

高维空间中,某个点到原点的距离

  • L1范数

在这里插入图片描述

  • L2范数

在这里插入图片描述

  • p范数
    在这里插入图片描述

L1正则化和L2正则化的直观感受

在这里插入图片描述
紫色圆圈是损失函数loss的等高线,每一圈的loss值都相同,中心误差最小;
假设 θ = 1,这两种正则化都能实现相交部分w1和w2较小。

区别在于:L1正则化可能会出现只有w2参数被保留的情况(焦点位于y轴上)。而L2正则化能保证w1和w2都较小且不为0。 相比之下,L2正则化更加稳定可靠

莫烦老师对L1,L2正则化的解释

视频只有3分钟,可以看一看

什么是 L1 L2 正规化 正则化 Regularization (深度学习 deep learning)

逻辑回归中的正则化

在这里插入图片描述
omit对参数b的正则化。

分别列出 L2正则化 和 L1正则化的公式,其中正则参数λ通常使用验证集或交叉验证配置这个参数

神经网络中的正则化

L2范数正则化(即 权重衰减)

在这里插入图片描述
这部分展示了神经网络中多个w和b的情况,后面添加的正则化项中,使用F范数,表示矩阵W中的所有元素平方再求和

如何实现梯度下降:
反向传播中获得dw[l],在后面添加正则项。在根据学习率更新的那一步中,w[l]的更新变成了右下角绿色的公式,并且发现w[l]是一定会变小,即实现权重衰减

在这里插入图片描述

正则化为什么可以减少过拟合

在这里插入图片描述
在神经网络的正则项中,若正则参数λ足够大,根据梯度下降那里的解释,权重矩阵W将设置为接近0的值,直观理解就是把一些隐藏单元的权值置为0。

以tanh()函数为例:
在这里插入图片描述
当λ增大,某层的w会接近极小值,根据公式,z也会接近较小值,在tanh()函数中,z较小的区域可以视为线性函数;之前有讲过,网络会趋向于成为一个较深,但是趋近线性的网络,降低拟合能力。

dropout正则化(反向随机失活)

对每层的结点进行随机的保留和消除
在这里插入图片描述

设置一个阈值和随机数矩阵,保留低于该阈值的随机数,实现随机失活/保留神经元

在这里插入图片描述
这里假设本层网络有3个结点,keep-prob为0.8,即80%的概率保留结点。

  • 随机生成和a3同尺寸的随机矩阵d3,且 < keep-prob ,生成由True和False组成的矩阵d3(运算中True和False会自动转换为0和1)
  • a3与d3相乘,实现矩阵部分置0(失活)

在这里插入图片描述

  • 最后a3 = a3 / keep-prob , 这步是因为本层20%的结点被置0,使a[3]的期望减小20%,进而导致z[4]的期望值变小;我们希望不影响z[4]的期望值,所以将dropout处理后的a[3]除以0.8。(但是我们要知道,即使修正也无法完全恢复期望值)

  • 同时,也可以通过d矩阵,实现失活某些特定结点

测试阶段进行预测时候,不要使用dropout函数,以免干扰预测

理解dropout

为什么dropout能够生效

任何输出结点都有可能出现:某个输入结点被失活的情况,因此,我们不希望在某个输入节点上赋予过大的权重。
在这里插入图片描述

dropout将产生 降低权重的平方范数 的效果:权重变小,范数减小(范数是权重的平方和),因此降低权重就可以防止过拟合。

功能类似于L2正则化:减小w范围,降低模型复杂度

在这里插入图片描述

每层的keep-prob值都有可能不同,我们倾向于对尺寸更大的W矩阵进行更强的dropout处理(因为更容易发生过拟合),例如途中W[3]矩阵的尺寸较大:7x7,因此选用keep-prob=0.5进行更强的失活处理。

切记,除非过拟合,一般不要使用dropout方法

其他正则化方法

数据集扩增

简单有效避免过拟合方法(除了增加训练量)

early stopping

同时打印训练集损失率和验证集损失率,通常情况下验证集误差都会先下降,后来在某个节点上升,这个训练节点就是可以试着停下来的节点。
在这里插入图片描述
有效原因:在训练开始之前,w矩阵较小(初始化一般都会非常小),经过多轮训练,w矩阵会变大,early stopping可以获得一个中等大小的F范数,类似L2正则化,选择了参数w范数较小的矩阵。

缺点:不能同时实现“优化代价函数”和“避免过拟合”,因为一旦early stopping就意味着停止对代价函数J进行优化,如果没有进行early stopping,就容易过拟合。

归一化输入

为什么要归一化

在这里插入图片描述
将坐标中的w和b视为特征w1和特征w2,取值分别为:w1∈[1,100],w2∈[0,1]

有助于加速训练:如果没有进行归一化,在左边这个图上运行梯度下降法就只能采用非常小的学习率,否则会走许多弯路;而右边将数据归一化处理后,可以利用较大步长的梯度下降法,更直接到达最小值。

因此,如果特征值的范围差异不大时,就不是一定要进行归一化:例如:x1∈[0,1],x2∈[-1,1],x3∈[1,2]

归一化训练集

下面以这组数据为例,每个点是一个样本,特征是坐标x1和x2的值:
在这里插入图片描述

第一步:零均值化

在这里插入图片描述
可以实现移动训练集,直到完成零均值化
在这里插入图片描述

第二步:归一化方差

上一步完成后,发现x1 比 x2的方差大得多

在这里插入图片描述
最后x1 和 x2的方差都为1
在这里插入图片描述

归一化测试集

一定要用与归一化训练集时相同的 u 和 σ 进行归一化

梯度消失与梯度爆炸

在这里插入图片描述

当网络深度较大时(例如L层),若某层w矩阵的值大于1(例如1.5),经过多层传递,会变成1.5L-1,值极大,同时也会导致梯度函数极大,产生梯度爆炸。

反之,若某层w矩阵的值小于1(例如0.8),最后也会导致值极小,产生梯度消失

合理初始化网络权重

可以有效缓解梯度消失与梯度爆炸问题,更谨慎地选择初始化参数

在这里插入图片描述

为了预防z值过大或过小,当n越大的时候,我们希望wi越小,因为z是wixi的和。所以我们倾向于设置wi的方差为1/n,n是输入本神经元的特征数量。初始化时,设置某层权重为随机值后,再乘以输入本神经元的标准差(np.sqrt:1/n[L-1]),如果激活函数是ReLU函数的话,绿笔部分的分子为2

在这里插入图片描述

tanh:是√(1/n^([l-1]) ),被称为Xavier初始化

梯度的数值逼近

在反向传播时,梯度检验来确保反向传播正确。

说一下什么是单边,双边是什么:
单边:f(θ+ϵ) - f(θ)
双边:f(θ+ϵ) - f(θ-ϵ)

在这里插入图片描述

在上面的三角形中,使用三角形高/宽,得到导数关系,右边列出双边误差时,求得导数值为3.0001 - 3 = 0.0001。同样的导数定义公式,单边误差求得为3.0301 - 3 = 0.0301。

因此双边误差公式结果更准确。

梯度检验

  • 首先将所有W和b的参数转换为一个大向量 θ ,使用前几章反向传播的做法,获取dW和db参数并转换为向量dθ,这两个向量形状一致

在这里插入图片描述

  • 然后,用下标i遍历θ的每个元素,得到dθ[i]的逼近值:dθapprox[i]
    在这里插入图片描述
  • 通过求欧几里得范数,判断逼近值与实际值差距。这里用分数是为了求一个比值,求出来的值如果10-7数量级是可以的,若10-3数量级则大概率有bug问题,应该仔细检查θ的,查看是哪个下标i导致逼近值与实际值差距太大

在这里插入图片描述

梯度检验实现技巧和注意事项

在这里插入图片描述

  • 不要在训练中使用梯度检验,它只用于调试。因为计算dθapprox[i]的过程十分漫长,调试结束后就关闭梯度检验
  • 如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出bug,也就是说,如果dθ[i]和dθapprox[i]的值相差很大,我们要做的就是查找不同的 i 值,看看是哪个地方导致值相差这么多
  • 在实施梯度检验时,如果使用正则化,请注意不要忘记正则项
  • 梯度检验不能与dropout同时使用,因为每次迭代过程中,dropout会随机消除隐藏层单元的不同子集,难以计算dropout在梯度下降上的代价函数J

参考视频:
如何解决过拟合问题?L1、L2正则化及Dropout正则化讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值