0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析神经网络基础部件BN层

OSC开源社区 来源:OSCHINA 社区 2023-02-24 10:20 次阅读

摘要:在深度神经网络训练的过程中,由于网络中参数变化而引起网络中间层数据分布发生变化的这一过程被称为内部协变量偏移(Internal Covariate Shift),而 BN 可以解决这个问题。

一,数学基础

1.1,概率密度函数

随机变量(random variable)是可以随机地取不同值的变量。随机变量可以是离散的或者连续的。简单起见,本文用大写字母 XX表示随机变量,小写字母 xx表示随机变量能够取到的值。例如,x1x1 和 x2x2 都是随机变量 XX可能的取值。随机变量必须伴随着一个概率分布来指定每个状态的可能性。

概率分布(probability distribution)用来描述随机变量或一簇随机变量在每一个可能取到的状态的可能性大小。我们描述概率分布的方式取决于随机变量是离散的还是连续的。 当我们研究的对象是连续型随机变量时,我们用概率密度函数(probability density function, PDF)而不是概率质量函数来描述它的概率分布。

1.2,正态分布

当我们不知道数据真实分布时使用正态分布的原因之一是,正态分布拥有最大的熵,我们通过这个假设来施加尽可能少的结构。 实数上最常用的分布就是正态分布 (normal distribution),也称为高斯分布 (Gaussian distribution)。 如果随机变量 XX,服从位置参数为 μμ、尺度参数为 σσ的概率分布,且其概率密度函数为:

838b3dd6-b380-11ed-bfe3-dac502259ad0.png

则这个随机变量就称为正态随机变量,正态随机变量服从的概率分布就称为正态分布,记作:

83a4c3e6-b380-11ed-bfe3-dac502259ad0.png

如果位置参数 μ=0μ=0,尺度参数 σ=1σ=1 时,则称为标准正态分布,记作:

83b4e5f0-b380-11ed-bfe3-dac502259ad0.png

此时,概率密度函数公式简化为:

83cb0f10-b380-11ed-bfe3-dac502259ad0.png

正太分布的数学期望值或期望值 μμ等于位置参数,决定了分布的位置;其方差 σ2σ2 的开平方或标准差 σσ等于尺度参数,决定了分布的幅度。

正太分布的概率密度函数曲线呈钟形,常称之为钟形曲线,如下图所示:

83dd955e-b380-11ed-bfe3-dac502259ad0.jpg

可视化正态分布,可直接通过 np.random.normal 函数生成指定均值和标准差的正态分布随机数,然后基于 matplotlib + seaborn 库 kdeplot 函数绘制概率密度曲线。

示例代码如下所示:


pYYBAGP4HyeABBnIAAC_ddDNImI335.jpg

以上代码直接运行后,输出结果如下图:

83ef12fc-b380-11ed-bfe3-dac502259ad0.jpg

当然也可以自己实现正太分布的概率密度函数,代码和程序输出结果如下:

pYYBAGP4H0OAKqT7AAEs6KJ40OU276.jpg

840fd690-b380-11ed-bfe3-dac502259ad0.jpg

二,背景

训练深度神经网络的复杂性在于,因为前面的层的参数会发生变化导致每层输入的分布在训练过程中会发生变化。这又导致模型需要需要较低的学习率和非常谨慎的参数初始化策略,从而减慢了训练速度,并且具有饱和非线性的模型训练起来也非常困难。 网络层输入数据分布发生变化的这种现象称为内部协变量转移,BN 就是来解决这个问题。

2.1,如何理解 Internal Covariate Shift

在深度神经网络训练的过程中,由于网络中参数变化而引起网络中间层数据分布发生变化的这一过程被称在论文中称之为内部协变量偏移(Internal Covariate Shift)。 那么,为什么网络中间层数据分布会发生变化呢? 在深度神经网络中,我们可以将每一层视为对输入的信号做了一次变换(暂时不考虑激活,因为激活函数不会改变输入数据的分布):

842a75f4-b380-11ed-bfe3-dac502259ad0.png

其中 WW和 BB是模型学习的参数,这个公式涵盖了全连接层和卷积层。 随着 SGD 算法更新参数,和网络的每一层的输入数据经过公式 5 的运算后,其 ZZ的分布一直在变化,因此网络的每一层都需要不断适应新的分布,这一过程就被叫做 Internal Covariate Shift。 而深度神经网络训练的复杂性在于每层的输入受到前面所有层的参数的影响 — 因此当网络变得更深时,网络参数的微小变化就会被放大。

2.2,Internal Covariate Shift 带来的问题

网络层需要不断适应新的分布,导致网络学习速度的降低。

网络层输入数据容易陷入到非线性的饱和状态并减慢网络收敛,这个影响随着网络深度的增加而放大。

