Xavier Glorot参数初始化: 理解训练Deep DNN的难点

2023-12-25 05:08

本文主要是介绍Xavier Glorot参数初始化: 理解训练Deep DNN的难点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 0 先前初始化方法
    • 随机初始化权重
    • 选择合适的权重初始值
  • 1 深度神经网络
  • 2 实验环境和数据集
    • 在线学习无限数据集:Shapeset-3 x 2
    • 有限数据集
    • 实验环境
  • 3 训练过程激活函数和饱和的影响
    • Sigmoid实验
    • Tanh实验
    • Softsign实验
  • 4 研究梯度及其传播
    • 损失函数影响
    • 梯度传播研究
    • 学习过程中的后向传播梯度
  • 5 误差曲线与结论

Reference
1. Understanding the difficulty of training deep feedforward neural networks


0 先前初始化方法

随机初始化权重

初始化策略唯一确知的特性是,初始参数需在不同单元间“破坏对称性”。若具有相同激活函数的两个隐藏单元连接到相同输入,如果它们具有相同的初始参数,应用到确定性损失和确定性的学习算法,它们的参数将一直以相同的方式更新。

我们期望不同神经单元计算不同的函数,如隐藏层的参数矩阵为 W W W,隐藏层输入为 x x x,而隐藏层输出为 W x Wx Wx,为保证各隐藏单元对应函数不同,我们需要使得 W W W的行向量具有区分性。

例如,若隐藏层的输入和输出维度相同,可将权重矩阵初始化为正交矩阵,使得每个单元计算不同的函数。通常情况下,每个单元的偏置随机设置启发式常数,如0初始化,此外对于使用ReLU激活函数的网络,为避免激活初始饱和,也可初始化偏置为较小正值如0.1。权重多使用高斯或均匀分布初始化(两者似乎不会有太大区别)

选择合适的权重初始值

随机初始化权重越大越能破坏对称性,然而初始化权重太大,则可能会使前向传播和反向传播中产生爆炸的值(梯度截断解决),也可能会使单元陷入饱和区,导致梯度消失。

一种初始化m维输入和n维输出的全连接层权重是从均匀分布 U ( − 1 m , 1 m ) U(-\frac{1}{\sqrt{m}},\frac{1}{\sqrt{m}}) U(m 1,m 1)中采样,而Glorot and Bengio (2010)建议使用标准化
W i , j ∼ U ( − 6 m + n , 6 m + n ) W_{i,j}\sim U\left(-\sqrt{\frac{6}{m+n}}, \sqrt{\frac{6}{m+n}}\right) Wi,jU(m+n6 ,m+n6 )

Glorot Uniform初始化所有层,折衷于使其具有相同激活方差和相同梯度方差之间(假设网络不含非线性链式矩阵乘法)。

Saxe et al. (2013)推荐初始化为随机正交矩阵,仔细挑选负责每一层非线性缩放或增益因子g,从而得到用于不同类型的非线性激活函数的特定缩放因子,保证达到收敛所需的训练迭代总数独立于深度。


许多实验表明,深度网络比浅层网络更有优势,但在2006年以前,深度网络难以训练,后来一些算法通过改进初始化方法或训练机制,使得深度网络得以训练。这里我们的目标是更好理解,为何使用标准随机梯度下降难以优化参数随机初始化的深度网络?为何最近的一些算法能够训练深度网络?

我们发现,由于sigmoid激活函数均值影响,它会将顶层隐藏层推向饱和(非线性单元饱和较少时往往更有益),因此不适合作为参数随机初始化网络的激活函数。有时饱和单元能够在训练时自行缓慢地离开饱和区,我们解释了有时训练神经网络会看到训练停滞的原因。

本文研究了网络训练时激活函数和梯度在不同层之间的变化,当每一层Jacobian奇异值远小于1时,训练会非常困难。基于以上考虑,我们提出了新型初始化方案,使得训练能够更快收敛。

1 深度神经网络

