吴恩达 deep learning 深度学习的使用层面
训练/验证/测试集
训练集:执行训练算法
验证集:进行交叉验证,选取最终模型
测试集:无偏评估算法的运行状况
小数据集:无验证集 7:3 有验证集6:2:2
大数据集:百万级别 98:1:1 超百万 99.5%:0.25%:0.25% 或 99.5%:0.4%:0.1%
- 确保验证集和测试集的数据来自同一分布,因为要用验证集来评估不同的模型,尽可能的优化性能,如果验证集合测试集来自同一分布,深度学习算法需要大量的训练数据,为了获得更大规模的训练数据集,就会采用网页抓取的方式获取训练数据,代价就是训练集与测试集和验证集有可能来自不同的分布,但只要确保验证集和测试集来自同一分部,机器学习算法会变得更快
- 但不需要无偏评估是可以不用测试集
偏差/方差
高偏差:
- 具有更多隐藏层或者隐藏单元的网络
- 训练更长时间
- 更适合解决该问题的新网络架构
高方差: - 更多的数据
- 正则化
- 更合适的网络架构
正则化
L1 正则化:
L2 正则化:
神经网络正则化
当足够大的时候w接近于零,方差减小,这就使得高方差向高偏差接近
**函数中的z太大或者太小时会呈现线性,只有当的值合适的时候,z的值才会位于**函数的非线性部分,当z较小的时候,就会位于**函数的线性部分,从而降低模型的非线性程度
当使用正则化后J会呈现单调递减
Dropout正则化
dropout会遍历网络的每一层,并设置消除神经网络中节点的概率,最后得到一个节点更少、规模更小的网络,然后使用反向传播的方法进行训练,对于每个样本都将采用一个精简后的网络训练
反向随机失活
keep_prob表示保留节点的概率
a3/=keep-prob这一步的作用是为了不影响z[4]的期望值
在测试阶段不要使用dropout,如果在测试阶段使用dropout预测会受到干扰,预测结果会变得随机
对于单个神经元,由于加入了dropout,每个特征都可能被删除,所以该神经元不会特别依赖任何一个特征,因此产生了L2正则化这会收缩权重的效果
对于不同的层应当根据神经元的个数进行设置keep_prob的大小
dropout的缺点是代价函数J不再被明确定义,因为每次迭代都会随机消除一些神经元,所以无法绘制J下降的图
其他正则化方法
数据扩增:通过图片的一些变换,得到更多的数据
Early Stoping:在验证误差上升之前停止迭代,优点是只用运行一次就可以找到w的较小值、中间值和较大值,缺点是无法结局偏差和方差之间的最优
归一化
使用相同的和来归一化测试集
如果不适用归一化,在某些位置,必须使用一个非常小的学习率,才能找到最优解,使用归一化后,无论从哪个位置开始迭代,都可以在相对较少的迭代中找到最优解,并可以使用较大的步长
梯度消失和梯度爆炸
上图中假设使用线性**函数
当的时候 的值将爆炸式增长
当的时候 的值将指数级递减
这同样适用于导数或梯度函数
神经网络的权重初始化
当**函数是ReLu的时候
当**函数是tanh的时候
如果**函数的输入特征均值为0 方差是1,z也会调整到相似的范围,这样虽然没有解决梯度消失和梯度爆炸的问题,但延缓了问题出现速度
梯度的数值逼近
单边误差逼近
双边误差逼近
可以看到双边逼近误差0.001比单边逼近误差0.0301要小很多
梯度检验
神经网络有大量的参数,需要将这些参数联结起来,再进行梯度检验
使用双边误差逼近计算近似梯度
使用来判断梯度是否正确
Notes:
- 不要在训练中使用梯度校验,它只用于调试
- 如果梯度校验出现错误,要检查每一项去消除错误
- 记住正则化
- 不要和dropout一起工作
- 在随机初始化过程中运行梯度检验