深度学习相关概念:批量归一化

深度学习相关概念:批量归一化

  • 1.为什么需要批量归一化
  • 2.批量归一化
    • 2.1批量归一化和权重初始化
    • 2.2 批量归一化与梯度消失
    • 2.3批量归一化算法
    • 2.4批量归一化算法改进
    • 2.5单样本测试

1.为什么需要批量归一化

  在训练过程中,每层输入的分布不断的变化,这使得下一层需要不断的去适应新的数据分布,这就会让训练变得非常复杂而且缓慢。为了解决这个问题,就需要设置更小的学习率、更严格的参数初始化。通过使用批量归一化(Batch Normalization, BN),在模型的训练过程中利用小批量的均值和方差调整神经网络中间的输出,从而使得各层之间的输出都符合均值、方差相同高斯分布,这样的话会使得数据更加稳定,无论隐藏层的参数如何变化,可以确定的是前一层网络输出数据的均值、方差是已知的、固定的,这样就解决了数据分布不断改变带来的训练缓慢、小学习率等问题。

2.批量归一化

2.1批量归一化和权重初始化

  批量归一化是直接对神经元的输出进行批归一化,作用对象是每一层网络的输出。权重初始化是调整权值分布使得输出与输入具有相同的分布,作用对象是每一层网络的权重
深度学习相关概念:批量归一化_第1张图片

2.2 批量归一化与梯度消失

  批量归一化经常插入到全连接层后,非线性激活前。这样可以优化全连接层的输出,避免其梯度消失。
深度学习相关概念:批量归一化_第2张图片

2.3批量归一化算法

  小批量梯度下降算法回顾:每次迭代时会读入一(批数据,比如32个样本;经过当前神经元后会有32个输出值.)
批归一化操作:对这32个输出进行减均值除方差操作;可保证当前神经元的输出值的分布符合0均值1方差。
输入: B = { x 1 , ⋯   , x m } \mathcal{B}=\left\{x_{1}, \cdots, x_{m}\right\} B={x1,,xm};

  学习参数: γ , β \gamma, \beta γ,β

  输出: { y 1 , ⋯   , y m } \left\{y_{1}, \cdots, y_{m}\right\} {y1,,ym}

  1. 计算小批量均值: μ B ← 1   m ∑ i = 1 m x i \mu_{\mathcal{B}} \leftarrow \frac{1}{\mathrm{~m}} \sum_{\mathrm{i}=1}^{\mathrm{m}} \mathrm{x}_{\mathrm{i}} μB m1i=1mxi
  2. 计算小批量方差: σ B 2 ← 1   m ∑ i = 1 m ( x i − μ B ) 2 \sigma_{\mathcal{B}}^{2} \leftarrow \frac{1}{\mathrm{~m}} \sum_{\mathrm{i}=1}^{\mathrm{m}}\left(\mathrm{x}_{\mathrm{i}}-\mu_{\mathcal{B}}\right)^{2} σB2 m1i=1m(xiμB)2
  3. 归一化(减均值除方差): x ^ i ← x i − μ B σ B 2 + ϵ \quad \hat{x}_{i} \leftarrow \frac{\mathrm{x}_{\mathrm{i}}-\mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}} x^iσB2+ϵ xiμB
  4. 平移缩放(批量归一化优化): y i ← γ x ^ i + β \pmb{\mathrm{y}_{\mathrm{i}} \leftarrow \gamma \hat{x}_{i}+\beta} yiγx^i+βyiγx^i+βyiγx^i+β

