神经网络与深度学习--网络优化与正则化

文章目录

  • 前言
  • 一、网络优化
    • 1.1网络结构多样性
    • 1.2高维变量的非凸优化
      • 1.鞍点
      • 2.平坦最小值
      • 3.局部最小解的等价性
    • 1.3.改善方法
  • 二、优化算法
    • 2.1小批量梯度下降法(Min-Batch)
    • 2.2批量大小选择
    • 2.3学习率调整
      • 1.学习率衰减(学习率退火)
        • 分段常数衰减(阶梯衰减)
        • 逆时衰减
        • 指数衰减
        • 自然指数衰减
        • 余弦衰减
      • 2.学习率预热(几乎标配)
      • 3.周期性学习率调整
        • **循环学习率**(三角循环学习率)
        • **带热重启的随机梯度下降(SGDR)**
      • 4.AdaGrad算法、RMSprop算法和AdaDelta
    • 2.4梯度估计修正
      • 1.动量法
      • 2.Nesterov加速梯度
      • 3.Adam算法
      • 4.梯度截断
        • 按值阶段
        • 按模截断
    • 2.5小结
  • 三、参数初始化
    • 3.1基于固定方差的参数初始化
    • 3.2基于方差缩放的参数初始化
      • 1.Xavier初始化
      • 2.He初始化
      • 3.4小结
    • 3.3正交初始化
  • 四、数据预处理
    • 4.1规范化
    • 4.2最小值最大值规范化
    • 4.3标准化
    • 4.4白化
  • 五、逐层规范化
    • 5.1批量规范化(BN)
    • 5.2层规范化(LN)
      • 1.RNN中的层规范化
      • 2.与BN区别
    • 5.3权重规范化
    • 5.4局部相应规范化
  • 六、超参数优化
    • 6.1网格搜索
    • 6.2随机搜索
    • 6.3贝叶斯优化
    • 6.4动态资源分配
  • 七、网络正则化
  • 八、总结
  • 总结


前言

神经网络调参是深度学习中不可或缺的一环,它直接影响着模型的性能和泛化能力。
当前神经网络模型应用到机器学习时仍有一些问题,主要包括两大类。

  1. 优化问题

深度神经网络优化十分困难。首先他的损失函数是一个非凸函数,找到局部最优解容易,但找到全局最优解并非容易。其次,神经网络参数非常多,训练数据很大,所以无法使用计算代价很高的二阶优化方法。最后,神经网络存在梯度消失或爆炸问题。

  1. 泛化问题

由于神经网络复杂度很高,拟合能力很强,很容易在训练集上过拟合。因此要考虑一定的正则化方法来改进网络泛化能力。

目前优化方法也很多,本文从网络优化网络正则化方面介绍这些优化方法。
网络优化方面:常用优化方法、参数初始化方法、数据预处理方法、逐层正则化方法和超参数优化方法。
网络正则化方面: l 1 l_1 l1 l 2 l_2 l2正则化、权重衰减、提前停止、暂退法、数据增强和标签平滑。

各位道友!道长(zhǎng) 道长(chǎng)


一、网络优化

网络优化指寻找一个神经网络模型使得经验风险最小化(防止过拟合,多为结构风险最小化)的过程,包括模型选择和参数学习
由于风险函数非凸,因此风险最小化是一个非凸优化问题。
此外还存在梯度消失问题。

1.1网络结构多样性

神经网络种类非常之多,因此很难找到通用的优化方法。

1.2高维变量的非凸优化

高维空间中,主要要考虑逃离鞍点问题(对比低维空间中的逃出局部最优解问题)。

1.鞍点

鞍点:梯度是0,但是在某些维度上是最高点,某些维度上是最低点。
在这里插入图片描述
用梯度下降法优化时,会在鞍点附近接近停滞,很难逃离。

2.平坦最小值

神经网络参数很多,且有冗余性。因此会导致各个参数对最终损失的影响很小。因此会导致损失函数在局部最小解附近通常是一个平坦区域,称为平坦最小值
在这里插入图片描述
因此我们训练神经网络的时候,不需要精确找到一个局部最小解,只要在一个局部最小解邻域就够了。
通常,一个模型收敛到平坦的局部最小解时候,鲁棒性更好。

  • 鲁棒性指模型面对危险、噪声时候,仍能保证良好的稳定性和准确度。

3.局部最小解的等价性

在非常大的神经网络中,大部分局部最小解是等价的
因此,训练神经网络时,通常没有必要找全局最小值(可能会导致过拟合)。

1.3.改善方法

(1)有效的优化算法提高梯度下降的效率和稳定性
(2)更好的参数初始化方法、数据预处理方法来提高优化效率
(3)修改网络结构得到更好的优化地形
在这里插入图片描述
如图,下面是优化后的图形,明显看到优化地形可以让地形更加平滑,凸的地方会少很多。

(4)更好的超参数优化方法

二、优化算法

训练神经网络时常用的优化算法大体分为两类:
1)调整学习率,使得优化更稳定
2)**梯度估计修正,**优化训练速度

2.1小批量梯度下降法(Min-Batch)

f ( x ; θ ) f(x;\theta) f(x;θ)表示一个深度神经网络, θ \theta θ为网络参数,小批量梯度下降时,每次选取K个训练样本 s t = { ( x ( k ) , y ( k ) ) } k = 1 K s_t=\{(x^{(k)},y^{(k)})\}_{k=1}^{K} st={(x(k),y(k))}k=1K。第t次迭代时,损失函数关于参数 θ \theta θ的偏导数为
g t = 1 K ∑ ( x , y ) ∈ S t ∂ L ( y , f ( x ; θ ) ) ∂ θ g_t=\frac1K \sum_{(x,y) \in S_t} \frac{\partial L(y,f(x;\theta))}{\partial \theta} gt=K1(x,y)StθL(y,f(x;θ))

  • L为损失函数,K为批量大小

