📜  梯度下降算法及其变体

📅  最后修改于: 2022-05-13 01:58:09.181000             🧑  作者: Mango

梯度下降算法及其变体

梯度下降是一种优化算法,用于在各种机器学习算法中最小化成本函数。它主要用于更新学习模型的参数。

梯度下降的类型:

  1. 批量梯度下降:这是一种梯度下降,它处理梯度下降每次迭代的所有训练样本。但是如果训练样本的数量很大,那么批量梯度下降在计算上非常昂贵。因此,如果训练样本的数量很大,那么批量梯度下降不是首选。相反,我们更喜欢使用随机梯度下降或小批量梯度下降。
  2. 随机梯度下降:这是一种梯度下降,每次迭代处理 1 个训练示例。因此,即使在只处理了一个示例的一次迭代之后,参数也会被更新。因此,这比批量梯度下降要快得多。但是同样,当训练样例的数量很大时,即使这样它也只处理一个样例,这对系统来说可能是额外的开销,因为迭代次数会非常大。
  3. 小批量梯度下降:这是一种梯度下降,比批量梯度下降和随机梯度下降都快。这里有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
    
    }
    

    梯度下降不同变体的收敛趋势:

    在批量梯度下降的情况下,算法遵循一条通往最小值的直线路径。如果代价函数是凸的,那么它收敛到全局最小值,如果代价函数不是凸的,那么它收敛到局部最小值。这里的学习率通常保持不变。

    在随机梯度下降和小批量梯度下降的情况下,算法不会收敛,而是继续围绕全局最小值波动。因此为了让它收敛,我们必须慢慢改变学习率。然而,随机梯度下降的收敛噪声要大得多,因为在一次迭代中,它只处理一个训练示例。