最优化(Optimization)在我们的日常生活中扮演着重要角色,最优化意味着找到问题的最优解。在机器学习中,通过训练集数据找到最优解,并在验证集上进行检测。
许多机器学习算法都需要用到最优化,例如线性回归(linear regression)、k最近邻(k-nearest neighbors)、神经网络(neural networks)等。本文着重介绍最优化的一种技术——梯度下降(Gradient Descent)。
目录
1. 什么是梯度下降
首先,利用一个登山的例子来说明梯度下降。假定你正在山顶上,你需要走到这座山的最低点,当然,这里假定你是不知道山的全貌的,并且你也不知道你要前往的确定的位置。那么,你该如何到达最低点呢?
最好的办法是观察你所在地点周围的地势,并确定哪个方向的地势是下降的,这将决定你前进的方向。如果沿着地势下降的路径走,你将很有可能达到最低点。用数学图形表示如下
找最低点的问题则转化为找到特定的参数 θ 0 \theta_0 θ0和 θ 1 \theta_1 θ1,使得成本函数 J ( θ 0 , θ 1 ) J(\theta_0, \theta_1) J(θ0,θ1)的值最小,而这样一座“山”就是是搜索空间,图中红色部分的山顶表示成本很大,而蓝色部分的山谷则表示成本很小。
根据方法的不同,可将梯度下降分为以下两种类型:
- 基于数据获取(data ingestion)
- 全批梯度下降算法(Full Batch Gradient Descent Algorithm):使用全部数据计算梯度。
- 随机梯度下降算法(Stochastic Gradient Descent Algorithm):使用一个样本数据计算梯度。
- 基于微分技术(differentiation techniques )
- 一阶微分(First order Differentiation)
- 二阶微分(Second order Differentiation)
计算梯度时需要计算成本函数的微分,我们既可以使用一阶微分,又可以使用二阶微分。
2. 使用梯度下降的挑战
梯度下降在大多数情况下都能很好地使用,但是在一些情况下却不能很好地表现,主要原因有以下几点:
- 数据挑战
- 梯度挑战
- 实现挑战
2.1 数据挑战
- 数据表现出一种非凸优化问题(non-convex optimization problem)。梯度下降只能用于定义好的凸优化问题(convex optimization problem)。
- 即使是一个凸优化问题,那也可能存在许多个极小值点。最小值点被称为全局最优(global minimum),而其他的极小值点被称为局部最优(local minima),我们的任务是要找到全局最优而非局部最优。
- 图形中也有可能存在鞍点(saddle point),鞍点处的梯度为0,但不是最优点,目前我们还没有特定的方法来避免这种点。
2.2 梯度挑战
- 如果梯度下降不能很好地执行,那可能出现了梯度消失(vanishing gradient)或梯度爆炸(exploding gradient),这两个问题分别在梯度过小和过大时出现,往往是由算法不收敛造成。
2.3 实现挑战
- 许多神经网络实践者不关心实现,但是关注资源利用非常重要。
- 同样需要关注的还有浮点数和软硬件的前提条件。
3. 梯度下降算法的变体
3.1 Vanilla Gradient Descent
这是梯度下降最简单的形式。它的主要特征是朝着成本函数的梯度方向小步走。
为了描述上的方便,这里认为参数只有一个 θ \theta θ。当前所在的点为 θ l \theta^l θl,需要前往的目标点 θ l + 1 \theta^{l+1} θl+1为
θ l + 1 = θ l − η ∇ J ( θ l ) \theta^{l+1}=\theta^l-\eta \nabla J(\theta^l) θl