是用梯度下降法更新参数
θ t ← θ t − 1 − α g t − 1 \theta_t \leftarrow \theta_{t-1}-\alpha g_{t-1} θtθt1αgt1

  • α > 0 \alpha>0 α>0为学习率

每次参数更新差值为 Δ θ t \Delta \theta_t Δθt
Δ θ t = θ t − θ t − 1 \Delta \theta_t=\theta_t-\theta_{t-1} Δθt=θtθt1

因此,在标准小批量梯度下降中, Δ θ t = − α g t − 1 \Delta \theta_t=-\alpha g_{t-1} Δθt=αgt1

  • 由此可见,影响小批量梯度下降的主要因素有:
    1)批量大小K 2)学习率 α \alpha α 3)梯度估计

2.2批量大小选择

批量大小(Batch Size)对网络优化影响非常大。

通常,不影响随机梯度的期望,但是会影响随机梯度的方差

  • 批量越大,随机梯度方差越小,训练越稳定,所以 α \alpha α可以大些
  • 批量越小,随机梯度方差越大,所以 α \alpha α可以小些,否则会不收敛
    (调参的时候有一个线性缩放规则:批量增加m倍时, α \alpha α也增加m倍)

迭代:每一次小批量更新一次
回合:所有训练集样本更新一次

1 E p o c h = ( 训练样本数量 N 批量大小 K ) ∗ I t e r a t i o n 1 Epoch=(\frac{训练样本数量N}{批量大小K})*Iteration 1Epoch=(批量大小K训练样本数量N)Iteration
在这里插入图片描述

通常,

  • 批量越,越有可能收敛到尖锐最小值
  • 批量越,越有可能收敛到平坦最小值

2.3学习率调整

1.学习率衰减(学习率退火)

经验上看,开始学习率大些保证速度,在收敛最优点附近时小些,避免来回震荡。

分段常数衰减(阶梯衰减)

每经过T1,T2…次迭代将学习率衰减为原来的 β 1 , β 2 . . . \beta_1,\beta_2... β1,β2...倍。

  • T和 β \beta β为经验设置超参数
逆时衰减

α t = α 0 1 1 + β ∗ t \alpha_t=\alpha_0\frac1{1+\beta*t} αt=α01+βt1
β \beta β为衰减率

指数衰减

α t = α 0 β t \alpha_t=\alpha_0\beta^t αt=α0βt
β < 1 \beta<1 β<1为衰减率

自然指数衰减

α t = α 0 exp ⁡ ( − β ∗ t ) \alpha_t=\alpha_0\exp(-\beta*t) αt=α0exp(βt)

余弦衰减

α t = 1 2 α 0 ( 1 + c o s ( t π T ) ) \alpha_t=\frac12\alpha_0(1+cos(\frac{t\pi}{T})) αt=21α0(1+cos(Ttπ))
T为总迭代次数

  • 示例,假设初始学习率为1
    在这里插入图片描述

2.学习率预热(几乎标配)

学习率预热:为了提高训练稳定性,在最初几轮迭代时候,使用比较小的学习率,等梯度下降到一定程度后,恢复初始学习率。

