梯度下降法

梯度下降法,又称“最速下降法”,是机器学习领域最常用的优化算法之一,适用于各种无约束的优化问题。

下面我们简单叙述梯度下降法的原理。假设无约束优化函数是:

\min_{\theta\in R^n} f(\theta)

我们需要求解上式的极小值,当然我们可以直接求解偏导数,令偏导数等于0,但是有时这种方法并不现实,因为偏导数可能非常复杂,难以求解零点。梯度下降法尝试从任意点出发,采用迭代的方式,每次都使函数的值下降一点点。

\theta_{k+1} = \theta_{k} - \eta \Delta \theta

其中\eta是一个很小的正数,一般为一个常数(当然也可以随着梯度下降法的进行动态调整大小),我们的目标是让f(\theta_{k+1})<f(\theta_k)
为了达到目标,我们尝试让f(\theta)\theta_k处做泰勒展开:

f(\theta) = f(\theta_k) + \nabla f(\theta_k)\cdot (\theta-\theta_k)

通过让右边第二项恒小于等于0,左边就会小于f(\theta_k),令\theta-\theta_k = -\eta \nabla f(\theta_k) 即可满足条件,所以很容易得到\theta_{k+1}的更新方法:
\theta_{k+1} = \theta_k - \eta \nabla f(\theta_k)

从函数图像上看,某点的梯度方向是该点处函数上升最快的方向,因此我们每次向梯度的反方向取值,企图寻找到函数值下降较快的方向。梯度下降法用于凸函数时能寻找到全局最优,但是对于非凸函数可能找到的是局部最优点,此时需要用其他方法保证解是可接受的(全局最优或者一个可接受范围内的局部最优),如选取多个初始点,或者模拟退火等。

对于机器学习问题来说,优化函数f(\theta)一般是关乎训练集中所有数据(点)的一个函数,比如最小二乘的目标函数(假设训练集的数据格式为:(\mathbf{x_i}, y_i), 函数g为训练模型):
f(\theta) = \sum_{i=1}^N ||y_i - \hat{y_i}||_2^2 = \sum_{i=1}^N ||y_i - g(\mathbf{x_i}, \theta)||_2^2

\theta是模型g的参数,为了求解关于\theta的导数,我们需要对整个数据集进行运算以对参数做一次更新,对于大规模数据而言,这无疑是非常耗时的。为了适应现实需求,人们发展了各种实现梯度下降的方法,整体分为三种:批量梯度下降,随机梯度下降,小批量梯度下降。

批量梯度下降法

最简单的方法, 每次使用数据集中所有数据计算\theta的偏导数,更新公式为:

\theta_{k+1} = \theta_k - \eta \nabla f(\theta_k)
适用于小规模的数据,每次下降的方向都是整体函数值减小的方向,缺点就是下降太慢了,不能直接应用于大规模数据,且无法进行在线学习。

批量梯度下降过程.png

随机梯度下降法

随机取点,每次针对一个数据点\mathbf{x}_i求偏导进行更新,更新公式为:

\theta_{k+1} = \theta_k - \eta \nabla f(\theta_k, \mathbf{x}_i)

这样更新更快,虽然每一次下降的方向不一定是全局下降的方向,但是多个样本累加起来整体的方向是下降的方向。\theta更新的路线更加曲折。

随机.jpg

小批量梯度下降法

对于上面两种方法的折中,选取一小批样本,在这一批样本上求解偏导数对参数进行迭代更新。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容