目录

1)Tuning Process

2)Using an appropriate scale to pick hyperparameters

3)Hyperparameters tuning in practice: Pandas vs. Caviar

4)Normalizing activations in a network(重点)

5)Fitting Batch Norm into a neural network

6)Why does Batch Norm work?

7)Batch Norm at test time

8) Softmax Regression

9) Training a softmax classifier

10)Deep learning frameworks

11)TensorFlow

12)Summary


以下笔记是吴恩达老师深度学习课程第二门课第三周的的学习笔记:Hyperparameter tuning。笔记参考了黄海广博士的内容,在此表示感谢。


本周课程,重点介绍了三个方面的内容:超参数调试、Batch正则化和深度学习程序框架。

1)Tuning Process

深度神经网络调试时会遇到许多超参数(Hyperparameters),具体有:

:学习因子(第一重要)

β:动量梯度下降算法参数(默认为0.9)

:Adam算法参数(默认为0.9,0.999,)

layers:神经网络层数

hidden units:隐藏层神经元个数

learning rate decay:学习因子下降参数

mini-batch size:批量训练样本包含的样本个数

在实际训练模型中如何选择和调试超参数呢?传统做法为对每个参数等距离选取任意个数的点,然后,分别使用不同点对应的参数组合进行训练,最后根据验证集上的表现好坏,来选定最佳的参数。例如有两个待调试的参数,分别在每个参数上选取5个点,这样构成了5x5=25中参数组合,如下图所示:

这种做法在参数比较少的时候效果较好。但是在深度神经网络模型中,一般不采用这种均匀取点的方法,比较好的做法是使用随机选择。也就是说,对于上面这个例子,随机选择25个点,作为待调试的超参数,如下图所示:

随机化选择参数的目的是为了尽可能地得到更多种参数组合。如果使用均匀采样的话,每个参数只有5种情况;而使用随机采样的话,每个参数有25种可能的情况,因此更有可能得到最佳的参数组合。

这种做法带来的另外一个好处就是对重要性不同的参数之间的选择效果更好。假设hyperparameter1为α,hyperparameter2为ε,显然二者的重要性是不一样的。如果使用第一种均匀采样的方法,εε的影响很小,相当于只选择了5个α值。而如果使用第二种随机采样的方法,ε和α都有可能选择25种不同值。这大大增加了α调试的个数,更有可能选择到最优值。

在经过随机采样之后,我们可能得到某些区域模型的表现较好。然而,为了得到更精确的最佳参数,我们应该继续对选定的区域进行由粗到细的采样(coarse to fine sampling scheme)。也就是放大表现较好的区域,再对此区域做更密集的随机采样。


2)Using an appropriate scale to pick hyperparameters

随机取值可以提升你的搜索效率。但随机取值并不是在有效范围内的随机均匀取值,而是选择合适的标尺,用于探究这些超参数,这很重要。
对于像神经网络层数和隐藏层神经元个数这样的超参数可以采用随机均匀取值的方法,但是对于学习率这样的超参数,假设其取值范围在(0.0001,1)之间,画一条数轴的话,其90%的数值将会落在(0.1,1)之间,而在(0.0001,0.1)之间只占有10%的资源,这看上去不太合理。

反而,使用对数标尺搜索超参数的方式会更合理,分别依次抽取0.0001,0.001,0.01,0.1,1,在对数轴上随机取点。在Python中我们可以将对数坐标下最小值设为a,最大值设为b,在a,b间随意均匀的选取r(random)值,再将超参数设为,代码如下:

r = np.random.rand()
r = a + (b-a)*r
r = np.power(10,r)

除了α之外,动量梯度因子β也是一样,在超参数调试的时候也需要进行非均匀采样。一般β的取值范围在(0.9, 0.999)之间,那么1−β的取值范围就在[0.001, 0.1]之间。那么直接对1−β在[0.001, 0.1]区间内进行log变换即可。


3)(Hyperparameters tuning in practice: Pandas vs. Caviar)

经过调试选择完最佳的超参数并不是一成不变的,一段时间之后(例如一个月),需要根据新的数据和实际情况,再次调试超参数,以获得实时的最佳模型。

在训练深度神经网络时,一种情况是受计算能力所限,我们只能对一个模型进行训练,调试不同的超参数,使得这个模型有最佳的表现。我们称之为Babysitting one model。另外一种情况是可以对多个模型同时进行训练,每个模型上调试不同的超参数,根据表现情况,选择最佳的模型。我们称之为Training many models in parallel。使用哪种模型是由计算资源、计算能力所决定的。


4)Normalizing activations in a network(重点)

在深度学习兴起后,最重要的一个思想是它的一种算法,叫做 Batch 归一化,由 Sergey loffe 和 Christian Szegedy 两位研究者创造。Batch 归一化会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会更加庞大,工作效果也很好。

当训练一个模型,比如 logistic 回归时,你也许会记得,归一化输入特征可以加快学习过程。首先计算平均值,从训练集中减去平均值,再计算方差,接着根据方差归一化数据集。但是对于深度神经网络来说,不仅需要归一化输入特征值,而且每层还有激活值,是否归一化激活值可以加快参数的训练?在实际应用中,一般是对进行标准化处理而不是

