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

神经网络中的归一化操作

神经网络中的归一化

文章目录

  • 神经网络中的归一化
    • 概述
    • 最大最小归一化
    • 标准归一化
    • 批归一化
    • 层归一化
    • 实例归一化
    • 组归一化
    • 权重归一化

概述

由于样本不同特征的量纲或量纲单位不同,变化区间也处于不同数量级, 使用原始样本训练机器学习或深度学习模型,不同特征对模型的影响会不同,这也导致训练所得的模型缺乏鲁棒性。

归一化(Normalization)是一种常见的数据预处理方法,它将数据映射成 [0, 1]或者[-1, 1]之间的小数,是的模型更容易收敛到最优解。 因此,在构造机器学习或深度学习模型之前,需要将数据做归一化处理, 这不仅会加快求解的速度,还有可能提高模型的精度。

最大最小归一化

给定样本集合 X = { x i } , i = 1 , . . . , n , x m i n X=\{x_i\},i=1,...,n,x^{min} X={xi},i=1,...,n,xmin为样本的最小值, x m a x x^{max} xmax为样本的最大值。

最大最小归一化 (Max-min Normalization)将数据归一化到[0,1]之间,

计算公式如下:
x i m i n m a x = x i − x m i n x m a x − x m i n x_i^{minmax}=\frac{x_i-x^{min}}{x^{max}-x^{min}} ximinmax=xmaxxminxixmin
最大最小归一化可以很好地将数据归一化到[0, 1]之间,使数据具有相同的度量尺度。但是这种归一化方法容易受到离群点数据的影响,如果存在一个离群点数据的值过大或者过小,都会导致分母很大,这使得归一化后的数据失去意义。 另外,最大最小归一化后的数据值都为正数,这导致机器学习模型的参数只能同时增大或同时减小,参数的更新路线可能不是最优路线。

标准归一化

标准归一化(Standard Normalization)考虑所有样本数据,因此受离群点数据的影响要小一些,尤其在样本足够多的情况下表现比较稳定。

给定样本集合 X = { x i } , i = 1 , . . . , n , E ( X ) X=\{x_i\},i=1,...,n,E(X) X={xi},i=1,...,n,E(X)为样本均值, V a r ( X ) Var(X) Var(X)为样本方差,
标准归一化的计算公式如下:
x i s t a n d = x i − E ( X ) V a r ( X ) x_i^{stand}=\frac{x_i-E(X)}{\sqrt{Var(X)}} xistand=Var(X) xiE(X)
其中:
E ( X ) = 1 n ∑ i = 1 n x i V a r ( X ) = 1 n ∑ i = 1 n ( x i − E ( X ) ) 2 \begin{aligned} E(X)&=\frac1n\sum_{i=1}^nx_i\\ Var(X)&=\frac1n\sum_{i=1}^n(x_i-E(X))^2 \end{aligned} E(X)Var(X)=n1i=1nxi=n1i=1n(xiE(X))2
标准归一化的分子得到的值有正有负,可以让不同的参数朝着不同方向调 整直至到达最优解,减少迭代次数,使得更新尽可能沿着最优路径进行。 标准归一化的分母用到了方差,方差衡量的是数据的离散程度,因此可以减小离群点数据的影响。

批归一化

在神经网络装载数据时,通常将按批(Batch)输入,由于每批数据的分布并不相同,使模型训练起来比较困难。 并且在训练深层神经网络时,激活函数会改变各层数据的分布和量级,随着神经网络的加深,这种改变会越来越大,从而导致模型不够稳定、不容易收敛,甚至可能出现梯度消失的问题。 这些存在的问题可以通过批归一化(Batch Normalization,BN)来解决。

神经网络中传递的张量数据一般有四个维度,记为(𝑁, 𝐻, 𝑊, 𝐶),其中𝑁表示批大小,𝑊、𝐻分别表示特征图的宽和高,𝐶表示通道数量,𝑁, 𝐻, 𝑊, 𝐶 ∈ ℕ。 批归一化是让一个批次内的所有数据在某个通道维度上的均值为0,方差为1,即在𝑁、𝐻、𝑊维度上做归一化。这样不仅可以使数据分布一致,而且可以避免梯度消失的发生。

