梯度下降法是机器学习优化所使用的基础算法,即让参数沿着梯度的负方向移动,到达最小值,那么为什么梯度方向是最好的方向呢,这其实是数学分析里的知识,很久没看自己甚至有点忘了,所以记一下加深一下记忆。
导数
在微积分中,导数的定义是函数的变化率,即$f'(x)=\lim_{\Delta x\to 0}{\frac{f(x+\Delta x)-f(x)}{\Delta x}}$,一元函数的情况其实是没有梯度的概念的,因为梯度是一个方向,但是如果要定义的话也是可以的,由于一元函数的定义域是一条直线,即$x$轴,所以梯度只可能有两个方向,一个是正方向,一个是负方向,所以一元函数的梯度导数的符号,大于0就是正方向,小于0就是负方向。也就是说,如果函数在某一点的导数大于0,则需要将自变量向左移动才能到达极小值;反之如果函数在某一点的导数小于0,则需要将自变量向右移动才能到达最小值。以$f(x)=x^2$为例,当$x>0$时,导函数大于0,而最小值在$x=0$处,所以$x$需要向左移动;而$x<0$时,导函数小于0,而$x=0$在右边,所以需要向右移动。
从一元到多元
以二元函数为例,一元函数只有一个变量,所以方向只有两个,而二元函数以及多元函数包含了不止一个变量,所以每一个点都有无穷个方向。在多元函数中有偏导数的概念,如二元的时候可以分别对两个变量求导,这时候其实是固定了另一个变量的,也就是说,偏导数描述的是在坐标轴的方向上的变化率。但是其他方向上的变化率如何表示呢,这时候需要引入方向导数的概念。我们知道,一个点$(x,y)$的任意一个方向可以表示为$l=(\cos\theta,\sin\theta)$,而任意一个方向上的导数就可以表示为这个方向上平均变化率的极限。即
$$\frac{\partial f}{\partial l}=\lim_{t\to0}{\frac{f(x+t\cos\theta, y+t\sin\theta)-f(x,y)}{t}}$$
而数学分析中的结论可以证明$\frac{\partial f}{\partial l}=\frac{\partial f}{\partial x}\cos\theta+\frac{\partial f}{\partial y}\sin\theta=(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y})\cdot(\cos\theta,\sin\theta)$,我们需要找的是使得函数下降最快的方向,也就是$\left|\frac{\partial f}{\partial l}\right|$最大的方向,而一个点的偏导数是固定的,所以只能靠改变$\theta$来实现,根据Cauchy不等式,当$(\cos\theta,\sin\theta)$的方向和偏导数的方向一致时,变化率是最大的。所以数学上将$(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y})$称为函数在这一点的梯度,沿着这个方向,函数的变化率最大。
不管是一元函数还是多元函数,梯度都只是一个方向,而每次具体沿着梯度方向走多远需要自己来确定,而这就是优化过程中的步长。
在机器学习中,我们的目的是使得代价函数最小,而代价函数其实就是关于模型变量的多元函数,所以为了使得函数下降最快,我们需要沿着梯度的方向下降。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。