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. 原因:

  • image增加到足够大,W会接近于0,相当于消除或者减少了很多隐藏单元的影响,网络会变得更简单(相当于使得权重变小了)

六. dropout正则化

随机失活实施

  • 最常用的是Inverted dropout 反向随机失活
  • keep-prob是一个数字,表示某个神经元被保留的概率
  • 原理(假设有个l=3的网络,注意这里不包含输入层X):
    1. 定义一个dropout向量image
      看他是否小于某个数,是keep-prob,小于的置为0,其余的置为1
    2. image
      对应元素相乘,作用就是让a3中对应位置元素归为0
    3. 最后我们向外扩展image,除以keep-prob系数,作用是为了不影响image的期望值

七. 理解dropout

  • 如果有些层神经元太多,可以将这些层的keep-prob设置的比其他层更低一些;如果有些层神经元太少,可以不在这些层上使用dropout
  • dropout有个缺点就是代价函数J无法被明确定义,因为每次迭代,都会随机去除一些节点,所以无法判定代价函数是不是在降低的。可以采用一种方法:关闭dropout,将keep-drop设置为1,运行代码,计算代价函数保证它单调递减,之后再打开dropout,但是这种方法也可能会引入新的bug

八. 其他正则化方法

减少过拟合的方法

  1. 数据扩增
  • 无法扩增,可通过水平翻转图片,垂直翻转图片,裁剪图片,旋转图片,牛全图片等扩增数据集
  1. early stopping(提早停止训练神经网络)
  • 通过early-stopping绘制训练误差或者代价函数J或者【验证集误差】,【验证集误差】一般是先下降,再从某个节点上升,我们可以从图中找到这个节点
  • 缺点:
    1. 机器学习第一步:选择一个算法,优化代价函数J,使得J足够小
    2. 机器学习第二步:J过小可能会发生过拟合,我们要想办法减少方差(正交化)
    3. 总结就是一段时间做一个任务,两个问题用两个方法来解决,但是early stopping不能独立处理这两个问题,而是尝试一个方法解决两个问题
  • 优点:
    1. 只运行一次梯度下降,就可以找出w的较小值,中间值和较大值,无需像L2正则化那样尝试很多的参数,但是吴恩达更倾向于使用L2正则化

九. 归一化输入

加速训练的方法:归一化输入(注意均值和方差都是通过训练集得来的,训练集和测试集要用同样的参数来做归一化)

步骤:

  1. 零均值
    image
  2. 归一化方差
    image

总结:

  • 如果输入特征处在不同的范围内,归一化特征值非常重要
  • 如果输入特征处在不同的范围内,归一化特征值也没有害处

十. 梯度消失/梯度爆炸

  • 权重W只比1略大一点,活着只比单位矩阵略小一点,激活函数将爆炸式增长,导数同样

十一. 神经网络的权重初始化

初始化权重矩阵方差的默认值:

  • relu激活函数 用公式:image
  • tanh激活函数 用公式:image

十二. 梯度的数值逼近

  • 用双边公差来检验梯度 image

十三. 梯度检验

作用:确定backprop中是否有bug

  • image应该逼近
    image
  • 判定两个向量接近的方法可以用:计算向量的距离应该在10的负5到10的负7次方之内
    image

十四. 梯度检验应用的注意事项

  • 训练的时候不要用梯度检验,只是在调试的时候用
  • 如果梯度检验失败,要检查所有项,找到是哪个i只导致的差值过大
  • 实施梯度检验的时候如果使用了正则化,要注意正则项,计算的时候要给它算进去
  • 梯度检验不能和dropout同时使用,因为会随机消除及诶单,无法计算代价函数J
  • w和b接近0时,梯度下降的实施是正确的
posted @ 2025-07-28 19:01  迪迪666  阅读(23)  评论(0)    收藏  举报