随着网络层的加深,后面网络输入 xx越来越大,而如果我们又采用 Sigmoid 型激活函数,那么每层的输入很容易移动到非线性饱和区域,此时梯度会变得很小甚至接近于 00,导致参数的更新速度就会减慢,进而又会放慢网络的收敛速度。 饱和问题和由此产生的梯度消失通常通过使用修正线性单元激活(ReLU (x)=max (x,0)ReLU(x)=max(x,0)),更好的参数初始化方法和小的学习率来解决。

然而,如果我们能保证非线性输入的分布在网络训练时保持更稳定,那么优化器将不太可能陷入饱和状态,进而训练也将加速。

2.3,减少 Internal Covariate Shift 的一些尝试

白化(Whitening): 即输入线性变换为具有零均值和单位方差,并去相关。 白化过程由于改变了网络每一层的分布,因而改变了网络层中本身数据的表达能力。底层网络学习到的参数信息会被白化操作丢失掉,而且白化计算成本也高。

标准化(normalization)

Normalization 操作虽然缓解了 ICS 问题,让每一层网络的输入数据分布都变得稳定,但却导致了数据表达能力的缺失。

三,批量归一化(BN)

3.1,BN 的前向计算

论文中给出的 Batch Normalizing Transform 算法计算过程如下图所示。其中输入是一个考虑一个大小为 mm的小批量数据 BB。

843f50fa-b380-11ed-bfe3-dac502259ad0.jpg

论文中的公式不太清晰,下面我给出更为清晰的 Batch Normalizing Transform 算法计算过程。

设 mm表示 batch_size 的大小,nn表示 features 数量,即样本特征值数量。在训练过程中,针对每一个 batch 数据,BN 过程进行的操作是,将这组数据 normalization,之后对其进行线性变换,具体算法步骤如下:

845b8e96-b380-11ed-bfe3-dac502259ad0.png

以上公式乘法都为元素乘,即 element wise 的乘法。其中,参数 γ,βγ,β是训练出来的, ϵϵ是为零防止 σB2σB2 为 00 ,加的一个很小的数值,通常为 1e-5。公式各个符号解释如下:

84723150-b380-11ed-bfe3-dac502259ad0.png

其中:

848e8a58-b380-11ed-bfe3-dac502259ad0.png

可以看出 BN 本质上是做线性变换。

3.2,BN 层如何工作

在论文中,训练一个带 BN 层的网络, BN 算法步骤如下图所示:

在训练期间,我们一次向网络提供一小批数据。在前向传播过程中,网络的每一层都处理该小批量数据。BN 网络层按如下方式执行前向传播计算:

84c1358e-b380-11ed-bfe3-dac502259ad0.jpg

注意,图中计算均值与方差的无偏估计方法是吴恩达在 Coursera 上的 Deep Learning 课程上提出的方法:对 train 阶段每个 batch 计算的 mean/variance 采用指数加权平均来得到 test 阶段 mean/variance 的估计。 在训练期间,它只是计算此 EMA,但不对其执行任何操作。

在训练结束时,它只是将该值保存为层状态的一部分,以供在推理阶段使用。 如下图可以展示 BN 层的前向传播计算过程数据的 shape ,红色框出来的单个样本都指代单个矩阵,即运算都是在单个矩阵运算中计算的。

84df7d64-b380-11ed-bfe3-dac502259ad0.jpg

BN 的反向传播过程中,会更新 BN 层中的所有 ββ和 γγ参数。

3.3,训练和推理式的 BN 层

批量归一化(batch normalization)的 “批量” 两个字,表示在模型的迭代训练过程中,BN 首先计算小批量( mini-batch,如 32)的均值和方差。但是,在推理过程中,我们只有一个样本,而不是一个小批量。在这种情况下,我们该如何获得均值和方差呢? 第一种方法是,使用的均值和方差数据是在训练过程中样本值的平均,即:

84f67af0-b380-11ed-bfe3-dac502259ad0.png

这种做法会把所有训练批次的 μμ和 σσ都保存下来,然后在最后训练完成时(或做测试时)做下平均。 第二种方法是使用类似动量的方法,训练时,加权平均每个批次的值,权值 αα可以为 0.9:

8514a354-b380-11ed-bfe3-dac502259ad0.png

推理或测试时,直接使用模型文件中保存的 μmoviμmovi 和 σmoviσmovi 的值即可。

3.4,实验

BN 在 ImageNet 分类数据集上实验结果是 SOTA 的,如下表所示:

8529bcee-b380-11ed-bfe3-dac502259ad0.jpg

3.5,BN 层的优点

BN 使得网络中每层输入数据的分布相对稳定,加速模型训练和收敛速度。

批标准化可以提高学习率。在传统的深度网络中,学习率过高可能会导致梯度爆炸或梯度消失,以及陷入差的局部最小值。批标准化有助于解决这些问题。

