Skip to content

Latest commit

 

History

History
149 lines (75 loc) · 10.4 KB

how-optimization-works.md

File metadata and controls

149 lines (75 loc) · 10.4 KB

如何优化工作

原文:www.kdnuggets.com/2019/04/how-optimization-works.html

c 评论

查看《如何优化工作》的完整课程内容,包括视频、幻灯片和代码。

优化是一个华丽的词汇,意思是“找到最佳方式”。如果我们仔细观察喝茶的过程,就能看到它是如何工作的。


我们的前三大课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全领域的职业轨道。

2. 谷歌数据分析专业证书 - 提升您的数据分析能力

3. 谷歌 IT 支持专业证书 - 支持您所在组织的 IT


茶的最佳温度是存在的。如果你的茶太热,它会烫伤你的舌头,你可能要三天才能尝到味道。如果茶温温,完全没有满足感。中间有一个最佳点,在那里它温暖舒适,从内而外温暖你的喉咙,辐射到你的腹部。这就是茶的理想温度。

figure-name

在优化中,我们尝试找到这种令人满意的中间状态。这就像是《金发姑娘与三只熊》中的情节:金发姑娘尝试了爸爸熊的床,觉得太硬;尝试了妈妈熊的床,觉得太软;然后尝试了小熊的床,发现刚刚好。

找到如何做到刚刚好的方法,原来是一个非常常见的问题。数学家和计算机科学家都喜欢它,因为它非常具体且描述清晰。你知道自己是否做对了,可以将你的解决方案与其他人的进行比较,看看谁更快找到了解决方案。

当计算机科学家尝试找到茶的最佳温度时,他们首先会把问题颠倒过来。他们不是试图最大化喝茶的享受,而是尽量减少喝茶时的痛苦。结果是一样的,数学计算也是相同的。并不是说所有计算机科学家都是悲观主义者,而是大多数优化问题自然以成本——如金钱、时间、资源——来描述,而不是以收益来描述。在数学中,将所有问题统一成相同的形式来解决会比较方便,这样你只需要解决一次。

figure-name

在机器学习中,这种代价通常被称为误差函数,因为误差是不希望出现的东西,即苦味,是被最小化的。它也可以被称为代价函数、损失函数或能量函数。它们的含义几乎是相同的。

穷举搜索

找到最佳茶温有几种方法。最明显的方法就是直接查看曲线并选择最低点。不幸的是,当我们开始时实际上并不知道曲线是什么。这在优化问题中是隐含的。

figure-name

但我们可以利用我们原来的想法,直接测量曲线。我们可以在给定的温度下准备一杯茶,服务后询问我们的测试对象他们的感受。然后我们可以对整个范围内的每个温度重复这个过程。完成这个过程后,我们确实知道整个曲线的样子,然后我们可以选择茶饮者报告的最喜欢的温度,也就是最少的苦味。

figure-name

这种寻找最佳茶温的方法被称为穷举搜索。它直接且有效,但可能需要一些时间。如果我们的时间有限,值得尝试几种其他方法。

梯度下降

如果你想象我们的茶苦味曲线实际上是一个物理碗,那么我们可以通过将一个弹珠放进去并让它滚动直到停止来轻松找到底部。这就是梯度下降的直观理解——字面意思是“下坡”。

为了使用梯度下降,我们从一个任意的温度开始。在开始之前,我们对我们的曲线一无所知,所以我们做一个随机的猜测。我们在那个温度下冲泡一杯茶,看看我们的品茶者对它的喜欢程度。

gradient-descent

接下来,诀窍是弄清楚哪个方向是下坡,哪个方向是上坡。要搞清楚这一点,我们选择一个方向,并选择一个非常小的温度变化。例如,我们选择左边的温度。然后我们用这个稍微凉一点的温度再冲一杯茶,看看是否比第一杯更好。我们发现其实更差了。现在我们知道“下坡”是在右边——也就是我们需要让下一杯茶更暖才能更好。

gradient-descent2

我们在温暖茶的方向上迈出更大的步伐,冲泡一杯新茶,并重新开始这个过程。

