HALCON 20.11.0.0中,实现了深度学习方法。关于超参数的有关设置内容如下:
不同的DL方法被设计用于不同的任务,它们的构建方式也会有所不同。它们都有一个共同点,即在模型的训练过程中都面临着一个最小化问题。
训练网络或子网络,一个目标是努力使适当的损失函数最小化,参见“网络和训练过程”一节。
为此,有一组进一步的参数,这些参数是在开始训练之前设置的,在训练期间未进行优化。我们将这些参数称为超参数。
对于DL模型,您可以设置更改策略,指定您希望在培训期间何时以及如何更改这些超参数。
在本节中,我们将解释不同超参数的概念。注意,某些方法有额外的超参数,你可以在它们各自的章节中找到更多的信息。
如前所述,损失比较来自网络的预测与图像内容的给定信息。损失决定惩罚偏差。训练网络以这样的方式更新滤波器权值,使损失受到的惩罚更少,从而使损失结果得到优化。
为此,需要从训练数据集中获取一定数量的数据。对于这个子集,计算损失的梯度,并修改网络以更新其相应的滤波权重。
现在,对下一个数据子集重复这一过程,直到整个训练数据被处理。这些训练数据的子集被称为批,这些子集的大小,即“batch_size”,决定了一个批处理的数据数量,并作为结果一起处理。
对整个训练数据的完整迭代称为epoch。对训练数据进行多次迭代是有益的。迭代次数由“epochs”定义。因此,“epochs”决定了算法在训练集上循环多少次。
一些模型(如异常检测)一次训练使用整个数据集。对于其他模型,数据集按批处理,为了做到这一点,使用了随机梯度下降算法SGD(Stochastic Gradient Descent)。这涉及到更多的参数,将在下面解释。
在每次计算损失梯度后,滤波器权值被更新。
对于这个更新,有两个重要的超参数:
'learning_rate',它决定更新的损失函数参数(过滤器权重)上的梯度的权重,以及间隔内的'momentum',它指定以前更新的影响。更多信息可以在train_dl_model_batch的文档中找到。
简单地说,当我们更新损失函数参数时,我们仍然记得上次更新所采取的步骤。
现在,我们在梯度方向上迈出一步,其长度取决于学习速率;此外,我们重复上次所做的步骤,但这次只乘以上次的时间。
下图给出了可视化效果。学习率过大可能会导致算法发散,学习率过小则会花费不必要的多步。
因此,习惯上从一个较大的学习率开始,并在训练过程中潜在地降低它。对于动量,动量方法没有影响,所以只有梯度决定更新向量。
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’太小,模型可能会过度拟合,如果它太大,模型可能会失去很好地拟合数据的能力,因为所有权重实际上都是零。
除了训练数据和所有的超参数,还有许多不同的方面可以对这种复杂算法结果产生影响。
为了提高网络性能,通常添加训练数据也会有所帮助。
请注意,是否收集更多的数据是一个好的解决方案,也总是取决于简单模型是否难以实现。
通常,一个小的额外部分不会显著改变整体性能。