神经网络检查

神经网络检查

神经网络的检查我们分为两部分完成:
1.神经网络合理性检查
2.学习过程检查

合理性检查

首先来介绍合理性检查,当我们完成一个神经网络时,我们往往需要逐步的检查网络是否书写正确以及是否可以正常工作。那么我们怎么开始呢?

校验初始化

将网络loss的正则项去掉,进行一次前向传播,输出loss,这时loss的值应该是 log1/n ,其中,n为分类的类别数。这是因为在训练还没开始时,w是高斯分布的随机值,第一次的前向传播分类也会是等可能的

加入正则项校验

如果上一步可以得到理想值,那么证明网络的前向传播是正常的,这时,加入正则项,依然进行一次前向传播,输出的loss应该增大,这是因为在损失函数中又加入了一部分,如果该步正确,则说明,正则项部分也没问题

过拟合小数据

校验完前向传播,我们应该校验反向传播和参数更新是否可以正常进行,这时候,我们主要观察该网络是否可以过拟合一个小数据集,这个小数据集我们为了快速的可以得到结果,通常只取1个,2个或者3个这样的数据。此时的正则项我们也应该置零,否则loss很难为0,当该部也输出正常时,我们考虑扩大数据集

大数据集选择learning rate

小数据集通过,证明我们的网络可以正常工作,这时候,我们需要扩大数据集从而选择合适的学习率,从而使网络在学习的过程中既可以又快又好的收敛

我们先随机定义1e-6这样的一个学习率,打印loss和accuracy我们可以看到loss下降的很慢,这就说明学习率设定的太小了,但是一个有趣的事情是,虽然loss下降的很慢,但是accuracy却有显著的提高,这主要是因为loss function采用的是softmax函数,每个score对loss都有影响,因为learning rate小,错误类的score下降慢,反映在loss上下降也慢,但是category已经判断正确了,所以accuracy升高。如果在svm中,这个问题就不会出现,loss和accuracy的变化速度会相对一致

如果1e-6太小,我们考虑用e这样的learning rate来学习,这时loss会发散,很难收敛,并且可能会出现NaN,一般情况下loss出现这样的值就是learning rate设置过大造成的。

实验证明,通常情况下,学习率可以选取[1e-3,1e-5]

学习过程检查

当我们确认了神经网络能正常工作后,我们还需要检查其学习过程是否正常。这部分我们主要从以下两个方面讨论
1.loss和accuracy曲线
2.权重更新比例

loss和accuracy曲线

这里写图片描述
该图片来自cs231n笔记
左图为不同learning rate下loss曲线的走势,如果实验中,我们得到的是右图的loss曲线,则基本可以对照说明,learning rate我们设置的有些低。并且,右图中loss曲线上下波动,这主要是batch size造成的,如果batch size为整个数据集,则该曲线没有波动。
这里写图片描述
该图也来自cs231n笔记,该图描述了model在training data 和validation data上的accuracy,两个accuracy曲线的差越大,表明过拟合现象越严重,这说明,网络过度学习了训练数据的特征,泛化能力差,这时要么将正则强度加大,要么增加训练数据。而如果这两个曲线如影随形,则说明训练时所选取的网络可能过于简单,可以适当增强网络的表达能力。

权重更新比例

权重的更新比例指的是权重的更新量与原始的权重的比值,通常情况下1e-3时比较好,太大则证明learning rate设置过高,太小则证明learning rate设置过小。而此时,我们一般不会去追踪最大或最小的权重的更新比例,而是直接跟踪权重的范数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值