深度学习的优化-Batch norm

Batch归一化(Batch norm)

在前面,我们学到,将输入数据归一化(数据预处理)有助于我们加速模型优化(消除量纲)
在这里插入图片描述

而现在,我们要将这种思想运用到神经网络的各个隐藏层输出中

在这里插入图片描述

上图就是应用的过程,不同的是,我们加入了参数α和β控制Z的均值和方差从而使得我们隐藏单元值的均值和方差标准化,这两个参数会随着我们的优化算法,比如Adam算法一起更新,需要加入两个参数的一个直观原因是,例如我们的激活函数是sigmoid,我们不会想要其输出的均值都位于中间的线性部分,而需要利用sigmoid函数的非线性部分,来拟合出更加强大的神经网络,同时也方便我们的训练.

在这里插入图片描述

实际上,对于深度学习框架,我们一行代码即可完成此工作😂.建议直接学习pytorch tensorflow不行了

在这里插入图片描述

上图就是应用到mini-batches的步骤

但是有几个细节值得注意:

  1. 我们原有的偏置单元b应该被删除掉,因为归一化处理会去掉它,所以没有意义,新的偏置会体现在β上
  2. β和α的维度都和Z一样是(n^[l],1)

Batch norm 实现

在这里插入图片描述

上图就是实际的实现过程,当然在实际操作中,一个简易的编程框架即可实现.

为什么Batch norm是有效的?

在这里插入图片描述

首先关注一下我们可能会遇到的问题,在实际的训练过程中,如果X的分布发生了改变,那么我们的训练可能就不会奏效于训练出一个不错的决策边界.

在这里插入图片描述

简单来说,我们需要建立一个直觉

那就是对于神经网络后层之一的角度而言,Batch归一化使得前层不会左右移动的那么多,因为它们都被同样的均值和方差限制,所以这会使得后层的学习工作变得更加容易.

一句话概括就是Batch 归一化增强了神经网络各层的独立性

Batch norm有轻微的正则化效果

在这里插入图片描述

因为mini-batch并不是全部的数据集,所以会给均值和方差的估计带来一定的噪音(noisy),从而引起一系列的噪音,导致每个隐藏单元的行为都含有一定的噪音,从而迫使后部单元不过分依赖任何一个隐藏单元,从而导致轻微的正则化效果,其和dropout相似.

测试时的Batch norm

因为在测试的时候,往往我们需要针对一个样本进行测试,所以,原先的计算均值和方差的方法就不再适用,这时候,我们可以使用指数加权平均法来实时估计和追逐目前最新的均值和方差来方便我们的测试计算.

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页