1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
3.5 将 Batch Norm 拟合进神经网络 Fitting Batch Norm into a neural network
- 1. 将BN拟合进NN
- 2.在mini-batch中应用BN(维度提醒)
- 3.总结BN应用于梯度下降步骤
1. 将BN拟合进NN
如上图,上节课我们学习了4个等式,它可以在单一隐藏层进行Batch归一化。
在本节中,让我们看看它是怎样在深度网络训练中拟合的吧。
观察上图的NN。
前面已经介绍过,你可以认为每个单元负责计算两件事。
它先计算z,然后应用其到激活函数中再计算a,即,每个神经元圆圈代表着两步的计算过程。
所以,如果你没有应用Batch归一化,你会把输入拟合到第一隐藏层,然后首先计算,这是由和两个参数控制的。接着,你会把拟合到激活函数以计算。
但Batch归一化的做法是将值进行Batch归一化,简称BN。如下图,此过程将由和两参数控制。
这一操作会给你一个新的规范化的值—>。然后将其输入激活函数中得到,即。
现在我们已完成了在第一层进行了计算,此时Batch归一化(Batch Norm,BN)发生在 的计算和 之间。
接下来,你需要应用值来计算,此过程是由 和 控制的。
如上图。
与第一层所做的类似,你会将进行Batch归一化。这是由第二层的Batch归一化参数 和 所控制的。
现在你得到,再通过激活函数计算出。
再次强调一下,Batch归一化是发生在计算和之间的。
我们的直觉就是,与其应用没有归一化(规范过)的值,不如用(经过方差和均值)归一过的。
现在NN的参数就是,,,…,。
以及新加入的参数,,,…,。
你可以使用你想用的任何一种优化算法,比如使用梯度下降法来应用它们。
当然,并不是只能应用梯度下降法,你也可以使用Adam或RMSprop或Momentum,以更新参数和。
例如: 对于给定层,你会计算,接着更新参数为。
注意:Batch归一化学习参数,和用于Momentum、Adam、RMSprop算法中的超参(计算指数的加权平均值)不同。两者之间没有任何关系
在上一节课中,我已经解释过Batch归一化是怎么操作的,计算均值和方差,减去均值,再除以方差。。
如果它们使用的是DL编程框架,通常你不必自己把Batch归一化步骤应用于Batch归一化层。因此,可写成一行代码,比如说,在TensorFlow框架中,你可以用这个函数tf.nn.batch_normalization
来实现Batch归一化。
实践中,你不必自己操作所有这些具体的细节,但知道它是如何作用的,你可以更好的理解代码的作用。在DL框架中,Batch归一化的过程,经常是类似一行代码的东西。
2.在mini-batch中应用BN(维度提醒)
在实践中,Batch归一化通常和训练集的mini-batch一起使用。
你应用Batch归一化的方式就是,
- 你用第一个mini-batch子集(),和上面介绍的方法一样,应用参数和,计算。
- 然后在这个mini-batch子集()中计算的均值和方差。Batch归一化会减去均值,除以标准差,由和重新缩放,这样就得到了。
- 在第一个mini-batch子集()的基础上,你再应用激活函数得到。
- 接着,继续第一个mini-batch(),然后用和计算,等等。
以上你做的这一切都是为了在第一个mini-batch子集()上进行梯度下降法。
观察上图。
类似的工作,你会在第二个mini-batch子集()上计算,然后用Batch归一化来计算。这里的BN步骤和第一个mini-batch子集是类似的,在第二个mini-batch()中计算的均值和方差,重新缩放的和得到,等等。
然后在第三个mini-batch子集()上同样这样做,继续训练。
在这里,要澄清BN参数化过程的一个细节。
上面介绍过每层的参数是,,和。
请注意 计算的方式如下,。
Batch归一化做的是,在mini-batch子集上,先将归一化,结果为均值0和标准方差,再由和重缩放。但这意味着,无论的值是多少,都是要被减去的,因为在Batch归一化的过程中,你要计算的均值,再减去平均值。所以,mini-batch中增加任何常数,数值都不会改变,因为加上的任何常数都将会被均值减去所抵消。
也就是说,如果你在使用BN,其实你可以消除参数,或者你也可以暂时把它设置为0。那么,公式就变成。
然后你计算归一化的,即,,你最后会用参数决定的取值。也就是说,控制参数变为,它会影响转移或偏置条件。
最后,请记住的维数。本例中,是 层隐藏单元的数量
- 维数是(,1)
- 的尺寸为(,1)
- 和的维度也是(,1)。因为和用来将每个隐藏层的均值和方差缩放为网络想要的值。
3.总结BN应用于梯度下降步骤
总结一下关于如何用Batch归一化来应用梯度下降法。
假设你在使用mini-batch梯度下降法,运行到batch数量的for循环,每次循环中
- 在mini-batch() 上应用正向传播(forward prop)
- 每个隐藏层用Batch归一化把代替为。确保在这个mini-batch中,值有归一化的均值和方差。
- 然后,你用反向传播(back prop)计算,和。注意:前面已经介绍过了,这里去除了计算。
- 最后,你更新这些参数:
通过以上步骤,你就可以使用mini-batch梯度下降法了。
当然,这些步骤同样也适用于有Momentum、RMSprop、Adam的梯度下降法,可以由这些优化算法来更新由Batch归一化添加到算法中的 和 参数。
本节中我们学会如何从头开始应用Batch归一化。如果你使用DL编程框架之一,你可以直接调用别人的编程框架,这会使BN的使用变得很容易。
共有条评论 网友评论