给定一个批大小为 N N N的样本集合 X ∈ R N × H × W × C X\in\mathbb{R}^N\times H\times W\times C XRN×H×W×C作为输入, E C [ X ] E_C[X] EC[X]为样本沿着通道方向计算得到的均值, V a r C [ X ] Var_C[X] VarC[X]为样本沿着通道方向计算得到的方差, ϵ \epsilon ϵ是一个很小的数,防止分母为零, γ ∈ R C \boldsymbol{\gamma}\in\mathbb{R}^C γRC为可学习放缩(Scale)向量,向量元素的初始值通常设置为1, β ∈ R C \boldsymbol{\beta}\in\mathbb{R}^C βRC为可学习平移(Shift)向量,向量元素的初始值通常设置为0。批归一化的计算公式:

E C [ X ] = 1 N × H × W ∑ n = 1 N ∑ h = 1 H ∑ w = 1 W X n , h , w , ⋅ V a r C [ X ] = 1 N × H × W ∑ n = 1 N ∑ h = 1 H ∑ w = 1 W ( X n , h , w , ⋅ − E c [ X ] ) 2 Y n , h , w , ⋅ = X n , h , w , ⋅ − E C [ X ] V a r C [ X ] + ϵ × γ + β \begin{aligned} E_C[X]&=\frac1{N\times H\times W}\sum_{n=1}^N\sum_{h=1}^H\sum_{w=1}^W\boldsymbol{X}_{n,h,w,\cdot}\\ Var_C[X]&=\frac1{N\times H\times W}\sum_{n=1}^N\sum_{h=1}^H\sum_{w=1}^W(X_{n,h,w,\cdot}-E_c[X])^2\\ Y_{n,h,w,\cdot}&=\frac{X_{n,h,w,\cdot}-E_C[X]}{\sqrt{Var_C[X]+\epsilon}}\times\gamma+\beta\\ \end{aligned} EC[X]VarC[X]Yn,h,w,=N×H×W1n=1Nh=1Hw=1WXn,h,w,=N×H×W1n=1Nh=1Hw=1W(Xn,h,w,Ec[X])2=VarC[X]+ϵ Xn,h,w,EC[X]×γ+β

批归一化使网络中每层输入数据的分布相对稳定,减少梯度消失和梯度爆炸问题,提高模型的稳定性,也使得神经网络更快地收敛到最优解。 同时,它使模型对输入数据中的一些变化和扰动具有更好的鲁棒性,提高了模型的泛化能力。 但是批归一化受到批大小影响较大。如果批大小过小,计算的均值和方差 不足以代表整个样本数据的分布,批归一化的效果可能会下降;如果批大小过大,会超过内存容量,无法处理。 此外,批归一化并不适合所有神经网络,如循环神经网络等动态网络,使用批归一化的效果并不好。

层归一化

在自然语言处理等任务中,不同样本的长度往往是不同的,而批归一化很难满足 需求。为了解决这一问题 , 通常使用层归一化 ( Layer Normalization,LN)方法。 层归一化是指让一个数据样本在所有通道上的均值为0,方差为1,即在 𝐻、𝑊、𝐶维度上做归一化。