2.4批量归一化算法改进

  1. 计算小批量均值: μ B ← 1   m ∑ i = 1 m x i \mu_{\mathcal{B}} \leftarrow \frac{1}{\mathrm{~m}} \sum_{\mathrm{i}=1}^{\mathrm{m}} \mathrm{x}_{\mathrm{i}} μB m1i=1mxi
  2. 计算小批量方差: σ B 2 ← 1   m ∑ i = 1 m ( x i − μ B ) 2 \sigma_{\mathcal{B}}^{2} \leftarrow \frac{1}{\mathrm{~m}} \sum_{\mathrm{i}=1}^{\mathrm{m}}\left(\mathrm{x}_{\mathrm{i}}-\mu_{\mathcal{B}}\right)^{2} σB2 m1i=1m(xiμB)2
  3. 归一化(减均值除方差): x ^ i ← x i − μ B σ B 2 + ϵ \quad \hat{x}_{i} \leftarrow \frac{\mathrm{x}_{\mathrm{i}}-\mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}} x^iσB2+ϵ xiμB

  增加:

  1. 平移缩放(批量归一化优化): y i ← γ x ^ i + β \pmb{\mathrm{y}_{\mathrm{i}} \leftarrow \gamma \hat{x}_{i}+\beta} yiγx^i+βyiγx^i+βyiγx^i+β

  批量归一化其实就是前三步,最后加了一步,第四补平移缩放,是为了把数据按照一个新的均值、一个新的方差进行调整。

  这就是批量归一化的一个改进,为什么要这么改进呢?它前三步输出的这个值还是不好呢?实际上我们是很难确定0均值,1方差一定是对的,0均值,1方差就一定对分类有帮助吗?未必!所以我们更希望算法对分类的贡献来自行决定(让算法自己去学习),到底应该把数据的均值和方差设为多少会对分类效果会更好一些。所以在第四步引入了两个可学习参数, γ \pmb{ \gamma} γγγ是我希望这个数据方差映射到了新的方差上去, β \pmb{ \beta} βββ是我希望这个数据映射到新的均值上去,这样 y i \mathrm{y}_{\mathrm{i}} yi输出的神经网络自己选择的一个均值和方差,这就是批量归一化最重要的一个步,通过这个改进,就可以让网络变得更加好。

   γ \pmb{ \gamma} γγγ β \pmb{ \beta} βββ这不是超参数, γ \pmb{ \gamma} γγγ β \pmb{ \beta} βββ是神经网络需要学习的,让神经网络自己去确定什么样的均值和方差合适这个分类任务。所以批量归一化做的时候先把数据归一化到0均值1方差,然后再以期望的方差和期望的均值去映射,这就是批量归一化的整个的操作流程。

2.5单样本测试

单张样本测试时,均值和方差怎么设置?

  训练的时候是有批的,测试的时候怎么测试的时候我给你一个样本你计算出来的时候只有 x 1 \pmb{x_{1}} x1x1x1,要想得到一个样本的预测值,就必须得到 y 1 ← γ x ^ 1 + β \pmb{\mathrm{y}_{\mathrm{1}} \leftarrow \gamma \hat{x}_{1}+\beta} y1γx^1+βy1γx^1+βy1γx^1+β,但在第三步中 x ^ 1 ← x 1 − μ B σ B 2 + ϵ \quad \hat{x}_{1} \leftarrow \frac{\mathrm{x}_{\mathrm{1}}-\mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}} x^1σB2+ϵ x1μB γ \pmb{ \gamma} γγγ β \pmb{ \beta} βββ是学好的参数,但是均值和方差怎么办?

  这里告诉大家一个结论:

   x 1 \pmb{x_{1}} x1x1x1在预测的时候是没法算的,只能在累加学习的时候,把每一批的均值和方差加和求平均,得出来的值就作为预测的时候的均值和方差。所以就可以得到 μ B \pmb{\mu_{\mathcal{B}}} μBμBμB σ B \pmb{\sigma_{\mathcal{B}}} σBσBσB,这样就可以计算 x 1 \pmb{x_{1}} x1x1x1,最终通过 y 1 ← γ x ^ 1 + β \pmb{\mathrm{y}_{\mathrm{1}} \leftarrow \gamma \hat{x}_{1}+\beta} y1γx^1+βy1γx^1+βy1γx^1+β得到预测值。

深度学习相关概念:批量归一化_第3张图片

你可能感兴趣的:(深度学习相关概念详解,深度学习,机器学习,人工智能,神经网络,算法)