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

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

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

调试处理(Tuning process)

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

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

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

但希望你粗略了解到哪些超参数较为重要, a a 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 x x,而且这层有激活值 a [ 1 ] a^{[1]} a[1],这层有激活值 a [ 2 ] a^{[2]} a[2]等等。如果你想训练这些参数,比如 w [ 3 ] w^{[3]} w[3] b [ 3 ] b^{[3]} b[3],那归一化 a [ 2 ] a^{[2]} a[2]的平均值和方差岂不是很好?以便使 w [ 3 ] w^{[3]} w[3] b [ 3 ] b^{[3]} b[3]的训练更有效率。在logistic回归的例子中,我们看到了如何归一化 x 1 x_{1} x1 x 2 x_{2} x2 x 3 x_{3} x3,会帮助你更有效的训练 w w w b b b

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

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

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

现在,你已在第一层进行了计算,此时Batch归一化发生在z的计算和 a a a之间,接下来,你需要应用 a [ 1 ] a^{[1]} a[1]值来计算 z [ 2 ] z^{[2]} z[2],此过程是由 w [ 2 ] w^{[2]} w[2] b [ 2 ] b^{[2]} b[2]控制的。与你在第一层所做的类似,你会将 z [ 2 ] z^{[2]} z[2]进行Batch归一化,现在我们简称BN,这是由下一层的Batch归一化参数所管制的,即 β [ 2 ] {\beta}^{[2]} β[2] γ [ 2 ] \gamma^{[2]} γ[2],现在你得到 z ~ [ 2 ] {\tilde{z}}^{[2]} z~[2],再通过激活函数计算出 a [ 2 ] a^{[2]} 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^{[l]} z[l]如下, z [ l ] = [ 5   2   − 1   3   ] z^{[l]} = \begin{bmatrix} 5 \ 2 \ - 1 \ 3 \ \end{bmatrix} z[l]=[5 2 1 3 ]我们有四个分类 C = 4 C=4 C=4 z [ l ] z^{[l]} z[l]可以是4×1维向量,我们计算了临时变量 t t t t = [ e 5   e 2   e − 1   e 3   ] t = \begin{bmatrix} e^{5} \ e^{2} \ e^{- 1} \ e^{3} \ \end{bmatrix} t=[e5 e2 e1 e3 ],对元素进行幂运算,最后,如果你的输出层的激活函数 g [ L ] ( ) g^{[L]}() g[L]()是Softmax激活函数,那么输出就会是这样的:
在这里插入图片描述
简单来说就是用临时变量 t t t将它归一化,使总和为1,于是这就变成了 a [ L ] a^{[L]} a[L],你注意到向量 z z z中,最大的元素是5,而最大的概率也就是第一种概率。

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

深度学习框架(Deep Learning frameworks)

TensorFlow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值