Batch Normalization对第层隐藏层的输入做如下标准化处理,这里忽略上标

这里为了防止为0,我们引入一个常数。但是,大部分情况下并不希望所有的均值都为0,方差都为1。通常需要对进行进一步处理:

式中为学习参数,也可以通过梯度下降算法等求得。这里,的作用是让的均值和方差为任意值,只需调整其值就可以了。例如,令

则 。但是输入层的标准化处理和隐藏层的标准化处理是有区别的,一般输入层的标准化处理后均值为0,方差为1,而隐藏层我们希望得到非线性输出,则希望归一化处理后不再线性区域内。


5)Fitting Batch Norm into a neural network

对于L层神经网络,经过Batch Norm的作用,整体流程如下:

Batch 归一化是发生在计算之间的。和等参数一样,我们也可以用前面学到梯度下降算法,RMSprop和Adam等优化算法来迭代。


6)Why does Batch Norm work?

我们可以把输入特征做均值为0,方差为1的规范化处理,来加快学习速度。而Batch Norm也是对隐藏层各神经元的输入做类似的规范化处理。总的来说,Batch Norm不仅能够提高神经网络训练速度,而且能让神经网络的权重W的更新更加“稳健”,尤其在深层神经网络中更加明显。

举个例子来说明,假如用一个浅层神经网络来训练识别猫的模型。如下图所示,提供的所有猫的训练样本都是黑猫。然后,用这个训练得到的模型来对各种颜色的猫样本进行测试,测试的结果可能并不好。其原因是训练样本不具有一般性(即不是所有的猫都是黑猫),这种训练样本(黑猫)和测试样本(猫)分布的变化称之为covariate shift。

对于这种情况,如果实际应用的样本与训练样本分布不同,即发生了covariate shift,则一般是要对模型重新进行训练的。在神经网络,尤其是深度神经网络中,covariate shift会导致模型预测效果变差。而Batch Norm的作用恰恰是减小covariate shift的影响,让模型变得更加健壮,鲁棒性更强。Batch Norm减少了各层之间的耦合性,让各层更加独立,实现自我训练学习的效果。也就是说,如果输入发生covariate shift,那么因为Batch Norm的作用,对个隐藏层输出进行均值和方差的归一化处理。

从另一个方面来说,Batch Norm也起到轻微的正则化(regularization)效果。具体表现在:

  • 每个mini-batch都进行均值为0,方差为1的归一化操作
  • 每个mini-batch中,对各个隐藏层的添加了随机噪声,效果类似于Dropout
  • mini-batch越小,正则化效果越明显

但是,Batch Norm的正则化效果比较微弱,正则化也不是Batch Norm的主要功能。


7)Batch Norm at test time

Batch 归一化将你的数据以 mini-batch 的形式逐一处理,但在测试时,你可能需要对每个样本逐一处理,我们来看一下怎样调整你的网络来做到这一点。

首先,回顾一下训练过程中Batch Norm的主要过程:

在测试时,如果你只有一个样本,一个样本的均值和方差没有意义。那么实际上,为了将你的神经网络运用于测试,就需要单独估算,在典型的 Batch 归一化运用中,你需要用一个指数加权平均来估算,这个平均数涵盖了所有 mini-batch。
指数加权平均的做法很简单,对于第层隐藏层,考虑所有mini-batch在该隐藏层下的,然后用指数加权平均的方式来预测得到当前单个样本的。这样就实现了对测试过程单个样本的均值和方差估计。最后再用训练时得到的参数值来计算各层的输出值


8) Softmax Regression

目前我们介绍的都是二分类问题,神经网络输出层只有一个神经元。

对于多分类问题,用C表示种类个数,神经网络中输出层就有C个神经元,即,其中,每个神经元的输出依次对应属于该类的概率,即。了处理多分类问题,我们一般使用Softmax回归模型。Softmax回归模型输出层的激活函数如下所示:

输出层每个神经元的输出对应属于该类的概率,满足:,典型分类例子如下图所示:


9) Training a softmax classifier

Softmax classifier的训练过程与我们之前介绍的二元分类问题有所不同。先来看一下softmax classifier的损失函数。

其中,单个样本的代价函数为:

softmax的反向传播过程也可以使用梯度下降算法。推到结果与二元分类结果一样。


10)Deep learning frameworks

深度学习框架有很多,本课程用到了以下两类框架:

TensorFlow

Keras


11)TensorFlow

关于TensorFlow更多的原理和编程技巧这里就不在赘述了,现在最新版TensorFlow2.0已经发布了,感兴趣的朋友可以关注更详细的TensorFlow相关文档。


12)Summary

本周课程主要介绍了:

  • 超参数的的调试处理,参数选择的优先级,以及选择合适的区间范围;
  • 隐藏层的归一化处理;
  • Softmax分类器;
  • 以及介绍了本课程中用到的深度学习框架。