深度学习方法旨在从低层次特征中学习高层次特征,学习方法不限于:包含多层隐藏层的神经网络、包含多层级隐变量的图模型等。由于这些方法的理论性需求(多受启发于生物学和人类认知),以及其在视觉领域实验成功,目前受到较多关注。也有学者实证,学习高层抽象表征的复杂函数时,往往需要深度架构

近些年,深度架构的实验结果多来自于可转变为深度监督神经网络的一些模型,但采用的初始化、训练方案不同于经典前馈神经网络。为何这些新颖的算法优于参数使用标准随机初始化并基于梯度优化的监督训练准则?

从对无监督预训练的影响分析可知,作为正则项将参数初始化于一个具有吸引优化程序的“盆地”,其局部极小点具有更好泛化能力。但早期工作表明,即使是一个纯监督、分层程序,也可以取得较好结果。因此,我们不讨论这些算法到底带给了深度网络什么,而是讨论旧的深度网络可能出现的问题。

本文,我们分析训练阶段激活和梯度值在不同层和不同迭代时的变化,同时也评估选择不同激活函数和初始化程序(无监督预训练具有独特的初始化形式)的影响。

2 实验环境和数据集

在线学习无限数据集:Shapeset-3 x 2

研究表明,即使在大训练集,或在线学习下,使用无监督预训练模型参数对模型参数初始化,依然能够获得潜在提升。在线学习关注于优化问题本身,而不是小样本正则化的影响。我们从合成图片数据集Shapeset-3 x 2中采样样本,测试在线学习场景。

有限数据集

  • MNIST digits: 50000训练集、10000验证集和10000测试集,28 x 28灰度,10类别。
  • CIFAR-10: 50000训练集、10000测试集,32 x 32 x 3彩色,10类别。
  • Small-ImageNet: 90000训练集、10000验证集、10000测试集,37 x 37灰度,

实验环境

使用具有1到5层隐藏层的神经网络,隐藏层大小为1000,输出层使用softmax,损失函数使用负对数似然。优化函数使用SGD,mini-batch大小是10。验证隐藏层非线性激活函数:sigmoid、tanh、softsign。

我们搜索学习率和网络深度最优超参数,Shapeset-3 x 2数据集在不同激活函数下的最优深度均为5,使用标准随机初始化方法,初始化每一层的偏置和权重:
W i j ∼ U [ − 1 n , 1 n ] (1) W_{ij}\sim U\left[-\frac{1}{\sqrt n},\frac{1}{\sqrt n}\right] \tag1 WijU[n 1,n 1](1)
式中, U [ − a , a ] U[-a, a] U[a,a]是区间 ( − a , a ) (-a,a) (a,a)上的一致分布, n n n是前一层网络的大小(权重矩阵的列数)。

3 训练过程激活函数和饱和的影响

我们想要避免两件事情(可从激活值演变中揭示):一件是激活函数单方面过饱和(信息无法传播),另一件是单元过线性(不进行任何计算,线性网络拟合能力很弱)。

Sigmoid实验

已证明sigmoid激活函数会减慢学习速度,因为其非零均值会在Hessian矩阵中引入重要奇异值。此处,我们从另一个角度观察深度网络使用sigmoid激活函数的症状。

图2为使用sigmoid作为激活函数的深度网络中,固定300个测试样本在每层网络的激活均值和方差在不同迭代步的变化。
在这里插入图片描述
训练开始时,最后一层隐藏层所有sigmoid激活值均被推向低饱和区0,相反,其他隐藏层激活均值在0.5以上,而且从输出层到输入层逐渐减小。

在使用sigmoid激活函数的深度网络中,这种饱和状态会持续相当长的时间。特别地,当网络深度为5的时候,网络无法逃离饱和区,而当深度为4时,网络可以逃离饱和区(图2),与此同时,顶层输出层离开饱和区,而第一层输出层开始进入饱和区,并且保持稳定。