一个常用的预热方法是逐渐预热,在预热过程中,学习率为
α ′ t = t T ′ α 0 \alpha{^{'}}_t=\frac{t}{T^{'}}\alpha_0 αt=Ttα0
T ′ T^{'} T为预热的迭代次数

预热结束后,在选择一种学习率衰减的方法逐渐降低学习率。
在这里插入图片描述

3.周期性学习率调整

使用这种方法,有助于逃离鞍点尖锐最小值

循环学习率(三角循环学习率)

在这里插入图片描述

带热重启的随机梯度下降(SGDR)

在这里插入图片描述

两种周期性学习率调整的示例
在这里插入图片描述

由图可见,学习率总体是下降的。

这样可以有助于逃离鞍点~
在这里插入图片描述

4.AdaGrad算法、RMSprop算法和AdaDelta

标准的梯度下降法中,每个参数在每次迭代时候都使用相同的学习率。
由于每个参数在不同维度上收敛速度不同,因此根据不同参数的收敛情况分别设置学习率

在这里插入图片描述

  • g t g_t gt为第t次迭代的梯度
  • α \alpha α为初始学习率
  • ϵ \epsilon ϵ为保持数值稳定性的非常小的常数(一般是 e − 7 e^{-7} e7 e − 10 e^{-10} e10之间)
  • ⊙ \odot 为按元素乘积
  • G t G_t Gt为每个参数梯度平方的累计值
  • Δ θ t \Delta \theta_t Δθt为参数更新差值
  • Δ X t − 1 2 \Delta X_{t-1}^{2} ΔXt12为参数更新差值 Δ θ t \Delta \theta_t Δθt的指数衰减权移动平均移动平均指的是一段时间内数据的平均值

三种算法的对比

AdaGradRMSpropAdaDelta
借鉴 l 1 l_1 l1 l 2 l_2 l2正则化的思想AdaGrad的改进AdaGrad的改进
α \alpha α总体减小 α \alpha α可以变大变小 α \alpha α可以变大变小
如果每个参数的偏导数累计 G t G_t Gt大,那么学习率较小 G t G_t Gt计算累计方式变成了指数衰减平均移动引入梯度平方指数衰减移动平均来调整学习率
引入 Δ θ \Delta \theta Δθ的平方的指数衰减权移动平均
缺点:一定次数迭代后没有找到最优点,由于学习率已经很小了,很难再继续找到最优点避免了AdaGrad中学习率不断下降以至于过早衰减的缺点一定程度上平抑了学习率的波动

2.4梯度估计修正

如果每次选取的样本数据集较小,损失会震荡下降。也就是说,随机下降方法中每次迭代的梯度估计和整个数据集的最优梯度方向不一致,具有随机性
一个有效的缓解这种随机性的方式是:通过使用最近一段时间的平均梯度来代替当前随机梯度作为更新的方向,提高优化速度

1.动量法

动量法:用之前的累积动量来代替真正的梯度
在这里插入图片描述

  • 其中 ρ \rho ρ为动量因子,通常为0.9

这样每个参数更新的差值取决于最近一段时间内梯度的加权平均

当某个参数与最近一段时间内梯度方向不一致时,真实的参数更新幅度会变小
相反,最近一段时间内的梯度方向一致时,真实的参数更新幅度变大,起到加速作用。

2.Nesterov加速梯度

一种对动量法的改进,也称为Nesterov动量法

在动量法中,实际参数更新方向 Δ θ t \Delta \theta_t Δθt为上一步参数更新方向 Δ θ t − 1 \Delta \theta_{t-1} Δθt1和当前梯度的反方向 − g t -g_t gt的叠加.也就是说, Δ θ t \Delta \theta_t Δθt被拆分成了两步
θ ^ = θ t − 1 + ρ Δ θ t − 1 Δ θ t = θ ^ − α g t \hat{\theta}=\theta_{t-1}+\rho \Delta \theta_{t-1}\\ \Delta \theta_t=\hat{\theta}-\alpha g_t θ^=θt1+ρΔθt1Δθt=θ^αgt

  • 其中 g t g_t gt是点 θ t − 1 \theta_{t-1} θt1上的梯度。这样在第二步更新中不太合理,更合理的是计算 θ ^ \hat{\theta} θ^上的梯度,这样计算更准,效率更高。

所以合并后的梯度方向为

Δ θ t = ρ Δ θ t − 1 − α g t ( θ t − 1 − ρ Δ θ t − 1 ) \Delta \theta_t=\rho \Delta \theta_{t-1}-\alpha g_t(\theta_{t-1}-\rho \Delta \theta_{t-1}) Δθt=ρΔθt1αgt(θt1ρΔθt1)

  • g t ( θ t − 1 − ρ Δ θ t − 1 ) g_t(\theta_{t-1}-\rho \Delta \theta_{t-1}) gt(θt1ρΔθt1)表损失在点 θ ^ = θ t + ρ Δ θ t − 1 \hat{\theta}=\theta_t+\rho \Delta \theta_{t-1} θ^=θt+ρΔθt1上的偏导数

动量法Nesterov加速梯度在参数更新时的比较
在这里插入图片描述

3.Adam算法

可以看做Adam算法和RMS算法的结合。不但适用动量法作为参数更新方向,而且可以自适应调整学习率

Adam算法一方面计算梯度平方的指数平均 G t G_t Gt(RMSprop类似),一方面计算梯度的指数加权平均 M t M_t Mt(动量法类似)

在这里插入图片描述
其中 β 1 \beta_1 β1, β 2 \beta_2 β2为两个移动平均的衰减率,通常前者取0.9,后者取0.99.

在一开始,尤其是 M 0 = 0 M_0=0 M0=0 G 0 = 0 G_0=0 G0=0时,带入以上两个公式,有
M 1 = ( 1 − β 1 ) g 1 M_1=(1-\beta_1)g_1 M1=(1β1)g1
G 1 = ( 1 − β 2 ) g t ⊙ g t G_1=(1-\beta_2)g_t \odot g_t G1=(1β2)gtgt
这样就存在 M 1 M_1 M1 G 1 G_1 G1会比真实值 M 1 = g t M_1=g_t M1=gt G 1 = g t ⊙ g t G_1=g_t \odot g_t G1=gtgt要小。所以会产生一个很有影响的偏差。所以需要进行对偏差的修正。
在这里插入图片描述
所以Adam的参数更新差值为
在这里插入图片描述

  • 通常学习率取0.001,并且可以进行衰减,如 α t = α 0 / t \alpha_t=\alpha_0/\sqrt t αt=α0/t

此外,他也有一个改进版本Nadam算法,是引入Nesterov加速梯度

4.梯度截断

深度神经网络或循环神经网络中,除了梯度消失外,梯度爆炸也是增加学习效率的主要因素。
如果梯度突然增大,用大的梯度更新参数会让其远离最优点。如图所示
在这里插入图片描述

为了避免这种情况,当梯度的模大于一定阈值时,就对梯度进行截断,称为梯度截断

按值阶段

这样可以让梯度在[a,b]内
在这里插入图片描述

按模截断

截断阈值b是一个超参数,也可以根据一段时间内的平均梯度自动调整
如果 ∣ ∣ g t ∣ ∣ 2 ≤ b ||g_t||^2\leq b ∣∣gt2b,保持 g t g_t gt不变;
否则,令
在这里插入图片描述

实验中发现,训练过程对b不是十分敏感,通常一个小的阈值可以得到更好的结果。

2.5小结

各种优化方法汇总:
在这里插入图片描述
这几种方法在MNIST数据集上的收敛性比较(学习率0.001,批量大小128)
在这里插入图片描述

三、参数初始化

参数初始化的方式主要有以下三种:
(1)预训练初始化:
不同的参数初值会收敛到不同的局部最优解。好的初始值会得到一个泛化能力高的局部最优解。
通常,一个已经在大模型数据上训练过的模型可以提供一个好的参数初始值,这种初始化方法称为预训练初始化
预训练模型在目标任务上的学习过程也称为精调
(2)随机初始化
对称权重现象:在神经网络中,如果把参数都设置为0,在第一遍前向计算时候,所有的隐藏层神经元的激活值都相同;反向传播时,所有权重更新也都相同,导致了隐藏层神经元没有区分性
为了打破这个平衡,比较好的方式时对参数进行随机初始化
(3)固定值初始化
对于一些特殊参数,我们可以根据经验用特殊的固定值来进行初始化。比如偏置值b。

虽然预训练初始化通常有更好的收敛性和泛化性,但是灵活性不够

这里介绍三类常用的随机初始化方法。

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

主要有以下两种:
1)基于高斯分布的初始化。(就是正态分布)
2)基于均匀分布的初始化。
这中方法中,如何设置方差是比较关键的。
如果参数取值范围太小:一是导致神经元输出太小,可能多层之后会慢慢消失;二是使得Sigmoid型激活函数丢失非线性能力
为了降低方差对网络性能和优化效率的影响,基于固定方差的随机初始化方法一般需要配合逐层规范化(后面会讲)来使用

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