2.3)深度学习笔记:超参数调试、Batch正则化和程序框架相关推荐

  1. 吴恩达深度学习笔记-超参数调试、Batch正则化(第6课)

    超参数调试 一.调试处理 二.为超参数选择合适的范围 三.超参数训练的实践:Pandas VS Caviar 四.正则化网络的激活函数 五.将Batch Norm拟合进神经网络 六.Batch Nor ...

  2. 深度学习笔记第二门课 改善深层神经网络 第三周 超参数调试、Batch正则化和程序框架...

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  3. 吴恩达深度学习笔记7-Course2-Week3【超参数调试、Batch 正则化和程序框架】

    超参数调试.Batch 正则化和程序框架 一.超参数调试(hyperparameter tuning) 推荐的超参数重要性排序: 1.学习率(learning rate): α 2.隐藏神经单元(hi ...

  4. 吴恩达深度学习之二《改善深层神经网络:超参数调试、正则化以及优化》学习笔记

    一.深度学习的实用层面 1.1 训练/开发/测试集 机器学习时代,数据集很小,可能100.1000.10000条,这种级别.可以按 70%.30% 划分训练集和测试集,训练后直接用测试集评估.或者按 ...

  5. 02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面(作业:初始化+正则化+梯度检验)

    文章目录 作业1:初始化 1. 神经网络模型 2. 使用 0 初始化 3. 随机初始化 4. He 初始化 作业2:正则化 1. 无正则化模型 2. L2 正则化 3. DropOut 正则化 3.1 ...

  6. 02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面

    文章目录 1. 训练,验证,测试集 2. 偏差,方差 3. 机器学习基础 4. 正则化 5. 为什么正则化预防过拟合 6. dropout(随机失活)正则化 7. 理解 dropout 8. 其他正则 ...

  7. 深度学习(二)吴恩达给你的人工智能第一课: 02.改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周 深度学习的实用层面 1.1 训练 / 开发 / 测试集 1.1.1. 训练集.验证集.测试集 ​         1.2 偏差 / 方差 1.3 机器学习基础 1.3.1.降低偏差/降低 ...

  8. 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架(作业:TensorFlow教程+数字手势预测)

    文章目录 1. 探索TensorFlow库 1.1 线性函数 1.2 计算 sigmoid 1.3 计算损失函数 1.4 One_Hot 编码 1.5 用0,1初始化 2. 用TensorFlow建立 ...

  9. 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架

    文章目录 1. 调试处理 2. 为超参数选择合适的范围 3. 超参数调试的实践 4. 归一化网络的激活函数 5. 将 Batch Norm 拟合进神经网络 6. Batch Norm 为什么奏效 7. ...

  10. 02.改善深层神经网络:超参数调试、正则化以及优化 W2.优化算法

    文章目录 1. Mini-batch 梯度下降 2. 理解 mini-batch 梯度下降 3. 指数加权平均数 4. 理解指数加权平均数 5. 指数加权平均的偏差修正 6. 动量Momentum梯度 ...

最新文章

  1. 阿里发布新工具,直接帮你改代码!网友:工作量又减轻了~
  2. Makefile速成
  3. 软件性能测试与LoadRunner实战可以在网上和书店买到了
  4. imx6的Linux默认颜色,MY-IMX6 Linux-3.14 测试手册(1)
  5. Ajax+SpringMVC+JSON登录验证
  6. linus为什么开源_Linus Torvalds谈个性崇拜,美国最好的开源学校等等
  7. 从零开始学Pytorch(十二)之凸优化
  8. 动态库加载的函数总结
  9. php 用户认证,PHP用户认证及管理完全源码
  10. 远程调用python_远的解释|远的意思|汉典“远”字的基本解释
  11. paip.程序调试的几种方式大总结
  12. 【蓝桥杯历年题】2020蓝桥杯A组省赛第二场(10.17)【含蓝桥杯官网提交地址】
  13. 2018年4月蓝桥杯省赛经历
  14. base64加密及方式
  15. 记一次Process.waitFor()的exit value返回137,247的问题
  16. (转载)七剑下天山,独领自动化测试技术
  17. css 多边形边框(八边形)
  18. 论文精读-基于双目图像的视差估计方法研究以及实现
  19. GVINS文章暴力翻译(仅供自学)
  20. Spark 内存管理堆内和堆外内存规划_大数据培训

热门文章

  1. 判断mysql的关键字_mysql中查询常用的关键字
  2. bootstrap 两个轮播图冲突_为什么使用bootstrap在一个页面同时做两个轮播效果时,只有第一个有效??...
  3. 使用python开发网页游戏_不敢想!不敢想!我用Python自动玩转2048游戏
  4. ELF文件和BIN文件
  5. a20_v2.0_k70运行在xhda20开发板
  6. 联想计算机如何设置用户名和密码,联想电脑怎样设密码?联想电脑设置密码方法步骤【图文】...
  7. gin redis 链接不上_Redis 高并发问题,及解决方案!
  8. 【转】国密算法sm4 CBC模式加解密
  9. 【转】GitHub 从单机到联机:玩转 Pull Request
  10. 第十二节:WebApi自动生成在线Api文档的两种方式