我们假设这种现象由随机初始化使得隐藏单元输出0(位于饱和区)造成,使用预训练模型参数进行初始化不会遭受这种饱和反应。参考假设条件,我们解释是:底层网络的随机初始化值对计算分类任务无任何作用

初始时刻输出层 softmax ( b + W h ) \text{softmax}(b+Wh) softmax(b+Wh),相比通过输入 x x x得到的顶层激活值 h h h而言(输入 x x x不定,初始 h h h变化大),更加依赖于偏置 b b b(可以更快地学习)。因此,误差梯度倾向于将 W h Wh Wh推向0,即 h h h推向0。

对称激活函数tanh、softsign输出0时梯度可有效后传,而sigmoid函数输出0时位于饱和区,后传梯度很小,浅层网络参数无法有效更新。训练过程中,顶层隐藏层缓慢离开饱和区,而浅层隐藏层逐渐得到有效更好,学习有用特征。

Tanh实验

由于双曲正切是以0为对称轴的对称函数,初始时刻不会遭受如sigmoid激活函数在顶层隐藏层的饱和现象。然而,若使用式(1)初始化权重,我们观察到训练过程中,从第一层逐渐向上,各隐藏层输出逐渐移至饱和区。
在这里插入图片描述

Softsign实验

在这里插入图片描述
softsign与tanh相似,但饱和方面表现不同,因为softsign具有平滑渐近线(多项式代替指数)。如图3下图所示,训练过程中,softsign并未出现如tanh一样的饱和现象,初始阶段权重更新很快,并逐渐减慢,最终所有层权重移至更大值。

在这里插入图片描述

图4所示,训练结束时,softsign激活值与tanh激活值的分布具有很大不同。tanh激活值分布极端,多集中在-1和1,或者0附近;而softsign激活值多集中在线性区0、平坦区-1和1之间梯度可以很好流动的非线性区

4 研究梯度及其传播

损失函数影响

逻辑回归或条件交叉熵损失函数优于传统训练前馈神经网络的二次损失,使用交叉熵损失,训练过程中很少出现停滞。
在这里插入图片描述

对于使用对称、0处具有单位导数激活函数的密度神经网络,我们定义 z i z^i zi s i s^i si分别表示第 i i i层网络的激活值和激活函数的参数向量,即 s i = z i W i + b i \bm s^i=\bm z^iW^i+\bm b^i si=ziWi+bi z i + 1 = f ( s i ) \bm z^{i+1}=f(\bm s^i) zi+1=f(si),因此
∂ C o s t ∂ s k i = f ′ ( s k i ) W k , ∙ i + 1 ∂ C o s t ∂ s i + 1 ∂ C o s t ∂ w l , k i = z l i ∂ C o s t ∂ s k i (2,3) \frac{\partial Cost}{\partial s_k^i}=f'(s_k^i)W_{k,\bullet}^{i+1}\frac{\partial Cost}{\partial \bm s^{i+1}}\\[1ex] \tag{2,3} \frac{\partial Cost}{\partial w_{l,k}^i}=z_l^i\frac{\partial Cost}{\partial s^i_k} skiCost=f(ski)Wk,i+1si+1Costwl,kiCost=zliskiCost(2,3)
方差将根据输入、输出和初始权重任意表示,假设权重参数初始化位于线性区域,权重参数初始化独立,输入特征的方差相同。因此,对于输入为 x x x、第 i i i层隐藏层单元数为 n i n_i ni的网络:
f ′ ( s k i ) ≈ 1 V a r [ z i ] = V a r [ x ] ∏ i ′ = 0 i − 1 n i ′ V a r [ W i ′ ] (4,5) f'(s_k^i)\approx 1\\[1ex] Var[z^i]=Var[x]\prod_{i'=0}^{i-1}n^{i'}Var[W^{i'}] \tag{4,5} f(ski)1Var[zi]=Var[x]i=0i1niVar[Wi](4,5)

