深度学习系列三——优化篇之参数初始化,数据预处理,逐层归一化(BN+LN+WN+GN),超参数优化

1、参数初始化

\quad \quad 神经网络的参数学习是一个非凸优化问题.当使用梯度下降法来进行优化网络参数时,参数初始值的选取十分关键,关系到网络的优化效率和泛化能力.

\quad \quad 不同的参数初始值会收敛到不同的局部最优解.虽然这些局部最优解在训练集上的损失比较接近,但是它们的泛化能力差异很大.一个好的初始值会使得网络收敛到一个泛化能力高的局部最优解。

\quad \quad 参数初始化的方式通常有以下三种:

1.1 预训练初始化:

\quad \quad 通常情况下,一个已经在大规模数据上训练过的模型可以提供一个好的参数初始值,这种初始化方法称为预训练初始化(Pre-trained Initialization)。【 预训练初始化通常会提升模型泛化能力的一种解释是预训练任务起到一定的正则化作用.】
\quad \quad 预训练任务可以为监督学习或无监督学习任务.由于无监督学习任务更容易获取大规模的训练数据,因此被广泛采用。预训练模型在目标任务上的学习过程也称为精调(Fine-Tuning)。

1.2 固定值初始化:

\quad \quad 对于一些特殊的参数,我们可以根据经验用一个特殊的固定值来进行初始化。比如偏置(Bias)通常用 0 来初始化,但是有时可以设置某些经验值以提高优化效率.在 LSTM 网络的遗忘门中,偏置通常初始化为 1 或2,使得时序上的梯度变大。对于使用ReLU的神经元,有时也可以将偏置设为0.01,使得 ReLU 神经元在训练初期更容易激活,从而获得一定的梯度来进行误差反向传播。

1.3 随机初始化:

\quad \quad 在线性模型的训练(比如感知器和Logistic回归)中,我们一般将参数全部初始化为 0。但是这在神经网络的训练中会存在一些问题. 因为如果参数都为 0,在第一遍前向计算时,所有的隐藏层神经元的激活值都相同;在反向传播时,所有权重的更新也都相同,这样会导致隐藏层神经元没有区分性。这种现象也称为对称权重现象。为了打破这个平衡,比较好的方式是对每个参数都随机初始化(Random Initialization),使得不同神经元之间的区分性更好.

\quad \quad 虽然预训练初始化通常具有更好的收敛性和泛化性,但是灵活性不够,不能在目标任务上任意地调整网络结构.因此,构建神经网络模型时,一般会采用随机初始化方法。 随机初始化通常只应用在神经网络的权重矩阵上。三类常用的随机初始化方法:基于固定方差的参数初始化、基于方差缩放的参数初始化和正交初始化方法.

1.3.1 基于固定方差的参数初始化

\quad \quad 一种最简单的随机初始化方法是从一个固定均值(通常为 0)和固定方差 σ 2 \sigma^2 σ2 的分布中采样来生成参数的初始值。基于固定方差的参数初始化方法主要有以下两种:
\quad \quad (1) 高斯分布初始化:使用一个高斯分布𝒩(0, σ 2 \sigma^2 σ2)对每个参数进行随机初始化.
\quad \quad (2) 均匀分布初始化:在一个给定的区间[−𝑟, 𝑟]内采用均匀分布来初始化参数。假设随机变量𝑥在区间[𝑎, 𝑏]内均匀分布,则其方差为
v a r ( x ) = ( b − a ) 2 12 var(x)= \frac{(b-a)^2}{12} var(x)=12(ba)2
因此,若使用区间为 [−𝑟, 𝑟] 的均分分布来采样,并满足 v a r ( x ) = σ 2 var(x)=\sigma^2 var(x)=σ2 时,则 v a r ( x ) = ( r − ( − r ) ) 2 12 = r 2 3 = σ 2 var(x)=\frac{(r-(-r))^2}{12}=\frac{r^2}{3}=\sigma^2 var(x)=12(r(r))2=3r2=σ2
可得𝑟的取值为 3 σ 2 \sqrt{3\sigma^2} 3σ2

