梯度下降【无约束最优化问题】(二)

简介: 本文属于 线性回归算法【AIoT阶段三】(尚未更新),这里截取自其中一段内容,方便读者理解和根据需求快速阅读。本文通过公式推导+代码两个方面同时进行,因为涉及到代码的编译运行,如果你没有NumPy,Pandas,Matplotlib的基础,建议先修文章:数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解),本文是梯度下降的第一部分,后续还会有:三种梯度下降方法与代码实现,梯度下降优化,梯度下降优化进阶 (暂未更新)

5.全局最优化

15.png

🚩上图显示了梯度下降的两个主要挑战:

  • 若随机初始化,算法从左侧起步,那么会收敛到一个局部最小值,而不是全局最小值;
  • 若随机初始化,算法从右侧起步,那么需要经过很长时间才能越过Plateau(函数停滞带,梯度很小),如果停下得太早,则永远达不到全局最小值;


而线性回归的模型 MSE 损失函数恰好是个凸函数,凸函数保证了只有一个全局最小值,其次是个连续函数,斜率不会发生陡峭的变化,因此即便是乱走,梯度下降都可以趋近全局最小值。


上图损失函数是非凸函数,梯度下降法是有可能落到局部最小值的,所以其实步长不能设置的太小太稳健,那样就很容易落入局部最优解,虽说局部最小值也没大问题, 因为模型只要是堪用的就好嘛,但是我们肯定还是尽量要奔着全局最优解去


6.梯度下降步骤

🚩梯度下降流程就是“猜”正确答案的过程:

image.png

image.png

7.代码模拟梯度下降

  • 梯度下降优化算法,比正规方程,应用更加广泛
  • 什么是梯度?
  • 梯度就是导数对应的值!
  • 下降?
  • 涉及到优化问题,最小二乘法
  • 梯度下降呢?
  • 梯度方向下降,速度最快的~


接下来,我们使用代码来描述上面梯度下降的过程:

方程如下:

image.png

image.png

7.1 构建函数和导函数

import numpy as np
import matplotlib.pyplot as plt
# 构建方程
f = lambda x : (x - 3.5) ** 2 - 4.5 * x + 10
# 方程的导函数
g = lambda x : 2 * (x - 3.5) - 4.5

7.2 函数可视化

# 绘制函数图像
x = np.linspace(0, 11.5, 100)
y = f(x)
_ = plt.plot(x, y)

image.png

7.3 求函数的最小值

7.3.1 导函数可解

'''
 2 * (x - 3.5) - 4.5 = 0
 2 * x = 11.5
 x = 5.75
'''
_ = plt.plot(x, y)
_ = plt.scatter(5.75, f(5.75), color = 'red') # 红点就是最小值

image.png

7.3.2 导函数不可解(梯度下降)

eta = 0.1  # 学习率
precision = 0.0001  # 设置精度
# 瞎蒙(随机)一个初始值
x = np.random.randint(0, 12)
print('随机的值:x =', x)
# 下面会进行多次 while 循环执行梯度下降
# 每次都要更新 last_x,记录上一次的值
# last_x 赋初值的时候要与 x 略微不同,赋值大于精度即可
last_x = x + 0.1
# x_ 就是每次梯度下降求解出的 x 值,一开始为 x 的初值
x_ = [x]
cnt = 0
while True:
    if np.abs(x - last_x) < precision:
        break
    # 根据梯度下降进行更新
    cnt += 1
    last_x = x
    x = x - eta * g(x)
    x_.append(x)
print('梯度下降的次数为:', cnt)
print('算出的结果:x =', x)
# 绘图
x1= np.linspace(0, 11.5, 100)
y = f(x1)
_ = plt.plot(x1, y)
x_ = np.array(x_)
_ = plt.scatter(x_, f(x_), color = 'red')

16.png




目录
相关文章
|
机器学习/深度学习 数据可视化 Python
逻辑回归那些事—使用牛顿法解决实际问题
逻辑回归是机器学习中的重要章节,本文将带你从公式推导到算法实现详细讲述这部分内容,想学习这个高大上的技能么,快来看吧!!!
5484 0
|
5月前
|
算法
梯度下降算法(二)
梯度下降法中,学习率选择至关重要。0.3的学习率导致无法找到最小值且产生震荡,而0.01则使结果接近最优解(2.99998768)。当学习率进一步减小至0.001,点远离最低点。通过迭代次数增加至1000次,可更接近最低点(2.999999999256501)。梯度下降用于最小化损失,学习率控制参数更新步长,需平衡收敛速度和稳定性。迭代次数和初始点也影响模型性能,合适的初始化能加速收敛并避开局部极小值。
|
6月前
|
机器学习/深度学习 算法 调度
多元线性回归梯度下降法
梯度下降法是一种通用的优化算法,尤其适用于机器学习中找到最优解。与解析解法不同,它不局限于特定情况,能在数据规模较大时依然有效。该方法通过迭代逐步接近最优解,每次迭代利用损失函数的梯度信息调整参数。学习率是控制参数更新幅度的关键因素,太大会导致发散,太小则收敛慢。全量梯度下降每次使用所有样本更新,收敛稳定但速度慢;随机梯度下降每次仅用一个样本,速度快但可能产生较大波动;小批量梯度下降取两者之间,以一定的样本批量进行更新,兼顾速度和稳定性。
70 1
|
6月前
|
算法 Python
梯度下降法
梯度下降法
66 0
|
机器学习/深度学习 算法 决策智能
凸优化介绍
凸优化介绍。更多文章请关注我的微信公众号:Python学习杂记
166 0
|
机器学习/深度学习 并行计算 算法
基于遗传算法和非线性规划的函数寻优算法
以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。
|
算法
《最优化方法》——数学基础知识&线性规划&无约束优化算法初步
《最优化方法》——数学基础知识&线性规划&无约束优化算法初步
137 0
《最优化方法》——数学基础知识&线性规划&无约束优化算法初步
|
机器学习/深度学习 算法 数据挖掘
梯度下降【无约束最优化问题】(一)
本文属于 线性回归算法【AIoT阶段三】(尚未更新),这里截取自其中一段内容,方便读者理解和根据需求快速阅读。本文通过公式推导+代码两个方面同时进行,因为涉及到代码的编译运行,如果你没有NumPy,Pandas,Matplotlib的基础,建议先修文章:数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解),本文是梯度下降的第一部分,后续还会有:三种梯度下降方法与代码实现,梯度下降优化,梯度下降优化进阶 (暂未更新)
180 0
梯度下降【无约束最优化问题】(一)
|
算法
简单的梯度下降算法,你真的懂了吗?
简单的梯度下降算法,你真的懂了吗?
203 0
简单的梯度下降算法,你真的懂了吗?