我们要想把一件事情做好,最首要的是有一个明确的目标。比如,很多公司都会给员工制定KPI (Key Performance Indicator),这就是为了给人们的工作指明方向和目标。这个目标不仅是明确的,而且很可能是量化的(即包含具体的数字指标)。
从逻辑上讲,达成任何事,都可以分成两个步骤:
第1步,关键是保证目标正确(方向错了一切都白搭);第2步,关键是找到正确的执行策略,也就是目标的解法(光有目标却实现不了,也是白搭)。
上面的逻辑步骤,如果放在机器学习领域,仍然成立:
上面第1步中,类似这种「让XXX最小化」的问题,可以用数学上的「优化问题」来表述。也就是说,经过上面第1步,一个机器学习问题,就转化成了一个数学问题。而第2步,就是对这个数学问题求解的过程,这个求解过程,由一个完善的数学分支——优化理论来支撑。
本文的目标就是要解释清楚这个优化理论的大致脉络。
无论是在自然界和人类社会中,还是在人类建造的系统中,优化都是一种普遍存在的行为。下面是一些例子:
在我们的日常工作中,也经常会碰到「优化」问题。比如,在项目中如何做到投入资源最少,却取得最大的收益?一个推荐系统,如何让转化率最大化?一个用户流量分发系统,如何让触达用户的效率最高?
所有这些例子,都可以抽象成数学上的优化问题来描述。按照维基百科的解释,下面这几个概念是等同的:
在数学上,它们都可以表示成从备选集合中选出最佳元素的过程[2]。我们接下来统一使用「优化」这个词汇。
举一个简单的例子,假设我们有一个目标函数:
f(x) = 2x2 + 8x + 11
现在要求使 f(x) 最小,那么x取值应该是多少?这就是一个优化的例子。如果用公式来表达这个优化目标,应该表示成:
上面这个式子表示,x是自变量,取值可以在整个实数域R上变化。而问题的目标是:找到使得 f(x) 达到最小值的x的值是多少。
假设 x* 是该优化问题的解,那么可以表达成:
在这个例子中,f(x)的表达式比较简单,我们根据中学的数学知识就知道它是一个开口向上的抛物线。如下图所示:
从上面的函数图像很容易看出来,使得 f(x) 取最小值的点就是图中的红点,即:
x* = -2
那么,这个解是通过怎样的计算过程得到的呢?我们知道,一个连续函数在极值点的导数为零,可以利用这个特性来求解:
由于这个目标函数比较简单,所以我们很容易通过计算和推导得到了问题的解。这种通过严格的数学推导能够得到的解,可以称为解析解 (analytical solution)或闭式解 (closed-form solution)。
前面的抛物线只是一个例子。优化问题的一般形式[1],可以用下面的公式表达:
这个数学表达式的含义是:
对于实际中的优化问题,并不总是能得到闭式解。主要由于两个原因:
因此,解决优化问题的通用算法一般都是基于「迭代」的思路,通过一步一步的近似计算,逐步逼近真实的解。
迭代算法一般都是类似这样的过程:
(注意这里的每个迭代值xk,都是一个n维向量,所以用黑体字型来表示)
在迭代算法中,有一个关键的问题需要解决:在从第k步向第k+1步迭代的时候,如何决定往哪个方向移动?显然,根据前面我们对优化问题的定义,应该往目标函数变小的方向移动,即:
回到前面抛物线的目标函数,这时自变量x退化到一维(标量)。假设根据迭代算法我们当前走到了第k步,如下图:
图中红色箭头是xk点的切线方向,绿色箭头则是切线的相反方向。显然,下一步(第k+1步)应该沿着切线的相反方向迭代,去寻找xk+1的位置。这样,就能让目标函数f(x)的值越来越小,最终抵达最优解x*。
而对于一般的目标函数,自变量x是一个n维向量,对应一个n维空间。由于在多维空间中函数的图像是无法在视觉上体现的,所以我们先考虑x是二维向量的情况(也就有两个自变量),这时函数的图像是三维空间中的一个曲面。如下图:
与前面抛物线图像的情况类似,一次迭代沿着图中绿色箭头的方向进行,就像一个小球在山谷的斜坡上向下滚动,最终到达谷底(最优解)。
前面的两个例子比较形象地展示了迭代的方向。可以看出,迭代应该是向着与最优解不断接近的方向进行。但这个方向的选择在复杂的多维空间中并不容易。比如,在下图的函数图像中,曲面的「地形」比较复杂,每次的迭代方向就不是那么容易选择的了。
每一步迭代,都需要决定两个因素:
在优化理论中,选择迭代方向和步长的策略有两大类:
Line search的策略是每一步迭代都选择一个固定的方向(通过近似计算使得目标函数变小的方向),然后沿着这个方向前进一个合适的步长。而对于前进方向的选择上,又可以细分成不同的方法,下面简要介绍一下:
而trust region这种策略与line search不同,它在每一步迭代时并不会选择固定的前进方向,而是根据当前迭代位置选择一个近似区域。这个近似区域就被称为信赖区域 (trust region),因为在这个区域内可以做一些与目标函数近似的计算,如果区域太大这种近似就不成立了。trust region这种策略会先固定住信赖区域的大小,然后在这个区域内选择一个使目标函数变小的前进方向和步长(基于近似计算);如果发现计算中使用的近似计算与目标函数差距太大了,就减小信赖区域的大小,重新进行计算。
总体来讲,由于实际中目标函数都比较复杂,对应多维空间中曲面的「地形」也非常复杂,我们没法直接利用目标函数的全局信息来找到最优解。因此,迭代的时候,我们只能根据当前迭代位置附近的局部信息来做近似计算。这些局部信息可能来自于一阶导数(梯度)或二阶导数(Hessian矩阵),而近似计算则是基于泰勒公式 (Taylor formula)。不管是line search还是trust region,它们都可能使用同样的这些局部信息和近似计算方法。不过在基于近似计算的结果选择迭代方向和步长的时候,line search和trust region采取了两种不同的策略:line search在每一步迭代中固定住前进方向,然后试探合适的步长;而trust region则在每一步迭代中尝试同时选择前进方向和步长大小,而一旦信赖区域大小发生变化,前进方向和步长也都发生变化。
我们用下面的概念图来做一个总结(本文贡献的最有价值的一张图,点击看大图):
上图有一个有趣的现象值得注意:越是向左,越是偏理论;越是向右,越是偏实现。左边是数学理论,而右边则是可以在计算机上实现的算法。
严格来说,优化并不属于机器学习的范畴。它们之间的关联在于:机器学习的模型训练(即模型的求解)会用到优化理论。所以,这里留给我们的一个课题,就是讨论清楚这个关联是怎么来的(也就是本文开头的步骤1,如何把一个机器学习问题转化成一个优化问题)。
把机器学习问题转化成一个优化问题的关键在于,优化的目标怎么表达。由于机器学习的整套理论是基于概率的,因此,机器学习模型求解的优化目标,也是基于概率来表达的。我们下次再讨论机器学习的概率表达问题。
(正文完)
后记:在公众号上写文章,有一个好处:可以比较完善、系统地表达一个观点。但是,写一篇文章是耗时费力的,特别是对于技术性的文章。要保证质量,就很难保证频率。因此,最近开始重新玩微博,可以把平常的想法随时分享出来,也可以以更快地频率与别人互动。欢迎关注我的个人微博:微博上搜索我的名字「张铁蕾」。
其它精选文章: