神经网络中的归一化操作

2024-05-24 10:20

本文主要是介绍神经网络中的归一化操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

神经网络中的归一化

文章目录

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

概述

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

归一化(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
权重归一化的归一化操作作用在了权值矩阵上,它可以带来更快的收敛速度,更强的学习率鲁棒性,能应用在循环神经网络等动态网络中。并且它与样本量无关,所以可以使用较小的批大小。但是权重归一化并没有对得到的特征范围进行约束的功能,所以对参数的初始值非常敏感。

这篇关于神经网络中的归一化操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.