gradient-descent

我们重复这个过程,直到找到最适合泡茶的温度。

gradient-descent

坡度越陡,我们可以迈出的步伐就越大。坡度越浅,步伐越小。

gradient-descent

当我们退后一步并从我们的茶饮者那里得到完全相同的享受时,我们就知道一切都完成了。这只能在碗的底部发生,在那里是平的,没有下坡。

有很多梯度下降方法。它们大多数是通过聪明的方式尽可能高效地测量斜率,以尽可能少的步骤到达碗底——尽可能少地冲泡茶水。它们使用不同的技巧来避免完全计算斜率或选择尽可能大的步长,但基本直觉是相同的。

包括曲率

寻找碗底的一个技巧是,在决定采取多大步时,不仅使用斜率,还使用曲率。当小球开始滚下碗的侧面时,斜率是否变得更陡?

gradient-descent-curvature

如果是这样,那么底部可能仍然很远。采取大步。

gradient-descent-curvature

还是斜率变得更平缓并开始接近底部?

gradient-descent-curvature

如果是这样,底部可能越来越近。现在采取更小的步伐。

gradient-descent-curvature

曲率,也就是斜率的斜率或赫希矩阵,准确地说,这在尽可能少走步数时非常有帮助,但计算起来也可能更加昂贵。这是在优化中经常出现的权衡。我们最终在必须采取的步骤数和计算下一个步骤应在哪里的难度之间进行选择。

梯度下降可能会失败

像许多数学问题一样,你能够做的假设越多,你能提出的解决方案就越好。不幸的是,在处理真实数据时,这些假设并不总是适用。

这种掉小球的方法可能会失败很多次。如果有多个小山谷供小球滚入,我们可能会错过最深的一个。每一个这样的碗叫做局部最小值。我们感兴趣的是找到全局最小值,即所有碗中最深的一个。想象一下我们在炎热的日子里测试茶的温度。如果茶变得足够冷,它可能成为一种非常受欢迎的冰茶。仅靠梯度下降,我们永远无法发现这一点。

figure-name

如果误差函数不平滑,可能会有许多地方让小球卡住。如果我们的茶饮者的享受受到列车通过的严重影响,就可能发生这种情况。列车的周期性出现可能会在我们的数据中引入波动。

figure-name

如果你尝试优化的误差函数发生离散跳跃,这将是一个挑战。球体在楼梯上不容易滚动。如果我们的茶客需要在 10 分制上评分,他们可能会遇到这种情况。

figure-name

如果误差函数大部分是一个平坦的区域,但有一个狭窄而深的底部,那么球体可能不容易找到它。也许我们的茶客完全厌恶任何不完美的茶。

figure-name

所有这些情况都发生在真实的机器学习优化问题中。

稳健方法

如果我们怀疑我们的茶满意度曲线具有这些棘手的特性,我们可以总是回到穷举搜索。不幸的是,穷举搜索对于许多问题需要极其长的时间。幸运的是,我们有一个中间方案。有一套方法比梯度下降更强大。它们被称为遗传算法、进化算法和模拟退火。这些方法的计算时间比梯度下降更长,步骤更多,但它们不容易崩溃。每种方法都有其独特之处,但大多数方法都有一个共同特征,就是步骤和跳跃的随机性。这帮助它们发现误差函数的最深谷,即使这些谷很难找到。

依赖梯度下降的优化算法就像一级方程式赛车。它们极其快速和高效,但需要一个非常规则的赛道(误差函数)才能发挥良好。一个不恰当的减速带可能会毁掉它。更稳健的方法就像四轮驱动的皮卡车。它们的速度远不如赛车,但能处理更多的地形变化。而穷举搜索就像徒步旅行。你可以到达任何地方,但可能需要非常长的时间。它们在不同的情况下各有其不可替代的价值。

figure-name

原始。已获许可转载。

相关:

  • 数据科学家的优化 101

  • 使用 R 进行优化

  • 梯度下降的直观介绍

更多相关内容