本文总结了线性回归算法里用到的一些微积分知识,接着根据最小均方差推导出梯度下降算法以及优化后的随机梯度下降算法。
维基百科上有教程可以参考,比如 Chain Rule 和 Partial Derivatives。
假设我们训练数据集 (training data set) 有 m 个数据 (x0,y0),(x1,y1),...(xm,ym) ,我们用线性方程 h(x)=θ0+θ1x 来拟合这组数据,怎么样来选取参数 θ0 和 θ1 来最优拟合这组数据呢?
我们可以把这 m 个点画在二维坐标系里,然后计算这 m 个点到我们的线性方程所描述的直线的最短距离,当这些点到我们的拟合直线的距离总和最小时,那么我们就找到了最优的拟合方案了。所以,问题转化为求下面函数的最小值:
上面的公式叫成本函数 (Cost Function),其中 h(xi) 是我们的拟合函数针对 xi 这个点预测出来的值。乘以 12 是为了计算方便,后文我们会看到。
上面我们只考虑了一个变量 x ,即决定这组数据 y 值的只有一个变量。考虑更一般的情况,有 n 个变量 x1,x2,x3,...xn 决定 y 的值,那么我们的预测函数模型可以改写如下:
我们让 x0 为常数 1,用累加器运算符重写上面的预测函数
θ0,θ1,...θn 我们统称为 θ ,是我们的预测函数的 n 个参数 (parameters)。即一组 θ 值就决定了一个预测函数,我们记作 hθ(x) ,为了简便起见,在不引起误解的情况下我们也把它简写为 h(x) 。理论上,预测函数有无穷多个,我们求解的目标就是找出一个最优的 θ 值。
!!! Hint “考考你”
当有 n 个变量 x1,x2,...xn 决定 y 的值的时候,训练数据集应该长什么样呢?
为了计算 J(θ) 的最小值,我们选取一组初始的 θ ,然后逐步调整 θ 的值,以便让 J(θ) 逐渐变小,最后我们希望能让 J(θ) 收敛在一个极值附近,这样我们就找到了最优或局部最优的解。 θ 的迭代公式为:
其中, α 是叫学习率 (learning rate),表示我们一次要让 θj 往前迈多大步子。如果步子太小,意味着要计算很多次才能到达目的地,如果步子太大,可以会直接跨过目的地,从而无法收敛。 ∂∂θjJ(θ) 就是成本函数的偏导数 (partial derivatives)。
!!! Hint “偏导数的物理意义”
在这个公式里,可以简单地把偏导数理解为斜率。我们要让 θj 不停地迭代,则根据当前 θj 的值,我们算出 J(θ) 在 θj 上的斜率,然后再乘以我们的学习率 α 就让我们的 θj 往前迈了一小步。
现在问题转化为求 J(θ) 的偏导数,这个推导过程会用到文章开头部分介绍的几个微积分运算基本法则。
根据成本函数的定义
根据上文的法则三
根据上文的法则四,这里也可以看到之前除以 2 的目的是为了抵消计算偏导数时乘以 2。
根据法则五
最后得出我们的参数迭代函数
这个就是 LSM (Least Mean Squares) 迭代算法,也叫 Widrow-Hoff 学习算法。
解析一下这个公式几个关键部分的含义
这个公式有些符合直觉的地方,比如 (h(x(i))−y(i)) 表示的是预测值与真实值的误差,当误差比较大时,经过一轮的迭代, θj 的步幅就迈得比较大。即当我们的参数 θ 离我们的目标值很远的时候,迭代一次的值变化比较大,可以快速地收敛,而当 θ 离目标值比较近的时候,迭代一次的值变化比较小,即慢慢地收敛到目标值。
这个公式怎么样用编程语言来实现呢?在编写机器学习算法的时候,一般步骤如下:
批量梯度下降算法对参数进行一次迭代运算,就需要遍历所有的训练数据集。当训练数据集比较大时,这个算法的效率会很低。考虑另外一个算法:
这就是 随机梯度下降算法 (stochastic gradient descent)。这个算法的关键点是不去遍历所有的训练数据集,而是改成每次随机地从训练数据集里取一个数据进行参数迭代计算。
!!! Hint “怎么理解随机”
为什么这么神奇呢?为什么随机从训练数据集里选取一个数据来迭代,不但不影响最终计算结果,还大大地提高了效率。看数学时最怕的就是 我们考虑 bla bla bla,作者说出 “我们考虑 bla bla bla” 时背后的过程是怎么样的?坦白讲,怎么样从数学上证明随机梯度下降算法和批量梯度下降算法是等价的,我也不知道。不过我有个直观的可以帮助理解的解释。回到成本函数的定义: J(θ)=12∑mi=0(h(x(i))−y(i))2 。我们说过,这里累加后除以 2 是为了计算方便,那么我们除以 m 是什么意思呢?答案是平均值,即所有训练数据集上的点到我们预测函数的距离的平均值。因为 m 是正整数, J(θ) 除以 m 不影响它的最小值的属性。再回到随机选取训练数据集里的一个数据这个做法来看,如果计算次数足够多,并且是真正随机,那么随机选取出来的这组数据从概率的角度来看,和平均值是相当的。打个比方,有一个储钱罐里有 1 角的硬币 10 枚,5 角的硬币 2 枚,1 元的硬币 1 枚,总计 3 元,13 枚硬币。你随机从里面取 1000 次,每次取出来的硬币把币值记录下来,然后放回储钱罐里。这样最后去算这 1000 次取出来的钱的平均值 (1000 次取出来的币值总和除以 1000) 和储钱罐里每枚硬币的平均值 (3/13 元) 应该是近似相等的。我数学太水,概率论还没复习,哪位概率论高人给证明一下啊。
这样,我们基本上把梯度下降算法,最小均方差,随机梯度下降算法的来龙去脉理了一遍。