梯度下降算法及其变体
梯度下降是一种优化算法,用于在各种机器学习算法中最小化成本函数。它主要用于更新学习模型的参数。
梯度下降的类型:
- 批量梯度下降:这是一种梯度下降,它处理梯度下降每次迭代的所有训练样本。但是如果训练样本的数量很大,那么批量梯度下降在计算上非常昂贵。因此,如果训练样本的数量很大,那么批量梯度下降不是首选。相反,我们更喜欢使用随机梯度下降或小批量梯度下降。
- 随机梯度下降:这是一种梯度下降,每次迭代处理 1 个训练示例。因此,即使在只处理了一个示例的一次迭代之后,参数也会被更新。因此,这比批量梯度下降要快得多。但是同样,当训练样例的数量很大时,即使这样它也只处理一个样例,这对系统来说可能是额外的开销,因为迭代次数会非常大。
- 小批量梯度下降:这是一种梯度下降,比批量梯度下降和随机梯度下降都快。这里有b 个例子,其中b
是每次迭代处理的。所以即使训练样例数量很大,也一次性分批处理b个训练样例。因此,它适用于更大的训练示例,并且迭代次数更少。
使用的变量:
让 m 是训练示例的数量。
设 n 为特征数。注意:如果 b == m,那么小批量梯度下降的行为将类似于批量梯度下降。
批量梯度下降算法:
设 h θ (x) 为线性回归的假设。然后,成本函数由下式给出:
让 Σ 表示从 i=1 到 m 的所有训练示例的总和。Jtrain(θ) = (1/2m) Σ( hθ(x(i)) - y(i))2 Repeat { θj = θj – (learning rate/m) * Σ( hθ(x(i)) - y(i))xj(i) For every j =0 …n }
其中 x j (i)表示第i个训练示例的第j个特征。所以如果m非常大(例如500万个训练样本),那么收敛到全局最小值需要几个小时甚至几天。这就是为什么对于大数据集,不建议使用批量梯度下降,因为它会减慢学习速度。
随机梯度下降算法:
1) 对数据集进行随机打乱,以便可以针对每种类型的数据均匀地训练参数。
2) 如上所述,每次迭代考虑一个示例。Hence, Let (x(i),y(i)) be the training example Cost(θ, (x(i),y(i))) = (1/2) Σ( hθ(x(i)) - y(i))2 Jtrain(θ) = (1/m) Σ Cost(θ, (x(i),y(i))) Repeat { For i=1 to m{ θj = θj – (learning rate) * Σ( hθ(x(i)) - y(i))xj(i) For every j =0 …n } }
小批量梯度下降算法:
假设 b 是一批中的示例数,其中 b < m。
假设 b = 10,m = 100;注意:但是我们可以调整批量大小。它通常保持为 2 的幂。 其背后的原因是因为某些硬件(例如 GPU)使用常见的批处理大小(例如 2 的幂)可以获得更好的运行时间。
Repeat { For i=1,11, 21,…..,91 Let Σ be the summation from i to i+9 represented by k. θj = θj – (learning rate/size of (b) ) * Σ( hθ(x(k)) - y(k))xj(k) For every j =0 …n }
梯度下降不同变体的收敛趋势:
在批量梯度下降的情况下,算法遵循一条通往最小值的直线路径。如果代价函数是凸的,那么它收敛到全局最小值,如果代价函数不是凸的,那么它收敛到局部最小值。这里的学习率通常保持不变。
在随机梯度下降和小批量梯度下降的情况下,算法不会收敛,而是继续围绕全局最小值波动。因此为了让它收敛,我们必须慢慢改变学习率。然而,随机梯度下降的收敛噪声要大得多,因为在一次迭代中,它只处理一个训练示例。