当前位置: 首页 > news >正文

神经网络训练不起来怎么办(五)| Batch Normalization

Ⅰ,领域背景

训练困境:当 input feature 在不同 dimension 上差距很大的时候,会产生一个非常崎岖的 error surface(误差平面)。这种崎岖多变的误差平面容易导致训练陷入以下的几个困境。

  • 收敛困难:在崎岖的误差表面上,梯度下降等优化算法很容易陷入局部最小值或者鞍点,并且很难继续优化。这会导致模型无法收敛到全局最优解,训练过程变得非常困难。
  • 训练速度变慢:由于优化算法在崎岖的误差表面上可能会走弯路,需要更多的迭代次数才能找到较好的参数解,导致训练速度变慢
  • 梯度消失或爆炸:梯度在崎岖的误差表面上可能会非常大或者非常小。这种情况会导致梯度消失或爆炸,使得模型参数更新不稳定,训练过程变得不可靠。

不要小看 optimization 这个问题,有时候就算你的 error surface 是 convex 碗状都不见得很好训练。如果我们采用固定的 learning rate,一般很难得到好的结果,所以才需要adaptive learning rate、 Adam 等改进过的 optimization 的方法。

Batch Normalization 则是通过直接改变 input feature 的分布,得到一张均匀、光滑的 error surface,使得训练变得容易。


Ⅱ,原理详解

举例理解: 如图展示了一个非常简单的 model,输入是 x1 和 x2,模型参数是 w1 和 w2。input feature 这两个 dimension 的 scale 差距很大:x1 是个位级的;x2 是百位级的。因此 w2 的更新会对最终的损失产生更大的影响,也就是说 w1 方向是相对平缓的,w2 方向是相对陡峭的,形成了一张不同方向上坡度非常不同的 error surface。

Feature Normalization:此时如果我们将 x1 和 x2 归一化到同样的数值范围,就可以得到一张均匀、相对光滑的 error surface,如图绿色的 error surface 所示。这种将 feature 归一化的方法统称为 Feature Normalization。更一般的,我们如果一共有 R 个 inputs,那么在每个 dimension 做 normalization,意味着仍然可以保留 inputs 在每个 dimension 上的比重,同时又使得每个 dimension 数值范围保持相同。

Batch Normalization:实际的训练中,我们是将数据以 batch 的大小送进去,因此我们只以 batch 为单元做 normalization,而不是直接对所有数据做 normalization,这招叫做 Batch Normalization。

scale and shift: Normalization 之后还包含了一个适应过程,通过引入了可学习的参数 γ 和 β,可以通过训练来学习最优的特征表示。换句话说,这两个可学习参数增加了模型的韧性和容量,能够留给神经网络一点自我发挥的空间,让它慢慢琢磨出前面的 normalization 操作到底有没有起到优化的作用, 如果没有起到作用, 我就使用 γ 和 β 来抵消一些 normalization 的操作。

 Deep Learning:在多层 layer 的网络架构中,每次经过线性变化后都可能使得 feature 的数值范围再次变得不一致,而每层的输出 feature 又将作为下一层的输入 feature。因此,需要在每层处理之后,重新进行 normalization(激活层前后进行 normalization 对训练效果影响不大)。

model testing:我们如果用 model 作 application 的时候,inputs 不像 train 的过程那样可以一次性给出,然后划分为 batch 一批一批进行送进去,也就没有 batch 的概念。在这种情况下,我们通常直接使用训练得到的 Batch Normalization 作为先验知识对 testing 过程中的每个 input 进行 normalize。

Ⅲ,实验分析

如下图所示,展示了不同训练条件下模型的收敛情况,其中横轴是训练过程,纵轴是模型在验证集上的准确率。观察图中的几条对比曲线,我们能够得到如下的结论:

  • 加速收敛:黑色虚线是没有进行 Batch Normalization 的训练过程,其余的几条线都是有 Batch Normalization 参与的训练过程。很明显可以看出 Batch Normalization 可以加速模型的收敛速度,缩短训练时间。
  • 允许使用更高的学习率:蓝色实线表示将学习率提高至原来的30倍,明显加速了收敛。由于 Batch Normalization 可以尽可能产生均匀、光滑的 error surface,因此可以使用更高的学习率来训练模型,加快收敛速度。
  • 缓解了梯度消失的问题:sigmoid 作为激活函数,导致 feature 都分布在 sigmoid 梯度较小处,引起梯度消失的问题,导致模型无法训练起来。但是使用 Batch Normalization 之后,feature 集中在0附近,可以在 sigmoid 函数上产生较大的梯度,顺利反向传播。


Ⅳ,参考链接

[1] 李宏毅 | MACHINE LEARNING | 2021 SPRING

[2] 李宏毅 | 课程视频 | 神经网络训练不起来怎么办?(五)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • I2C总线
  • CSRF 概念及防护机制
  • 鸿蒙开发培训多少钱?
  • [CISCN2019 华东南赛区]Web111
  • 在Element UI的<el-table>组件中,点击子元素不触发父级事件
  • 老师怎样用微信发布月考成绩?
  • TensorFlow介绍二-线性回归案例
  • 【鸿蒙HarmonyOS NEXT】List组件的使用
  • Spring 源码解读:实现Spring容器的启动流程
  • SAP B1 三大基本表单标准功能介绍-物料主数据(下)
  • 嵌入式软件开发学习三:中断
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(二十一)
  • VMware安装windows虚拟机详细过程
  • HTTP 之 Web Sockets 安全策略(十)
  • 大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • ES10 特性的完整指南
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Nacos系列:Nacos的Java SDK使用
  • node.js
  • TCP拥塞控制
  • 前嗅ForeSpider教程:创建模板
  • 算法-图和图算法
  • 译有关态射的一切
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)springboot学生选课系统 毕业设计 612555
  • ****Linux下Mysql的安装和配置
  • .apk 成为历史!
  • .Net Core中Quartz的使用方法
  • .NET WPF 抖动动画
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @RestControllerAdvice异常统一处理类失效原因
  • @synthesize和@dynamic分别有什么作用?
  • @vue-office/excel 解决移动端预览excel文件触发软键盘
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [BUG] Authentication Error
  • [C#学习笔记]Newtonsoft.Json
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [C++]类和对象【上篇】
  • [C语言]-基础知识点梳理-编译、链接、预处理
  • [HOW TO]如何在iPhone应用程序中发送邮件
  • [LeetCode 127] - 单词梯(Word Ladder)
  • [linux] 创建用户
  • [Matsim]Matsim学习笔记-population.xml的创建
  • [mmucache]-ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲
  • [Node + Docker] 聊聊怎么把 nodeclub 构建成 Docker 镜像
  • [NOIP2003 普及组] 乒乓球(模拟)
  • [Oh My C++ Diary]怎样用cmd运行exe控制台程序
  • [python]bar_chart_race设置日期格式
  • [RISCV] 为android14添加一个新的riscv device
  • [RK3568 Android11] Binder通信整体框架
  • [SAP] ABAP注释快捷键修改
  • [SRM603] WinterAndSnowmen