batch norm的作用

BatchNormalization在深度学习中扮演着关键角色,它能提高学习率,减少dropout使用,降低L2权重衰减,取消LocalResponseNormalization层,并减少图像扭曲需求,从而加速训练过程并改善模型性能。
部署运行你感兴趣的模型镜像

  论文中将Batch Normalization的作用说得突破天际,好似一下解决了所有问题,下面就来一一列举一下:

  (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数降低,所以要对输入数据少做一些扭曲,让神经网络多看看真实的数据。

转载自:https://blog.youkuaiyun.com/happynear/article/details/44238541

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

Batch NormBatch Normalization,是一种在深度学习中广泛应用的归一化技术。 ### 介绍 从引用可以看出,在使用深度学习框架如TensorFlow时,Batch Norm是一个重要的操作,但如果不熟悉其内部原理,可能会出现错误使用导致结果与预想不一致的情况。像有用户在TensorFlow中使用`batch_norm`就曾出现此类问题 [^1]。在实际使用框架时,有不同的封装函数可以选择,例如`tf.layers.batch_normalization`或`tf.contrib.layers.batch_norm`,其中`tf.layers.batch_normalization`因官网解释详细而被推荐使用 [^2]。 ### 原理 Batch Norm的核心原理是对每一批次的输入数据进行归一化处理,使其均值为0,方差为1,然后通过可学习的缩放因子(γ)和平移因子(β)对归一化后的数据进行缩放和平移。在训练过程中,使用当前批次数据的均值和方差进行归一化;而在测试时,通常使用训练过程中通过滑动平均计算得到的全局均值和方差。以简单的测试代码为例: ```python import numpy as np def Batchnorm_simple_for_test(x, gamma, beta, bn_param): """ param:x : 输入数据,设shape(B,L) param:gamma : 缩放因子 γ param:beta : 平移因子 β param:bn_param : batchnorm所需要的一些参数 eps : 接近0的数,防止分母出现0 momentum : 动量参数,一般为0.9, 0.99, 0.999 running_mean :滑动平均的方式计算新的均值,训练时计算,为测试数据做准备 running_var : 滑动平均的方式计算新的方差,训练时计算,为测试数据做准备 """ eps = bn_param.get('eps', 1e-5) running_mean = bn_param['running_mean'] # shape = [B] running_var = bn_param['running_var'] # shape = [B] results = 0. # 建立一个新的变量 x_normalized = (x - running_mean) / np.sqrt(running_var + eps) # 归一化 results = gamma * x_normalized + beta # 缩放平移 return results, bn_param ``` 这里展示了测试时简单的Batch Norm计算过程,通过减去均值并除以方差的平方根进行归一化,然后再进行缩放和平移 [^4]。 ### 应用 Batch Norm在深度学习中有广泛的应用,它可以加速模型的收敛速度,使得模型在训练过程中更加稳定,减少梯度消失和梯度爆炸的问题。在许多深度学习模型如卷积神经网络(CNN)、循环神经网络(RNN)等中都有应用。同时,在解决模式覆盖与多样性兼顾等问题的相关研究中,也可能会涉及到Batch Norm的使用,例如在相关研究的代码实现与工程要点等部分可能会运用到 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值