《吴恩达深度学习》学习笔记007_超参数调试、Batch正则化和程序框架(Hyperparameter tuning)

http://www.ai-start.com/dl2017/html/lesson2-week3.html

超参数调试、Batch正则化和程序框架(Hyperparameter tuning)

调试处理(Tuning process)

在这里插入图片描述
关于训练深度最难的事情之一是你要处理的参数的数量,从学习速率$a$到Momentum(动量梯度下降法)的参数$\beta$。如果使用Momentum或Adam优化算法的参数,$\beta_{1}$,${\beta}_{2}$和$\varepsilon$,也许你还得选择层数,也许你还得选择不同层中隐藏单元的数量,也许你还想使用学习率衰减。所以,你使用的不是单一的学习率$a$。接着,当然你可能还需要选择mini-batch的大小。

结果证实一些超参数比其它的更为重要,我认为,最为广泛的学习应用是$a$,学习速率是需要调试的最重要的超参数。

除了$a$,还有一些参数需要调试,例如Momentum参数$\beta$,0.9就是个很好的默认值。我还会调试mini-batch的大小,以确保最优算法运行有效。我还会经常调试隐藏单元,我用橙色圈住的这些,这三个是我觉得其次比较重要的,相对于$a$而言。重要性排第三位的是其他因素,层数有时会产生很大的影响,学习率衰减也是如此。当应用Adam算法时,事实上,我从不调试$\beta_{1}$,${\beta}_{2}$和$\varepsilon$,我总是选定其分别为0.9,0.999和$10^{-8}$,如果你想的话也可以调试它们。

但希望你粗略了解到哪些超参数较为重要,$a$无疑是最重要的,接下来是我用橙色圈住的那些,然后是我用紫色圈住的那些,但这不是严格且快速的标准,我认为,其它深度学习的研究者可能会很不同意我的观点或有着不同的直觉。

为超参数选择合适的范围(Using an appropriate scale to pick hyperparameters)

超参数调试的实践:Pandas VS Caviar(Hyperparameters tuning in practice: Pandas vs. Caviar)

归一化网络的激活函数(Normalizing activations in a network)

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

在这里插入图片描述
训练一个模型,比如logistic回归时,你也许会记得,归一化输入特征可以加快学习过程。你计算了平均值,从训练集中减去平均值,计算了方差,接着根据方差归一化你的数据集,在之前的视频中我们看到,这是如何把学习问题的轮廓,从很长的东西,变成更圆的东西,更易于算法优化。所以这是有效的,对logistic回归和神经网络的归一化输入特征值而言。

在这里插入图片描述
那么更深的模型呢?你不仅输入了特征值$x$,而且这层有激活值$a{[1]}$,这层有激活值$a$等等。如果你想训练这些参数,比如$w{[3]}$,$b$,那归一化$a{[2]}$的平均值和方差岂不是很好?以便使$w$,$b^{[3]}$的训练更有效率。在logistic回归的例子中,我们看到了如何归一化$x_{1}$,$x_{2}$,$x_{3}$,会帮助你更有效的训练$w$和$b$。

所以问题来了,对任何一个隐藏层而言,我们能否归一化$a$值,在此例中,比如说$a{[2]}$的值,但可以是任何隐藏层的,以更快的速度训练$w$,$b{[3]}$,因为$a$是下一层的输入值,所以就会影响$w{[3]}$,$b$的训练。简单来说,这就是Batch归一化的作用。尽管严格来说,我们真正归一化的不是$a{[2]}$,而是$z$,深度学习文献中有一些争论,关于在激活函数之前是否应该将值$z{[2]}$归一化,或是否应该在应用激活函数$a$后再规范值。实践中,经常做的是归一化$z^{[2]}$,所以这就是我介绍的版本,我推荐其为默认选择,那下面就是Batch归一化的使用方法。

将 Batch Norm 拟合进神经网络(Fitting Batch Norm into a neural network)

你已经看到那些等式,它可以在单一隐藏层进行Batch归一化,接下来,让我们看看它是怎样在深度网络训练中拟合的吧。
在这里插入图片描述
假设你有一个这样的神经网络,我之前说过,你可以认为每个单元负责计算两件事。第一,它先计算z,然后应用其到激活函数中再计算a,所以我可以认为,每个圆圈代表着两步的计算过程。同样的,对于下一层而言,那就是$z_{1}{[2]}$和$a_{1}$等。所以如果你没有应用Batch归一化,你会把输入$X$拟合到第一隐藏层,然后首先计算$z{[1]}$,这是由$w$和$b{[1]}$两个参数控制的。接着,通常而言,你会把$z$拟合到激活函数以计算$a^{[1]}$。
**但Batch归一化的做法是将$z{[1]}$值进行Batch归一化,简称**BN**,此过程将由${\beta}$和$\gamma{[1]}$两参数控制,这一操作会给你一个新的规范化的$z$值(${\tilde{z}}{[1]}$),然后将其输入激活函数中得到$a$,即$a^{[1]} = g{[1]}({\tilde{z}})$。

现在,你已在第一层进行了计算,此时Batch归一化发生在z的计算和$a$之间,接下来,你需要应用$a{[1]}$值来计算$z$,此过程是由$w{[2]}$和$b$控制的。与你在第一层所做的类似,你会将$z{[2]}$进行Batch归一化,现在我们简称BN,这是由下一层的Batch归一化参数所管制的,即${\beta}$和$\gamma{[2]}$,现在你得到${\tilde{z}}$,再通过激活函数计算出$a^{[2]}$等等。

Batch Norm 为什么奏效?(Why does Batch Norm work?)

测试时的 Batch Norm(Batch Norm at test time)

在这里插入图片描述

Softmax 回归(Softmax regression)

训练一个 Softmax 分类器(Training a Softmax classifier)

上一个视频中我们学习了Softmax层和Softmax激活函数,在这个视频中,你将更深入地了解Softmax分类,并学习如何训练一个使用了Softmax层的模型。

在这里插入图片描述
回忆一下我们之前举的的例子,输出层计算出的$z{[l]}$如下,$z = \begin{bmatrix} 5 \ 2 \ - 1 \ 3 \ \end{bmatrix}$我们有四个分类$C=4$,$z^{[l]}$可以是4×1维向量,我们计算了临时变量$t$,$t = \begin{bmatrix} e^{5} \ e^{2} \ e^{- 1} \ e^{3} \ \end{bmatrix}$,对元素进行幂运算,最后,如果你的输出层的激活函数$g^{[L]}()$是Softmax激活函数,那么输出就会是这样的:
在这里插入图片描述
简单来说就是用临时变量$t$将它归一化,使总和为1,于是这就变成了$a^{[L]}$,你注意到向量$z$中,最大的元素是5,而最大的概率也就是第一种概率。

在这里插入图片描述
Softmax这个名称的来源是与所谓hardmax对比,hardmax会把向量$z$变成这个向量$\begin{bmatrix} 1 \ 0 \ 0 \ 0 \ \end{bmatrix}$,hardmax函数会观察$z$的元素,然后在$z$中最大元素的位置放上1,其它位置放上0,所这是一个hard max,也就是最大的元素的输出为1,其它的输出都为0。与之相反,Softmax所做的从$z$到这些概率的映射更为温和,我不知道这是不是一个好名字,但至少这就是softmax这一名称背后所包含的想法,与hardmax正好相反。

深度学习框架(Deep Learning frameworks)

TensorFlow

posted @ 2020-12-01 20:55  Stark0x01  阅读(182)  评论(0)    收藏  举报