P15-P18-随机梯度下降-自适应学习率-超参数筛选-正则化


简介

本文主要讨论了机器学习中随机梯度下降(SGD)和自适应学习率算法的原理及应用。SGD通过随机选择小批量样本计算损失值,减少了计算量,加快了训练速度。自适应学习率算法如Adam、RMSProp和Adagrad,通过自动调整学习率,提高了训练收敛速度。此外,本文还介绍了超参数筛选、交叉验证、正则化(权重衰减、L1和L2正则化)、Dropout等方法,以解决过拟合和欠拟合问题,提高模型泛化能力。最后,对Dropout的比例控制和测试时调整进行了阐述。

随机梯度下降和自适应学习率

与其在每个迭代中对全部的训练数据计算损失函数 L L L随机梯度下降(Stochastic Gradient Decent, SGD) 计算损失值时随机选择一小部分的训练样本。

这一小部分的训练样本称为 小批量(Mini-batch) 小批量的具体大小称为 批大小(Batch size)B 用批大小 B 和 B ≪ N 重写公式 用批大小B和B\ll N重写公式 用批大小BBN重写公式,损失函数 L \mathcal{L} L 可以重写为仅涉及当前小批量样本的损失,改进计算 L L L 的效率
L = 1 2 ∥ y − a L ∥ 2 2 = 1 2 ∑ i = 1 B ( y i − a i L ) 2 \mathcal{L}=\frac12\|\boldsymbol{y}-\boldsymbol{a}^L\|_2^2=\frac12\sum_{i=1}^B(y_i-a_i^L)^2 L=21yaL22=21i=1B(yiaiL)2
训练过程如下,通过这种方式,每个迭代只处理一小部分数据,从而减少了计算量,加快了训练速度。当迭代次数足够多时,每个样本都有机会多次被用于更新参数,从而在整个训练集上近似地进行优化。

# 输入参数
θ, α, S = 参数θ, 学习率α, 训练步数/迭代次数S

# 训练过程
for i in range(S):
    # 计算一个小批量的损失L
    L = compute_loss(θ)
    
    # 通过反向传播计算梯度∂L/∂θ
    grad_L = backpropagation(L, θ)
    
    # 更新梯度▽θ
    ▽θ = -α * grad_L
    
    #  更新参数θ
    θ = θ + ▽θ

#  返回训练好的参数
return θ

学习率(Learning rate) 控制了随机梯度下降中每次更新的步长。

如果过大,可能无法找到最小值,如果过小,收敛速度将十分缓慢。

针对这个问题,需要使用自适应学习率算法,如 Adam、RMSProp和Adagrad 通过自动、自适应的方法来调整学习率,从而加速训练算法的收敛速度。

算法的原理的在于,当参数收到了一个较小的梯度时,算法会转到一个更大的步长;反之,如果梯度过大,算法给一个较小的步长。

Adam优化器的训练过程:β1, β2为梯度的遗忘因子,或者分别是其动量和二阶动量

# 输入参数
θ, α, S, β1, β2, ϵ = 参数θ, 学习率α, 训练步数/迭代次数S, 0.9, 0.999, 10**-8

# 初始化动量
m0 = 0  # 初始化一阶动量
v0 = 0  # 初始化二阶动量

# 训练过程
for t in range(1, S + 1):
    # 第4步: 用一个随机的小批量计算梯度
    grad_L = compute_gradient(θ)
    
    # 第6步: 更新一阶动量
    mt = β1 * m0 + (1 - β1) * grad_L
    
    # 第7步: 更新二阶动量
    vt = β2 * v0 + (1 - β2) * (grad_L ** 2)
    
    # 第8步: 计算一阶动量的滑动平均
    mt_hat = mt / (1 - β1 ** t)
    
    # 第10步: 计算二阶动量的滑动平均
    vt_hat = vt / (1 - β2 ** t)
    
    # 第11步: 更新参数θ
    ▽θ = -α * mt_hat / (sqrt(vt_hat) + ϵ)
    θ = θ + ▽θ
    
    # 更新动量变量
    m0 = mt
    v0 = vt

