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

news2024/11/19 7:39:59

文章目录

  • 前言
  • 一、网络优化
    • 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.coloradmin.cn/o/1636956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MouseBoost PRO for Mac激活版:强大的 鼠标增强软件

在追求高效工作的今天&#xff0c;MouseBoost PRO for Mac成为了许多Mac用户的得力助手。这款功能强大的鼠标增强软件&#xff0c;以其独特的智能化功能和丰富的实用工具&#xff0c;让您的电脑操作更加便捷、高效。 MouseBoost PRO for Macv3.4.0中文激活版下载 MouseBoost PR…

nginxconfig.io项目nginx可视化配置--搭建-视频

项目地址 https://github.com/digitalocean/nginxconfig.io搭建视频 nginxconfig.io搭建 nginxconfig.io搭建 展示效果 找到这个项目需要的docker镜像&#xff0c;有项目需要的node的版本 docker pull node:20-alpine运行这个node容器,在主机中挂载一个文件夹到容器中 主机&a…

Python 与 TensorFlow2 生成式 AI(四)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章&#xff1a;文本生成方法的崛起 在前几章中&#xff0c;我们讨论了不同的方法和技术来开发和训练生成模型。特别是在第六章“使用 …

LLM应用:让大模型prompt总结生成Mermaid流程图

生成内容、总结文章让大模型Mermaid流程图展示&#xff1a; mermaid 美人鱼, 是一个类似 markdown&#xff0c;用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具&#xff0c;您可以在文档中嵌入一段 mermaid 文本来生成 SVG 形式的图形 Prompt 示例&#xff1a;用横向…

基于OSAL 实现UART、LED、ADC等基础示例 4

1 UART 实验目的 串口在我们开发单片机项目是很重要的&#xff0c;可以观察我们的代码运行情况&#xff0c;本节的目的就 是实现串口双工收发。 虽然说 osal 相关的代码已经跟硬件关系不大了&#xff0c;但是我们还是来贴出相关的硬件原理图贴出来。 1.1 串口初始化 osal_ini…

latex使用bib引用参考文献时,正文编号顺序乱序解决办法,两分钟搞定!

一、背景 用Latex写文章时&#xff0c;使用bib添加参考文献是一种最为简便的方式。但有的期刊模板&#xff0c;如机器人顶会IROS&#xff0c;会出现正文参考文献序号没按顺序排列的情况&#xff0c;如下图所示。按理说文献[4]应该是文献[2]&#xff0c;[2]应该是[3]&#xff0…

Go中为什么不建议用锁?

Go语言中是不建议用锁&#xff0c;而是用通道Channel来代替(不要通过共享内存来通信&#xff0c;而通过通信来共享内存)&#xff0c;当然锁也是可以用&#xff0c;锁是防止同一时刻多个goroutine操作同一个资源&#xff1b; GO语言中&#xff0c;要传递某个数据给另一个gorout…

Java项目:88 springboot104学生网上请假系统设计与实现

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本学生网上请假系统管理员&#xff0c;教师&#xff0c;学生。 管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;…

22 重构系统升级-实现不停服的数据迁移和用户切量

专栏的前 21 讲&#xff0c;从读、写以及扣减的角度介绍了三种特点各异的微服务的构建技巧&#xff0c;最后从微服务的共性问题出发&#xff0c;介绍了这些共性问题的应对技巧。 在实际工作中&#xff0c;你就可以参考本专栏介绍的技巧构建新的微服务&#xff0c;架构一个具备…

vue3 安装-使用之第一篇

首先需要node版本高于V16.14.1 安装 执行 npm create vitelatest 具体选择按照自己实际需要的来 Project name:项目名称 Select a framework:选择用哪种框架 &#xff08;我选择vue&#xff09; Select a variant: 选择用JS还是TS&#xff08;我选择JS&#xff09;找到项目&…

STM32 HAL库F103系列之IIC实验

IIC总线协议 IIC总线协议介绍 IIC&#xff1a;Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步 串行 半双工通信总线。 总线就是传输数据通道 协议就是传输数据的规则 IIC总线结构图 ① 由时钟线SCL和数据线SDA组成&#xff0c;并且都接上拉电阻…

(7)快速调优

文章目录 前言 1 安装脚本 2 运行 QuikTune 3 高级配置 前言 VTOL QuikTune Lua 脚本简化了为多旋翼飞行器的姿态控制参数寻找最佳调整的过程。 脚本会缓慢增加相关增益&#xff0c;直到检测到振荡。然后&#xff0c;它将增益降低 60%&#xff0c;并进入下一个增益。所有增…

微服务保护和分布式事务(Sentinel、Seata)笔记

一、雪崩问题的解决的服务保护技术了解 二、Sentinel 2.1Sentinel入门 1.Sentinel的安装 &#xff08;1&#xff09;下载Sentinel的tar安装包先 &#xff08;2&#xff09;将jar包放在任意非中文、不包含特殊字符的目录下&#xff0c;重命名为 sentinel-dashboard.jar &…

Spark Structured Streaming 分流或双写多表 / 多数据源(Multi Sinks / Writes)

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

数据库管理-第179期 分库分表vs分布式(20240430

数据库管理179期 2024-04-30 数据库管理-第179期 分库分表vs分布式&#xff08;20240430&#xff09;1 分库分表1.1 分库1.2 分表1.3 组合1.4 问题 2 分布式3 常见分布式数据库4 期望总结 数据库管理-第179期 分库分表vs分布式&#xff08;20240430&#xff09; 作者&#xff1…

git 第一次安装设置用户名密码

git config --global user.name ljq git config --global user.email 15137659164qq.com创建公钥命令 输入后一直回车 ssh-keygen -t rsa下面这样代表成功 这里是公钥的 信息输入gitee 中 输入下面命令看是否和本机绑定成功 ssh -T gitgitee.com如何是这样&#xff0c;恭喜…

spring的高阶使用技巧1——ApplicationListener注册监听器的使用

Spring中的监听器&#xff0c;高阶开发工作者应该都耳熟能详。在 Spring 框架中&#xff0c;这个接口允许开发者注册监听器来监听应用程序中发布的事件。Spring的事件处理机制提供了一种观察者模式的实现&#xff0c;允许应用程序组件之间进行松耦合的通信。 更详细的介绍和使…

Flask简介

Flask简介 安装概述使用PyCharm创建一个Flask程序 Flask程序的基本结构初始化路由和视图函数启动服务器请求-响应循环 安装 概述 Flask算是小型框架&#xff0c;小到可以称为“微框架”。Flask 非常小&#xff0c;因此你一旦能够熟练使用它&#xff0c;很可能就能读懂它所有的…

element的el-table 解决表格多页选择数据时,数据被清空

问题&#xff1a;切换页码时&#xff0c;勾选的数据会被清空 重点看我圈出来的&#xff0c;直接复制&#xff0c;注意&#xff0c;我这里 return row.productId;一般大家的是 return row.id,根据接口定的唯一变量 :row-key"getRowKeys"​​​​​​​:reserve-sele…

【八大排序(三)】快速排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多排序知识 目录 1.前言2.快速排序2.1概念2.2画图理解2.3递归代码实现2.3.1Hoare法2.3.2挖坑法2.3.3前…