Improving Deep Neural Networks——第一周笔记

开始学第二部分啦~

  1. 训练集、验证集和测试集
    在这里插入图片描述
    训练集用来训练神经网络;(学习)
    验证集用来调节超参数,并监控模型是否过拟合,可多次使用;(写作业)
    测试集用来评估模型的泛化能力,仅使用一次。(期末考试)
    参考大佬的博客,讲解的很明白 https://blog.csdn.net/kieven2008/article/details/81582591

在传统学习中,数据集很少,通常可以划分为7/3,或8/1/1,在深度学习中,数据集很大,如果有一百万个数据集,那么验证集和测试集为一万就够了,98/1/1.这是因为如果验证集和测试集的数据很大,那么调参一次所需的时间就很长,影响了调参效率和工作进度。
tips: 保证验证集和测试集要服从同一分布。

  1. 偏差和方差
    在这里插入图片描述
    在这里插入图片描述
    假设人眼辨别的错误率(也称贝叶斯误差)接近于0,同时训练集和验证集是同意分布的,那么若训练集误差很大,表示偏差高,欠拟合;若验证集和训练集的误差相差很大,说明方差高,过拟合。

  2. 偏差和方差解决办法在这里插入图片描述
    首先查看是否是高偏差,如果是的话,尝试 增大网络层数,增大训练时间,和选择其他模型三种方法,知道偏差降低到合适值。
    之后再查看是否高方差,如果是的话,尝试 增大数据集,正则化,和选择其他模型三种方法。
    当两者都降低后,调试成功。
    但偏差和方差可能相互关联,当方差降低后可能偏差升高。这是需要权衡偏差和方差问题。

  3. L2正则化 Regularization
    逻辑回归正则化
    在这里插入图片描述
    神经网络正则化
    在这里插入图片描述在矩阵中,L2范数也成为 the Frobenuis norm,用下标F标注。
    神经网络的正则化也叫“weight decay”,因为w前面乘了一个小于1的系数,使得w在迭代过程中总是减小的。

当lambda足够大时,为了使J(w,b)很小,W就会变得非常小,接近于0,相当于神经网络中的很多神经元都为0,不起作用,神经网络被简化,使得模型不再过拟合,从而减小方差。
lambda也是一个超参数,可以进行调节,如果lambda过大,可能会导致“oversmooth”,使得精度降低,欠拟合。
tip:在设参数lambda时,由于python内设参数为“lambda”,因此要改写为“lambd”。

  1. Dropout Regularization
    Inverted dropout
    在这里插入图片描述

将矩阵中一些元素随机设为0,以简化网络。X = (X < keep_prob).astype(int),其中.astype(int)是将输出的布尔值(True, False)转换成int。keep-prob表示元素保留的概率。最后要除以keep-prob,以保证a的期望跟之前保持不变。这样在测试集时就可以不用doprout也能保证最后的测试值值是合理的。

dropout的好处是不依赖任何一个特征,因为每个神经元都有可能被消除,这样就不会在某个特征上加过多的权重。即压缩权重Shrink weights。与L2不同的是,L2对于不同的权重的衰减是不同的,依赖于w的大小,而dropout不依赖任何一个权重。因此,dropout更适用于不同scale的输入特征。
缺点,cost function J的定义不明确,使得J可能不会随迭代次数增加而下降。解决办法是先关闭dropout,确定J是下降的,然后再使用dropout进行调试。

  1. 其他正则化方法
    扩增数据集
    在这里插入图片描述
    提早停止训练
    在这里插入图片描述
    缺点是提早停止训练一般不可能同时满足J很小和不过拟合两个条件。因此一般使用Orthogonalization。

  2. Normalization 归一化
    在这里插入图片描述需要注意的一点是,在测试集上使用的均值和方差要与训练集相同。原因在于,当所有的特征在相似范围内时,可以使学习算法运行得更快。

  3. 梯度爆炸和梯度消失 exploding / vanishing gradients
    当权重小于1时,深层网络会导致梯度呈指数衰减,逐渐变为0,参数无法更新。训练无法继续优化。
    当权重初始化到较大的值时,梯度呈指数级增长,使得更新值过大,导致梯度爆炸。
    解决办法:Xavier initialization
    在这里插入图片描述

  4. 梯度检验
    通过双边检验判断梯度是否正确。
    在这里插入图片描述
    将W和breshape呈一个大的矩阵θ。
    在这里插入图片描述
    检查θ的近似值和求得的值是否接近。
    一些注意事项。
    在这里插入图片描述

np.random.rand() 生成[0,1)均匀分布的随机数
np.random.randn() 生成服从标准正态分布的随机数,均值为0,方差为1.
在这里插入图片描述
PS:在学梯度爆炸和梯度消失那节课时,我想到了上周的作业里我自己编的一个程序,cost从0.69开始下降,下降到0.59就再也不降了,于是我查看了一下parameter的更新情况,发现经过几次迭代之后w已经下降到e-3甚至e-4量级了,瞬间明白过来,是梯度消失导致更新缓慢cost下不去了。因此用了一下新学的方法,在初始化时乘了np.sqrt(2./layer_dim[l-1]), 再运行一下,成功了!

困扰了我一周的bug居然是这样解决的!学无止境!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值