什么是ML优化?
机器学习的主要目标是创建一个在特定情况下表现良好并给出准确预测的模型。为了实现这一目标,我们需要机器学习优化。
机器学习优化是调整超参数的过程,以便通过使用其中一种优化技术使成本函数最小。最小化成本函数是很重要的,因为它描述了估计参数的真实值与模型所预测的值之间的差异。
在这篇文章中,我们将告诉你关于ML优化技术的主要类型。
模型的参数和超参数
在我们进一步讨论之前,我们需要了解模型的参数和超参数之间的区别。这两个概念很容易混淆,但我们不应该混淆:
- 在开始训练模型之前,你需要设置超参数。它们包括聚类的数量、学习率等。超参数描述了模型的结构。
- 另一方面,模型的参数是在训练过程中获得的。没有办法提前得到它们。例如,神经网络的权重和偏差。这些数据是模型的内部数据,并根据输入而变化。
为了调整模型,我们需要超参数优化。通过找到它们数值的最佳组合,我们可以减少误差,建立最准确的模型。
超参数调整如何工作
正如我们所说,超参数是在训练前设置的。但你不可能事先知道,例如,在这种或那种情况下,哪种学习率(大或小)是最好的。因此,为了提高模型的性能,必须对超参数进行优化。
在每次迭代之后,你将输出与预期结果进行比较,评估准确性,并在必要时调整超参数。这是一个重复的过程。你可以手动完成,也可以使用许多优化技术中的一种,当你处理大量数据时,这些技术就会派上用场。
机器学习中的顶级优化技术
现在让我们谈谈你可以用来优化你的模型的超参数的技术。
穷举式搜索
穷举搜索,或称粗暴搜索,是通过检查每个候选参数是否是一个很好的匹配来寻找最优化的超参数的过程。当你忘记自行车锁的密码时,你也会做同样的事情,并尝试所有可能的选项。在机器学习中,我们也做同样的事情,但选项的数量通常相当大。
穷举式搜索法很简单。例如,如果你正在使用k-means算法,你将手动搜索正确的集群数量。然而,如果有成百上千的选项需要你考虑,它就会变得令人难以忍受的沉重和缓慢。这使得粗暴的搜索在大多数现实生活的案例中都是低效的。
梯度下降法
梯度下降是模型优化中最常见的算法,用于最小化误差。为了执行梯度下降,你必须在训练数据集上迭代,同时重新调整模型。
你的目标是使成本函数最小化,因为这意味着你得到尽可能小的误差并提高模型的准确性。
在图上,你可以看到梯度下降算法是如何在变量空间中行进的图形表示。要想开始,你需要在图上随机取一个点,任意选择一个方向。如果你看到误差越来越大,这意味着你选择了错误的方向。
当你不能再改进(减少误差)时,优化就结束了,你已经找到了一个局部最小值。在下面的视频中,你会发现梯度下降的工作原理的逐步解释。
到目前为止看起来还不错。然而,当有几个局部最小值时,经典的梯度下降法将不能很好地工作。找到你的第一个最小值,你将简单地停止搜索,因为该算法只找到一个局部的,它不是为了找到全局的。
**注意:**在梯度下降中,你以相同大小的步骤前进。如果你选择的学习率过大,算法就会跳来跳去,而无法接近正确的答案。如果它太小,计算就会开始模仿穷举搜索,这当然是低效的。
所以你必须非常谨慎地选择学习率。如果做得对,梯度下降成为一种计算效率高且相当快速的优化模型的方法。
遗传算法
遗传算法代表了另一种ML优化的方法。这些算法的逻辑背后的原则是试图将进化理论应用于机器学习。
在进化理论中,只有那些具有最佳适应机制的标本才能生存和繁殖。在机器学习模型的情况下,你怎么知道哪些标本是最好的,哪些不是?
想象一下,你手头有一堆随机的算法。这将是你的群体。在具有一些预定义超参数的多个模型中,有些模型比其他模型调整得更好。让我们找到它们吧!首先,你计算每个模型的准确性。然后,你只保留那些效果最好的。现在你可以生成一些与最佳模型类似的超参数的后代,以得到第二代模型。
你可以在这张图片中看到这个算法背后的逻辑。
我们多次重复这个过程,只有最好的模型才能在这个过程结束时存活下来。遗传算法有助于避免卡在局部最小/最大值。它们在优化神经网络模型中很常见。
深度学习模型的优化
在深度学习中使用好的、前沿的算法而不是通用的算法是很重要的,因为训练需要大量的计算能力。
带动量的随机梯度下降法、RMSProp和Adam优化器是专门为深度学习优化创建的算法。在deeplearning.ai上有一系列关于神经网络优化的视频,涵盖了这些算法,我们建议观看。
带动量的随机梯度下降法
这种方法的缺点是,它需要大量的更新,梯度下降的步骤是有噪音的。正因为如此,梯度可能会走向错误的方向,变得非常昂贵的计算。这就是为什么经常使用其他优化算法的原因。
RMSProp
RMSProp对于规范梯度本身很有用,因为它平衡了步长。它甚至可以在最小的批次中工作。
亚当优化器
亚当优化器可以处理噪音问题,即使在大数据集和参数下也能工作。
关于ML优化还有什么可读的
给予如何优化每个ML模型的一般建议是很难的,而且几乎是道德上的错误。这就是为什么最好是通过实例来学习:
- 如果你对优化神经网络和比较不同优化器的有效性感兴趣,可以试试Sanket Doshi的帖子。
- 你也可以通过Berkey AI研究来学习如何用强化学习来优化模型。
- 在我们的博客上阅读更多关于DL算法的内容。
请继续关注我们的博客,了解更多关于计算机科学、机器学习、函数式编程等方面的文章!