\quad \quad 在基于固定方差的随机初始化方法中,比较关键的是如何设置方差 σ 2 \sigma^2 σ2。如果参数范围取的太小,一是会导致神经元的输出过小,经过多层之后信号就慢慢消失了;二是还会使得 Sigmoid 型激活函数丢失非线性的能力。以 Sigmoid 型函数为例,在0附近基本上是近似线性的。这样多层神经网络的优势也就不存在了。如果参数范围取的太大,会导致输入状态过大。对于 Sigmoid 型激活函数来说,激活值变得饱和,梯度接近于0,从而导致梯度消失问题.为了降低固定方差对网络性能以及优化效率的影响,基于固定方差的随机初始化方法一般需要配合逐层归一化来使用。

1.3.2 基于方差缩放的参数初始化

\quad \quad 要高效地训练神经网络,给参数选取一个合适的随机初始化区间是非常重要的。一般而言,参数初始化的区间应该根据神经元的性质进行差异化的设置。如果一个神经元的输入连接很多,它的每个输入连接上的权重就应该小一些,以避免神经元的输出过大(当激活函数为 ReLU 时)或过饱和(当激活函数为Sigmoid函数时)。
\quad \quad 初始化一个深度网络时,为了缓解梯度消失或爆炸问题,我们尽可能保持每个神经元的输入和输出的方差一致,根据神经元的连接数量来自适应地调整初始化分布的方差,这类方法称为方差缩放(Variance Scaling)。

1.3.2.1 Xavier初始化

Xavier初始化根据每层的神经元数量来自动计算初始化参数方差。

在这里插入图片描述
在这里插入图片描述
数学知识:
假设随机变量X和随机变量Y相互独立,且E(X)=E(Y)=0,则有
v a r ( X Y ) = v a r ( X ) v a r ( Y ) var(XY)=var(X)var(Y) var(XY)=var(X)var(Y)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.2.2 He初始化

在这里插入图片描述
在这里插入图片描述

1.3.3 正交初始化

\quad \quad 上面介绍的两种基于方差的初始化方法都是对权重矩阵中的每个参数进行独立采样。由于采样的随机性,采样出来的权重矩阵依然可能存在梯度消失或梯度爆炸问题。

\quad \quad 假设一个𝐿层的等宽线性网络(激活函数为恒等函数)为
y = W ( L ) W ( L − 1 ) . . . W ( 1 ) x y=W^{(L)}W^{(L-1)}...W^{(1)}x y=W(L)W(L1)...W(1)x

其中 W ( l ) ∈ R M ∗ M W^{(l)}\in R^{M*M} W(l)RMM为神经网络的第 𝑙 层权重矩阵。在反向传播中, 误差项𝛿 的反向传播公式为 δ ( l − 1 ) = ( W ( l ) ) T δ ( l ) \delta^{(l-1)}=(W^{(l)})^T\delta^{(l)} δ(l1)=(W(l))Tδ(l)。为了避免梯度消失或梯度爆炸问题,误差项应在反向传播中具有范数保持性(Norm-Preserving),即:
∣ ∣ δ ( l − 1 ) ∣ ∣ 2 = ∣ ∣ δ ( l ) ∣ ∣ 2 = ∣ ∣ ( W ( l ) ) T δ ( l ) ∣ ∣ 2 ||\delta^{(l-1)}||^2=||\delta^{(l)}||^2=||(W^{(l)})^T\delta^{(l)}||^2 δ(l1)2=δ(l)2=(W(l))Tδ(l)2
若以均值为0、方差为 1 M \frac1M M1的高斯分布来随机生成权重矩阵 W ( l ) W^{(l)} W(l)中每个元素的初始值,那么当M趋于无穷时,范数保持性成立,但是当M不足够大时,这种对每个参数进行独立采样的初始化方式难以保证范数保持性。

\quad \quad 因此,一种直接的方式是将 W ( l ) W^{(l)} W(l) 初始化为正交矩阵,即 W ( l ) ( W ( l ) ) T = I W^{(l)}( W^{(l)})^T=I W(l)(W(l))T=I ,这种方法称为正交初始化,正交初始化的具体实现过程可以分为两步:

1、用均值为0、方差为1的高斯分布初始化一个矩阵。
2、将这个矩阵用奇异值分解得到两个正交矩阵,并使用其中一个作为权重矩阵。
  根据正交矩阵的性质,这个线性网络在信息的前向传播和反向传播中,都具有范数保持性,从而可以避免在训练时就出现梯度消失和梯度爆炸。
  在非线性神经网络中使用正交化初始时,通常需要将正交矩阵乘以一个缩放系数 ρ \rho ρ。当激活函数为ReLU时,激活函数在0附近的平均梯度可以近似为0.5,为了保持范数不变,缩放系数 ρρ 可以设置为 2 \sqrt{2} 2