根据神经元的连接数量来自适应调整初始化分布的方差,称作方差缩放

1.Xavier初始化

假设一个神经网络中,第i层神经元是 a ( l ) a^{(l)} a(l),前一层的 M l − 1 M_{l-1} Ml1个神经元的输出是 a ( l − 1 ) a^{(l-1)} a(l1)
在这里插入图片描述

  • f(·)是一个恒等函数,即f(x)=x

假设w和a的均值为0并且独立。
所以 a ( l ) a^{(l)} a(l)均值
在这里插入图片描述
a ( l ) a^{(l)} a(l)方差
在这里插入图片描述
也就是说,均值不变,但是方差被放大或缩小了 M l − 1 v a r ( w i ( l ) ) M_{l-1}var(w_i^{(l)}) Ml1var(wi(l))倍(学过概率统计的话,这个推导应该不难)。
为了使信号不被过分放大或者减弱,使之维持原来的在 v a r ( a ( l − 1 ) ) var(a^{(l-1)}) var(a(l1))附近,让 M l − 1 v a r ( w i ( l ) ) M_{l-1}var(w_i^{(l)}) Ml1var(wi(l))=1更加合理。

在这里插入图片描述
同理,反向传播中,误差信号 δ \delta δ也不至于被放大或缩小,保持原来的方差,有
在这里插入图片描述
作为折中,可以设置
在这里插入图片描述

这些是理想的方差。

  • 这样可以通过高斯分布或均匀分布来随机初始化参数.即,
    采用高斯分布的时候,可以采用 w i ( l ) ~ N ( 0 , 2 M l − 1 + M l ) w_i^{(l)}~N(0,\frac{2}{M_{l-1}+M_l}) wi(l)N(0,Ml1+Ml2)
    在[-r,r]的均匀分布时,r的取值为 6 M l − 1 + M l \sqrt{\frac{6}{M_{l-1}+M_l}} Ml1+Ml6
  • 这种方法称为Xavier初始化
  • Xavier初始化也适用于logistic函数和Tanh函数(因为他们在0的附近近似为线性函数)实际应用的时候,可以将方差乘一个缩放因子 ρ \rho ρ

2.He初始化

当第l层使用ReLU激活函数时,通常有一半的神经元输出为0,因此分布的方差也近似为使用恒等函数时的一半。
只考虑前向传播,参数w的理想方差为
在这里插入图片描述

3.4小结

在这里插入图片描述

3.3正交初始化

一个L层的等宽线形网络
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 ) ( W ( l ) ) T = I W(l)(W{(l)})^T=I W(l)(W(l))T=I(其中 I I I为单位矩阵),就可以一定程度上缓解梯度爆炸或消失问题。
方法:
1)用均值0,方差1的高斯分布初始化一个矩阵
2)将这个矩阵用奇异值分解(以后我就发文章讲奇异值分解)得到两个正交矩阵,并使用其中之一作为权重矩阵

四、数据预处理

一般而言,样本特征的尺度往往差异很大。
如果一个机器学习算法在缩放全部或部分特征后不影响他的学习和预测,称该算法有尺度不变性
比如线性分类器是尺度不变的,但是KNN是尺度敏感的,计算欧式距离时,尺度大的特征会占据主导地位。

理论上讲,神经网络是尺度不变性,但是尺度不同的输入特征会增加训练难度
比如,tanh的导数在[-2,2]上敏感,其余地方导数接近1。如果参数范围是[-100,100],那么他的训练效率会受到很大影响。

尺度不同会造成大多数位置上的梯度方向不是最优的搜索方向。使用梯度下降时,需要多次迭代才能收敛。
在这里插入图片描述

4.1规范化

指把数据特征转换为相同尺度的方法。比如Sigmoid型函数把不同的尺度的特征压缩到一个比较受限的空间内。

4.2最小值最大值规范化

通过缩放,把每一个特征的取值范围规范化到[0,1]或[-1,1]
在这里插入图片描述

4.3标准化

也叫Z值规范化
将每一维特征都调整为均值为0,方差为1.
方法:
1)先计算均值和方差
在这里插入图片描述
然后标准化(学概率对这个应该不陌生)
在这里插入图片描述

4.4白化

使用主成分分析(PCA)去掉各个成分之间的相关性(主成分分析我在后面会讲的)
在这里插入图片描述

五、逐层规范化

优点:
1)更好的尺度不变性
缓解内部协变量偏移(随机梯度下降时,每次参数更新都会导致该神经层的输入分布发生改变。越高的层,输入分布改变的越明显)
2)更平滑的优化地形

5.1批量规范化(BN)

  • 常用在CNN中
  • BN提出的动机是为了解决内部协方差偏移问题,但是后来发现会导致更平滑的优化地形
  • 小批量样本数量不可太小

