BN层多方面解读

BN层在神经网络中起到了稳定训练、加速收敛和正则化的效果。它通过计算批量数据的均值和方差,将数据归一化,然后通过γ和β参数调整分布。BN层通常位于激活函数前,减少了深层网络对浅层扰动的敏感性,避免梯度消失,并提供了一定的正则化。在测试时,使用训练集的均值和方差来处理单个输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. BN层作用概述

BN层会使得神经网络对超参数得选择更加稳定,超参数的变化范围可以更大,工作效果也更好。即使是深层网络,BN层的存在也会使得模型训练更加容易。同时BN层具有一定的正则化效果。

下面将说明BN层的具体作用方式,并解释BN层起到上述作用效果的原因。

2. BN层作用方式

一般我们认为BN层作用在激活函数之前

我们以一个神经网络中的某一个隐藏层(L层)中的某一个节点(1节点)为例,说明BN层的作用方式。在训练过程中,我们一次输入网络一个batch大小的数据。经过网络计算到第L层时,batch中的每一个单独的数据,都会在L层的1号节点输出一个值(设为 z ( 1 ) 到 z ( m ) z^{(1)}到z^{(m)} z(1)z(m))。则该批量数据在L层1号节点一共输出batch(m)个数据。我们对这batch个数据求均值 μ \mu μ和方差 σ 2 \sigma^{2} σ2,并使用求得的均值和方差对该节点的数据进行归一化。具体计算公式如下,其中 ϵ 是极小量,防止分母为零 \epsilon是极小量, 防止分母为零 ϵ是极小量,防止分母为零
μ = 1 m ∑ z ( i ) σ 2 = 1 m ∑ ( z ( i ) − μ ) 2 z n o r m ( i ) = z ( i ) − μ σ 2 + ϵ \mu = \frac{1}{m}\sum z^{(i)}\\ \sigma^2 = \frac{1}{m}\sum(z^{(i)}-\mu)^2\\ z_{norm}^{(i)} = \frac{z^{(i)-\mu}}{\sqrt{\sigma^2 + \epsilon}} μ=m1z(i)σ2=m1(z(i)μ)2znorm(i)=σ2+ϵ z(i)μ
这样得到的 z n o r m ( i ) z_{norm}^{(i)} znorm(i),**满足均值为0方差为1的分布。**但有时我们不希望隐藏层单元经过BN输出的值总是满足均值为零方差为1的分布。也许不同分布会更有意义。比如,如果我们使用softmax激活函数,如下图。均值为0方差为1的分布会更多的聚集在softmax的线性部分,若我们像更多的利用softmax的非线性特性,则需要改变数据的分布。

在这里插入图片描述

所以我们对 z n o r m ( i ) z_{norm}^{(i)} znorm(i)再进行一步变换 z ( i ) = γ z n o r m ( i ) + β {z^{(i)}} = \gamma z_{norm}^{(i)} + \beta z(i)=γznorm(i)+β这里的 γ 和 β \gamma和\beta γβ会改变数据的分布,对原始分布(均值为0,方差为1)进行缩放和平移。同时**这两个参数 γ 和 β \gamma和\beta γβ是模型的学习参数,所以我们会使用梯度下降或类似算法对其进行更新。**到此BN层的作用方式介绍完,我们接下来看其实际应用再我们的神经网络中的作用位置。

3. BN作用位置

我们借助吴恩达老师课程中的一张图理解BN层的作用位置。我们认为图中一个圆圈代表一个节点,在不使用BN层的情况下每个圆圈有两部计算,分别是通过权重 w , b w, b w,b计算出 z z z z z z再通过激活函数计算出 a a a。当我们加入BN层时,其作用位置在图中红线部分,也就是在激活函数之前。

在这里插入图片描述

由于其作用位置在激活函数之前,我们根据前面BN层的公式可以意识到,无论时第一步通过 w , b w, b w,b计算,还是经过BN层,数据均在进行线性变换。由于BN层会首先计算一个batch数据的均值和方差,然后将这组数据变为均值为0,方差为1的分布。所以第一步 w , b w, b w,b变换中的 b b b参数就失去了作用,无论其为多少在BN第一步计算时都会被减去,失去效果。所以我们不使用 b b b权重,偏置效果将由BN层的参数 β \beta β实现。

4. BN层起作用的原因
  1. BN层会使得深层网络对浅层网络的扰动的敏感性减低,如果不加入BN层,浅层网络的扰动会逐层积累,到达深层时可能数据分布会发生巨大变化,这会导致深层网络的参数训练困难。BN层会减少每层网络之间的联系,使得每层网络可以独立学习,有助于加速整个网络的学习。
  2. 一些激活函数如sigmoid在输入值过大或过小时会进入饱和区,会造成梯度过小,甚至梯度消失,不利于训练。所以BN也会使得数据分布在激活函数较为合适的区域,加快网络训练速度。
  3. BN层还有一定的正则化效果,通过上文我们了解BN层的均值和方差是在一个batch上的所有数据计算的。因为我们的batch通常是数据集中的一小部分,所以计算出的均值和偏差均存在噪音。这些噪音会对网络起到正则化的效果(类似于droupout),使得网络不过分依赖某一个节点的输出。
5. 测试时的BN层

上文介绍的BN层需要计算一个小batch的所有数据的均值和方差,但是当我们使用模型进行测试的时候,可能单次仅有一个输入,这时计算的均值和方差显然是没有意义的。所以解决这一问题的大致思想是,我们会在训练时记住整个训练集的均值和方差作为我们测试时的均值方差数据。不同的框架会有不同的相关操作,但其最终的结果均有预期的效果,不必担心!