2、数据预处理

数据预处理在众多深度学习算法中都起着重要作用,通常所讲的预处理包括数据归一化白化。以下分别对数据归一化和白化进行说明。

2.1 归一化处理

归一化(Normalization)方法泛指把数据特征转换为相同尺度的方法,比如把数据特征映射到[0, 1]或[−1, 1]区间内,或者映射为服从均值为0、方差为1的标准正态分布.归一化的方法有很多种,比如之前我们介绍的 Sigmoid型函数等都可以将不同尺度的特征挤压到一个比较受限的区间.这里,我们介绍几种在神经网络中经常使用的归一化方法。
在这里插入图片描述
在这里插入图片描述

2.2 白化处理

白化(Whitening)是一种重要的预处理方法。

白化一般包含两个目的:
(1)去除特征之间的相关性 —> 独立;

(2)使得所有特征具有相同的均值和方差 —> 同分布。

白化的一个主要实现方式是使用主成分分析(Principal Component Analysis,PCA)方法去除掉各个成分之间的相关性.

在这里插入图片描述

3、逐层归一化

\quad \quad 逐层归一化(Layer-wise Normalization) 是将传统机器学习中的数据归一化方法应用到深度神经网络中,对神经网络中隐藏层的输入进行归一化,从而使得网络更容易训练。

深层神经网络中为什么要做逐层归一化?

1、使模型拥有更好的尺度不变性,从而更高效地进行参数初始化以及超参选择。

\quad \quad 在深层神经网络中,当前层的输入是上一层的输出,因此之前层参数的变化对后续层的影响比较大,就像一栋高楼,低层很小的变化就会影响到高层。

\quad \quad 从机器学习的角度去看,如果某个神经网络层的输入参数发生了变化,那么其参数需要重新学习,这种现象叫做内部协变量偏移(Internal Covariate Shift)
\quad \quad 为了解决内部协变量偏移问题,需要对每一个神经层的输入做归一化,这样就可以使得每个神经层对其输入具有更好的尺度不变性。
2、使模型拥有更平滑的优化地形,提高收敛速度。

\quad \quad 逐层归一化一方面可以使得大部分神经层的输入
处于不饱和区域,从而让梯度变大,避免梯度消失问题;另一方面还可以使得神经网络的优化地形(Optimization Landscape)更加平滑,以及使梯度变得更加稳定,从而允许我们使用更大的学习率,并提高收敛速度

\quad \quad 下面介绍几种常见的逐层归一化方法:

  • 批量归一化
  • 层归一化

3.1 批量归一化(Batch Normalization,BN)

\quad \quad 批量归一化(Batch Normalization)是对神经层中单个神经元进行归一化。
\quad \quad 为了减少内部协变量偏移的影响,需要对神经网络每一层的净输入 z l z^l zl进行归一化,相当于每一层都要做一次数据预处理,从而加快收敛速度,但是因为对每一层都进行操作,所以要求归一化的效率要很高,一般使用标准归一化,将净输入 z l z^l zl的每一维都归一到标准正态分布,其公式如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 层归一化(Layer Normalization,LN)

层归一化是对一个中间层的所有神经元进行
归一化。
在这里插入图片描述
\quad \quad 层归一化和批量归一化整体上是十分类似的,差别在于归一化的方法不同.对于 𝐾 个样本的一个小批量集合 𝒁(𝑙) = [𝒛(1,𝑙); ⋯ ; 𝒛(𝐾,𝑙)],层归一化是对矩阵𝒁(𝑙) 的每一列进行归一化,而批量归一化是对每一行进行归一化.一般而言,批量归一化是一种更好的选择.当小批量样本数量比较小时,可以选择层归一化。

3.3 权重归一化(Weight Normalization,WN)

\quad \quad 权重归一化是对神经网络的连接权重进行归一化,通过再参数化方法,将连接权重分解为长度和方向两种参数。

假设第 l l l层神经元 a ( l ) = f ( W a ( l − 1 ) + b ) a^{(l)}=f(Wa^{(l-1)}+b) a(l)=f(Wa(l1)+b)

将W再参数化为 W i , : = g i ∣ ∣ v i ∣ ∣ v i , 1 ≤ i ≤ M l W_{i,:}=\frac{g_i}{||v_i||}v_i,\quad \quad 1\leq i \leq M_l Wi,:=vigivi,1iMl

