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.4 归一化[正则化]网络的激活函数 Normalizing activations in a network
- 1. 归一化逻辑回归输入特征
- 2. batch归一化
- 3. 总结
在DL兴起后,最重要的一个思想是它的一种算法,叫做Batch归一化,由Sergey loffe和Christian Szegedy两位研究者创造。
Batch归一化会使你的参数搜索问题变得很容易,使NN对超参数的选择更加稳定,超参数的范围会更加庞大,工作效果也很好,也会使你的训练更加容易,甚至是深层网络。让我们来看看Batch归一化是怎么起作用的吧。
1. 归一化逻辑回归输入特征
如上图,逻辑回归的归一化例子。
在《改善深层NN-w1 深度学习的实用层面(1.9 归一化输入(特征)》已经学习过
当训练一个模型,比如逻辑回归时,归一化输入特征可以加快学习过程。你
- 计算了平均值,
- 再从训练集中减去平均值,X := x-μ
- 计算了方差,
- 接着根据方差归一化你的数据集,X /=σ**2。
同时,我们已经学习过,如何把学习问题的轮廓,从很长的东西,变成更圆的东西,更易于算法优化(不论从哪个位置开始,梯度下降法都能够更直接地找到最小值,你可以在梯度下降法中使用较大步长)。
2. batch归一化
那么更深的模型呢?
如上图。输入特征值,第一层激活值,第二层激活值。
如果你想训练参数,比如,,那归一化的平均值和方差岂不是很好?以便使,的训练更有效率。
在逻辑回归的例子中,我们看到了如何归一化,,,会帮助你更有效的训练和。
问题来了,在深层NN中,对任何一个隐藏层而言,我们能否归一化激活值?
在此例中,比如说是否可以归一化的值,以更快的速度训练 和。
因为是下一层的输入值,所以就会影响 和 的训练。简单来说,这就是Batch归一化的作用。
尽管严格来说,我们真正归一化的不是,而是。深度学习文献中有一些争论,关于在激活函数之前是否应该将值归一化,或是否应该在应用激活函数后再规范值。实践中,经常做的是归一化。
所以我推荐归一化为默认选择。
下面介绍Batch归一化的使用方法。
在NN中,假设你有一些隐藏单元值,从到。准确的写法是,不过在这里省略及方括号,以便简化这一行的符号。
根据层的这些单元值,
- 我们要计算平均值
- 然后计算方差
- 最后取每个值,使其归一化(规范化)。方法为,减去平均值再除以标准偏差。为了使数值稳定,通常将作为分母,以防的情况。
现在我们已把这些值标准化,化为含平均值0和标准单位方差,的每一个分量都含有平均值0和方差1。
但如果我们不想让隐藏单元总是含有平均值0和方差1,因为也许隐藏单元有了不同的分布会有意义,我们所要做的就是计算
和是你模型的学习参数。我们可以使用梯度下降或一些其它类似梯度下降的算法,比如:Momentum或者Nesterov,Adam,更新和,正如更新NN的权重一样。
请注意和的作用是,如果,,那么公式作用在于,它会精确转化这个方程,得到。
利用上面4个公式,通过赋予和其它值(即不是把值标准化为均值=0,方差=1),可以使你构造含其它平均值和方差的隐藏单元值。
所以之前在网络匹配隐藏单元的方式,可能是用,等等,现在则会用取代,方便NN中的后续计算。如果你想清楚的表明它位于哪层,你可以使用。
3. 总结
总结,我们学习了
- 归一化输入X特征是怎样有助于神经网络中的学习。(以前学习)
- Batch归一化的作用是它适用整个过程,不只是输入层,甚至同样适用于NN中的深度隐藏层。(本节学习)
- 你应用Batch归一化了一些隐藏单元值中的平均值和方差
训练输入和隐藏单元值的一个区别是,你也许不想隐藏单元值必须是平均值0和方差1。
例如上图中的sigmoid激活函数。
你不想让你的值总是全部集中原点附近,也许你想使它们有更大的方差,或不是0的平均值,以便更好的利用非线性的sigmoid函数,而不是使所有的值都集中于线性版本中(图中加粗的直线部分)。这就是为什么有了和两个参数。
通过设置和两个参数,可以使隐藏单元值的均值和方差标准化,即有固定的均值和方差。均值和方差可以是0和1,也可以是其它值。
共有条评论 网友评论