大数据 数据库 jetbrains dedecms canvas datagrid devise onclick 河南普通话考试 jquery删除子元素 华为路由器ipv6配置 ab软启动器 mysql卸载工具 python逻辑运算符 python怎么调用函数 python可视化编程 java什么是多态 变量的类型 linux下载安装 matlab2016a安装教程 php取整函数 cms教程 cf透视辅助 瑞兹技能 微信小程序开发实例 js给标签添加属性 黑客攻防技术宝典 加速软件 神魔辅助 回收站在哪个盘 qq悄悄话怎么知道对方是谁 系统激活 nginx启动命令 汉仪旗黑字体下载 linux解压缩命令 shell数组遍历 maya导出obj 自动聊天机器人 autoit 金万维动态域名
当前位置: 首页 > 学习教程  > 编程语言

2020-6-10 吴恩达-改善深层NN-w3 Batch归一化(3.4 归一化(正则化)网络的激活函数--batch归一化介绍,通过参数γ和β标准化隐藏层单元z值)

2020/7/24 9:20:55 文章标签:

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 归一化输入(特征)》已经学习过
当训练一个模型,比如逻辑回归时,归一化输入特征可以加快学习过程。你

  • 计算了平均值,μ=1mi=1mx(i)μ=\frac 1m\sum_{​i=1}^m​x^{(i)}
  • 再从训练集中减去平均值,X := x-μ
  • 计算了方差,σ2=1mi=1m(x(i))2σ^2=\frac 1m\sum_{​i=1}^m​(x^{(i)})^2
  • 接着根据方差归一化你的数据集,X /=σ**2。

同时,我们已经学习过,如何把学习问题的轮廓,从很长的东西,变成更圆的东西,更易于算法优化(不论从哪个位置开始,梯度下降法都能够更直接地找到最小值,你可以在梯度下降法中使用较大步长)。

2. batch归一化

那么更深的模型呢?
在这里插入图片描述

如上图。输入特征值XX,第一层激活值a[1]a^{[1]},第二层激活值a[2]a^{[2]}
如果你想训练参数,比如w[3]w^{[3]}b[3]b^{[3]},那归一化a[2]a^{[2]}的平均值和方差岂不是很好?以便使w[3]w^{[3]}b[3]b^{[3]}的训练更有效率。

在逻辑回归的例子中,我们看到了如何归一化x1x_1x2x_2x3x_3,会帮助你更有效的训练wwbb

问题来了,在深层NN中,对任何一个隐藏层而言,我们能否归一化激活值aa?
在此例中,比如说是否可以归一化a[2]a^{[2]}的值,以更快的速度训练 w[3]w^{[3]}b[3]b^{[3]}

因为a[2]a^{[2]}是下一层的输入值,所以就会影响 w[3]w^{[3]}b[3]b^{[3]} 的训练。简单来说,这就是Batch归一化的作用

尽管严格来说,我们真正归一化的不是a[2]a^{[2]},而是z[2]z^{[2]}。深度学习文献中有一些争论,关于在激活函数之前是否应该将值z[2]z^{[2]}归一化,或是否应该在应用激活函数a[2]a^{[2]}后再规范值。实践中,经常做的是归一化z[2]z^{[2]}
在这里插入图片描述

所以我推荐归一化z[2]z^{[2]}为默认选择。

下面介绍Batch归一化的使用方法。

在NN中,假设你有一些隐藏单元值,从z(1)z^{(1)}z(m)z^{(m)}。准确的写法是z[l](i)z^{[l](i)},不过在这里省略ll及方括号,以便简化这一行的符号。

根据ll层的这些单元值,

  • 我们要计算平均值μ=1mi=1mz(i)μ=\frac 1m\sum_{​i=1}^m​z^{(i)}
  • 然后计算方差σ2=1mi=1m(z(i)μ)2σ^2=\frac 1m\sum_{​i=1}^m​(z^{(i)}-μ)^2
  • 最后取每个z(i)z^{(i)}值,使其归一化(规范化)。方法为,z(i)z^{(i)}减去平均值μμ再除以标准偏差。为了使数值稳定,通常将ϵ\epsilon作为分母,以防σ=0σ=0的情况。znorm(i)=z(i)μσ2+ϵz^{(i)}_{norm}=\frac{z^{(i)}-μ}{\sqrt {σ^2+\epsilon}}

在这里插入图片描述

现在我们已把这些zz值标准化,化为含平均值0和标准单位方差,zz的每一个分量都含有平均值0和方差1。

但如果我们不想让隐藏单元总是含有平均值0和方差1,因为也许隐藏单元有了不同的分布会有意义,我们所要做的就是计算z~(i)\tilde z^{(i)}
z~(i)=γznorm(i)+β\tilde z^{(i)}=\gamma z^{(i)}_{norm}+\beta
γ\gammaβ\beta是你模型的学习参数。我们可以使用梯度下降或一些其它类似梯度下降的算法,比如:Momentum或者Nesterov,Adam,更新γ\gammaβ\beta,正如更新NN的权重一样。

请注意γ\gammaβ\beta的作用是,如果γ=σ2+ϵ\gamma=\sqrt {σ^2+\epsilon}β=μ\beta=μ,那么公式z~(i)=γznorm(i)+β\tilde z^{(i)}=\gamma z^{(i)}_{norm}+\beta作用在于,它会精确转化这个方程znorm(i)=z(i)μσ2+ϵz^{(i)}_{norm}=\frac{z^{(i)}-μ}{\sqrt {σ^2+\epsilon}},得到z~(i)=z(i)\tilde z^{(i)}=z^{(i)}
在这里插入图片描述

利用上面4个公式,通过赋予γ\gammaβ\beta其它值(即不是把zz值标准化为均值=0,方差=1),可以使你构造含其它平均值和方差的隐藏单元值。

所以之前在网络匹配隐藏单元的方式,可能是用z(1)z^{(1)}z(2)z^{(2)}等等,现在则会用z~(i)\tilde z^{(i)}取代z(i)z^{(i)},方便NN中的后续计算。如果你想清楚的表明它位于哪层,你可以使用z~[l](i)\tilde z^{[l](i)}

3. 总结

总结,我们学习了

  • 归一化输入X特征是怎样有助于神经网络中的学习。(以前学习)
  • Batch归一化的作用是它适用整个过程,不只是输入层,甚至同样适用于NN中的深度隐藏层。(本节学习)
    • 你应用Batch归一化了一些隐藏单元值z[l](i)z^{[l](i)}中的平均值和方差

训练输入和隐藏单元值的一个区别是,你也许不想隐藏单元值必须是平均值0和方差1。
在这里插入图片描述

例如上图中的sigmoid激活函数。
你不想让你的值总是全部集中原点附近,也许你想使它们有更大的方差,或不是0的平均值,以便更好的利用非线性的sigmoid函数,而不是使所有的值都集中于线性版本中(图中加粗的直线部分)。这就是为什么有了γ\gammaβ\beta两个参数。

通过设置γ\gammaβ\beta两个参数,可以使隐藏单元值的均值和方差标准化,即z(i)z^{(i)}有固定的均值和方差。均值和方差可以是0和1,也可以是其它值。


本文链接: http://www.dtmao.cc/news_show_50047.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?