激活函数和批归一化(BatchNorm)

server/2025/3/16 8:31:53/

简单记录学习~。在神经网络中,激活函数和批归一化(BatchNorm)的配合使用是为了解决‌数据分布偏移‌和‌梯度不稳定‌问题。以下是逐步解释:

1. 激活函数为何导致值向上下限移动?‌

以Sigmoid/Tanh为例‌:
这类饱和型激活函数(如Sigmoid、Tanh)的导数在输入绝对值较大时会趋近于0(饱和区)。

例如:Sigmoid的输出范围是 (0,1)当输入 𝑥≫0时,输出接近1;x≪0 时,输出接近0。
Tanh的输出范围是 (−1,1),当输入绝对值较大时,输出同样会饱和。

梯度消失‌:在反向传播时,梯度需要乘以激活函数的导数。若激活值接近饱和区(如Sigmoid输出接近1),导数 σ′(x)≈0,梯度会逐层衰减,导致底层参数难以更新。


2. 为什么下一层卷积后仍需要BatchNorm?‌

(1) 抵消激活函数导致的分布偏移‌

激活函数的非线性变换会破坏数据分布‌:例如,ReLU会将负值置零,导致输出的分布偏向非对称;Sigmoid/Tanh会压缩值域,导致后续层的输入范围不稳定。

卷积层的权重更新会进一步放大偏移‌:即使前一层通过激活函数输出了偏移的值,下一层卷积的权重矩阵(通过训练更新)可能进一步改变数据分布,导致输入到后续层的值域波动剧烈。
BatchNorm的作用‌:在卷积后加入BatchNorm,能对输出值进行‌标准化‌(减均值、除标准差),强制使其分布保持零均值和单位方差。这相当于对每一层的输入进行“校准”,使其更适合后续激活函数的处理。

(2) 缓解梯度问题‌

BatchNorm的缩放和平移参数‌:BatchNorm在标准化后引入了可学习的参数 γ(缩放)和 𝛽(偏移),允许网络自适应调整分布范围。例如:若激活函数为Sigmoid,网络可能通过 𝛾和 𝛽将输入调整到非饱和区(如Sigmoid的中间线性区),避免梯度消失。
梯度传播更稳定‌:标准化后的数据分布更平滑,激活函数的导数不会频繁接近0或过大,从而缓解梯度消失或爆炸。

(3) 协同解决协变量偏移(Covariate Shift)‌

内部协变量偏移(Internal Covariate Shift)‌:在深度网络中,每一层的参数更新会改变后续层的输入分布,导致网络需要不断适应新的数据分布,降低训练效率。
BatchNorm的解决方案‌:通过对每一层的输出进行标准化,BatchNorm减少了层与层之间的分布依赖性,使网络更易训练。

3. 具体流程示例(以卷积网络为例)‌

假设网络结构为:
卷积层 → 激活函数 → 卷积层 → BatchNorm → 激活函数 → ...‌

第一次卷积+激活‌:卷积操作提取特征,激活函数(如ReLU)过滤负值,导致输出的分布偏向非负。若直接输入到下一层,可能导致后续卷积的输入分布不稳定(如全为正数)。
第二次卷积+BatchNorm‌:第二次卷积的权重可能进一步放大或偏移数据分布。加入BatchNorm后,强制将输出标准化为均值为0、方差为1的分布,再输入到激活函数。此时:激活函数的输入范围被限制在合理区间(如ReLU的输入接近零均值,避免大量负值被截断)。梯度计算更稳定,反向传播更有效。

4. 实验结论与设计经验‌

BatchNorm的位置‌:通常建议将BatchNorm放在‌卷积层/全连接层之后、激活函数之前‌(如 Conv → BN → ReLU),因为:激活函数(如ReLU)对标准化后的数据更敏感,能更好地区分正负值。若放在激活函数之后(如 Conv → ReLU → BN),标准化可能削弱激活函数的作用(如ReLU已将负值清零,BN的均值计算会偏向正数)。
例外情况‌:某些设计(如ResNet原始论文)采用 Conv → BN → ReLU 的顺序,但后续研究发现不同任务可能需要调整顺序。

5. 总结‌

激活函数导致值偏移‌:饱和型激活函数(Sigmoid/Tanh)或单边抑制型激活函数(ReLU)会破坏数据分布,导致后续层输入不稳定。
BatchNorm的必要性‌:即使经过卷积操作,仍需通过BatchNorm动态调整分布,确保每层输入的稳定性和梯度传播的有效性。
协同效果‌:BatchNorm与激活函数配合,既能缓解梯度消失/爆炸,又能加速收敛。


http://www.ppmy.cn/server/175370.html

相关文章

tsfresh:时间序列特征自动提取与应用

tsfresh:时间序列特征自动提取与应用 本文系统介绍了 tsfresh 技术在 A 股市场数据分析与量化投资中的应用。从基础特征提取到高级策略开发,结合实战案例,详细讲解了如何利用 tsfresh 构建量化投资策略,并优化风险控制&#xff0c…

【NoSql】Redis

Ubuntu22.04版本编译安装 Redis Redis version7.4.2 #解压源码包 tar -zxvf redis-stable.tar.gz cd redis-stable/ make make install安装好了后,可执行文件默认会放入/usr/local/bin/ rootluobozi:~ ls /usr/local/bin/* /usr/local/bin/redis-cli /usr/local/…

C++程序设计语言笔记——抽象机制:模板

0 使用模板表示用于很多实参类型的算法。 在 C 中&#xff0c;使用函数模板或类模板可以创建适用于多种数据类型的通用算法。以下是一个详细说明和示例&#xff1a; 基本模板函数示例 template <typename T> T max(T a, T b) {return (a > b) ? a : b; }// 使用示…

高级java每日一道面试题-2025年2月18日-数据库篇-MySQL 如何做到高可用方案?

如果有遗漏,评论区告诉我进行补充 面试官: MySQL 如何做到高可用方案? 我回答: 在Java高级面试中&#xff0c;讨论MySQL如何实现高可用性方案是一个重要话题。这不仅涉及到数据库的稳定性和可靠性&#xff0c;还关系到系统的整体性能和用户体验。以下是结合提供的信息进行综…

css模拟雷达扫描动画

<div class"radar-scan"><div class"radar-container" /></div> 样式&#xff1a; .radar-scan {background-image: linear-gradient(0deg,transparent 24%,rgba(32, 255, 77, 0.15) 25%,rgba(32, 255, 77, 0.15) 26%,transparent 27%,…

TDengine 使用教程:从入门到实践

TDengine 是一款专为物联网&#xff08;IoT&#xff09;和大数据实时分析设计的时序数据库。它能够高效地处理海量的时序数据&#xff0c;并提供低延迟、高吞吐量的性能表现。在本文中&#xff0c;我们将带领大家从 TDengine 的安装、基本操作到一些高级功能&#xff0c;帮助你…

WPS的Excel文档如何利用VB脚本批量替换超链接的内容

准备知识 关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】 https://blog.csdn.net/wenhao_ir/article/details/146212767 激活WPS的Excel文档中的VB编辑器功能 没有激活前的截图如下: 原因是我们的电脑中缺乏VBA插件,我们点击“开发工具”:…

如何搭建一个适配微信小程序,h5,app的uni-app项目

在vscode搭建 uni-app 项目&#xff08;Vue 3 Vite Pinia uView Plus&#xff09; 一、环境准备 1. 安装 Node.js 确保已安装 Node.js&#xff08;需≥14版本&#xff09;&#xff0c;可通过以下命令检查版本&#xff1a; node -v2. 安装 VSCode 从 VSCode 官网 下载并…