超参数调整、Batch归一化和程序框架

超参数调整、Batch归一化和程序框架

超参数调整

  1. 在深度学习中,有许多超参数需要调整,不同超参数的重要性有所不同,可分为以下优先级:

    第一优先级是学习率 α

    第二优先级是动量梯度下降参数 β ,隐藏层神经元数量,以及mini-batch大小。

    第三个优先级是隐藏层数量,学习率衰减率。

    第四个优先级是Adam算法参数,通常无需调整,默认值为β1=0.9,β2=0.999,ϵ=108

  2. 在超参数调整中,可以采用网格取样法(Grid Sampling),随机取样法(Random Sampling),粗糙到精细采样法(Coarse-to-Fine Sampling)。

    https://cdn.acwing.com/media/article/image/2024/11/24/181746_a94375d6aa-sample.png

    网格取样法均匀地取样超参数值(例如,按照固定间隔形成一个网格),然后逐一测试不同组合的效果。适用于参数较少的情况,但如果重要参数分布较窄,会浪费资源。

    随机取样法随机选择超参数值进行实验,覆盖更多潜在的超参数组合,适用于参数多且重要性分布未知的情况。可以更高效地探索重要超参数的影响,例如学习率 α 远比某些次要参数(如 ϵ )更重要,随机取样法能在重要超参数上分配更多探索空间。

    粗糙到精细采样法先进行粗略的超参数取样,找到表现较好的区域后,集中在该区域进行更密集的搜索。

  3. 在调整超参数范围时,需要映射到合适的比例范围,以保证取样的有效性。不同的超参数需要采用不同的取值方法:

    隐藏层神经元数量可以从 [50,100] 的范围内随机均匀取值。

    隐藏层数通常取值范围为 [2,4],可以随机均匀地选择整数值(例如 2、3、4)。

    学习率 α 范围通常为 [0.0001,1],如果在此范围内随机均匀取值,90%的数值会集中在[0.1,1],导致对低值(如 [0.0001,0.1] )的搜索不足。为避免这种问题,应在对数轴上取值,转换为 [104,100],对应对数范围 [4,0]。在此对数范围内均匀随机取值,可以更合理地分配搜索资源。

    动量梯度下降法参数 β 范围为 [0.9,0.999],直接在线性轴上随机均匀取值不合理,因为靠近 1 的 β 对算法性能的影响更显著。更合理的方法是搜索 1β 的对数值,将范围映射到 log(1β) 的区间 [3,1],然后在此对数范围内均匀随机取值。

    对于大多数超参数(如 α, β),在对数轴上取值能更均匀地覆盖有效范围,提升搜索效率。对于离散参数(如隐藏层数),直接在整数范围内随机均匀取值较为合理。靠近某些边界值(如 β1)时,超参数对结果的影响会显著增加。因此,应在灵敏度较高的区域加密取值

  4. 根据计算资源的多寡,超参数搜索过程可分为以下两种主要方式:

    • 第一种是熊猫模式,适用于计算资源有限,无法同时试验多个模型,数据规模较大,或模型训练时间较长的情况。这种模式一次只试验一个模型,在试验过程中,通过观察模型的表现(如损失函数曲线或误差曲线)逐步调整超参数。过程较为细致,每次调整需要较长时间。很适合资源受限的情况,便于深入理解单个模型的表现。但是调参过程较慢,覆盖的超参数空间有限。
    • 第二种是鱼子酱模式,适用于计算资源充足,可以同时运行多个模型的情况。这种模式平行试验多组超参数设定,训练多个模型,通过比较所有模型的损失函数曲线,快速选择表现最好的超参数组合。能快速覆盖更大的超参数空间,增加找到最优参数的可能性,但是对计算资源要求较高。

