改善深层神经网络第一周

1.1 训练/开发/测试集

可以将一个数据集分为三个部分,

  • 训练集:对训练集执行训练算法,通过验证集或简单交叉验证集选择最好的模型.
  • 验证集:验证不同的算法的有效性进而选择最终的模型,然后就可以在测试集上进行评估了.
  • 测试集(test):对验证集最终选定的神经网络做出无偏估计,如果你不需要对模型进行无偏估计,那么测试集没有也无妨。

于数据量过百万级别的数据我们可以使测试集,验证集占比更少即可

经验之谈:要确保验证集和测试集的数据来自同一分布.
1.2 偏差/方差

  • Bias是 “用所有可能的训练数据集训练出的所有模型的输出的平均值” 与 “真实模型”的输出值之间的差异;
  • Variance则是“不同的训练数据集训练出的模型”的输出值之间的差异。
  • 下图是高偏差和高方差的图示

1.3如何解决高偏差/方差的问题
当初始模型训练完成后,首先要知道算法的偏差高不高,偏差高(无法拟合训练集)的解决办法有:

    1)选择一个新网络,比如含有更多隐层或者隐层单元的网络

    2)花费更多时间训练算法,或者尝试更先进的优化算法

当结果很好地拟合训练集时,就要查看是否在验证集上也表现很好,即检查是否有高方差问题(过度拟合),高方差的解决方法有:

    1)采用更多的数据(可能很难)

    2)通过正则化来减少过拟合

不断迭代,直到找到一个低偏差,低方差的模型
1.4正则化

  • √正则化:在损失函数中给每个参数 w 加上权重,引入模型复杂度指标,从而抑制模型噪声,减小 过拟合。

关于正则化

  • why L2:在BP算法中权值W的每次梯度下降会额外减去一个(1−αλm)W(1−αλm)W的值称之为”权重衰减”即”Weight decay”

1.5 为什么正则化可以减少过拟合
正则化项可以理解为复杂度,cost越小越好,因此cost加入正则化项后,为了使cost小,则不能使正则项大,也就是不能让模型复杂,这样就降低了模型的复杂度,也就降低了过拟合,这就是正则化。
1.6 dropout正则化
这里写图片描述
优点:对于存在过拟合的神经网络,dropout会遍历神经网络的每一层,并设置消除每一点的概率,然后删除某些点,得到一个更小的神经网络,然后用backprop方法进行训练.
1.7 其他正则化方法
- 扩增数据集:人工合成数据
- early stopping:”神经网络你到现在的迭代训练中表现已经非常好了,我们停止训练吧”

机器学习的一般步骤:

1)选择一个算法来优化代价函数J 
2)优化代价函数之后,同时不要过拟合(使用正则化或者扩增数据)

1.8 early stopping和L2正则化的权衡

  • L2正则化:引入超参数λ,这样就要不停的寻找λ,使得训练效果更好,因此训练代价高;
  • earlystopping:只运行一次梯度下降,那你就可以找到w的较小值,中间值和较大值,而无需尝试L2正则化超级参数λ的很多值.但是在训练早期就终止了,使得代价函数J并没有达到最优。

1.9 正则化输入
这里写图片描述

1.10 梯度消失与梯度爆炸
这里写图片描述
这里写图片描述
直观上理解,梯度消失会导致优化函数训练步长变小,使训练周期变的很长.而梯度爆炸会因为过大的优化幅度而跨过最优解。
1.11 初始化权重
这里写图片描述
这里写图片描述
为了防止梯度爆炸或者梯度消失,我们希望w尽可能小,最合理的方法就是设置W方差为1/n, n表示神经元的输入特征数量
1.12 梯度的数值逼近
梯度其实就是微分求导,但是由于求导结果可能比较复杂,所以使用微积分中的求导的定义来计算梯度。
这里写图片描述
这里写图片描述
最后我们的主要目标是检查这个梯度的近似向量与反向传播算法得到的梯度向量是否近似相等。

在确定好神经网络的结构后,我们按如下的步骤训练神经网络:

  • 随机初始化权重参数;
  • 对于每一个 通过前向传播得到;
  • 计算代价函数;
  • 反向传播算法用于计算偏导数
  • 使用梯度检查来比较反向传播算法计算的和数值估计的的梯度,如果没有问题,在实际训练时关闭这部分代码;
  • 在反向传播的基础上使用梯度下降或其他优化算法来最小化;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章