当前位置:   article > 正文

【机器学习】梯度下降的基本概念和如何使用梯度下降自动化优化w和b

【机器学习】梯度下降的基本概念和如何使用梯度下降自动化优化w和b

引言

梯度下降是一种用于寻找函数最小值的优化算法,它在机器学习中广泛用于训练模型,如线性回归、神经网络等

一、梯度下降的基本概念

1.1 目标函数

在机器学习中,这通常是损失函数(如均方误差、交叉熵等),我们希望最小化它以训练模型

1.2 梯度

目标函数相对于每个参数的偏导数向量。它指向目标函数增长最快的方向

1.3 学习率(步长)

决定了在梯度下降过程中每一步移动的距离大小

二、梯度下降的步骤

2.1 初始化参数

随机选择一个参数的初始值或者基于某些启发式方法

2.2 计算梯度

计算目标函数在当前参数值处的梯度

2.3 更新参数

根据梯度和学习率来更新参数
θ θ θ= θ θ θ α α α ∇ θ ∇_θ θ J ( θ ) J(θ) J(θ)
其中, θ θ θ是参数向量, α α α是学习率, J ( θ ) J(θ) J(θ)是目标函数, ∇ θ ∇_θ θ J ( θ ) J(θ) J(θ)是目标函数的梯度

2.4 重复步骤2和3

重复计算梯度并更新参数,直到满足停止条件(如梯度变得非常小或者达到预设的迭代次数)

三、梯度下降的变体

3.1 批量梯度下降(Batch Gradient Descent)

使用所有样本来计算梯度

3.2 随机梯度下降(Stochastic Gradient Descent, SGD)

每次迭代使用一个样本来计算梯度

3.3 小批量梯度下降(Mini-batch Gradient Descent)

每次迭代使用一部分样本来计算梯度

四、注意事项

4.1 学习率的选择

学习率太大可能导致算法无法收敛,太小则收敛速度过慢。

4.2 局部最小值和鞍点

梯度下降可能会陷入局部最小值或鞍点,尤其是在非凸优化问题中

4.3 梯度消失/爆炸

在深度学习中,梯度可能会在反向传播过程中变得非常小(消失)或非常大(爆炸),影响训练

在实现梯度下降时,可能需要调整多个超参数(如学习率、迭代次数等)以获得最佳性能。此外,还有一些高级的梯度下降变种和优化技术,如动量(Momentum)、自适应学习率(如AdaGrad、RMSprop、Adam等),它们可以帮助算法更快地收敛

五、如何使用梯度下降自动化优化 w w w b b b

5.1 工具

在本次实验中,我们将使用以下工具:

  • NumPy,一个流行的科学计算库
  • Matplotlib,一个流行的绘图数据库
  • 在本地目录的lab_utils.py文件中的绘图例程
import math, copy
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('./deeplearning.mplstyle')
from lab_utils_uni import plt_house_x, plt_contour_wgrad, plt_divergence, plt_gradients
  • 1
  • 2
  • 3
  • 4
  • 5

5.2 问题陈述

让我们使用之前相同的两个数据点 :一个1000平方英尺的房子以30万美元的价格售出,一个2000平方英尺的房子以50万美元的价格售出。

尺寸(1000平方英尺)价格(以千美元计)
1300
2500
# 加载数据集
x_train = np.array([1.0, 2.0])   # 特征
y_train = np.array([300.0, 500.0])   # 目标值
  • 1
  • 2
  • 3

5.3 计算成本

# 计算成本的函数
def compute_cost(x, y, w, b):
   
    m = x.shape[0] 
    cost = 0
    
    for i in range(m):
        f_wb = w * x[i] + b
        cost = cost + (f_wb - y[i])**2
    total_cost = 1 / (2 * m) * cost

    return total_cost
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5.4 梯度下降概述

到目前为止,已经开发了一个线性模型,用于预测 f w , b ( x ( i ) ) f_{w,b}(x(i)) fw,b(x(i))
f w , b ( x ( i ) ) = w ⋅ x ( i ) + b f_{w,b}(x(i)) = w \cdot x(i) + b fw,b(x(i))=wx(i)+b
在线性回归中,利用输入训练数据来拟合参数 w w w b b b
通过最小化预测 f w , b ( x ( i ) ) f_{w,b}(x(i)) fw,b(x(i)) 和实际数据 y ( i ) y(i) y(i) 之间的误差来衡量
这个度量被称为成本 J ( w , b ) J(w, b) J(w,b)
在训练中,需要衡量所有训练样本 x ( i ) , y ( i ) x(i), y(i) x(i),y(i) 的成本:
J ( w , b ) = 1 2 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) 2 J(w, b) = \frac{1}{2m} \sum_{i=0}^{m-1} (f_{w,b}(x(i)) - y(i))^2 J(w,b)=2m1i=0m1(fw,b(x(i))y(i))2

梯度下降被描述为:

  1. 重复 w , b w, b w,b 直到收敛:
  2. w = w − α ∂ J ( w , b ) ∂ w w = w - \alpha \frac{\partial J(w, b)}{\partial w} w=wαwJ(w,b)
  3. b = b − α ∂ J ( w , b ) ∂ b b = b - \alpha \frac{\partial J(w, b)}{\partial b} b=bαbJ(w,b)
  • 其中,参数 w w w b b b 同时更新

梯度定义为:

∂ J ( w , b ) ∂ w = 1 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) x ( i ) \frac{\partial J(w, b)}{\partial w} = \frac{1}{m} \sum_{i=0}^{m-1} (f_{w,b}(x(i)) - y(i)) x(i) wJ(w,b)=m1i=0m1(fw,b(x(i))y(i))x(i)
∂ J ( w , b ) ∂ b = 1 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) \frac{\partial J(w, b)}{\partial b} = \frac{1}{m} \sum_{i=0}^{m-1} (f_{w,b}(x(i)) - y(i)) bJ(w,b)=m1i=0m1(fw,b(x(i))y(i))

5.5 实现梯度下降

实现一个特征的梯度下降算法,需要以下三个函数:

  • compute_gradient 实现定义的方程式
  • compute_cost 实现上面的方程式
  • gradient_descent,使用compute_gradientcompute_cost
    以下是对这些函数的实现和如何使用它们来找到最优的 w w w b b b 值的详细说明:
  • 包含偏导数的Python变量的命名遵循这种模式,∂
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/920698
推荐阅读
相关标签