给定一个批大小为𝑁的样本集合 x ∈ R N × H × W × C x ∈ \mathbb{R}^{N×H×W×C} xRN×H×W×C作为输入, E n [ X ] E_n[X] En[X] 是沿着批方向计算得到的均值, V a r n [ X ] Var_n [X] Varn[X] 是沿着批方向计算得到的方差,ϵ是一个很小的数,防止分母为零, γ ∈ R c \gamma ∈ \mathbb R^c γRc为可学习放缩向量,向量元素的初始值通常设置为1, β ∈ R c \beta \in \mathbb R^c βRc为可学习平移向量,向量元素的初始值通常设置为0。层归 一化的计算公式:
E n [ X ] = 1 H × W × C ∑ h = 1 H ∑ w = 1 W ∑ c = 1 C X ⋅ , h , w , c V a r n [ X ] = 1 H × W × C ∑ h = 1 H ∑ w = 1 W ∑ c = 1 C ( X ⋅ , h , w , c − E n [ X ] ) 2 Y ⋅ , h , w , c = X ⋅ , h , w , c − E n [ X ] V a r n [ X ] + ϵ Z ⋅ , h , w , c = Y ⋅ , h , w , c × γ + β \begin{aligned} E_{n}[\boldsymbol{X}]&=\frac{1}{H\times W\times C}\sum_{h=1}^{H}\sum_{w=1}^{W}\sum_{c=1}^{C}\boldsymbol{X}_{\cdot,h,w,c}\\ Var_{n}[\boldsymbol{X}]&=\frac{1}{H\times W\times C}\sum_{h=1}^{H}\sum_{w=1}^{W}\sum_{c=1}^{C}(\boldsymbol{X}_{\cdot,h,w,c}-E_{n}[\boldsymbol{X}])^{2}\\ \boldsymbol{Y}_{\cdot,h,w,c}&=\frac{\boldsymbol{X}_{\cdot,h,w,c}-E_{n}[\boldsymbol{X}]}{\sqrt{Var_{n}[X]+\epsilon}}\\ \boldsymbol{Z}_{\cdot,h,w,c}&=\boldsymbol{Y}_{\cdot,h,w,c}\times\boldsymbol{\gamma}+\boldsymbol{\beta} \end{aligned} En[X]Varn[X]Y,h,w,cZ,h,w,c=H×W×C1h=1Hw=1Wc=1CX,h,w,c=H×W×C1h=1Hw=1Wc=1C(X,h,w,cEn[X])2=Varn[X]+ϵ X,h,w,cEn[X]=Y,h,w,c×γ+β
层归一化的最大优点是不依赖于批量数据的大小,甚至可以在单个样本上应用,另外它也不需要保存批的均值和方差,节省了存储空间。此外,层归一化适用于循环神经网络。 但是,层归一化在批大小比较大时没有批归一化效果好

实例归一化

在图像风格变换任务中,生成图像的风格主要依赖于某个图像实例,因而实例归一化(Instance Normalization)提出只对H、W维度进行归一化, 即只让一个单独数据在H和W维度上求均值和方差。

给定一个批大小为 N N N的样本集合 X ∈ R N × H × W × C X\in\mathbb{R}^{N\times H\times W\times C} XRN×H×W×C作为输入, E n c [ X ] E_{nc}[X] Enc[X]是沿着批方向和通道方向计算得到的均值, V a r n c [ X ] Var_{nc}[X] Varnc[X]是沿着批方向和通道方向计算得到的方差, ϵ \epsilon ϵ是一个很小的数,防止分母为零, γ ∈ R C \boldsymbol{\gamma}\in\mathbb{R}^C γRC为可学习放缩向量, 向量的元素初始值通常设置为1, β ∈ R C \boldsymbol{\beta}\in\mathbb{R}^C βRC为可学习平移向量,向量元素的初始值通常设置为0。实例归一化的计算公式:
E n c [ X ] = 1 H × W ∑ h = 1 H ∑ w = 1 W X ⋅ , h , w , ⋅ V a r n c [ X ] = 1 H × W ∑ h = 1 H ∑ w = 1 W ( X ⋅ , h , w , ⋅ − E n c [ X ] ) 2 Y ⋅ , h , w , ⋅ = X ⋅ , h , w , ⋅ − E n c [ X ] V a r n c [ X ] + ϵ Z ⋅ , h , w , ⋅ = Y ⋅ , h , w , ⋅ × γ + β \begin{aligned} E_{nc}[X]&=\frac1{H\times W}\sum_{h=1}^H\sum_{w=1}^WX_{\cdot,h,w,\cdot}\\ Var_{nc}[X]&=\frac1{H\times W}\sum_{h=1}^H\sum_{w=1}^W(X_{\cdot,h,w,\cdot}-E_{nc}[X])^2\\ Y_{\cdot,h,w,\cdot}&=\frac{X_{\cdot,h,w,\cdot}-E_{nc}[X]}{\sqrt{Var_{nc}[X]+\epsilon}}\\ Z_{\cdot,h,w,\cdot}&=Y_{\cdot,h,w,\cdot}\times\gamma+\beta \end{aligned} Enc[X]Varnc[X]Y,h,w,Z,h,w,=H×W1h=1Hw=1WX,h,w,=H×W1h=1Hw=1W(X,h,w,Enc[X])2=Varnc[X]+ϵ X,h,w,Enc[X]=Y,h,w,×γ+β

