改善深层神经网络:超参数调试、正则化以及优化

1.训练、验证、测试
对于一个dataset,我们通常将其划分为训练集、验证集、测试集
训练集(train set):用训练集对算法或者模型进行训练
验证集(development set):利用验证集或者成为交叉验证集进行交叉验证,选择出最好的模型。
测试集(test set):训练好模型后,通过测试集进行测试。

2.偏差、方差

从图中我们可以看出,在欠拟合(underfitting)的情况下,出现高偏差(high bias)的情况,在过拟合(overfitting)的情况下,出现高方差(high variance)的情况。
从bias-variance tradeoff(权衡偏差方差)的情况下,我们利用训练集对模型进行训练是为了使得模型在trainset上使得bias最小化,避免欠拟合的情况。
如果模型设置的太复杂,trainset上的bias会非常小,甚至完全拟合。这时,将训练好的模型进行测试时,准确率会非常低。这是因为模型设置的太过复杂,以至于trainset中的噪音过多,使得模型过拟合,从而出现high variance.

3.机器学习的基本方法

(1)是否存在high bias?
增加网络结构(增加hidden layer层数)
训练更长时间
寻找合适的网络架构,使用更大的NN结构
(2)是否存在high variance?
获得更多数据
正则化
寻找合适的网络架构

4.正则化惩罚项(regularization)
正则化是在Cost Function中加入一项正则化项,惩罚模型的复杂度。
Logistic regression
加入正则化惩罚项的代价函数:

通常只对w进行正则化,而b不进行,因为w几乎涵盖所有参数,而b只是实数,当然加入b的正则化可行,只是没有太大影响。
||w||22:=w.Tw

其中λ是正则化因子,是超参数。
注意的是lambda在python中属于保留字。

加入正则化的代价函数:

frobenius norm 范数
人话:就是对应元素的平方和再开方

权重衰减(weight decay)
加入正则化后,梯度发生了变化:


其中(1-αλ/m)<1,这会使得原来的W衰减,所以L2范数正则化也被称为权重衰减。

5.为什么正则化可以减小过拟合

对于神经网络的Cost Function:

从式子来看,当正则化因子λ足够大时,为了使得损失函数最小化,权重矩阵W会被设置为接近于0的值。这相当于消除了很多神经元的影响。
这种解释是比较直观表面的,实际上隐藏层的神经元依然存在,只是他们的影响变小了,于是变没有导致过拟合。

数学解释:
激活函数g(z)=tanh(z),加入正则化后:

当λ增大,导致W减小,Z随之减小,由上图可知,在Z较小的区域内,tanh(z)函数近似于线性,所以每层的函数就近似于线性函数,整个神经网络就称为一个简单的近似线性神经网络,从而不会发生过拟合。

6.Dropout 正则化
Dropout(随机失活)就是在神经网络的Dropout层,为每个神经元节点设置一个随机消除的概率,对于保留下来的神经元,我们就得到了一个节点较小,规模较小的网络。

Dropout算法:反向随机失活(Inverted dropout)
假设对 layer3 进行dropout:

keep_prob = 0.8  # 设置神经元保留概率
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_prob
a3 = np.multiply(a3, d3)
a3 /= keep_prob

为什么需要有a3/keep_prop?
依然代码中的keep_prop=0.8,那么大约有20%的神经元被删除了,也就是说a3中有20%的元素被归零了,在下一层的计算中有Z[4]=W[3]*a[3]+b[4],为了不影响Z[4]的期望值,所以需要对W[4]*a[3]的部分除以一个keep_prop
注意:在测试阶段不要使用dropout,那样会使得预测结果变的随机。

7.理解Dropout
另外一种对于Dropout的理解,这里我们以单个神经元入手,单个神经元的工作是接受输入,并产生一些有意义的输出,但是假如Dropout后,输入的特征可能会被随机清除,所以该神经元不会再依赖于任何一个输入特征,也就是说不会给任何一个输入特征设置太多的权重。
所以通过传播过程,dropout和L2正则化有相同的收缩权重的效果。

缺点:
dropout的缺点是使得Cost Function不能再被明确定义,因为每次迭代都会随机消除一些神经元,所以我们无法绘制出J(W,b)稳定下降的直观图。
使用Dropout的方法:
关闭dropout功能,即设置keep_prop=1
运行代码,确保J(W,b)函数单调递减
再打开dropout函数

8.其他正则化方法
数据扩增(Data augmentation):通过图片的一些变换,得到更多的训练集和验证集;
Early stopping:在交叉验证集的误差上升之前的点停止迭代,避免过拟合。这种方法的缺点是无法同时解决bias和variance之间的最优。

9.归一化输入
对数据集特征x1、x2归一化的过程

(1)计算每个特征所有样本数据的均值:μ=1/m∑x(i);
(2)减去均值得到对此的分布:x:=x−μ;
(3)归一化方差:

使用归一化的原因:

在不适用归一化的代价函数中,如果我们设置一个较小的学习率,那么我们可能需要多次迭代才能到达代价函数的全局最优解,如果使用归一化,那么无论从哪个位置开始迭代,我们都能以相对少的迭代次数找到全局最优解。

10.梯度消失和梯度爆炸

这里我们首先假定g(z)=z,b[l]=0,所以对于目标输出有:

W[l]>1时,激活函数的值将会以指数递增。
W[l]<1时,激活函数的值将会以指数递减。
上面的情况对于导数也是同样的道理,所以计算梯度时,根据情况的不同,梯度函数会以指数递增或者指数递减,导致训练导数的难度上升,梯度下降算法的步长会变的非常非常小,需要训练的时间会非常长。
在梯度函数上出现以指数级递增或者递减的情况分别被称为梯度爆炸和梯度消失。

11.利用初始化缓解梯度消失和爆炸问题

由上图可知,当输入的数量n较大时,我们希望每个wi的值都小一些,这样它们的和得到的z也较小。
这里为了得到较小的wi,设置Var(wi)=1/n
对参数进行初始化:

WL = np.random.randn(WL.shape[0],WL.shape[1])* np.sqrt(1/n)

这么做是因为,如果激活函数的输入x近似设置成均值为0,标准方差1的情况,输出z也会调整到相似的范围内。虽然没有解决梯度消失和爆炸的问题,但其在一定程度上确实减缓了梯度消失和爆炸的速度。

12.梯度的数值逼近
使用双边误差的方法去逼近导数:

由图可以看出,双边误差逼近的误差是0.0001,先比单边逼近的误差0.03,其精度要高了很多。

网易云深度学习第二课notebook1相关推荐

  1. 网易云深度学习第二课Notebook3

    1.超参数调试处理 在机器学习领域,超参数比较少的情况下,我们之前利用设置网格点的方式来调试超参数: 但在深度学习领域,超参数较多的情况下,不是设置规则的网格点,而是随机选择点进行调试.这样做是因为在 ...

  2. 网易云深度学习第二课NoteBook2

    优化算法 1.Mini-batch梯度下降法 对整个训练集进行梯度下降法的时候,我们必须处理整个训练数据集,然后才能进行一步梯度下降,即每一步梯度下降需要对整个训练集进行一次处理,如果训练数据很大时, ...

  3. 网易云深度学习第一课第二周编程作业

    Part 2: Logistic Regression with a Neural Network mindset 你将学到: -建立学习算法的一般架构 -初始化参数 -计算损失函数和它的梯度 -使用 ...

  4. 网易云深度学习第一课第一周编程作业

    1.1Python Basics with Numpy (optional assignment) Welcome to your first assignment. This exercise gi ...

  5. 网易云深度学习第一课第三周编程作业

    具有一个隐藏层的平面数据分类 第三周的编程任务: 构建一个含有一层隐藏层的神经网络,你将会发现这和使用逻辑回归有很大的不同. 首先先导入在这个任务中你需要的所有的包. -numpy是Python中与科 ...

  6. 2.10 局部最优的问题-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.9 学习率衰减 回到目录 2.11 总结 局部最优的问题 (The Problem of Local Optima) 在深度学习研究早期,人们总是担心优化算法会困在极差的 ...

  7. 1.5 为什么正则化有利于预防过拟合-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.4 正则化 回到目录 1.6 Dropout 正则化 为什么正则化有利于预防过拟合呢 (Why regularization reduces overfitting?) ...

  8. 1.4 正则化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.3 机器学习基础 回到目录 1.5 为什么正则化可以减少过拟合 正则化 (Regularization) 深度学习可能存在过拟合问题--高方差,有两个解决方法,一个是正则 ...

  9. 1.3 机器学习基础-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.2 偏差/方差 回到目录 1.4 正则化 机器学习基础 (Basic "Recipe" for Machine Learning) 上节课我们讲的是如 ...

最新文章

  1. php 中文 处理,PHP处理中文字符串截取
  2. .DLL文件是什么?
  3. 什么叫pin脚的pad_为什么特小尺寸液晶屏价格比较高
  4. html 左边固定右边自动,七种实现左侧固定,右侧自适应两栏布局的方法
  5. imu与gps之间的时间戳_TCP 窗口缩放、时间戳和 SACK(2) | Linux 中国
  6. 流水线、精益生产、丰田生产方式和TOC的基本原则
  7. java生成润乾报表,润乾报表----模板报表制作
  8. 离散数学 之 命题公式的主析取合取范式(java实现)
  9. Feed Ratios_usaco3.2_暴力
  10. 神仙道人物属性基础知识普及
  11. java多线程概念、实现、状态和生命周期、同步、通信
  12. 3dsmax怎么添加uv坐标_3dmax缺少贴图坐标怎么添加uvmap修改器
  13. BeanCopier系列之二:使用Converter
  14. 6.oop-类和对象
  15. java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
  16. JavaWeb仿twitter个人社交网络及微博服务网站
  17. ios开发——AirPlay的琢磨经历
  18. Day10.如何给⽑不易的歌曲做词云展示
  19. 企业财务管理利器——凭证导入接口
  20. 图像特征提取与匹配方法总结

热门文章

  1. 几行代码搞定Flash应用的多语言实时切换问题
  2. 如何在VB中实现ActiveX控件的IobjectSafety接口
  3. c语言求员工的平均分数,用C语言编程平均分数
  4. java入门的注意点_Java基础之Integer使用的注意事项及面试题
  5. idea自动构建web项目_构建Web应用程序以自动执行系统管理员任务
  6. activiti利弊_事件驱动的安全性的利弊
  7. 流程图 3条泳道 决策_制定透明决策的三步流程
  8. node Express 框架
  9. 二.全局定位--开源定位框架livox-relocalization实录数据集测试
  10. 销货清单打印软件_地磅软件管理系统 大宗物资称重管理车运版