BN可以对神经网络任意中间层进行规范化操作。

一个神经网络,第l层净输入为 z ( l ) z^{(l)} z(l),神经元输出为 a ( l ) a^{(l)} a(l)
为了提高效率,考虑使得 z ( l ) z^{(l)} z(l)(比 a ( l ) a^{(l)} a(l)更利于优化)的分布一致(比如规范化到标准正态分布)
由于目前的优化算法时基于小批量随机梯度下降法,所以准确估计 z ( l ) z^{(l)} z(l)的期望和方差不可行,通常用当前小批量样本集均值和方差的近似估计。
在这里插入图片描述
由于对 z ( l ) z^{(l)} z(l)规范化会让取值集中到0附近,如果用Sigmoid激活函数,会减弱神经网络的非线性功能
为了使规范化不对网络造成负面影响,可以通过缩放平移变换改变取值区间
在这里插入图片描述

  • γ \gamma γ β \beta β分别代表缩放和平移的向量参数。
  • 保守考虑,可以通过标准规范化逆变换使得变量可以被还原回原来的值
  • 批量规范化可以看做一个特殊的神经层,加在每一层非线性激活函数之前
    在这里插入图片描述
  • 由于批量规范化具有平移变换,所以 W a Wa Wa不需要偏置。

5.2层规范化(LN)

  • 范围更广,RNN

层规范化与BN非常类似,不同的LN是对一个中间层的所有神经元进行规范化。

一个神经网络,第l层净输入为 z ( l ) z^{(l)} z(l),它的均值和方差为
在这里插入图片描述
然后,层规范化的定义为
在这里插入图片描述

  • γ \gamma γ β \beta β分别代表缩放和平移的向量参数。

1.RNN中的层规范化

循环神经网络隐藏层为 h t h_t ht,层归一化更新为
在这里插入图片描述

  • 层规范化的RNN网络可以有效缓解梯度爆炸和消失

2.与BN区别

对于K个样本的小批量集合 Z ( l ) = [ z ( 1 , l ) , z ( 2 , l ) , . . . , z ( K , l ) ] Z^{(l)}=[z^{(1,l)},z^{(2,l)},...,z^{(K,l)}] Z(l)=[z(1,l),z(2,l),...,z(K,l)]
LN是对矩阵的每一列进行规范化
BN是对矩阵的每一行进行规范化

5.3权重规范化

权重规范化是对神经网络的连接权重进行规范化。
假设第l层神经元 a ( l ) = f ( W a ( l − 1 ) + b ) a^{(l)}=f(Wa {(l-1)}+b) a(l)=f(Wa(l1)+b),将W再参数化为
在这里插入图片描述
引入新参数 g i g_i gi为标量, v i v_i vi a ( l − 1 ) a^{(l-1)} a(l1)的维数相同

  • 在神经网络中,权重往往是贡献的,而且权重数量往往比神经元的数量少,因此权重规范化的开销会较小

5.4局部相应规范化

  • 通常用在基于卷积的图像处理上
  • 应用在激活函数之后
  • 只对邻近的神经元进行规范化
  • 不减去均值

在这里插入图片描述

  • n,k, α \alpha α, β \beta β都是超参数

六、超参数优化

常见的超参数有:
1)网络结构,包括神经元的连接关系层数,每层神经元的量,激活函数的类型
2)优化参数,包括优化方法学习率小批量样本数量
3)正则化系数

6.1网格搜索

一种尝试所有超参数组合来寻找一组超参数的配置方法。
如果超参数是连续的,可以将超参数离散化不可等间隔化
a ∈ { 0.01 , 0.1 , 0.4 , 1 } a \in \{0.01,0.1,0.4,1\} a{0.01,0.1,0.4,1}
网格搜索根据这些超参数的不同组合分别训练一个模型,然后测试各自的性能,选一个最好的

6.2随机搜索

对超参数进行随机组合,选取一个性能最好的配置

6.3贝叶斯优化

  • 一种自适应的超参数优化方法
  • 一种常用的贝叶斯优化方法是时序模型优化(SMBO)

假设超参f(x)服从高斯分布 p ( f ( x ) ∣ x ) p(f(x)|x) p(f(x)x),那么先验概率就是正态分布
贝叶斯优化过程就是根据已有的N组实验结果H来建模高斯过程,并计算f(x)的后验分布 p ( f ( x ) ∣ x , H ) p(f(x)|x,H) p(f(x)x,H)
为了让后验分布接近真实分布,需要对样本进行足够的采样。但是超参数优化的每一个样本的生成成本很高。
因此定义一个收益函数来判断一个样本是否能给建模的高斯过程提供更多的收益。
一个常用的收益函数是期望改善,期望改善函数为
在这里插入图片描述
算法如下:

在这里插入图片描述
缺点:高斯过程建模需要计算协方差矩阵的逆,时间复杂度 O ( N 3 ) O(N^3) O(N3)

6.4动态资源分配

超参数优化中,如果我们在较早的阶段就估计出一组配置的效果差,就可以提前中止这种配置的评估,就会将更多的资源给其他的配置。

具体的,由于目前大多采用随机梯度下降法进行优化网络,因此可以通过一组超参数的学习曲线来预估这组超参数配置是否有希望得到比较好的结果。
如果曲线不收敛或者收敛较差,可以提前停止

还有另外一种方法是逐次减半法,如下在这里插入图片描述

  • 逐次减半法中,超参数的配置数量N很重要,
  • 越大得到的最佳配置机会越大,但是每组分到的资源就少了。
  • 越小的话,每组配置的评估会更准确,但可能无法得到最优配置

七、网络正则化

机器学习的关键是泛化问题,即在样本真实分布上的期望风险最小化。由于神经网络的拟合能力非常强,训练集的错误率会降到非常低,但是可能会导致过拟合。
正则化是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法。