当权重参数与输入独立时
V a r [ Y ] = V a r [ W 1 X 1 + ⋯ + W n X n ] = V a r [ W 1 X 1 ] + ⋯ + V a r [ W n X n ] = n V a r [ W i ] V a r [ X i ] Var[Y]=Var[W_1X_1+\cdots+W_nX_n]=Var[W_1X_1]+\cdots+Var[W_nX_n]=nVar[W_i]Var[X_i] Var[Y]=Var[W1X1++WnXn]=Var[W1X1]++Var[WnXn]=nVar[Wi]Var[Xi]

若第 i ′ i' i层权重共享标量方差 V a r [ W i ′ ] Var[W^{i'}] Var[Wi],则对于共计包含 d d d层的网络:
V a r [ ∂ C o s t ∂ s k i ] = V a r [ ∂ C o s t ∂ s d ] ∏ i ′ = i d n i ′ + 1 V a r [ W i ′ ] V a r [ ∂ C o s t ∂ w i ] = ∏ i ′ = 0 i − 1 n i ′ V a r [ W i ′ ] ∏ i ′ = i d − 1 n i ′ + 1 V a r [ W i ′ ] × V a r [ x ] V a r [ ∂ C o s t ∂ s d ] (6,7) Var\left[\frac{\partial Cost}{\partial s_k^i}\right]=Var\left[\frac{\partial Cost}{\partial s^d}\right]\prod_{i'=i}^dn_{i'+1}Var[W^{i'}]\\[.5ex] Var\left[\frac{\partial Cost}{\partial w^i}\right]=\prod_{i'=0}^{i-1}n_{i'}Var[W^{i'}]\prod_{i'=i}^{d-1}n_{i'+1}Var[W^{i'}] \times Var[x]Var\left[\frac{\partial Cost}{\partial s^d}\right] \tag {6,7} Var[skiCost]=Var[sdCost]i=idni+1Var[Wi]Var[wiCost]=i=0i1niVar[Wi]i=id1ni+1Var[Wi]×Var[x]Var[sdCost](6,7)
从前后向传播来看,为保持信息流动,希望对于 ∀ ( i , i ′ ) \forall(i,i') (i,i)
V a r [ z i ] = V a r [ z i ′ ] V a r [ ∂ C o s t ∂ s i ] = V a r [ ∂ C o s t ∂ s i ′ ] (8,9) Var[z^i]=Var[z^{i'}]\\[.5ex] Var\left[\frac{\partial Cost}{\partial s^i}\right]=Var\left[\frac{\partial Cost}{\partial s^{i'}}\right] \tag {8,9} Var[zi]=Var[zi]Var[siCost]=Var[siCost](8,9)
对于 ∀ i \forall i i,上述条件转换为
n i V a r [ W i ] = 1 n i + 1 V a r [ W i ] = 1 (10, 11) n_iVar[W^i]=1\\[1ex] n_{i+1}Var[W^i]=1 \tag{10, 11} niVar[Wi]=1ni+1Var[Wi]=1(10, 11)
折中两个条件,对于 ∀ i \forall i i,我们取
V a r [ W i ] = 2 n i + n i + 1 (12) Var[W^i]=\frac{2}{n_i+n_{i+1}} \tag {12} Var[Wi]=ni+ni+12(12)
当所有层具有相同宽度时,公式 ( 12 ) (12) (12)同时满足公式 ( 10 ) (10) (10)和公式 ( 11 ) (11) (11),如果对于所有权重使用相同的初始化,则所有层的权重梯度相同:
V a r [ ∂ C o s t ∂ s i ] = [ v V a r [ W ] ] d − i V a r [ x ] V a r [ ∂ C o s t ∂ w i ] = [ v V a r [ W ] ] d V a r [ x ] V a r [ ∂ C o s t ∂ s d ] (13,14) Var\left[\frac{\partial Cost}{\partial s^i}\right]=\Big[vVar[W]\Big]^{d-i}Var[x] \\[.5ex] Var\left[\frac{\partial Cost}{\partial w^i}\right]=\Big[vVar[W]\Big]^{d}Var[x]Var\left[\frac{\partial Cost}{\partial s^d}\right] \tag{13,14} Var[siCost]=[vVar[W]]diVar[x]Var[wiCost]=[vVar[W]]dVar[x]Var[sdCost](13,14)

此时网络与RNN的梯度传播过程类似(相同矩阵连乘),梯度后向传播过程中会出现梯度消失和爆炸现象。

如果使用公式 ( 1 ) (1) (1)标准初始化参数,则所得方差满足
n V a r [ W ] = 1 3 nVar[W]=\frac{1}{3} nVar[W]=31

式中, n n n表示所有层隐层单元数量,这将导致后向传播方差的大小依赖于网络总层数(层数越多,方差越小)。

由于归一化参数在所有层间具有连乘影响,因此在初始化深度网络的权重参数时,归一化参数非常重要。为满足我们前后向传播过程中期望方差,我们建议使用以下初始化程序(normalized initialization):
W ∼ U [ − 6 n j + n j + 1 , 6 n j + n j + 1 ] (16) W\sim U\left[-\frac{\sqrt 6}{\sqrt {n_j+n_{j+1}}},\frac{\sqrt 6}{\sqrt{n_j+n_{j+1}}}\right] \tag{16} WU[nj+nj+1 6 ,nj+nj+1 6 ](16)

梯度传播研究

为验证上述理论,我们描绘了使用两种不同参数初始化方法得到的激活值、权重梯度和权重后向传播梯度的归一化直方图,图6-8所示为数据集Shapeset-3 x 2对应的结果(其他数据集结果类似)。

我们监测与第 i i i层网络相关的Jacobian矩阵的奇异值:
J i = ∂ z i + 1 ∂ z i J^i=\frac{\partial \bm z^{i+1}}{\partial \bm z^i} Ji=zizi+1

当连续层具有相同隐藏层单元数,平均奇异值与从映射 z i \bm z^i zi z i + 1 \bm z^{i+1} zi+1无穷小的平均比值、从映射 z i \bm z^i zi z i + 1 \bm z^{i+1} zi+1的平均激活方差相关。使用本文提出的初始化方案,比率大约为0.8,使用标准初始化方案,则降至0.5。

在这里插入图片描述

学习过程中的后向传播梯度

神经网络的学习动态复杂,由于权重值不再独立于激活值,以及违反线性假设,我们不能使用如前所述的理论假设用于简化方差计算。

从图7可看出,使用标准初始化方案,训练初始阶段的后向传播梯度在向下传播时逐渐减小,但在训练过程中很快逆转,而使用本文提出的权重初始化方案,没有这种后向梯度减小的现象。
在这里插入图片描述
使用标准初始化方案即使后向传播权重梯度变小,但是权重梯度方差在各层之间大致恒定,如图8所示。公式 ( 10 ) (10) (10)可解释这一现象。
在这里插入图片描述
如图9所示,使用标准初始化和归一化初始化的权重梯度上在训练过程中发生了改变。实际上,尽管最初梯度相同,但在训练过程中逐渐偏离(低层隐藏层具有更大梯度),使用标准初始化的网络更加明显。
在这里插入图片描述
不同层之间权重梯度保持稳定可能是归一化初始化的优势之一,因为不同层之间如果具有非常不同的梯度大小,可能产生病态条件、训练缓慢。最终,我们看到softsign网络与使用归一化初始化的tanh网络相似,如图3下图和图10。
在这里插入图片描述

5 误差曲线与结论

训练过程的误差曲线可以很好说明不同策略的优劣,图11为使用不同激活函数的网络在数据Shapeset-3 × 2上在线学习的误差曲线:

在这里插入图片描述
表1给出所有数据集下的测试误差:

在这里插入图片描述

这篇关于Xavier Glorot参数初始化: 理解训练Deep DNN的难点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念