通过标准化整个网络的激活值,它可以防止层参数的微小变化随着数据在深度网络中的传播而放大。例如,这使 sigmoid 非线性更容易保持在它们的非饱和状态,这对训练深度 sigmoid 网络至关重要,但在传统上很难实现。

BN 允许网络使用饱和非线性激活函数(如 sigmoid,tanh 等)进行训练,其能缓解梯度消失问题。

不需要 dropout 和 LRN(Local Response Normalization)层来实现正则化。批标准化提供了类似丢弃的正则化收益,因为通过实验可以观察到训练样本的激活受到同一小批量样例随机选择的影响。

减少对参数初始化方法的依赖。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4718

    浏览量

    100107
  • ICS
    ICS
    +关注

    关注

    0

    文章

    34

    浏览量

    18079

原文标题:详解神经网络基础部件BN层

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    神经网络教程(李亚非)

      第1章 概述  1.1 人工神经网络研究与发展  1.2 生物神经元  1.3 人工神经网络的构成  第2章人工神经网络基本模型  2.1 MP模型  2.2 感知器模型  2.3
    发表于 03-20 11:32

    【PYNQ-Z2试用体验】神经网络基础知识

    超过阈值,输出就一跃而起。但我们一般用S函数作为激活函数。如下图:图2 该函数相比阶越函数更加接近现实。神经网络原理如图所示是一个具有两神经网络,每层有两个神经元。 图3 这里两个
    发表于 03-03 22:10

    卷积神经网络如何使用

    卷积神经网络(CNN)究竟是什么,鉴于神经网络在工程上经历了曲折的历史,您为什么还会在意它呢? 对于这些非常中肯的问题,我们似乎可以给出相对简明的答案。
    发表于 07-17 07:21

    【案例分享】基于BP算法的前馈神经网络

    `BP神经网络首先给出只包含一个隐的BP神经网络模型(两神经网络): BP神经网络其实由两
    发表于 07-21 04:00

    【案例分享】ART神经网络与SOM神经网络

    是一种常用的无监督学习策略,在使用改策略时,网络的输出神经元相互竞争,每一时刻只有一个竞争获胜的神经元激活。ART神经网络由比较、识别
    发表于 07-21 04:30

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络是一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入:根据现有数据获取输入的
    发表于 07-12 08:02

    matlab实现神经网络 精选资料分享

    神经神经网络,对于神经网络的实现是如何一直没有具体实现一下:现看到一个简单的神经网络模型用于训练的输入数据:对应的输出数据:我们这里设置:1:节点个数设置:输入
    发表于 08-18 07:25

    卷积神经网络的基本原理 卷积神经网络发展 卷积神经网络三大特点

    中最重要的神经网络之一。它是一种由多个卷积和池化(也可称为下采样)组成的神经网络。CNN 的基本思想是以图像为输入,通过
    的头像 发表于 08-21 16:49 2132次阅读

    卷积神经网络层级结构 卷积神经网络的卷积讲解

    卷积神经网络层级结构 卷积神经网络的卷积讲解 卷积神经网络(Convolutional Neural Network,CNN)是一种基于深度学习的
    的头像 发表于 08-21 16:49 6955次阅读

    卷积神经网络的介绍 什么是卷积神经网络算法

    的深度学习算法。CNN模型最早被提出是为了处理图像,其模型结构中包含卷积、池化和全连接等关键技术,经过多个卷积和池化的处理,CNN
    的头像 发表于 08-21 16:49 1726次阅读

    卷积神经网络一共有几层 卷积神经网络模型三

    卷积神经网络一共有几层 卷积神经网络模型三  卷积神经网络 (Convolutional Neural Networks,CNNs) 是一种在深度学习领域中发挥重要作用的模型。它是一
    的头像 发表于 08-21 17:11 6668次阅读

    bp神经网络和卷积神经网络区别是什么

    结构、原理、应用场景等方面都存在一定的差异。以下是对这两种神经网络的比较: 基本结构 BP神经网络是一种多层前馈神经网络,由输入、隐藏
    的头像 发表于 07-03 10:12 586次阅读

    反向传播神经网络分为多少

    的层数可以根据具体问题和数据集来确定,但通常包括输入、隐藏和输出。 输入 输入是BP神经网络
    的头像 发表于 07-03 11:02 310次阅读

    神经网络模型的优缺点

    神经网络模型是一种常见的深度学习模型,它由输入、两个隐藏和输出组成。本文将介绍三
    的头像 发表于 07-11 10:58 274次阅读

    神经网络结构的作用是什么

    的三结构是最基本的神经网络结构,包括输入、隐藏和输出。下面介绍神经网络
    的头像 发表于 07-11 11:03 339次阅读