Python教程-梯度下降算法
梯度下降是一种优化算法,用于许多机器学习算法中的成本函数最小化。梯度下降算法用于更新学习模型的参数。
以下是不同类型的梯度下降:
- 批量梯度下降: 批量梯度下降是一种梯度下降算法,用于在每次梯度下降迭代时处理所有训练数据集。假设训练数据集的数量很大,批量梯度下降将相对昂贵。因此,如果训练数据集的数量很大,建议用户不使用批量梯度下降,而是使用小批量梯度下降。
- 小批量梯度下降: 小批量梯度下降是梯度下降的一种类型,它比其他两种梯度下降类型更快。假设用户有“p”(其中“p”是批量梯度下降)数据集,其中p < m(其中“m”是小批量梯度下降)将在每次迭代中处理。因此,即使“p”训练数据集的数量很大,小批量梯度下降也会在一次尝试中以“p”个训练数据集的批处理方式处理它。因此,它可以处理具有较少迭代次数的大型训练数据集。
- 随机梯度下降: 随机梯度下降是一种梯度下降类型,它可以在每次迭代中处理一个训练数据集。因此,参数将在每次迭代后更新,每次处理一个数据集。这种梯度下降比批量梯度下降快。但是,即使训练数据集的数量很大,它也将一次处理一个数据集。因此,迭代次数将很大。
使用的变量:
让'k'是训练数据集的数量。
让'j'是数据集中的特征数量。
如果p == k,小批量梯度下降将类似于批量梯度下降。 (其中'p'是批量梯度下降)
用于批量梯度下降的算法:
让hθ(a)表示线性回归的假设。然后成本函数将由以下公式给出:
让Σ表示从t = 1到k的所有训练数据集的总和。
Gtrain(θ) = (1/2k) Σ (hθ(a(t)) - b(t))2
Repeat {
θg = θg - (learning rate/k) * Σ (hθ(a(t)) - b(t))ag(t)
For every g = 0 …j
}
其中ag(t)表示t th训练数据集的g th特征,假设'k'很大(例如,700万个训练数据集),则批量梯度下降将花费几小时甚至几天来完成该过程。因此,对于大型训练数据集,不建议用户使用批量梯度下降,因为它会减慢机器学习的学习过程。
用于小批量梯度下降的算法
假设“p”是一个批次中的数据集数量,其中p < k。
让p = 10,k = 100;
但是用户可以调整批处理大小。通常将其编写为2的幂。
Repeat {
For t = 1, 11, 21, ….., 91
Let Σ be the summation from t to t+9 represented by d.
Θg = θg - (learning rate/size of (p)) * Σ (hθ(a(d)) - b(d))ag(d)
For every g = 0 …j
}
用于随机梯度下降的算法:
- 此梯度下降将随机洗牌数据集以训练每种数据。
- 随机梯度下降每次迭代只采用一个数据集。
Hence,
Let (a(t), b(t)) be the training dataset
Cost(θ, (a(t), b(t))) = (1/2) Σ (hθ(a(t)) - b(t))2
Gtrain(θ) = (1/k) Σ Cost (θ, (a(t), b(t)))
Repeat {
For t = 1 to k{
Θg = θg - (learning rate) * Σ (hθ(a(t)) - b(t))ag(t)
For every g = 0 …j
}
}
结论
在本教程中,我们讨论了不同类型的梯度下降算法及其变体。