机器人入门必看,三分钟掌握基础!

余生长醉 提交于 2020-04-07 12:18:07
作者简介:白朔天,前滴滴算法专家,中科院博士,拉勾教育专栏作者。本文选自专栏: 《机器学习入门21讲》

你好,我是白朔天,今天给大家分享到的,是机器学习的必备基础,也就是数学基础。本课时我们主要学习极值,以及如何通过梯度下降法求解极值。

毋庸置疑,人工智能技术可以让机器帮助人类做出更正确的决策。而在做决策的时刻,机器就必然会面对在多个决策之间进行抉择的情形。这个决策通常是在有某些限定条件下的选择取舍。

例如,小明在填写高考志愿时,需要在多所目标高校中选择最合适自己的那所。假设在这个过程中,小明的决策依据是学校综合实力和被录取可能性的求和。对于北大、北理工、北大青鸟,三所学校的综合实力排名是递减的关系;而对于小明而言,他被录取的可能性是递增的关系。因此,在决策志愿时,就需要综合考虑这两个因素,以保证自己的考学利益最大化。此时,这个问题就是一个最优化决策的数学问题。

本文选自专栏:《机器学习入门21讲》

这个例子非常简单,可能简单扫一眼,人们就能得到最优决策的结果。能够快速决策的一个重要原因是它的决策变量只有选择某个学校这一个。而对于更加复杂的最优化决策问题,假设其决策变量有成千上万个,而决策结果受这成千上万个变量的共同影响时,人们作出最优决策将会变得非常困难。此时就是人工智能发挥作用的重要场景。

不管是简单还是复杂的最优化决策,其本质都是个数学问题,它与求解一个函数的极大值或极小值非常相似。机器学习的很多初学者可能会对数学具有恐惧心理,但我想告诉大家,当你掌握数学背后的逻辑和套路后,数学就是纸老虎。


对极值的执念

在这一课时,我将带你一起把这个纸老虎戳破。现在,我们开始探讨求解函数极值这个核心数学问题

假设有这样一个目标函数   y  =   f( x),
求解极值就是找到在某个定义域下   y  的最大值或最小值。

例如:

目标函数   y  = sin x  在定义域 [0,2π] 的区间内,当   x  取值 π/2 时, y可以达到最大值 1。

对于这样的极值求解问题,相信你一定并不陌生。原因在于高中数学的函数知识就是围绕着这些问题做文章的。高中数学告诉我们,极值的特点是导数为 0。因此,最常规的解法就是求解目标函数的一阶导数,令导数等于 0,并求解这个方程。

再以正弦函数为目标函数为例,y = sinx 的一阶导数 y' = cosx。令导数为 0,则 cosx = 0。在 [0,2π] 的定义域区间内,我们发现这个方程在 x = π/2 和 3π/2 时为 0。这分别对应着极大值和极小值。然后,分别把这两个极值点代入目标函数,你会发现,当 x = π/2 时,目标函数取得极大值 +1;当 x = 3π/2 时,目标函数取得极小值 -1。

高中解法简单粗暴,适用于绝大多数的极值求解问题。然而,现实中常常会遇到方程求解复杂的情况,这就是高中数学解法的局限性。

例如:

求解   x  为多少时,目标函数是   y  = sin x  + 5x^2 + 2 可取得最小值。

那么,你在求解一阶导数后得到 y' = cosx + 10x 并令其为 0。到这里都没有问题,只是最后的方程求解过程可能会让你不知所措。面对这种情况,我推荐使用梯度下降法来解决问题。

本文选自专栏:《机器学习入门21讲》

 

梯度下降法

我们看一下函数的梯度的概念。关于函数的梯度,需要你记住以下 4 点。

  1. 梯度的计算方式是求解函数关于每个变量的一阶偏导;
  2. 梯度的标记为反三角 ▽;
  3. 梯度是个向量;
  4. 梯度表示函数变化率最大的方向。

关于第 4 点的证明,如果你感兴趣可以找一些相关资料。在此,我们记住就好。

梯度的计算方式虽然很简单,但它对于求解极值的作用却非常大。我们以爬山到山顶为例。为了最快到达山顶,你一定会选择走海拔变化最快的路径。最终不断前进到达了山顶。这个山顶就是海拔的最大值。梯度下降法就是借鉴这个思想来求解极值的,它也是最优化问题中最常用的优化算法。

梯度的计算流程是这样的:

1.梯度下降法会随机初始化一组自变量。2.计算目标函数在这个自变量上的梯度,并用梯度方向去更新自变量。通过不断循环执行第二步,最终得到极值。

这个流程形象来说,就是在山上随机初始化一个点,然后找到这个点的上山最快的方向并沿着这个方向前走一小步。通过重复多轮尝试找到最快的方向并走一小步,最终可以抵达山顶。通常更新自变量的过程会设置一个系数 α,叫作学习率。那么更新的方程式就是

值得说明的是,如果求解的是极大值,那么学习率 α 大于 0;如果求解的是极小值,那么 α 为负。

我们看一个例题:

利用梯度下降法,计算 y=(x1-1)^2+(x2-3)^2 的极小值。

此时为多变量的目标函数,因此梯度是个向量,为

由于求解极小值,故设置学习率为负数,-0.4。

首先,随机初始化自变量,假设为 [0,0]。接着进入梯度下降的循环。

1.第 1 轮循环,计算 [0,0] 处的梯度值,为 [-2,-6];更新参数的结果为 [0,0]-0.4*[-2,-6]=[0.8,2.4]。

2.第 2 轮循环,计算 [0.8,2.4] 处的梯度值,为 [-0.4,-1.2];更新参数的结果为 [0.96,2.88]。

3.第 3 轮循环,计算 [0.96,2.88] 处的梯度值,为 [-0.08,-0.24];更新参数的结果为 [0.99,2.98]。

4.第 4 轮循环,计算 [0.96,2.88] 处的梯度值,为 [-0.02,-0.05];更新参数的结果为 [1.0,3.0]。

后续继续循环,结果不再发生改变,得到目标函数的最小值

好了,今天的分享就讲到这里了,本课时我们主要学习了数学中的极值问题,以及如何使用梯度下降法求解极值问题,希望你能够熟练掌握本课时的基础,只有打牢基础才能够更好的学习后面的内容。

本文选自专栏:《机器学习入门21讲》

版权声明:本文版权归属拉勾教育及该专栏作者,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表,违者必究。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!