week5---深度学习的实践层面
一. 训练,验证,测试集划分
1. 训练神经网络的时候,我们需要做哪些决策?
- 神经网络有多少层
- 每层有多少个隐藏单元
- 学习速率要设置多少
- 每层要用的激活函数
这些参数我们一开始是无法预测的,只能是通过不断的迭代,找到最优的参数,因此迭代的效率是决定项目进展速度的一个关键因素,创建高质量的数据集是有利于提高循环效率的
2. 数据集
2.1 种类
- 训练集:执行算法,更新参数
- 验证集:选择最好的模型
- 测试集:最终模型需要在测试集上评估
2.2 划分原则
- 100w以上数据 98:1:1;小数据集可以按照73分或者622分
- 验证集和测试集来自同一分布
- 可以没有测试集进行无偏评估,那么验证集就可以评估模型的效果
二. 偏差和方差
1. 定义
- 高偏差(欠拟合):模型评估的和正确的标签差很多
- 高方差(过拟合):例如模型评估训练集很好,验证集效果不好
2. 关键指标
- 训练集误差:训练集误差高不高 ,判定是不是高偏差
- 验证集误差:训练集误差结合验证集误差,判定是不是高方差
- 训练集误差是1%(低偏差),验证集误差是11%,是高方差
- 训练集误差是15%(高偏差),验证集误差是16%,但是训练集误差和验证集误差差的不是很多,所以方差不高(低方差)
- 训练集误差是15%(高偏差),验证集误差是30%,在验证集更糟糕(训练集和验证集误差还差很多)(高方差),这种属于方差和偏差都很高的情况
- 训练集误差是0.5%,验证集误差是1%,这种属于偏差和方差都很低
三. 机器学习基础
1. 训练神经网络用到的基本方法
- 1.1 模型训练完成,先统计训练集误差,判定偏差高不高;
- 1.2 如果高的话,试着评估下训练集(是不是训练集设置的不合理,数据量少啊等等);
- 1.3 如果没有上述问题,那可以尝试更大的网络,或者尝试其他的优化算法,解决掉高偏差问题这是最低标准
- 1.4 偏差在合理范围后,统计验证集误差,判定方差高不高;
- 1.5 方差高可以在验证集中添加更多的数据,如果无法添加数据了,可以通过正则化来减少过拟合
- 1.6 不断尝试,直到找到一个低偏差和低方差的框架,就成功了。
四. 正则化
1. 解决的问题:
- 高方差有两种解决方法:一是增加更多的数据,二是正则化(这个是首选)
2. 采用的方法:
- L2正则化,公式暂时略
- dropout正则化
五. 为什么正则化能预防过拟合
1. 原因:
增加到足够大,W会接近于0,相当于消除或者减少了很多隐藏单元的影响,网络会变得更简单(相当于使得权重变小了)
六. dropout正则化
随机失活实施
- 最常用的是Inverted dropout 反向随机失活
- keep-prob是一个数字,表示某个神经元被保留的概率
- 原理(假设有个l=3的网络,注意这里不包含输入层X):
- 定义一个dropout向量
![image]()
看他是否小于某个数,是keep-prob,小于的置为0,其余的置为1 ![image]()
对应元素相乘,作用就是让a3中对应位置元素归为0- 最后我们向外扩展
,除以keep-prob系数,作用是为了不影响
的期望值
- 定义一个dropout向量
七. 理解dropout
- 如果有些层神经元太多,可以将这些层的keep-prob设置的比其他层更低一些;如果有些层神经元太少,可以不在这些层上使用dropout
- dropout有个缺点就是代价函数J无法被明确定义,因为每次迭代,都会随机去除一些节点,所以无法判定代价函数是不是在降低的。可以采用一种方法:关闭dropout,将keep-drop设置为1,运行代码,计算代价函数保证它单调递减,之后再打开dropout,但是这种方法也可能会引入新的bug
八. 其他正则化方法
减少过拟合的方法
- 数据扩增
- 无法扩增,可通过水平翻转图片,垂直翻转图片,裁剪图片,旋转图片,牛全图片等扩增数据集
- early stopping(提早停止训练神经网络)
- 通过early-stopping绘制训练误差或者代价函数J或者【验证集误差】,【验证集误差】一般是先下降,再从某个节点上升,我们可以从图中找到这个节点
- 缺点:
- 机器学习第一步:选择一个算法,优化代价函数J,使得J足够小
- 机器学习第二步:J过小可能会发生过拟合,我们要想办法减少方差(正交化)
- 总结就是一段时间做一个任务,两个问题用两个方法来解决,但是early stopping不能独立处理这两个问题,而是尝试一个方法解决两个问题
- 优点:
- 只运行一次梯度下降,就可以找出w的较小值,中间值和较大值,无需像L2正则化那样尝试很多的参数,但是吴恩达更倾向于使用L2正则化
九. 归一化输入
加速训练的方法:归一化输入(注意均值和方差都是通过训练集得来的,训练集和测试集要用同样的参数来做归一化)
步骤:
- 零均值
![image]()
- 归一化方差
![image]()
总结:
- 如果输入特征处在不同的范围内,归一化特征值非常重要
- 如果输入特征处在不同的范围内,归一化特征值也没有害处
十. 梯度消失/梯度爆炸
- 权重W只比1略大一点,活着只比单位矩阵略小一点,激活函数将爆炸式增长,导数同样
十一. 神经网络的权重初始化
初始化权重矩阵方差的默认值:
- relu激活函数 用公式:
![image]()
- tanh激活函数 用公式:
![image]()
十二. 梯度的数值逼近
- 用双边公差来检验梯度
![image]()
十三. 梯度检验
作用:确定backprop中是否有bug
应该逼近
![image]()
- 判定两个向量接近的方法可以用:计算向量的距离应该在10的负5到10的负7次方之内
![image]()
十四. 梯度检验应用的注意事项
- 训练的时候不要用梯度检验,只是在调试的时候用
- 如果梯度检验失败,要检查所有项,找到是哪个i只导致的差值过大
- 实施梯度检验的时候如果使用了正则化,要注意正则项,计算的时候要给它算进去
- 梯度检验不能和dropout同时使用,因为会随机消除及诶单,无法计算代价函数J
- w和b接近0时,梯度下降的实施是正确的
增加到足够大,W会接近于0,相当于消除或者减少了很多隐藏单元的影响,网络会变得更简单(相当于使得权重变小了)

,除以keep-prob系数,作用是为了不影响
的期望值




应该逼近

浙公网安备 33010602011771号