深度学习小白——神经网络4(梯度检查)

上一篇讨论了神经网络的静态部分:如何创建网络的连接、数据和损失函数,这篇将致力于讲解神经网络的动态过程,即学习参数和搜索最优超平面的过程


一、梯度检查

df(x)/dx = (f(x+h)-f(x-h))/2h,其中h是一个很小的数字,且用该公式梯度检查时,要计算两次损失函数,但是梯度的近似值会准确很多

在对比数值梯度和解析梯度时,采用相对误差比较好 |f'n-f'a|/max{f'n,f'a}


注意:

1.使用双精度,如使用单精度浮点数时相对误差为1e-2,换成双精度就降低为1e-8

2.保持在浮点数的有效范围,例如在一笔量数据上对损失函数进行归一化,但是如果每个数据点的梯度很小,然后又用数据点的数量去除,就使得数据值很小。

如果确实很小,就可以使用一个常数使得损失函数的数值范围扩展到一个更“好”的范围。

3.目标函数的不可导点(kinks)

例如考虑x=1e-6时,对ReLU函数进行梯度检查。因为x<0,所以解析梯度在该点的梯度为0,然而这里的数值梯度可能不为0.因为f(x+h)越过了不可导点,导致了一个非零的结果。

解决办法就是食用少量的数据点。就是说如果你试了你的梯度检查对2,3个数据点都有效,那么基本上对整个批量数据也是没有问题的,所以使用少量的数据点,能让梯度检查更迅速高效

4.谨慎设置步长h

在实践中h不是越小越好,有可能会遇到数值精度问题

5.为了安全起见,最好让网络学习“预热”一小段时间,等到损失函数开始下降之后,再进行梯度检查。不要再第一次迭代就进行梯度检查

6.不要让正则化吞没数据

正则化损失可能吞没掉数据损失,所以推荐先关掉正则化对数据损失做单独检查,然后对正则化做单独检查。


7.记得关闭随机失活和数据扩张

8.检查少量的维度

因为梯度可以有上百万的参数,在这种情况下智能检查其中一些维度然后假设其他维度是正确的。需要注意的是,需确认在所有不同的参数中都抽取一部分来梯度检查。


二、学习之前合理性检查


1.寻找在特定情况的正确损失值

例如跑CIFAR-10的Softmax分类器,一般期望它的初始损失值为2.302,这是因为初始时预计每个类别的概率是0.1(因为有10个类别),然后Softmax损失值正确分类的负对数概率:-ln(0.1)=2.302.而对于SVM分类器,假设所有边界都被越过,所以损失值是9,(因为每个错误分类,边界值是1),如果没看到这些损失值,那么初始化中就可能有问题。


2.提高正则化强度λ时导致损失值变大


3.对小数据子集过拟合

在整个数据集进行训练之前,尝试一个很小的数据集上进行训练,然后确保能达到0的损失值,进行这个实验的时候,最好让正则化强度为0。


三、检查整个学习过程


在训练神经网络的时候,应该跟踪多个重要数值,在下面图表中x轴通常都是表示周期(Epochs)该单位衡量了在训练中每个样本数据都被观察过次数的期望。相较于迭代次数,更倾向于跟踪周期,因为迭代次数会随数据的批尺寸发生变化。


1.损失函数

训练期间第一个要跟踪的数值就是损失值


左图展示了不同学习率的效果,右图显示了一个典型的随时间变化的损失函数值,可以看出损失值的噪音很大,所以批数据的数量可能有点小

因为损失值的震荡程度和批尺寸(Batch size)有关,当批尺寸为1,震荡会相对较大,当批尺寸就是整个数据集时震荡就会最小,因为每个梯度更新都是单调地优化损失函数


2.训练集和验证集准确率


当出现蓝色线的这种情况时,说明模型有较强的过拟合,遇到这种情况,就应该增大正则化强度,或更多的随机失活,或收集更多的数据。

还有一种可能是验证集曲线和训练集曲线基本重合,这种情况说明你的模型容量还不够大:应该通过增加参数数量让模型容量更大些。


3.权重更新比例

应该跟踪权重中更新值的数量和全部值的数量之间的比例,一个经验性的结论是这个比例应该在1e-3左右,如果更低,说明学习率小了,如果过高,则说明学习率可能太高


4.每层的激活数据及梯度分布


5.第一层可视化

最后日过数据是图像像素,那么把第一层特征可视化会有帮助


左图中的特征充满了噪音,这暗示了网络可能出现了问题:网络没有收敛,学习率设置不恰当,正则化惩罚权重过低

右图的特征不错,平滑,干净且种类繁多,说明训练过程进行良好。






  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值