【深度学习】神经网络中,BatchNormalization(批量归一化)层

在神经网络中,BatchNormalization(批量归一化)层计算每一批数据的均值和方差是其核心操作,下面详细介绍其计算方法。

计算均值和方差的基本公式

假设输入数据是一个形状为 (m, n) 的矩阵,其中 m 是批量大小(即一批数据中样本的数量),n 是特征的数量。

均值计算

均值是每一个特征维度上所有样本值的平均值。对于第 j 个特征维度,其均值 μ j \mu_j μj 的计算公式为:
μ j = 1 m ∑ i = 1 m x i j \mu_j = \frac{1}{m} \sum_{i=1}^{m} x_{ij} μj=m1i=1∑mxij

这里, x i j x_{ij} xij 表示第 i 个样本的第 j 个特征值。也就是说,对于每一个特征维度,将该维度上所有样本的值相加,再除以样本数量 m,就得到了该特征维度的均值。

方差计算

方差衡量的是数据相对于均值的离散程度。对于第 j 个特征维度,其方差 σ j 2 \sigma_j^2 σj2 的计算公式为:
σ j 2 = 1 m ∑ i = 1 m ( x i j − μ j ) 2 \sigma_j^2 = \frac{1}{m} \sum_{i=1}^{m} (x_{ij} - \mu_j)^2 σj2=m1i=1∑m(xij−μj)2

同样是针对每一个特征维度,先计算每个样本的该特征值与该维度均值的差值的平方,然后将这些平方值相加并除以样本数量 m,得到该特征维度的方差。

代码示例

下面是一个使用 Python 和 NumPy 实现手动计算一批数据均值和方差的简单示例:

python 复制代码
import numpy as np

# 模拟一批数据,形状为 (m, n)
# m 是批量大小,n 是特征数量
batch_size = 10
num_features = 5
data_batch = np.random.randn(batch_size, num_features)

# 计算每个特征维度的均值
means = np.mean(data_batch, axis=0)

# 计算每个特征维度的方差
variances = np.var(data_batch, axis=0)

print("每个特征维度的均值:", means)
print("每个特征维度的方差:", variances)

在这个示例中:

  1. 首先使用 np.random.randn 函数生成了一个形状为 (batch_size, num_features) 的随机数据矩阵,模拟一批输入数据。
  2. 然后使用 np.mean 函数,通过指定 axis=0,计算每一个特征维度上的均值。
  3. 最后使用 np.var 函数,同样指定 axis=0,计算每一个特征维度上的方差。

BatchNormalization 层中的应用

KerasBatchNormalization 层中,计算得到均值和方差后,会对输入数据进行归一化处理,公式如下:
x ^ i j = x i j − μ j σ j 2 + ϵ \hat{x}{ij} = \frac{x{ij} - \mu_j}{\sqrt{\sigma_j^2 + \epsilon}} x^ij=σj2+ϵ xij−μj

其中, x ^ i j \hat{x}_{ij} x^ij 是归一化后的第 i 个样本的第 j 个特征值, ϵ \epsilon ϵ 是一个很小的正数,用于防止除零错误。之后,归一化后的数据还会经过缩放和平移操作,以增加模型的表达能力。

相关推荐
蚝油菜花几秒前
开源学习神器把2小时网课压成5分钟脑图!BiliNote:一键转录哔哩哔哩视频,生成结构化学习文档
人工智能·开源
黄昏ivi5 分钟前
事件触发控制与响应驱动控制的定义、种类及区别
人工智能·分布式·学习·算法·机器学习
碎风,蹙颦10 分钟前
Android开发过程中遇到的SELINUX权限问题
android·人工智能
温文尔雅透你娘13 分钟前
摄像头在自动驾驶中的核心应用:感知算法与技术方案深度解析
人工智能·算法·计算机视觉·目标跟踪·自动驾驶
孔令飞14 分钟前
LLM 中的函数调用和工具是什么?
人工智能·云原生·go
sic_power18 分钟前
碳化硅(SiC)功率模块方案对工商业储能变流器PCS市场格局的重构
大数据·人工智能·重构
cainiao08060519 分钟前
量子机器学习在工业领域的首破:药物研发中的分子活性预测革命
人工智能·机器学习·量子计算
科技之歌19 分钟前
Dify简介:从架构到部署与应用解析
人工智能
雷焰财经24 分钟前
中和农信的“三农”服务密码:科技+标准化助力乡村振兴
人工智能
蚝油菜花25 分钟前
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
人工智能·开源