Batch归一化

  1. 输入特征归一化可以加速学习过程,提高优化效率。在传统机器学习中,对输入特征 X 进行归一化(零均值和单位方差处理)能够改善模型的训练性能。在深度学习中,可以对隐藏层激活值进行归一化,以提升学习效率,尤其是对深层神经网络。实践中,通常对隐藏层线性变换的输出 z[i] 进行归一化,而非激活值 a[i]
    对于第 l 层隐藏单元 z[l] ,假设其共有 m 个样本值:

    μ=1mi=1mz[l](i)σ2=1mi=1m(z[l](i)μ)2znorm[l](i)=z[l](i)μ(σ2+ϵ)

    为了使隐藏单元拥有更多样的分布(而非固定的零均值和单位方差),引入可学习的线性变换:

    z~[l](i)=γznorm[l](i)+β

    γRn[l]×1 控制方差, βRn[l]×1 控制均值,这两个参数通过反向传播与神经网络的其余参数一同学习。特殊情况下,如果 γ=σ2+εβ=μ,则归一化过程退化为恒等映射,即 z~[l]=z[l]

    对于激活函数如Sigmoid等线性范围较小的函数,通过 γβ 调整隐藏单元的分布,可以更充分利用激活函数的非线性特性。

  2. 在神经网络中,Batch归一化对每个隐藏层的线性变换输出 z[l] 进行归一化和重新缩放,然后输入激活函数 a[l] 进行后续计算。由于归一化过程会对 z[l] 的均值进行调整,偏置参数 b[l] 的作用被抵消。因此,应用Batch归一化后,公式简化为:

    z[l](i)=w[l]a[l1](i)μ=1mi=1mz[l](i)σ2=1mi=1m(z[l](i)μ)2znorm[l](i)=z[l](i)μ(σ2+ϵ)z~[l](i)=γznorm[l](i)+β

    在反向传播中,Batch归一化的参数 γ[l]β[l] 通过梯度下降法进行更新。更新公式如下:

    ω[l]=ω[l]αω[l]β[l]=β[l]αdβ[l]γ[l]=γ[l]αdγ[l]

    Batch归一化可与多种优化算法结合使用,如Momentum、RMSprop、Adam等,进一步提升优化效率。
    Batch归一化通常结合mini-batch梯度下降法。在每个mini-batch上,计算均值和方差,对 z 值进行归一化,并更新参数。在深度学习框架中,Batch归一化通常可以通过调用现成的函数实现(如tf.nn.batch_normalization),大大简化了实现过程。

  3. Covariate Shift问题:如果隐藏层前一层的分布发生变化,后续层需要重新适应这些变化,导致训练过程变慢。
    在深层网络中,从第三个隐藏层的视角来看,由于前一层参数的更新会改变激活值的分布,那么第三层需要不断调整,增加了学习的难度。Batch归一化通过对隐藏单元的线性变换输出进行归一化并重新缩放,稳定了激活值的分布。这种稳定性减少了网络层间的依赖,使每层可以更加独立地学习,从而加速整体学习。

  4. Batch归一化也具有一定的正则化效果。在mini-batch上计算均值和方差会存在一些估计噪声,因为只是由一小部分数据得出。这种噪声类似于给隐藏单元添加了随机扰动,迫使网络不依赖某个特定单元。正如Dropout通过随机遮盖部分单元实现正则化,Batch归一化通过这种随机扰动对模型产生了轻微的正则化效果。

    如果采用较小的mini-batch,那么噪声会较大,正则化效果更强。如果采用较大的mini-batch,噪声会减小,正则化效果较弱。虽然Batch归一化有正则化的副作用,但它的主要目的是加速学习,而非正则化。

  5. 在训练阶段,Batch归一化通过对每个mini-batch的激活值进行归一化来调整隐藏层输出。在测试阶段,模型可能需要逐个样本处理,此时无法像训练阶段那样计算一个mini-batch的均值和方差。因此,在测试阶段需要使用在训练过程中积累的均值和方差的估计值,而不是依赖于当前测试样本的mini-batch计算。

    在训练极端,用指数加权移动平均的方式积累每个mini-batch的均值和方差。训练完成后,这些指数加权移动平均值会被用作测试阶段的 μσ2

    通过这种方式,可以在训练阶段积累均值和方差,可以确保模型在训练和测试阶段具有一致性。即使逐个样本进行预测,也能利用整个训练过程中的统计信息,保持预测的可靠性。

多分类问题

  1. 在之前的分类任务中,二分类问题(0或1)使用Logistic回归即可。对于多分类问题(如猫、狗、小鸡或其他),需要扩展为Softmax回归。Softmax 回归通过为每个类别计算概率,确保概率总和为1,用于解决多分类问题。

    假设分类任务有 C 种可能的类别,那么类别 0 表示不属于任何一类,类别 [1,C1] 表示特定的类别。 神经网络的输出层包含 C 个节点,每个节点的输出表示该类别的概率。输出向量 y^ 是一个 C×1 维的向量,其元素表示每个类别的预测概率,所有概率的总和为1。

    首先在输出层进行线性变换:

    z[L]=W[L]a[L1]+b[L]

    然后对 z[L] 的每个元素取指数:

    ti=ezi[L]

    随后计算归一化概率向量:

    a[L]=tj=1Ctjai[L]=ezi[L]j=1Cezj[L]

    最终输出 a[L] 是经过Softmax变换的概率分布,表示每个类别的预测概率。

    Hardmax直接选取最大值位置为1,其它为0,如 [1000]TSoftmax通过概率分布进行平滑转换,更适合梯度下降优化,如 [0.30.20.10.4]T
    其实Softmax是Logistic回归的多分类扩展,当C=2时,Softmax退化为Logistic回归。

    当没有隐藏层时,决策边界是线性分割,每两个类别之间的分界面是线性的。在二维输入空间中,Softmax 分类器可以用几条线性决策边界将空间划分为多个区域,每个区域对应一个类别。有隐藏层时,网络可以学习更复杂的非线性决策边界,从而实现更强大的分类能力。

  2. Softmax 将输出层的线性变换结果 z[L] 转化为概率分布 a[L] ,输出的 a[L] 是一个 C×1 的向量,表示 C 个类别的概率,且总和为1。
    对于单个样本真实标签 y=[0100]T 和预测概率分布 y^=[0.30.20.10.4]T ,使用交叉熵损失:

    L(y^,y)=j=1Cyjlog(y^j)

    当真实类别是 j ,即 yj=1 时, L=log(y^j)。损失函数的目标是使真实类别的预测概率 y^j 尽可能接近1。对整个训练集,将所有样本的损失求平均:

    J(W,b)=1mi=1mL(y^(i),y(i))

    其中, m 是训练样本的数量。

    在梯度下降的过程,对 J(W,b) 求梯度,通过反向传播更新参数。首先计算输出层的误差项:

    dz[L]=y^y

    y^ 是模型的预测, y 是真实标签。 dz[L] 是损失函数对 z[L] 的偏导数。利用 dz[L] 计算其他参数的梯度,并反向传播到隐藏层。大多数深度学习框架(如TensorFlow、PyTorch)会自动处理反向传播。用户只需定义前向传播和损失函数,框架会自动计算梯度。

posted @   钰见梵星  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示