7.1 l 1 l_1 l1 l 2 l_2 l2正则化

l 1 l_1 l1 l 2 l_2 l2正则化是机器学习中最常用的正则化方法。
该方法的优化问题可写为
θ ∗ = arg ⁡ θ min ⁡ 1 N ∑ n = 1 N L ( y , f ( x ; θ ) ) + λ l p ( θ ) \theta^*=\arg_\theta \min \frac1N \sum_{n=1}^N L(y,f(x;\theta))+\lambda l_p(\theta) θ=argθminN1n=1NL(y,f(x;θ))+λlp(θ)
其中,p通常是1或2。

带正则化的优化问题等驾驭下列带约束的优化问题
θ ∗ = arg ⁡ θ min ⁡ 1 N ∑ n = 1 N L ( y , f ( x ; θ ) ) s . t . l p ( θ ) ≤ 1 \theta^*=\arg_\theta \min \frac1N \sum_{n=1}^N L(y,f(x;\theta)) \\ s.t. \quad l_p(\theta) \leq 1 θ=argθminN1n=1NL(y,f(x;θ))s.t.lp(θ)1

其中 l 1 l_1 l1范数在0点不可导,故这样来近似
l 1 ( θ ) = ∑ d = 1 D θ d 2 + ϵ l_1(\theta)=\sum_{d=1}^D \sqrt{\theta_d^2+\epsilon} l1(θ)=d=1Dθd2+ϵ
D为参数数量, ϵ \epsilon ϵ为一个很小的数

在这里插入图片描述

  • 可以看出 l 1 l_1 l1范式容易使最优解位于坐标轴上,最终使参数为稀疏性变量。

折中的方法为同时加入 l 1 l_1 l1 l 2 l_2 l2正则化,称为弹性网络正则化

7.2权重衰减

类似于动量法

每次参数更新时,引入一个衰减系数
θ t ← ( 1 − β ) θ t − 1 − α g t \theta_t \leftarrow (1-\beta)\theta_{t-1}-\alpha g_t θt(1β)θt1αgt
β \beta β通常为0.0005

7.3早停法

使用一个和训练集独立的样本集合称为验证集,用验证集的错误代替期望错误。当验证集的错误率不再下降,就停止迭代

7.4暂退法(Dropout)(几乎标配)

  • 不可直接用于RNN,下面会讲用法

当训练一个神经网络时,如果一层的神经元很多,很可能有几个神经元的行为是一致的,一起增大一起减小,这叫协同效应。这种情况会降低模型的能力,而且训练的模型很脆弱鲁棒性不是很好。

训练神经网络时,可以随机丢弃一部分神经元来避免过拟合,称为暂退法

