Python 梯度下降算法

Python 梯度下降算法

梯度下降是一种用于最小化许多机器学习算法的代价函数的优化算法。梯度下降算法用于更新学习模型的参数。

以下是不同类型的梯度下降:

  • 批量梯度下降: 批量梯度下降是一种梯度算法,用于在梯度下降的每次迭代中处理所有训练数据集。假设训练数据集的数量很大,批量梯度下降将比较昂贵。因此,如果训练数据集的数量很大,建议不要使用批量梯度下降。相反,可以使用小批量梯度下降对大型训练数据集进行处理。
  • 小批量梯度下降: 小批量梯度下降是一种比其他两种梯度下降类型更快的梯度下降方法。假设用户有 ‘p’(其中 ‘p’ 是批量梯度下降)数据集,其中 ‘p < m’(其中 ‘m’ 是小批量梯度下降)将在每次迭代中处理。因此,即使训练数据集的数量很大,小批量梯度下降也将以 ‘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
}

其中 a g(t)表示第 g 个特征在第 t 个训练集中的值,假设如果 k 非常大(例如,有700万个训练集),那么批量梯度下降法将花费数小时甚至几天来完成该过程。因此,对于大型训练集,不建议用户使用批量梯度下降法,因为它会减慢机器的学习过程。

用于小批量梯度下降法的算法

假设 p 是一个批次中的数据集数量,其中 p < k

p = 10k = 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

        }
}

结论

在本教程中,我们讨论了不同类型的梯度下降算法及其变种。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程