深度学习中超参数
深度学习中的超参数(hyperparameters)是决定网络结构的变量(例如隐藏层数量)和决定网络训练方式的变量(例如学习率)。超参数的选择会显著影响训练模型所需的时间,也会影响模型的性能。超参数是在训练开始之前设置的,而不是从数据中学习的参数。超参数是模型训练期间无法学习的参数,需要事先设置。
在深度学习中,模型由模型参数(如神经网络的权重和偏置)定义或表示。然而,训练模型的过程涉及选择最佳超参数,学习算法将使用这些超参数来学习最佳参数。这些参数正确地将输入特征映射到标签或目标,从而实现某种形式的智能。
超参数是一些参数,它们控制着学习过程,并决定学习算法最终学习的模型参数的值。超参数在模型学习/训练期间无法更改其值。学习算法在学习时使用超参数,但超参数不是结果模型的一部分。在学习过程结束时,我们得到了经过训练的模型参数,实际上这就是我们所说的模型。训练期间使用的超参数不是该模型的一部分。
基本上,在深度学习中,你在训练开始前决定它们的值或选择它们的配置,并且在训练结束时其值或配置将保持不变的任何内容都是超参数。
深度学习中的参数是学习算法在学习过程中可以独立更改的值,这些值受你提供的超参数选择的影响。因此,你在训练开始之前设置超参数,学习算法使用它们来学习参数。在训练过程中,参数不断更新,训练结束时的最终参数构成了你的模型。
超参数可以分为两类:与网络结构相关的超参数和与训练算法相关的超参数
1.与网络结构相关的超参数:
(1).隐藏层数量:隐藏层是输入层和输出层之间的层,决定模型的深度。层数较少可能会导致欠拟合,而层数过多可能会导致过拟合。
(2).每层的神经元数量(或节点数):决定模型的宽度,影响其表示数据中复杂关系的能力,神经元数量较少可能会导致拟合不足。
(3).dropout率:Dropout是一种正则化技术,用于防止过拟合(提高验证准确率),从而提高泛化能力。通常,dropout率使用20%-50%的小dropout值,其中20%是一个很好的起点。概率太低,效果微乎其微,而值太高会导致网络学习不足。在更大的网络上使用dropout可能会获得更好的性能,从而为模型提供更多机会来学习独立的表示。
(4).网络权重初始化:理想情况下,根据每层使用的激活函数,使用不同的权重初始化方案可能会更好。大多采用均匀分布,如Xavier、Kaimiing等。每次的随机初始化,有时对结果影响很大。
(5).激活函数:神经网络层中激活函数的选择,将非线性引入模型,使其能够学习复杂的决策边界,如ReLU、Sigmoid等。
(6).损失函数:模型将使用的成本函数或损失函数的选择,如HuberLoss、CrossEntropyLoss等。
(7).优化器(Optimizer):优化算法的选择,如Adam、SGD等算法用于在训练阶段更新权重。
(8).卷积层中kernels或filters size:kernel是一个小的二维矩阵,通过简单的矩阵乘法和加法映射到输入图像上,获得的输出维度较低,因此更易于处理。kernel的形状在很大程度上取决于图像的输入形状和整个网络的架构,kernel的size多为(MxM),即方阵,如1x1, 3x3, 5x5等。kernel的移动始终是从左到右、从上到下。
(9).pooling size:pooling操作涉及在feature map的每个channel上滑动二维filter,用于减少feature map的尺寸。pooling层的类型包括:max pooling、average pooling、global pooling。pooling size的选择对模型的性能和结果有着重要影响,通常是一个正方形,例如2x2、3x3等,但也可以是矩形或其他形状,不过正方形最为常见。
2.与训练算法相关的超参数:
(1).梯度下降中的学习率(Learning rate):控制优化器在每次训练迭代中采用的步长,定义网络更新参数的速度。学习率低会减慢学习过程,但会平稳收敛。学习率高会加快学习速度,但可能不会收敛。典型的值设置小于1但大于10^-6。默认值通常设置为0.01。
(2).学习率衰减(Learning rate decay):设定了网络学习率随时间下降的速率,可以帮助模型在训练过程中逐渐减小学习率,从而使得模型在训练后期更加稳定,避免在最优解附近震荡。PyTorch的torch.optim.lr_scheduler模块提供了多种学习率调度器。
(3).动量(Momentum):有助于根据前几步的了解来了解下一步的方向。它有助于减少震荡。动量的典型选择在0.5到0.9之间,一般开始时使用较低的动量值。
(4).训练周期数(Number of epochs):训练期间将整个训练集通过神经网络进行前向传播和反向传播的次数。增加周期数,直到验证准确率开始下降,即使训练准确率在增加(过拟合)。
(5).批量大小(Batch size):最小批量大小是提供给网络的子样本数量,超过该数量后将进行参数更新。批量大小的选择会显著影响优化算法的性能。批量大小的默认设置可能为32,也可以尝试64、128、256等。通常,它在1到几百之间。
(6).训练集--测试集拆分比率(Train-test split ratio):直接影响模型的训练效果和泛化能力。数据集规模在万级别时,常见的拆分比率是训练集和测试集的比例为7:3或8:2。当数据集规模达到百万级时,由于即使取1%的数据作为测试集也足够多,因此可以划分更多的数据用于训练。
超参数调优(Hyperparameter tuning)的方法:超参数调优也称为超参数优化,超参数调优是选择深度学习模型超参数的最优值的过程。超参数调优的目标是找到在给定任务上获得最佳性能的超参数集,这可以提高模型在未知数据上的性能,防止过拟合,并减少训练时间。调优超参数的顺序取决于具体模型和数据集。不过,一个好的经验法则是从最重要的超参数(例如学习率)开始,然后再调优不太重要的超参数。
(1).手动搜索:手动试验不同的超参数集。
(2).网格搜索(Grid search):被视为超参数优化的"蛮力"方法。在创建潜在离散超参数值网格后,我们使用所有可能的组合来拟合模型。我们记录每组模型的性能,然后选择产生最佳结果的组合。
(3).随机搜索(Random search):随机选择值,而网格搜索方法则使用一组预定的数字。每次迭代,随机搜索都会尝试一组不同的超参数并记录模型的性能。经过几次迭代后,它会返回提供最佳结果的组合。
(4).贝叶斯优化(Bayesian optimization):将寻找最佳超参数视为优化问题。它在选择下一个超参数组合时会考虑之前的评估结果,并应用概率函数来选择可能产生最佳结果的组合。
注:以上整理的内容主要来自:
1. https://towardsdatascience.com
2. https://towardsdatascience.com
3. https://www.geeksforgeeks.org
GitHub:https://github.com/fengbingchun/NN_Test