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

2024-09-03 03:44

本文主要是介绍神经网络训练不起来怎么办(五)| 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] 李宏毅 | 课程视频 | 神经网络训练不起来怎么办?(五)

这篇关于神经网络训练不起来怎么办(五)| Batch Normalization的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131932

相关文章

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ

多云架构下大模型训练的存储稳定性探索

一、多云架构与大模型训练的融合 (一)多云架构的优势与挑战 多云架构为大模型训练带来了诸多优势。首先,资源灵活性显著提高,不同的云平台可以提供不同类型的计算资源和存储服务,满足大模型训练在不同阶段的需求。例如,某些云平台可能在 GPU 计算资源上具有优势,而另一些则在存储成本或性能上表现出色,企业可以根据实际情况进行选择和组合。其次,扩展性得以增强,当大模型的规模不断扩大时,单一云平

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04