深度学习之Batch归一化

前言

           以下内容是个人学习之后的感悟,转载请注明出处~

Batch归一化

  在神经网络中,我们常常会遇到梯度消失的情况,比如下图中的sigmod激活函数,当离零点很远时,梯度基本为0。为了

解决这个问题,我们可以采用Batch归一化。

  通过BN法,我们将每层的激活值都进行归一化,将它们拉到均值为0、方差为1的区域,这样大部分数据都从梯度趋于0变

换到中间梯度较大的区域,如上图中红线所示,从而解决梯度消失的问题。但是做完归一化后,函数近似于一个线性函数,多

层网络相当于一层,这不是我们想要的效果,故又加入了两个参数γ、β,整体步骤如下所示:

  参数的加入固然可以解决问题,但是如何求解参数又增加了任务量。求法很简单,和求Wx+b中的W、b参数一样,不断

迭代减去代价函数对于Υ、β的倒数。

此算法的优势:

(1) 可以使用更高的学习率。如果每层的scale不一致,实际上每层需要的学习率是不一样的,同一层不同维度的scale往往也需

要不同大小的学习率,通常需要使用最小的那个学习率才能保证损失函数有效下降,Batch Normalization将每层、每维的scale

保持一致,那么我们就可以直接使用较高的学习率进行优化。

(2) 移除或使用较低的dropout。 dropout是常用的防止overfitting的方法,而导致overfit的位置往往在数据边界处,如果初始化权重

就已经落在数据内部,overfit现象就可以得到一定的缓解。论文中最后的模型分别使用10%、5%和0%的dropout训练模型,与之前

的40%-50%相比,可以大大提高训练速度。

(3) 降低L2权重衰减系数。 还是一样的问题,边界处的局部最优往往有几维的权重(斜率)较大,使用L2衰减可以缓解这一问题,

现在用了Batch Normalization,就可以把这个值降低了,论文中降低为原来的5倍。

(4) 取消Local Response Normalization层。 由于使用了一种Normalization,再使用LRN就显得没那么必要了。而且LRN实际上

也没那么work。

(5) 减少图像扭曲的使用。 由于现在训练epoch数降低,所以要对输入数据少做一些扭曲,让神经网络多看看真实的数据。

  

以上是全部内容,如果有什么地方不对,请在下面留言,谢谢~

时间: 2024-08-24 03:53:23

深度学习之Batch归一化的相关文章

深度学习之Batch Normalization

1.Batch Normalization的引入 在机器学习领域有个很重要的假设:IID独立同分布假设,也就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集上获得好的效果的一个基本保障.在深度学习网络中,后一层的输入是受前一层的影响的,而为了方便训练网络,我们一般都是采用Mini-Batch SGD来训练网络的(Mini-Batch SGD的两个优点是:梯度更新方向更准确和并行计算速度快). 我们知道在神经网络训练开始前,都要对输入数据做一个归一化处理,那么具体为

深度学习中batch normalization

目录 1  Batch Normalization笔记 1.1  引包 1.2  构建模型: 1.3  构建训练函数 1.4  结论 Batch Normalization笔记 我们将会用MNIST数据集来演示这个batch normalization的使用, 以及他所带来的效果: 引包 import tensorflow as tf import os from tensorflow.examples.tutorials.mnist import input_data from tensorf

深度学习面试题21:批量归一化(Batch Normalization,BN)

目录 BN的由来 BN的作用 BN的操作阶段 BN的操作流程 BN可以防止梯度消失吗 为什么归一化后还要放缩和平移 BN在GoogLeNet中的应用 BN在GoogLeNet中的应用 BN的由来 BN是由Google于2015年提出,论文是<Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift>,这是一个深度神经网络训练的技巧,主要是让数据的分布变得一致,从而使得

算法工程师&lt;深度学习基础&gt;

<深度学习基础> 卷积神经网络,循环神经网络,LSTM与GRU,梯度消失与梯度爆炸,激活函数,防止过拟合的方法,dropout,batch normalization,各类经典的网络结构,各类优化方法 1.卷积神经网络工作原理的直观解释 https://www.zhihu.com/question/39022858 简单来说,在一定意义上,训练CNN就是在训练每一个卷积层的滤波器.让这些滤波器组对特定的模式有高的激活能力,以达到CNN网络的分类/检测等目的. 2.卷积神经网络的复杂度分析 ht

吴恩达-深度学习-课程笔记-8: 超参数调试、Batch正则化和softmax( Week 3 )

1 调试处理( tuning process ) 如下图所示,ng认为学习速率α是需要调试的最重要的超参数. 其次重要的是momentum算法的β参数(一般设为0.9),隐藏单元数和mini-batch的大小. 第三重要的是神经网络的层数和学习率衰减 adam算法的三个参数一般不调整,设定为0.9, 0.999, 10^-8. 注意这些直觉是ng的经验,ng自己说了,可能其它的深度学习研究者是不这么认为的. 那么如何选择参数呢?下面介绍两个策略,随机搜索和精细搜索. 早一代的机器学习算法中,如下

吴恩达《深度学习》第二门课(3)超参数调试、Batch正则化和程序框架

3.1调试处理 (1)不同超参数调试的优先级是不一样的,如下图中的一些超参数,首先最重要的应该是学习率α(红色圈出),然后是Momentum算法的β.隐藏层单元数.mini-batch size(黄色圈出).再之后是Layer.learning rate decay(紫色圈出).最后是Adam算法中的β1.β2.ε. (2)用随机取值代替网格点取值.下图左边是网格点取值,如果二维参数中,一个参数调试的影响特别小,那么虽然取了25个点,其实只相当于取了5个不同的点:而右图中随机取值取了多少个点就代

深度学习面试题22:批量归一化在实践中的应用

目录 指数移动平均 BN在卷积网络中的使用 参考资料 假设已经训练好一个带有BN操作的卷积神经网络,但是在使用它预测时,往往每次只输入一个样本,那么经过该网络时,计算平均值和方差的意义就不大了,常采用的策略是计算训练阶段的平均值和方差的指数移动平均,然后在预测阶段使用它们作为BN操作时的平均值和方差. 指数移动平均 假设变量xt随时间t变化,按照以下规则定义其指数移动平均值 假设α=0.7 当t=1时,x1=5,则ema(1)=x1=5 当t=2时,x2=10,则ema(2)=α*ema(1)+

深度学习系列(1)| Dropout VS Batch Normalization? 是时候放弃Dropout了

Dropout是过去几年非常流行的正则化技术,可有效防止过拟合的发生.但从深度学习的发展趋势看,Batch Normalizaton(简称BN)正在逐步取代Dropout技术,特别是在卷积层.本文将首先引入Dropout的原理和实现,然后观察现代深度模型Dropout的使用情况,并与BN进行实验比对,从原理和实测上来说明Dropout已是过去式,大家应尽可能使用BN技术. 一.Dropout原理 根据wikipedia定义,dropout是指在神经网络中丢弃掉一些隐藏或可见单元.通常来说,是在神

TensorFlow和深度学习新手教程(TensorFlow and deep learning without a PhD)

前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络.并把其PPT的參考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep learning,without a PhD> 当然登入须要FQ,我也顺带巩固下,做个翻译.不好之处请包括指正. 当然须要安装python,教程推荐使用python3.假设是Mac,能够參考博主的另外两片博文,Mac下升级python2.7到python3.6, Mac安装tensorflow1.0 好多专业词