其中, W i , : W_{i,:} Wi,:表是权重的第 i i i行, M l M_l Ml为神经元数量,新引入的参数 g i g_i gi为标量, v i v_i vi a l − 1 a^{l-1} al1维数相同。

由于在神经网络中权重经常是共享的,权重数量往往比神经元数量要少,因此权重归一化的开销会比较小.

3.4 局部响应归一化 (Local Response Normalization,LRN)

\quad \quad 局部响应归一化,是一种受生物学启发的归一化方法,通常用在基于卷积的图像处理上。
在这里插入图片描述

4、超参数优化

\quad \quad 参数:指根据输入的数据,通过学习过程得到的变量。
\quad \quad 超参数:人为地根据经验设定的变量。

\quad \quad 神经网络中常见的超参数有以下三类:
(1) 网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型等.
(2) 优化参数,包括优化方法、学习率、小批量的样本数量等.
(3) 正则化系数.

\quad \quad 超参数优化较困难的两点:
1) 超参数优化是一个组合优化问题,无法像一般参数那样通过梯度下降方法来优化,也没有一种通用有效的优化方法;
2)评估一组超参数配置(Configuration)的时间代价非常高,从而导致一些优化方法(比如演化算法(Evolution Algorithm))在超参数优化中难以应用.

对于超参数的配置,比较简单的方法有网格搜索、随机搜索、贝叶斯优化、动态资源分配和神经架构搜索。

4.1 网格搜索

\quad \quad 网格搜索(Grid Search)是一种通过尝试所有超参数的组合来寻址合适一组超参数配置的方法.假设总共有𝐾 个超参数,第𝑘个超参数的可以取 m k m_k mk个值.那么总共的配置组合数量为 m 1 ∗ m 2 ∗ . . . ∗ m k m_1*m_2*...*m_k m1m2...mk。如果超参数是连续的,可以将超参数离散化,选择几个“经验”值.比如学习率𝛼,我们可以设置𝛼 ∈ {0.01, 0.1, 0.5, 1.0}.
一般而言,对于连续的超参数,我们不能按等间隔的方式进行离散化,需要根据超参数自身的特点进行离散化.

\quad \quad 网格搜索根据这些超参数的不同组合分别训练一个模型,然后测试这些模型在开发集上的性能,选取一组性能最好的配置。

4.2 随机搜索

\quad \quad 随机搜索是对超参数进行随机组合,然后选取一个性能最好的配置。

\quad \quad 随机搜索在实践中更容易实现,一般会比网格搜索更加有效。

\quad \quad 网格搜索和随机搜索都没有利用不同超参数组合之间的相关性,即如果模型的超参数组合比较类似,其模型性能也是比较接近的。 因此这两种搜索方式一般都比较低效.下面我们介绍两种自适应的超参数优化方法:贝叶斯优化和动态资源分配。

4.3 贝叶斯优化

\quad \quad 贝叶斯优化(Bayesian optimization)是一种自适应的超参数优化方法,根据当前已经试验的超参数组合,来预测下一个可能带来最大收益的组合。

\quad \quad 一种比较常用的贝叶斯优化方法为时序模型优化。假设超参数优化的函数 f ( x ) f(x) f(x)服从高斯过程,则 p ( f ( x ) ∣ x ) p(f(x)|x) p(f(x)x)为一个正态分布。贝叶斯优化过程是根据已有的N组实验结果 H = { x n , y n } n = 1 N H=\{x_n,y_n\}_{n=1}^N H={xn,yn}n=1N( y n y_n yn f ( x n ) f(x_n) f(xn)的观测值)来建模高斯过程,并计算 f ( x ) f(x) f(x)的后验分布 P g p ( f ( x ) ∣ x , H ) P_{gp}(f(x)|x,H) Pgp(f(x)x,H)

\quad \quad 为了使得 P g p ( f ( x ) ∣ x , H ) P_{gp}(f(x)|x,H) Pgp(f(x)x,H)接近其真实分布,就需要对样本空间进行足够多的采样。但是超参数优化中每一个样本的生成成本很高,需要用尽可能少的样本来使得 P θ ( f ( x ) ∣ x , H ) P_{\theta}(f(x)|x,H) Pθ(f(x)x,H)接近其真实分布。故定义一个收益函数a(x,H) 俩判断一个样本能否给
建模 P θ ( f ( x ) ∣ x , H ) P_{\theta}(f(x)|x,H) Pθ(f(x)x,H)提供更多收益。收益越大,修正的高斯过程越接近目标函数的真实分布。

