梯度下降 Gradient descent

Gradient descent——梯度下降

 

词汇:

Gradient:梯度

Descent:下降

 

 

梯度下降(gradient descent)是几乎每种机器学习模型中使用的优化算法。

 

该算法是几乎所有ML模型的学习方式!

 

梯度下降的直观描述如下:

如图1所示,登山运动员从山顶下山,他希望走到山底部的最低点

 

下面进行建模

基本假设:

1. 登山运动员下山的步长固定,为一定值(常数)

2. 山底存在最低点

 

在坐标轴上做出“山”的三维图像如图1所示

分析:

登山运动员下山时,步长为一定值,为了保证其走到山底的最低点,我们采用“贪心”策略:

(1)对于当前位置,我们基于当前状态走到当前可达的最低点

(2)重复(1),直到周围的海拔均比当前海拔高,结束

 

图1 梯度下降方法示例图

 

梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。

 

 

(引用自博客https://blog.csdn.net/pangjiuzala/article/details/72630166

 

 

梯度下降(gradient descent)是几乎每种机器学习模型中使用的优化算法。

 

该算法是几乎所有ML模型的学习方式!

 

图2 梯度下降方法示例图

 

梯度下降(gradient descent)中的几个重要名词:

1. 梯度

2. learning rate即学习率

3. bias偏差

 

下面一一解释

1. 梯度 gradient

图3 梯度

 

梯度是微积分中一个很重要的概念

  • 在单变量的函数中f(x),梯度其实就是函数的微分df/dx,代表着函数在某个给定点P(x, f(x))的切线的斜率
  • 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向

 

这也就说明了为什么我们需要千方百计的求取梯度!我们需要到达山底,就需要在每一步观测到此时最陡峭的地方,梯度就恰巧告诉了我们这个方向。梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向,这正是我们所需要的。所以我们只要沿着梯度的方向一直走,就能走到局部的最低点!

 

(引用自博客https://blog.csdn.net/pangjiuzala/article/details/72630166

单变量的梯度下降参见上方的图2,多变量的梯度下降参见上方的图1

 

2. 学习率 learning rate

学习率被定义为每次迭代中成本函数中最小化的量。简单来说,我们下降到成本函数的最小值的速率是学习率。我们应该非常仔细地选择学习率,因为它不应该是非常大的,以至于最佳解决方案被错过,也不应该非常低,以至于网络需要融合。 

 

直观描述如下:

学习率是网络放弃旧信念的速度有多快。

如果一个孩子看到10只猫的例子,并且所有猫都有橙色皮毛,它会认为猫有橙色皮毛,并且在尝试识别猫时会寻找橙色皮毛。现在它看到一只黑猫和她的父母告诉她这是一只猫(监督学习)。凭借较大的“学习率”,它将很快意识到“橙皮”并不是猫最重要的特征。学习率很低,它会认为这只黑猫是一个异常值,猫仍然是橙色的。

好的,这个例子有点紧张。关键是更高的学习率意味着网络更快地改变主意。在上面的情况下这可能是好的,但也可能是坏的。如果学习率太高,可能会开始认为所有的猫都是黑色的,即使它看到的是更多的橙色猫而不是黑色的猫。

一般来说,您希望找到一个足够低的学习率,使网络收敛到有用的东西,但又足够高,以至于您不必花费数年时间来训练它。

(引用自https://www.quora.com/What-is-the-learning-rate-in-neural-networks

 

3. 偏差 bias

偏差(Bias)——除了权重之外,另一个被应用于输入的线性分量被称为偏差。它被加到权重与输入相乘的结果中。基本上添加偏差的目的是来改变权重与输入相乘所得结果的范围的。添加偏差后,结果将看起来像a* W1 +偏差。这是输入变换的最终线性分量。(引用自博客https://blog.csdn.net/pangjiuzala/article/details/72630166

 

 

梯度下降python代码示例

def train(X, y, W, B, alpha, max_iters):
    '''
    Performs GD on all training examples,
    X: Training data set,
    y: Labels for training data,
    W: Weights vector,
    B: Bias variable,
    alpha: The learning rate,
    max_iters: Maximum GD iterations.
    '''
    dW = 0  # Weights gradient accumulator
    dB = 0  # Bias gradient accumulator
    m = X.shape[0]  # No. of training examples
    for i in range(max_iters):
        dW = 0  # Reseting the accumulators
        dB = 0
        for j in range(m):
            # 1. Iterate over all examples,
            # 2. Compute gradients of the weights and biases in w_grad and b_grad,
            # 3. Update dW by adding w_grad and dB by adding b_grad,
            W = W - alpha * (dW / m)  # Update the weights
            B = B - alpha * (dB / m)  # Update the bias

    return W, B  # Return the updated weights and bias.

 

其中,关键参数包括X, y, W, B, alpha, max_iters

    X:训练数据集
    y:数据集标记
    W:权重向量
    B:偏置变量
    alpha:learning rate
     max_iters:最大GD迭代次数
 

    dW = 0 # 权重梯度叠加器
    dB = 0 # 偏置梯度叠加器

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值