组归一化

组归一化(Group Normalization)用来解决当批大小较小时批归一化效果较差的问题。层归一化虽然不依赖批大小,但是在卷积神经网络中直接对当前层所有通道数据进行规一化也并不理想。 组归一化将通道方向分组,然后在每个组内做归一化,使得一个数据样本在同一组内的所有通道的均值为0,方差为1。计算步骤与批归一化一样, 但是不考虑批大小,即与批大小无关。

给定一个批大小为 N N N的样本集合 X ∈ R N × H × W × C X\in\mathbb{R}^{N\times H\times W\times C} XRN×H×W×C作为输入, E n g [ X ] E_{ng}[X] Eng[X]是沿着批方向在每个通道组内计算得到的均值, V a r n g [ X ] Var_{ng}[X] Varng[X]是沿着批方向在每个通道组内计算得到的方差, ϵ \epsilon ϵ是一个很小的数,防止分母为零, γ ∈ R C \boldsymbol{\gamma}\in\mathbb{R}^C γRC为可学习放缩向量,向量元素的初始值通常设置为1, β ∈ R C \boldsymbol{\beta}\in\mathbb{R}^C βRC为可学习平移向量,向量元素的初始值通常设置为0,其中 G G G​为分组数。组归一化的计算公式:
E n g [ X ] = 1 ( C / G ) H W ∑ c = g C / G + 1 ( g + 1 ) C / G ∑ h = 1 H ∑ w = 1 W X ⋅ , h , w , c V a r n g [ X ] = 1 ( C / G ) H W ∑ c = g C / G + 1 ( g + 1 ) C / G ∑ h = 1 H ∑ w = 1 W ( X ⋅ , h , w , c − E n g [ X ] ) 2 Y ⋅ , h , w , ( g C / G + 1 ) : ( g + 1 ) C / G = X ⋅ , h , w , ( g C / G + 1 ) : ( g + 1 ) C / G − E n g [ X ] V a r n g [ X ] + ϵ Z ⋅ , h , w , ( g C / G + 1 ) : ( g + 1 ) C / G = Y ⋅ , h , w , ( g C / G + 1 ) : ( g + 1 ) C / G × γ + β \begin{aligned} E_{ng}[X]&=\frac1{(C/G)HW}\sum_{c=gC/G+1}^{(g+1)C/G}\sum_{h=1}^H\sum_{w=1}^WX_{\cdot,h,w,c}\\ Var_{ng}[X]&=\frac1{(C/G)HW}\sum_{c=gC/G+1}^{(g+1)C/G}\sum_{h=1}^H\sum_{w=1}^W(X_{\cdot,h,w,c}-E_{ng}[X])^2\\ \boldsymbol{Y}_{\cdot,h,w,(gC/G+1):(g+1)C/G}&=\frac{X_{\cdot,h,w,(gC/G+1):(g+1)C/G}-E_{ng}[X]}{\sqrt{Var_{ng}[X]+\epsilon}}\\ Z_{\cdot,h,w,(gC/G+1):(g+1)C/G}&=Y_{\cdot,h,w,(gC/G+1):(g+1)C/G}\times\gamma+\beta \end{aligned} Eng[X]Varng[X]Y,h,w,(gC/G+1):(g+1)C/GZ,h,w,(gC/G+1):(g+1)C/G=(C/G)HW1c=gC/G+1(g+1)C/Gh=1Hw=1WX,h,w,c=(C/G)HW1c=gC/G+1(g+1)C/Gh=1Hw=1W(X,h,w,cEng[X])2=Varng[X]+ϵ X,h,w,(gC/G+1):(g+1)C/GEng[X]=Y,h,w,(gC/G+1):(g+1)C/G×γ+β
其中, g ∈ N , g = 0 , . . . , G − 1 g\in\mathbb{N},g=0,...,G-1 gN,g=0,...,G1。可以发现,当 G G G等于1时,其等价于层归一化;当 G = C G=C G=C时,其等价于实例归一化。