最简单的方法是,设置一个固定概率p来判定要不要保留神经元。对于神经层y,可以引入一个掩蔽函数mask(·),使得 y = f ( W m a s k ( x ) + b ) y=f(Wmask(x)+b) y=f(Wmask(x)+b),
mask(·)定义为
m a s k ( x ) = { m ⊙ x 当训练阶段时 p x 当测试阶段时 mask(x)=\begin{cases} m \odot x\quad当训练阶段时\\ px\quad\quad当测试阶段时 \end{cases} mask(x)={mx当训练阶段时px当测试阶段时

  • 其中,m={0,1}是丢弃掩码(Drop Mask),通过概率为p伯努利分布随机生成
  • 训练的时候使用掩码函数来丢弃一部分神经元可以理解,这是我们的策略。但是,为什么测试的时候还要将神经元乘p倍呢???
    ⟶ \longrightarrow 这是因为如果不这样的话,会造成训练测试输出不一致的问题。由于训练的时候以p的概率丢弃了一部分神经元,也就相当于把神经元的数量降了p倍,所以相应的,测试的时候神经元降到p倍,也相当于给不同的神经网络做了平均。
  • 一般来讲,隐藏层的保留率p为0.5最佳;输入层的保留率p接近1最佳
    在这里插入图片描述

可以从不同的角度来理解Dropout法

  • 集成学习角度:每丢弃一次,相当于从原始网络中采样得到一个子网络。如果有n个神经元,那么可以采样出 2 n 2^n 2n个子网络。(每个网络有2种选择[保留或丢弃],n个神经元就是n个2相乘)      每次迭代(即训练完一层网络)都相当于训练一个不同的子网络,由于这些子网络(即网络的每一层)都共享原始网络参数。那么最终网络可以近似看作指数级个不同的网络的组合模型
  • 贝叶斯学习角度:用 y = f ( x ; θ ) y=f(x;\theta) y=f(x;θ)表示要学习的网络,先验分布为 q ( θ ) q(\theta) q(θ),贝叶斯方法预测为
    E q ( θ ) [ y ] = ∫ q f ( x ; θ ) q ( θ ) d θ ≈ 1 M ∑ m = 1 M f ( x ; θ m ) E_{q(\theta)}[y]=\int_q f(x;\theta)q(\theta)d\theta \approx \frac1M\sum_{m=1}^Mf(x;\theta_m) Eq(θ)[y]=qf(x;θ)q(θ)dθM1m=1Mf(x;θm)
    f ( x ; θ m ) f(x;\theta_m) f(x;θm)为第m次应用暂退法后的网络(这个约等于号可以用定积分定义来理解)。

RNN上的暂退法

在循环神经网络上应用暂退法时,不能在时间维度上进行丢弃,否则会损害RNN在时间维度上的记忆能力。

  • 一种简单的方法:在非时间维度上进行丢弃。
    如图,(注意虚线的不同颜色,不同颜色为不同的丢弃掩码
    在这里插入图片描述
  • 另一种方法是变分暂退法:根据贝叶斯的解释,暂退法是对参数 θ \theta θ的采样,每次采样的参数需要在每个时刻保持不变。
    因此,对RNN使用暂退法时,需要对参数矩阵的每个元素进行随机丢弃,并在每个时刻使用相同的丢弃掩码
    如图(注意看,相同颜色表示相同的丢弃掩码)
    在这里插入图片描述

7.5数据增强

深度神经网络一般在需要大量数据的时候才能获得理想的效果。
如果数据量有限,可以通过数据增强来增加数据量,提高鲁棒性,避免过拟合。

  • 图像数据的增强方法:对图像进行旋转、翻转、缩放、平移、加噪声等操作。
  • 文本数据的增强方法:对文本进行词汇替换、回译(例如把一句话翻译成英语,再把得到的英语翻译成中文。嘻嘻,应该很多人论文都是这么写的吧~)随机编辑噪声等操作。

7.6标签平滑

同数据增强一样,我们不但可以给样本特征加入随机噪声,还可以给样本标签加入一定的噪声
如果训练数据集的一些样本标签是错误标注的,那么最小化这些样本的损失函数会导致过拟合。

一种改善的正则化方法是标签平滑,即在输出标签中添加噪声来避免过拟合。

如果一个x的标签是用one-hot向量表示。
y = [ 0 , . . . , 0 , 1 , 0 , . . . , 0 ] T y=[0,...,0,1,0,...,0]^T y=[0,...,0,1,0,...,0]T

  • 这种标签可以看做硬目标
  • 如果使用SoftMax函数作为分类器,如果一类的输出概率接近1,规范化之后回远大于其他类的得分,这样会导致过拟合。如果样本标签是错误的,会导致更严重的过拟合。

如果样本以 ϵ \epsilon ϵ的概率为其他类。平滑后的标签为(K为标签数量)
y ~ = [ ϵ K − 1 , . . . , ϵ K − 1 , 1 − ϵ , ϵ K − 1 , . . . , ϵ K − 1 ] T \tilde{y}=[\frac{\epsilon}{K-1},...,\frac{\epsilon}{K-1},1-\epsilon,\frac{\epsilon}{K-1},...,\frac{\epsilon}{K-1}]^T y~=[K1ϵ,...,K1ϵ,1ϵ,K1ϵ,...,K1ϵ]T

  • 这种标签可以看做软目标
  • 标签平滑可以避免模型输出过拟合到硬目标上,并且通常不损害分类能力。

但是上面的方法并没有考虑到标签之间的相关性
一种更好的做法是知识蒸馏,按照类别相关性来赋予其他标签的不同概率。比如,先训练一个更复杂的大网络(教师网络),然后用大网络的输出作为软目标来训练网络(学生网络

八、总结

为了得到一个分类效果不错的网络,总体而言要从三个方面来考虑

模型优化正则化
用ReLU作为激活函数SGD+mini-batch(动态学习率、Adam算法优先)早停法(Early-Stop)
残差连接每次迭代都重新随机排序暂退法(Dropout)
逐层规范化数据预处理(规范化)权重衰减
-参数初始化(预训练)批量规范化
-- l 1 l_1 l1 l 2 l_2 l2正则化
--数据增强

通过这些方法,一般就可以得到一个不错的神经网络模型


总结

今天的内容是神经网络的网络优化与正则化部分,本文内容很多,但是又很重要。读本文时,可以结合邱锡鹏老师的蒲公英书进行学习。


夏天真的到了,天气很热,但是风景很好。
路边的花儿开的繁盛,树儿挺拔茂盛。
夏天总给人一种绿色的、五彩缤纷的有生命力的美。
大家在学习之余也要抽空多出去走走转转,多看看脚下周围,生活很累但请别忘了生活中的美。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/602782.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ogv转mp4怎么转?只需3个步骤~

OGV&#xff08;Ogg Video&#xff09;是一种开源的视频文件格式&#xff0c;起源于对数字媒体领域的开放标准的需求。作为Ogg多媒体容器的一部分&#xff0c;OGV的设计初衷是提供一种自由、高质量的视频编码方案&#xff0c;以满足多样化的应用需求。 支持打开MP4文件格式的软…

Windows+clion+protobuf+cmake实现protobuf的使用(被折磨了两天半)

针对protobuf源码和protoc的编译有很多博客写了,这里就不说了。但是很少看到在clion上配置的,因为这个要写cmake文件,本人是小白,学习了cmake之后才懂怎么搞。出现众多链接错误,这次展示一下有效的配置文件。(protobuf 3.21.6,当前最高版本是26.1我也不知道这个版本是怎…

XSKY SDS 6.4 重磅更新:NFS 性能飙升 3 倍,对象多站点等 10 多项功能强势升级

近日&#xff0c;XSKY星辰天合发布了 XSKY SDS V6.4 新版本&#xff0c;该版本在文件的性能提升、对象容灾能力完善方面改进异常显著&#xff0c;同时也大幅提高了存储系统的安全特性&#xff0c;适配更多的信创软硬件生态。 近来&#xff0c;软件定义存储&#xff08;SDS&…

win11更新过后偶尔出现网卡详细信息为空

鼠标右键网卡属性&#xff0c;看下是不是多了一个Network LightWeight Filter 前面对号取消然后确定就能获取到IP了 详情请自行查看百度文库

细胞自动机与森林火灾与燃烧模拟

基于 元胞自动机-森林火灾模拟_vonneumann邻域-CSDN博客 进行略微修改&#xff0c;解决固定方向着火问题&#xff0c;用了一个meshv2数组记录下一状态&#xff0c;避免旧状态重叠数据失效。 参数调整 澳洲森林火灾蔓延数学建模&#xff0c;基于元胞自动机模拟多模式下火灾蔓延…

Saving Environment to FAT... Card did not respond to voltage select!

在移植uboot到全志H3时&#xff0c;出现了错误&#xff1a; Saving Environment to FAT… Card did not respond to voltage select! 判定与MMC有关。 同时还有报错&#xff1a; Error: ethernet1c30000 address not set. No ethernet found. 查看源码发现这与环境变量有关&am…

2024蓝桥杯CTF writeUP--爬虫协议

Dirsearch扫描网站 发现robots.txt文件 访问 直接去最后一个接口 到手

市场公关人的日常工作是什么?

作为一个从事多年的市场公关人&#xff0c;每到别人放假的时候就是我们最忙的时候&#xff0c;手上几个KOL项目安排探店&#xff0c;同时还要筹备品牌VIP活动。扎堆的事情每天忙得睁眼就是工作。 基本上来说&#xff0c;公关人是挺苦逼的&#xff0c;并没有大家看上去那么光鲜…

超级大转盘!(html+less+js)(结尾附代码)

超级大转盘&#xff01;&#xff08;结尾附代码&#xff09; 网上看到有人用转盘抽奖&#xff0c;怀疑是不是有问题&#xff0c;为什么每次都中不了&#xff0c;能不能整个转盘自己想中啥中啥&#xff0c;查阅了网上写得好的文章&#xff0c;果然实现了只中谢谢参与&#xff0…

Unity如何使用adb工具安装APK

1、下载adb工具 SDK 平台工具版本说明 | Android Studio | Android Developers (google.cn) 2、配置环境变量 把platform-tools的路径添加进去就行 打开cmd&#xff0c;输入adb&#xff0c;即可查看版本信息 3、使用数据线连接设备&#xff0c;查看设备信息&#xff08;…

【MySQL】事务及其隔离性/隔离级别

目录 一、事务的概念 1、事务的四种特性 2、事务的作用 3、存储引擎对事务的支持 4、事务的提交方式 二、事务的启动、回滚与提交 1、准备工作&#xff1a;调整MySQL的默认隔离级别为最低/创建测试表 2、事务的启动、回滚与提交 3、启动事务后未commit&#xff0c;但是…

快速搭建webase-front并且部署合约

PS: 因为我开发时候要用到fisco和webase-front,避免官方文档粘贴, 因此直接整理下面的笔记。开发的时候,好粘贴。1.搭建4节点联盟链 前提 curl 一种命令行工具 apt install -y openssl curl创建操作目录, 下载安装脚本 cd ~ && mkdir -p fisco && cd fisco…

Gartner发布应对动荡、复杂和模糊世界的威胁形势指南:当前需要应对的12种不稳定性、不确定性、复杂和模糊的安全威胁

当今世界是动荡&#xff08;Volatile&#xff09;、复杂&#xff08;Complex&#xff09;和模糊&#xff08;Ambiguous&#xff09;的&#xff0c;随着组织追求数字化转型以及犯罪分子不断发展技术&#xff0c;由此产生的安全威胁也是波动性、不确定性、复杂性和模糊性的&#…

《ElementUI 基础知识》el-tree 之“我的电脑”目录结构效果

前言 项目需求&#xff0c;Web 端获取服务器文件夹目录结构。目录数据是调接口获取&#xff0c;本篇略过&#xff0c;直接展现数据&#xff01; 效果 实现 html 代码 8 - 15 行&#xff0c;自定义节点信息&#xff1b;代码 9 - 14 行&#xff0c;判断 icon 显示&#xff1b…

数据仓库项目---Day01

文章目录 框架的安装包数据仓库概念项目需求及架构设计项目需求分析项目框架技术选型系统数据流程设计框架版本选型集群资源规划设计 数据生成模块数据埋点主流埋点方式埋点数据上报时机 服务器和JDK准备搭建三台Linux虚拟机(VMWare)编写集群分发脚本xsyncSSH无密登录配置JDK准…

顶顶通呼叫中心中间件电话黑名单系统介绍

黑名单 有显示成功和失败导入数&#xff0c;可以禁用也可以启用&#xff0c;如果禁用状态就是不使用这一组黑名单&#xff0c;多个号码核验就是验证号码存不存在。黑名单只有管理员和操作员可以配置&#xff0c;租户是看不到黑名单的。但是黑名单跟租户是互通的。 可以单个号码…

计算机毕业设计Python+Vue.js天气预测系统 中国气象质量采集与可视化 天气数据分析 天气可视化 天气大数据 天气爬虫 大数据毕业设计

摘要 随着科技技术的不断发展&#xff0c;人民物质生活质量不断提高&#xff0c;我们越来越关注身边的气象、空气等地理环境。对于普通居民我们会选择合适的气象进行出游&#xff0c;提高精神层面的生活质量&#xff1b;对于企业会关注气象变换状况&#xff0c;来定制相关的生产…

使用.NET8实现Web API

目录 1、环境准备1.1、从官网下载 及安装VS2022社区版1.2、下载及安装asp.net core的运行时及IIS Module 2、WebAPI工程创建2.1 创建API服务2.2 推荐的库2.2.1 数据库篇2.2.1.1、 SQLSugar2.2.1.2、 OracleAccess 2.2.2、IOC篇2.2.2.1、autofac2.2.2.2、 2.2.3、日志记录篇2.2.…

MY SQL 实验一:

一、实验目的 通过实验了解MYSQL数据库服务器的基本架构及基本的使用方法。 二、实验原理、条件 本实验采用著名的开源数据库软件MYSQL 作为实验平台。MYSQL有多种版本&#xff0c;常用的是服务器版。数据库引擎是用于存储、处理和保护数据的核心服务。MYSQL有多个数据库引擎&a…
最新文章