DataLearner 标志DataLearnerAI
最新AI资讯
大模型评测
大模型列表
大模型对比
资源中心
AI工具导航

加载中...

DataLearner 标志DataLearner AI

专注大模型评测、数据资源与实践教学的知识平台,持续更新可落地的 AI 能力图谱。

产品

  • 评测榜单
  • 模型对比
  • 数据资源

资源

  • 部署教程
  • 原创内容
  • 工具导航

关于

  • 关于我们
  • 隐私政策
  • 数据收集方法
  • 联系我们

© 2026 DataLearner AI. DataLearner 持续整合行业数据与案例,为科研、企业与开发者提供可靠的大模型情报与实践指南。

隐私政策服务条款
  1. 首页/
  2. 博客列表/
  3. 博客详情

Batch Normalization应该在激活函数之前使用还是激活函数之后使用?

2022/11/05 14:42:33
2,745 阅读
BatchNormalization深度学习激活函数

Batch Normalization(BN)是深度学习领域最重要的技巧之一,最早由Google的研究人员提出。这个技术可以大大提高深度学习网络的收敛速度。简单来说,BN就是将每一层网络进行归一化,就可以提高整个网络的训练速度,并打乱训练数据,提升精度。但是,BN的使用可以在很多地方,很多人最大的困惑是放在激活函数之前还是激活函数之后使用,著名机器学习领域的博主Santiago总结了这部分需要注意的内容。

结论可以直接看第三部分:

  • 一、BN简介
  • 二、BN的使用方式
  • 三、BN层是在激活函数之前还是之后使用?

一、BN简介

首先是对BN的简短介绍:Batch Normalization在每一次迭代训练的时候,针对每一个mini-batch的数据,对每一层的输入进行normalize。

二、BN的使用方式

以Keras为例,BN使用如下:

model = Sequential([
    Dense(128, input_shape=(4,), activation="relu"),
	BatchNormalization(),
	Dense(10, activation="softmax")
])

这里我们是在输入层之前,激活函数之后加了一个BN的层。注意,也有人的写法如下:

model = Sequential([
    Dense(128, input_shape=(4,)),
	BatchNormalization(),
	Activation(activations.relu),
	Dense(10, activation="softmax")
])

这种写法和上面最大的区别是BN层的位置从激活函数之后变成了在激活函数之前计算。这二者虽然看起来简单,但是区别很大。

三、BN层是在激活函数之前还是之后使用?

如果我们在激活函数之前增加BN层,那么我们可以完整地利用激活函数的输出。例如,Sigmoid可以将BN的输出限制在0-1的范围内。这种方式也有原作者的解释(也是原作者推荐的方式):

意思是在激活函数之前使用BN可以输出更加稳定的分布结果,让激活函数更好地发挥作用。但是,如果在激活函数之后使用BN可以使得下一层网络的输入是一个normalized的输入,可以让所有的值都在相同的尺度范围内。这是Paperspace blog里面提到的(参考链接:Intro to Optimization in Deep Learning: Busting the Myth About Batch Normalization):

作者认为,放在激活函数之后在实际训练中有更好的效果。

这没有标准的答案,著名深度学习学者Sebastian Raschka在推特上发布的调查,让大家选择BN的使用方式,结果显示,45%的人在激活函数之前使用,但也有30%的人在激活函数之后使用,剩下的人不适用或者treat pre/post as hparam。

那么实际情况中,应该是需要测试一下最好,不同的场景也许有不同的结论。

DataLearner 官方微信

欢迎关注 DataLearner 官方微信,获得最新 AI 技术推送

DataLearner 官方微信二维码
返回博客列表

相关博客

  • 深度学习中为什么要使用Batch Normalization
  • Saleforce发布最新的开源语言-视觉处理深度学习库LAVIS
  • 深度学习模型训练将训练批次(batch)设置为2的指数是否有实际价值?
  • 指标函数(Metrics Function)和损失函数(Loss Function)的区别是什么?
  • 亚马逊近线性大规模模型训练加速库MiCS来了!
  • Hugging Face发布最新的深度学习模型评估库Evaluate!
  • XLNet基本思想简介以及为什么它优于BERT
  • 开源版本的GPT-3来临!Meta发布OPT大语言模型!

热门博客

  • 1Dirichlet Distribution(狄利克雷分布)与Dirichlet Process(狄利克雷过程)
  • 2回归模型中的交互项简介(Interactions in Regression)
  • 3贝塔分布(Beta Distribution)简介及其应用
  • 4矩母函数简介(Moment-generating function)
  • 5普通最小二乘法(Ordinary Least Squares,OLS)的详细推导过程
  • 6使用R语言进行K-means聚类并分析结果
  • 7深度学习技巧之Early Stopping(早停法)
  • 8手把手教你本地部署清华大学的ChatGLM-6B模型——Windows+6GB显卡本地部署