# 第12步: 返回训练好的参数
return θ

超参数筛选

超参数(Hyper-Parameters ) 指和设置相关的参数,比如层的数量以及训练过程的设置参数,如更新步的数量、批大小和学习率。这些设置参数很大程度上会影响模型的表现。

为了衡量不同超参数对模型表现的影响,通常将数据集划为训练集、验证集、测试集。

交叉验证

在一个小数据集上,划分训练集、验证集、测试集的做法会浪费宝贵的数据。训练集分得过小,可能因为训练不足而让训练出来的模型表现不佳。验证集过小,不能让模型被充分的评估。**交叉验证(Cross Validation)**就是解决这个问题,所有的数据都能被用来训练模型,也不需要验证集,充分利用数据。

在一个k折交叉验证策略中,一个数据集将会被分成k个互相不重复的子集,并且每个子集包含同样数量的数据。我们将重复训练模型k次,其中每次训练时,一个子集将会被选为测试集, 而剩下的数据将会被用来训练模型。最后用来评估的结果则是:k次训练后,模型输出性能(如准确度)的平均值。图1.11展示了一个四折交叉验证示例。

在这里插入图片描述

正则化

一个被过度优化的模型会有很小的训练集误差,但有很大的测试集误差,这叫 过拟合(overfitting)

相对的概念叫 欠拟合(Underfitting) 在训练集和测试集上都有很大的误差。

正则化是减轻过拟合的一种手段

权重衰减

权重衰减(Weight Decay)是一种简单却有效的用于解决过拟合的正则化方法。它用了一个正则项作为惩戒,使θ有更小的绝对值。这会使得模型的上下摇摆幅度减小,能更好地拟合数据。

用参数范式作为惩戒的损失函数定义为:
L t o t a l = L ( y , y ^ ) + λ Ω ( θ ) \mathcal{L}_{\mathrm{total}}=\mathcal{L}(\boldsymbol{y},\hat{\boldsymbol{y}})+\lambda\Omega(\boldsymbol{\theta}) Ltotal=L(y,y^)+λΩ(θ)
在这里插入图片描述

其中 L ( y , y ^ ) \mathcal{L}(\boldsymbol{y},\hat{\boldsymbol{y}}) L(y,y^)是从使用目标 y \boldsymbol y y和预测 y ^ \hat{\boldsymbol{y}} y^来计算的损失函数, Ω \Omega Ω是模型的参数范式惩戒函数,
λ \lambda λ是有比较小的值,以控制参数范式惩戒函数的幅度。