时序模型优化方法算法如下:

在这里插入图片描述
\quad \quad 期望改善是定义收益函数的一种方式,并且常用,定义如下:
\quad \quad 假设 y ∗ = m i n { y n , 1 ≤ n ≤ N } y^{*}=min\{y_n,1\leq n\leq N\} y=min{yn,1nN}是当前样本最优值,期望改善函数为:

E I ( x , H ) = ∫ − ∞ ∞ m a x ( y ∗ − y , 0 ) P g p ( f ( x ) ∣ x , H ) d y EI(x,H)=\int_{- \infty}^{\infty}max(y^*-y,0)P_{gp}(f(x)|x,H)dy EI(x,H)=max(yy,0)Pgp(f(x)x,H)dy

\quad \quad 期望改善是定义一个样本 x 在当前模型 P g p ( f ( x ) ∣ x , H ) P_{gp}(f(x)|x,H) Pgp(f(x)x,H)下, f ( x ) f(x) f(x)超过最好结果 y ∗ y^* y 的期望。
\quad \quad 收益函数还有其他定义形式:改善概率、高斯过程置信上界。

\quad \quad 贝叶斯优化缺点:高斯建模要计算协方差矩阵的逆,时间复杂度 O ( N 3 ) O(N^3) O(N3),不能很好处理高维情况。高效的高斯过程建模方法,可将时间复杂度从 O ( N 3 ) O(N^3) O(N3)降低到 O ( N ) O(N) O(N)

4.4 动态资源分配

\quad \quad 在超参数优化中,每组超参数配置的评估代价比较高。如果我们可以在较早的阶段就估计出一组配置的效果会比较差,那么我们就可以中止这组配置的评估,将更多的资源留给其他配置。 这个问题可以归结为多臂赌博机问题的一个泛化问题:最优臂问题(Best-Arm Problem),即在给定有限的机会次数下,如何玩这些赌博机并找到收益最大的臂。和多臂赌博机问题类似,最优臂问题也是在利用和探索之间找到最佳的平衡。

\quad \quad 由于目前神经网络的优化方法一般都采取随机梯度下降,因此我们可以通过一组超参数的学习曲线来预估这组超参数配置是否有希望得到比较好的结果。如果一组超参数配置的学习曲线不收敛或者收敛比较差,我们可以应用早期停止(Early-Stopping)策略来中止当前的训练。

\quad \quad 动态资源分配的关键是将有限的资源分配给更有可能带来收益的超参数组合。一种有效方法是逐次减半(Successive Halving)方法,将超参数优化看作一种非随机的最优臂问题。假设要尝试 𝑁 组超参数配置,总共可利用的资源预算(摇臂的次数)为𝐵,我们可以通过

在这里插入图片描述

轮逐次减半的方法来选取最优的配置,具体过程如算法7.2所示。

在这里插入图片描述
\quad \quad 在逐次减半方法中,尝试的超参数配置数量𝑁 十分关键。如果𝑁 越大,得到最佳配置的机会也越大,但每组配置分到的资源就越少,这样早期的评估结果可能不准确。反之,如果 𝑁 越小,每组超参数配置的评估会越准确,但有可能无法得到最优的配置。因此,如何设置 𝑁 是平衡“利用-探索”的一个关键因素.一种改进的方法是HyperBand方法[Li et al., 2017b],通过尝试不同的𝑁 来选取最优参数。

4.5 神经架构搜索

\quad \quad 前面四种超参数优化方法都是在固定(或变化比较小)的超参数空间 𝒳中进行最优配置搜索,而最重要的神经网络架构一般还是需要由有经验的专家来进行设计。

\quad \quad 神经架构搜索是一个新的比较有前景的研究方向,通过神经网络来自动实现网络架构的设计。一个神经网络的架构可以用一个变长的字符串来描述.利用元学习的思想,神经架构搜索利用一个控制器来生成另一个子网络的架构描述。控制器可以由一个循环神经网络来实现。控制器的训练可以通过强化学习来完成,其奖励信号为生成的子网络在开发集上的准确率。

参考资料:
神经网络与机器学习

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值