机器学习:梯度下降算法及优化(python代码实践)

梯度下降算法及优化

1-梯度下降算法原理

梯度下降算法(Gradient Descent):是一种用来求使函数 最小值时参数的值的算法。
_Loss损失函数_用来衡量机器学习模型的精确度。一般来说,损失函数的值越小,模型的精确度就越高。降低损失函数的值,我们一般采用梯度下降这个方法。所以,梯度下降的目的,就是为了最小化损失函数,此时的参数w,b便是最优的解。
梯度:梯度实际上函数的偏导数。
梯度下降的基本过程就和下山的场景很类似。
参考1下山的例子:
一个人被困在山的某处,他也不知道自己在那,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢?

机器学习:梯度下降算法及优化(python代码实践)
首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法

算法原理:在算法中,首先,随机选取一个自变量的值,作为初始值,代表着在山的某一初始位置处。然后,在函数中自变量的初始位置计算函数对于自变量的梯度(偏导),求这个地方最陡峭的地方。接下来,根据计算的梯度值对自变量进行更新。然后从改变过的自变量的位置处,对函数求梯度,再对进行调整更新。
每一次的调整被称为迭代(iteration)

机器学习:梯度下降算法及优化(python代码实践)
流程:
  1. 定义自变量初始值x1(人在山的随机某处)
  2. 函数在x1处求梯度,参数更新(人找最陡峭的下一点x2)
  3. 函数在x2处求梯度,参数更新(找最陡峭的下一点x3)
  4. 不断迭代,直到约等最小值(到达谷底)

; 2-算法的实现

下面通过实例来应用梯度下降算法找到y = x 2 + 1 y=x^2+1 y =x 2 +1的最小值。
根据上述算法流程:

  1. 首先定义初始值x 0 = − 18 x_0=-18 x 0 ​=−1 8
  2. 接下来求该点的梯度值,求导得d y / d x = 2 x dy/dx=2x d y /d x =2 x,该点梯度值为-36,接下来参数更新,调整方式为x 1 = x 0 − l r ∗ x 0 x1=x0-lr*x0 x 1 =x 0 −l r ∗x 0,lr为学习率。学习率过大容易出现如下图所示现象,过小时间开销大
  3. 然后不断按照这种方式迭代,直到接近0.

机器学习:梯度下降算法及优化(python代码实践)
python代码流程如下:
1,首先做准备,加载依赖库,定义函数,

import numpy as np
import matplotlib.pyplot as plt

def function(x):
    x = np.array(x)
    y = x ** 2 + 1
    return y

2,定义参数的初始值


epochs = 50

lr = 0.1

xi = -18

3,求解梯度,更新参数,不断训练。


def get_gradient(x):
    gradient = 2 * x
    return gradient

trajectory = []

def get_x_star(xi):
    for i in range(epochs):
        trajectory.append(xi)
        xi = xi - lr * get_gradient(xi)
    x_star = xi
    return x_star

get_x_star(xi)

4,进行显示。

x1 = np.arange(-20, 20, 0.1)
y = function(x1)

plt.plot(x1, y)
x_trajectory = np.array(trajectory)
y_trajectory = function(trajectory)

plt.scatter(x_trajectory, y_trajectory)
plt.show()

5,结果如下图所示:

机器学习:梯度下降算法及优化(python代码实践)

3-梯度下降优化算法

在计算损失函数关于模型参数的梯度时,根据使用的训练集的数据量,梯度算法大致分为三类:

  1. 批量梯度下降batch gradient descent:计算梯度时使用训练集的全部数据,准确率高,效率低。
  2. 随机梯度下降stochastic gradient descent:每次只用训练集一个样本计算梯度,随时更新。效率高,学习率选择困难。
  3. 小批量梯度下降mini-batch gradient descnet:每次使用训练集中小部分数据,批尺寸。

梯度下降算法主要关注: 学习率,效率,基于次,在实际的应用中,常采用以下5种优化算法。

  1. SGD:随机梯度下降算法。
  2. Adagrad:适用于数据集的数据集特征较稀疏且样本参数较多。
  3. Adadelta
  4. RMSprop:默认学习率为0.001。
  5. Adam

4-参考

1,梯度下降算法原理讲解——机器学习
2,史上最详细的梯度下降优化算法介绍(从SGD到Adam至Lookahead)

Original: https://blog.csdn.net/Alexa_/article/details/123804603
Author: Alexa2077
Title: 机器学习:梯度下降算法及优化(python代码实践)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/615011/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球