HALCON 21.11:深度学习笔记—设置超参数(5)
HALCON 21.11.0.0中,实现了深度学习方法。关于超参数的有关设置内容如下:
不同的DL方法是为不同的任务设计的,它们的构建方式也不同。它们都有一个共同点,即在模型的训练过程中都面临着一个最小化问题。训练网络或子网络,一个目标是努力使适当的损失函数最小化,参见“网络和训练过程”一节。为此,有一组参数是在开始训练之前设置的,在训练期间未进行优化。我们将这些参数称为超参数。对于DL模型,您可以设置更改策略,指定在训练期间更改这些超参数的时间和方式。在本节中,我们将解释不同超参数的概念。注意,某些方法有额外的超参数,您可以在它们各自的章节中找到更多的信息。
如前所述,损失是将网络的预测与图像内容的给定信息相比较的。损失决定惩罚偏差。训练网络意味着以这样的方式更新滤波器权值,使损失受到的惩罚更少,从而使损失结果得到优化。为此,需要从训练数据集中获取一定数量的数据。对于这个子集,计算损失的梯度,并修改网络以更新其相应的滤波权重。现在,对下一个数据子集重复这一过程,直到整个训练数据被处理。这些训练数据的子集被称为批,这些子集的大小即“batch_size”决定了一个批处理的数据数量,并作为结果一起处理。
对整个训练数据的完整迭代称为epoch。对训练数据进行多次迭代是有益的。迭代次数由“epochs”定义。因此,“epoch”决定了算法在训练集上循环多少次。
一些模型(如异常检测)一次训练使用整个数据集。对于其他模型,数据集是分批处理的,为了做到这一点,使用了随机梯度下降算法SGD(Stochastic Gradient Descent)。这涉及到更多的参数,将在下面解释。每次计算损失梯度后,滤波器权值都会更新。对于更新,有两个重要的超参数:'learning_rate'λ,它决定更新的损失函数参数(过滤器权重)上的梯度的权重,以及[0, 1]间隔内的'momentum'μ,它指定以前更新的影响。更多信息可以在train_dl_model_batch的文档中找到。简单地说,当我们更新损失函数参数时,我们仍然记得上次更新所采取的步骤。现在,我们在梯度方向上迈出一步,其长度取决于学习速率;此外,我们重复上次所做的步骤,但这次只乘以上次的时间。下图给出了可视化效果。学习率过大可能会导致算法发散,学习率过小则会导致不必要的步骤。因此,习惯上从一个较大的学习率开始,并在训练过程中潜在地降低它。对于动量μ=0,动量方法没有影响,所以只有梯度决定更新向量。
Sketch of the 'learning_rate' and the 'momentum' during an actualization step
The gradient step: the learning rate λ times the gradient g (λ
g - dashed lines)
The momentum step: the momentum λ times the previous update vector v (μ
v - dotted lines)
Together, they form the actual step: the update vector v (v - solid lines).
为了防止神经网络的过拟合(见下文“欠拟合和过拟合的风险”部分),可以使用正则化。利用这种技术,在损失函数中增加了额外的一项。一种可能的正则化类型是权重衰减,有关详细信息,请参阅train_dl_model_batch文档。它的工作原理是惩罚较大的权重,即将权重推到零。简单地说,这种正则化倾向于更简单的模型,这些模型不太可能适应训练数据中的噪声,并能更好地泛化。它可以通过超参数‘weight_prior’进行设置。选择它的值需要权衡模型的泛化能力、过拟合能力和欠拟合能力。如果‘weight_prior’太小,模型可能会过度拟合,如果它太大,模型可能会失去很好地拟合数据的能力,因为所有权重实际上都是零。
除了训练数据和所有的超参数,还有许多不同的方面可以对这种复杂算法结果产生影响。为了提高网络性能,通常添加训练数据也会有所帮助。请注意,收集更多的数据是否是一个好的解决方案,也总是取决于简单模型是否难以实现。通常,一个小的额外部分不会显著改变整体性能。
转载自:https://blog.csdn.net/liubing8609/article/details/121507599