PyTorch -- Batch Normalization(BN) 快速实践

  • Batch Normalization 可以

    • 改善梯度消失/爆炸问题:前面层的梯度经过多次传递后会变得非常小(大),从而导致网络收敛速度慢(不收敛),应用 BN 可缓解
    • 加速网络收敛:BN 使得每个神经元的输入分布更加稳定
    • 减少过拟合:BN 可减少由于数据分布的变化导致的模型性能下降
    • 提高模型泛化能力:BN 使得模型对输入的微小变化更加稳定
    • 缓解超参敏感:对于 learning rate 等超参数敏感性降低
    • ...
  • Batch Normalization(BN):使 feature map 满足均值为 0,方差为 1 的分布规律

    • 如果batch size为m,则在前向传播过程中,网络中每个节点都有m个输出,所谓的Batch Normalization,就是对该层每个节点的这m个输出进行归一化再输出
    • 数学表达:每个 channel 下统计一个对应的均值和方差
      x norm = x − E x V a r x + ϵ ∗ γ + β x_{\text{norm}} = \frac{x - \mathbb{E}x}{\sqrt{Varx+\epsilon}} * \gamma + \beta xnorm=Varx+ϵ x−Ex∗γ+β
      • 其中 γ , β \gamma, \beta γ,β 为可学习的参数

  • 代码实践:

    python3 复制代码
    >>> import torch
    >>> import torch.nn as nn
    >>>
    >>> x = torch.rand(2,1,28,28)   		## *0.创建输入 x 
    >>> bn = nn.BatchNorm2d(				## *1. 创建 bn 层,
    						1,  				# -- 输入的 channel 数
    						training = False, 	# -- 是否为训练模式
    						affine = False) 	# -- 是否学习 γ β 				
    >>> out = bn(x) 						## *2 获取输出
    
    >>> # 查看相关数值 ------------------------------------------------
    >>> bn.running_mean					# 均值
    tensor([0.0507])
    >>> bn.running_var 					# 方差
    tensor([0.9080])
    >>> bn.weight						# γ
    Parameter containing:
    tensor([1.], requires_grad=True)
    >>> bn.bias							# β
    Parameter containing:
    tensor([0.], requires_grad=True)

相关推荐
wangxin20820 分钟前
多智能体协作收敛效率关键:大模型幻觉和角色视角
人工智能·ai·多智能体·团队协作·管理学·组织管理·coordclaw
circuitsosk26 分钟前
知识问答领域大语言模型设计:对标豆包与DeepSeek的工程实践
人工智能·python·语言模型·自然语言处理·llm·豆包·deepseek
u01030552727 分钟前
Java I/O核心操作实战
人工智能·1024程序员节
QZSJTR30 分钟前
数据驱动与效果监控:泉州企业 GEO 优化的度量体系怎么搭
人工智能·ai搜索优化·geo优化
celiahul31 分钟前
当搜索引擎变成“问答机器人”,你的网站该如何适配?
网络·人工智能·搜索引擎·内容运营·外贸推广
KJ_BioMed36 分钟前
Science Advances论文复现:461个香豆素分子的虚拟筛选参数解析
人工智能·生物医药·科研干货·科晶生物·小分子药物
这就是佬们吗38 分钟前
企业Agent落地为什么需要RAG?
人工智能·python·fastapi
xqqxqxxq1 小时前
AI Agent学习:用户记忆系统(李博杰《深入理解 AI Agent》3.1观后总结)
人工智能·学习
临床数据科学和人工智能兴趣组1 小时前
R Markdown 如何写
人工智能·机器学习·数据分析·r语言·r语言-4.2.1
粉色大象1 小时前
线性代数基础知识点
人工智能·线性代数·机器学习