权重归一化

权重归一化 (Weight Normalization) 将权值 w w w分为一个方向分量 v v v和一个范数分量 g g g,使用优化器分别优化这两个参数,如下所示:
w = g ∣ ∣ v ∣ ∣ v w=\frac g{||v||}\boldsymbol{v} w=∣∣v∣∣gv
其中 v v v是与 w w w同维度的向量, ∥ v ∥ \|v\| v是欧式范数,因此 v v v决定了 w w w的方向。 g g g是标量,决定了 w w w的长度。由于 ∥ w ∥ = ∣ g ∣ \|w\|=|g| w=g,因此这一权重分解的方式将权重向量的欧氏范数进行了固定,从而实现了正则化的效果。

优化方向分量:
∇ g L = ∇ w L ⋅ v ∣ ∣ v ∣ ∣ \nabla_gL=\frac{\nabla_wL\cdot v}{||v||} gL=∣∣v∣∣wLv
优化范数分量:
∇ v L = g ∣ ∣ v ∣ ∣ ∇ w L − g ∇ g L ∣ ∣ v ∣ ∣ 2 v \nabla_vL=\frac g{||v||}\nabla_wL-\frac{g\nabla_gL}{||v||^2}v vL=∣∣v∣∣gwL∣∣v2ggLv
权重归一化的归一化操作作用在了权值矩阵上,它可以带来更快的收敛速度,更强的学习率鲁棒性,能应用在循环神经网络等动态网络中。并且它与样本量无关,所以可以使用较小的批大小。但是权重归一化并没有对得到的特征范围进行约束的功能,所以对参数的初始值非常敏感。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 层次式架构设计理论与实践
  • kafka 案例
  • 一步步实现知乎热榜采集:Scala与Sttp库的应用
  • PostgreSQL 教程
  • 研二学妹面试字节,竟倒在了ThreadLocal上,这是不要应届生还是不要女生啊?
  • 【MySQL精通之路】InnoDB存储引擎
  • 前端开发实用工具网站(持续更新中)
  • 结构型设计模式之装饰模式
  • Web安全技术期末考查-vulhub靶场搭建及漏洞复现
  • 类和对象03
  • 1.int 与 Integer 的简单区别
  • AIGC行业的发展前景与市场需求
  • 软件3班20240527
  • day52
  • 利用element实现简单右键
  • 2019年如何成为全栈工程师?
  • Akka系列(七):Actor持久化之Akka persistence
  • Docker入门(二) - Dockerfile
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Kibana配置logstash,报表一体化
  • magento2项目上线注意事项
  • Netty 4.1 源代码学习:线程模型
  • PV统计优化设计
  • Redis在Web项目中的应用与实践
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Twitter赢在开放,三年创造奇迹
  • yii2中session跨域名的问题
  • 从setTimeout-setInterval看JS线程
  • 给github项目添加CI badge
  • 记一次用 NodeJs 实现模拟登录的思路
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 使用Swoole加速Laravel(正式环境中)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 学习ES6 变量的解构赋值
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​比特币大跌的 2 个原因
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #Linux(帮助手册)
  • #QT 笔记一
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (3)llvm ir转换过程
  • (LLM) 很笨
  • (pytorch进阶之路)扩散概率模型
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • *** 2003
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .Net Core 中间件与过滤器
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 反射的使用
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)