「导语:有人说深度学习实质上是最优化,但它们具体又有什么不同呢?」
作者:Frank Odom 编译:McGL
如今训练神经网络最常见的方法是使用梯度下降或 Adam 等变种。梯度下降是寻找函数极小值的迭代优化算法。简单的说,在最优化问题中,我们对某个度量 P 感兴趣,想找到一个在某些数据(或分布)D上最大化(或最小化)该度量的函数(或函数的参数)。这听起来就像是机器学习或深度学习。我们有一些指标,例如准确率,甚至更好的精度/召回率或F1值;有一个带有可学习参数的模型(我们的网络);还有数据(训练和测试集)。使用梯度下降,我们将“搜索”或“优化”模型的参数,从而最终使训练和测试集上的数据指标(准确率)最大化。
来自论文《The general inefficiency of batch training for gradient descent learning》
最优化与深度学习之间至少存在两个主要差异,这些差异对于在深度学习中获得更好的结果很重要。
第一个区别是度量/损失函数。在最优化中,我们有一个单一的明确定义的度量,希望将其最小化(或最大化)。不幸的是,在深度学习中,我们经常使用无法或很难优化的度量。例如,在分类问题中,我们可能对模型的“准确率”或“F1值”感兴趣。准确率和F1值的问题是这些都不是可微函数,我们无法计算梯度,所以不能使用梯度下降。因此,我们使用诸如negative log-likelihood(或cross-entropy)之类的代理度量/损失,希望最小化代理函数将最大化我们的原始度量。这些代理度量不一定不行,甚至可能有一些优势,但是我们需要记住我们真正关心的东西,而不是代理度量。
确保我们关心原始度量的一种方法是使用Early Stopping。每个epoch,我们都会在某些验证集上用原始度量(准确率或F1值)评估模型,并在开始过拟合时停止训练。最好在每个epoch打印出准确率(或其它任意度量),方便更好的了解模型的性能。
第二个重要区别是数据。在最优化中,我们只关心现有数据。我们知道找到最大值是解决我们问题的最佳解决方案。在深度学习中,我们主要关心泛化,即我们没有的数据。这意味着,即使我们找到了已有的数据(训练集)的最大值(或最小值),我们仍然可能在还没有的数据上得到较差的结果。将我们的数据分为不同的部分并将测试集视为“我们没有的数据”非常重要。我们不能基于测试集做出任何决定。为了做出有关超参数,模型结构或 early stopping 标准的决策,我们可以使用验证集,而不能使用测试集。
还没完呢。我们通过梯度下降将参数推向“正确的”方向来训练模型。但是什么是“正确的”?对所有数据还是仅对我们的训练集正确呢?例如,当我们选择batch size时,这是相关的。有人可能会说,通过使用整个训练数据(称为“批梯度下降”),我们获得了“真实”梯度。但这仅适用于我们拥有的数据。为了将模型推向“正确”方向,我们需要近似我们没有的数据的梯度。这可以通过更小的 batch size 来实现(所谓的迷你批处理(Mini-batch)或随机(Stochastic)梯度下降)。论文《The general inefficiency of batch training for gradient descent learning》显示,仅使用batch size 为1(也叫 On-line Training)即可达到最佳结果。通过应用较小的batch size,将噪声引入梯度,可以提高泛化能力减少过拟合。下表展示了在20多个数据集上进行“batch”与“on-line”训练的性能。可以看出“on-line” 方式平均更好。
来自论文《The general inefficiency of batch training for gradient descent learning》
尽管机器学习问题有时被称为最优化问题。了解差异并加以解决很重要。
「来源:」https://towardsdatascience.com/what-is-the-difference-between-optimization-and-deep-learning-and-why-should-you-care-e4dc7c2494fe