两种最常见的参数范式惩戒函数是 L 1 = ∥ W ∥ \mathcal{L}_1=\|W\| L1=W L 2 = ∥ W ∥ 2 2 \mathcal{L}_2=\|W\|_2^2 L2=W22。深度神经网络的参数的绝对值通常小于 1,所以 L 1 \mathcal{L}_1 L1会比 L 2 \mathcal{L}_2 L2输出一个更大的惩戒,因为当 ∣ w ∣ < 1 |w|<1 w<1时, ∣ w ∣ > w 2 |w|>w^2 w>w2。可见, L 1 \mathcal{L}_1 L1 函数用来作为参数范式惩戒函数时,会让参数偏向于更小的值甚至为0。这是模型隐性地选择特征的方法,把那些不重要特征的相对应参数设为一个很小的值或者是0。

  1. 参数范式惩戒函数 Ω \Omega Ω:
    • Ω \Omega Ω 是正则化项,用于对模型的复杂度进行惩罚。在深度学习中,模型过于复杂可能导致过拟合(Overfitting),即模型在训练数据上表现很好,但在未见过的数据上表现不佳。正则化通过惩罚模型权重的大小,来鼓励模型学习更加简单、泛化的表示。
  2. 正则化强度 λ \lambda λ:
    • λ \lambda λ 是一个超参数,用于控制正则化项的强度。 λ \lambda λ 值较小意味着对模型复杂度的惩罚较小,而 λ \lambda λ 值较大则意味着对模型复杂度的惩罚较大。
  3. 两种最常见的参数范式惩戒函数:
    • L 1 = ∥ W ∥ \mathcal{L}_1 = \|W\| L1=W:L1正则化,也称为Lasso正则化。这里的 ∥ W ∥ \|W\| W 表示权重矩阵 W W W 的各个元素的绝对值之和。
    • L 2 = ∥ W ∥ 2 2 \mathcal{L}_2 = \|W\|_2^2 L2=W22:L2正则化,也称为Ridge正则化。这里的 ∥ W ∥ 2 2 \|W\|_2^2 W22 表示权重矩阵 W W W 的各个元素的平方和。
  4. L1和L2正则化的比较:
    • 对于深度神经网络,参数的绝对值通常小于1。在 ∣ w ∣ < 1 |w|<1 w<1 的情况下, ∣ w ∣ |w| w(L1正则化)会大于 w 2 w^2 w2(L2正则化)。这意味着L1正则化会对较小的权重施加更大的惩罚。
    • 由于L1正则化对较小的权重施加更大的惩罚,它倾向于推动模型将不重要的特征的权重推向0。这实际上是一种特征选择机制,因为模型会倾向于只保留那些对预测任务真正重要的特征。

在这里插入图片描述

L1正则化的“尖刺”特性

  • 在右图中,L1正则化的轮廓线(蓝色)呈现出“尖刺”状,特别是在坐标轴上。这意味着当参数接近0时,L1正则化的惩罚迅速减小。因此,为了最小化整体损失(原始损失加上正则化项),模型参数有更大的倾向落在坐标轴上,即参数值为0。
  • 当两个轮廓线(原始损失和L1正则化)相交时,相交点往往更靠近坐标轴,这是因为L1正则化在参数为0时提供了最小的惩罚。因此,L1正则化倾向于将不重要的参数推向0。

L2正则化的“圆形”特性

  • 在左图中,L2正则化的轮廓线(蓝色)呈现出“圆形”状,这是因为它惩罚的是参数的平方。因此,L2正则化对任何大小的参数都施加惩罚,只是参数越大,惩罚越重。这导致最小化整体损失的参数解更可能是一个较小的非零值,而不是0。

L1正则化更倾向于进行特征选择,而L2正则化则更倾向于保持所有特征,但减少它们对模型的影响。

Dropout

Dropout是另一种很受欢迎的用来解决过拟合问题的方法。

当神经元数量非常多时,网络会出现共适应的问题,从而会过拟合。

神经元的共适应指神经元之间会相互依赖。故而,一旦一个神经元失效,就有可能所有依赖它的神经元都会失效,以致于整个网络瘫痪的局面。

为了避免共适应,随机丢弃(Dropout): 在每次训练迭代中,Dropout会随机选择一部分隐藏层神经元,并将它们的输出置为0。这意味着在每次迭代时,神经网络都在使用一个不同的网络结构进行训练。

由于神经元可能会在任意时刻被丢弃,这迫使网络中的每个神经元学习更加鲁棒的特征。这样,网络就不能依赖于某些特定的神经元存在,从而减少了神经元之间的共适应。

效果类似于模型集成: Dropout可以看作是一种廉价的模型集成方法。每次迭代中的网络结构不同,最终的效果类似于训练了多个不同的网络,并在测试时对这些网络进行平均。

比例控制: Dropout的比例,即被置为0的神经元的比例,是一个超参数。通常这个比例在0.2到0.5之间,需要根据具体情况进行调整。

测试时的调整: 在测试阶段,由于所有的神经元都是活跃的,因此需要调整输出层的权重,以补偿训练时丢弃的神经元。这通常是通过将测试时的输出乘以Dropout的比例来实现的。

在这里插入图片描述

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值