### YOLOv10 默认配置文件解析 YOLO (You Only Look Once) 是一种流行的实时目标检测算法系列。尽管目前官方尚未发布名为 "YOLOv10" 的具体版本,基于现有 YOLO 版本的发展趋势以及社区中的讨论[^1],可以推测 YOLOv10 可能会继承并改进前几代的特点。 #### 1. 配置文件概述 假设存在 `yolov10.yaml` 文件作为默认配置文件,则该文件主要用于定义神经网络架构、训练设置以及其他必要的参数。此文件通常由多个部分组成: - **模型结构**: 描述如何搭建卷积、池化等组件来形成完整的检测器。 - **优化策略**: 设置学习率调整方案、权重衰减系数等影响收敛性的因素。 - **数据集信息**: 明确指明使用的图像尺寸、类别数量及其对应的标签映射关系。 - **预处理/后处理规则**: 定义输入图片标准化方式及预测框筛选准则。 #### 2. 关键组成部分详解 ##### 模型架构 (`model`) ```yaml nc: 80 # 类别数, 对应COCO数据集中物体分类数目 depth_multiple: 0.33 # 控制网络深度的比例因子 width_multiple: 0.50 # 调节各宽度(通道数)的比例因子 backbone: - [focus, [64, 3]] # Focus模块或替代其功能的新设计 ... neck: - [sppf, [256]] # 如果沿用了SPPF简化版空间金字塔池化单元 ... head: - [...] ``` 这部分内容借鉴了YOLOv5中提到的一些变化点[^3],比如可能继续采用更高效的特征提取机制,并进一步优化颈部(neck)连接以增强多尺度表征能力。 ##### 训练选项 (`train`) ```yaml hyp: lr0: 0.01 # 初始学习率 lrf: 0.1 # 结束时的学习率比例 momentum: 0.937 # 动量项 weight_decay: 0.0005 # 权重惩罚力度 ... epochs: 300 # 总迭代次数 batch_size: 16 # 批次大小 imgsz: 640 # 输入图像分辨率 rect: false # 是否开启矩形推理模式 resume: last.pt # 断点续训路径 device: '' # GPU设备编号,默认为空表示自动选择可用GPU single_cls: true # 单类或多类训练标志位 data: coco128.yaml # 数据源描述文档位置 project: runs/train # 日志保存目录基址 name: exp # 实验名称子文件夹名 exist_ok: False # 若同名实验已存在则覆盖与否 cache_images: True # 缓存加载过的样本至内存加速读取效率 image_weights: False# 加权采样开关 quad: False # 四倍精度浮点运算支持状态 linear_lr: False # 学习率线性退火策略启用情况 label_smoothing: 0.0# 标签平滑程度调节范围 patience: 100 # Early Stopping等待轮次上限 freeze: [] # 冻结某些不参与反向传播更新列表 save_period: -1 # 周期性存储checkpoint间隔周期(-1代表仅保留最终结果) seed: 0 # 随机种子设定值用于重现性控制 deterministic: True# CUDA操作确定性保障措施激活状况 sync_bn: False # 同步批量归一化的应用指示符 workers: 8 # 并行工作进程数指定 augment: True # 图像增广技术运用标识 mosaic: True # Mosaic混合拼接样式切换按钮 degrees: 0.0 # 旋转角度最大偏移幅度限制 translate: 0.1 # 移动变换百分比率界定域 scale: 0.5 # 缩放因子上下限区间边界 shear: 0.0 # 错切变形斜度角幅值约束条件 perspective: 0.005 # 投影变换视差效应强度阈值规定 flipud: 0.0 # 上下翻转概率密度函数峰值定位处 fliplr: 0.5 # 左右镜像转换发生几率分布中心点坐标轴方向 color_augmentation:# 颜色抖动参数集合体 hue: 0.1 # 色调变动跨度界限 saturation: 0.7 # 饱和度波动边际区域 value: 0.4 # 明亮度起伏波段端点座标系内数值表达形式 ``` 这些超参数的选择直接影响到模型性能的表现,在实际部署过程中可根据特定应用场景灵活调整[^2]。 ##### 测试评估 (`val`) 和 推理(`test`) 测试阶段与验证过程相似,主要是为了检验经过充分训练后的模型能否稳定输出高质量的结果;而推理环节侧重于生产环境下的快速响应需求,因此二者间可能存在细微差异之处如批处理规模的不同等。 ```yaml task: val/test # 'val' 表示验证,'test' 表达测试 weights: best.pt # 待测模型权重档案全径地址 conf_thres: 0.001# 置信度门限过滤弱阳性实例 iou_thres: 0.65 # IoU交并比临界值判定正负样本归属 half: False # 半精度FP16推断使能标记 augmented: False# 复杂扩充手段辅助决策质量提升启停态 verbose: False # 输出冗余调试资讯详尽等级调控旋钮 save_txt: False # 文本记录检测成果开关控件 save_hybrid: False# 综合可视化呈现效果留存设施 save_conf: False# 保存每张图上所有候选框得分数组序列化文件格式 plots: True # 生产各类图表统计分析资料图形界面展示特性 ``` 通过以上几个方面的介绍可以看出,即使对于假定存在的YOLOv10而言,其配置文件依然遵循着清晰合理的组织原则,旨在为用户提供便捷易用的同时也保持高度灵活性以便适应不同任务场景的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值