4795|6

552

帖子

3

TA的资源

纯净的硅(初级)

楼主
 

《机器学习算法与实现》4、梯度下降法 [复制链接]

一、梯度下降法

上一篇分享中使用了求解方程组的方法求得了最小二乘法的解析解,但是当数据较多或者模型是非线性模型时,求解解析解会变得相当困难,甚至不可能。

因此,衍生出来了新的方法,就是梯度下降法。

梯度下降法的优点是在求解过程中只需损失函数的一阶导数,计算相对简单,这就是梯度下降法适用于大规模数据的原因。

梯度下降法的核心思想是,通过当前点的梯度方向寻找新的迭代点,不断迭代,直到找到最优参数。

 

二、梯度下降法的基本原理

  • 初始点:选择一个初始点 x(0) 作为算法的起始点。
  • 梯度计算:计算当前点的梯度,即损失函数对参数的偏导数。梯度指向函数增长最快的方向。
  • 参数更新:将当前点的参数向梯度的相反方向更新,以减小损失函数的值。更新公式通常为:
其中, x(k) 是第 k 次迭代的参数, ∇f(x(k)) 是损失函数在x(k) 处的梯度,而 η 是学习率,决定了步长的大小

         迭代:重复步骤2和3,直到满足停止条件,如梯度足够小、达到预定的迭代次数或损失函数值不再显著减小。

 

三、梯度下降法的算法实现

下面将使用剃度下降法来求解a和b,实现最小二乘法的拟合

# 最小二乘的梯度下降法求解

import matplotlib.pyplot as plt
import numpy as np
import sklearn

# 生成数据
data_num = 50
X = np.random.rand(data_num, 1)*10
Y = X * 3 + 4 + 4*np.random.randn(data_num, 1)

N  = X.shape[0]

# 设置参数
n_epoch = 500    # 迭代次数
a, b = 1, 1      # 初始模型参数
epsilon = 0.001  # 学习率

# 对每次迭代
for i in range(n_epoch):
    data_idx = list(range(N))
    np.random.shuffle(data_idx)

    # 对每个数据
    for j in data_idx:
        a = a + 2 * epsilon * (Y[j] - a * X[j] - b) * X[j]
        b = b + 2 * epsilon * (Y[j] - a * X[j] - b)

    # 计算损失函数
    L = 0
    for j in range(N):
        L = L + (Y[j] - a * X[j] - b) ** 2

    if i % 100 == 0:
        print("代 %4d: loss = %f, a = %f, b = %f" % (i, L, a, b))

# 画出结果
x_min = np.min(X)
x_max = np.max(X)
y_min = a * x_min + b
y_max = a * x_max + b

plt.scatter(X, Y, label='original data')
plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')
plt.legend()
plt.show()


拟合结果:

效果也还不错。

由此可以看出,不管是用求解析解的方法还是用梯度下降法最终都能较好的求出a和b,从而拟合出一个比较好的结果。

在模型复杂和数据量较大的情况下一般求解解析解非常困难,梯度下降法很好的作了一个补充,事实上,在神经网络等机器学习中常用的方法是梯度下降法。

所以这是一个非常重要的概念,一定要掌握,后面会经常用用到。

最新回复

回归分析哇   详情 回复 发表于 2024-7-16 15:18
点赞 关注

回复
举报

4932

帖子

19

TA的资源

版主

沙发
 
我记得是求一阶导和二阶导,还有个旋度,不晓得啥意思?

点评

根据书中的讲解,梯度只需要用到一阶偏导数。正是因为只需要求一阶偏导数,所以使用非常广泛。  详情 回复 发表于 2024-7-16 12:19
 
 

回复

24

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我记得是求一阶导和二阶导,还有个旋度,不晓得啥意思?

点评

根据书中的讲解,梯度只需要用到一阶偏导数。正是因为只需要求一阶偏导数,所以使用非常广泛。  详情 回复 发表于 2024-7-16 12:20
 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

4
 
吾妻思萌 发表于 2024-7-16 06:42 我记得是求一阶导和二阶导,还有个旋度,不晓得啥意思?

根据书中的讲解,梯度只需要用到一阶偏导数。正是因为只需要求一阶偏导数,所以使用非常广泛。


 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

5
 
scare 发表于 2024-7-16 10:51 我记得是求一阶导和二阶导,还有个旋度,不晓得啥意思?

根据书中的讲解,梯度只需要用到一阶偏导数。正是因为只需要求一阶偏导数,所以使用非常广泛。




 
 
 

回复

7628

帖子

2

TA的资源

五彩晶圆(高级)

6
 

回归分析哇

点评

一看就是大佬  详情 回复 发表于 2024-7-17 12:55
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

7
 
freebsder 发表于 2024-7-16 15:18 回归分析哇

一看就是大佬


 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
未来计算机与计算机技术

未来计算机与计算机技术 计算机的关键技术继续发展,未来的计算机技术将向超高速、超小型、平行处理、智能化的方向发展。尽 ...

也来秀一下DIY,160*80带触摸液晶模块做的多功能时钟~~~~~~

哈哈,其实这个屏是去年电赛的时候买的,正好也用上了,不过用得比较简单,感觉有点可惜了就干脆做了一个完整的模块,估计有的朋 ...

第三章 底层库函数

小川工作室编写,本书为LM3S的USB芯片编写,上传的均为草稿,还有没修改,可能还有很多地方不足,希望各位网友原谅! QQ:2609 ...

浅谈如果通过程序读取AT24系列芯片型号

对于一般的AT24芯片来说,要获取型号并不复杂,那就是用眼睛看,这个是没有问题的。但是,如果我们用的是AT24系列的IC卡呢 ...

带你读懂电路图之一种简单的温度控制电路

其实,读懂电路图,基础很重要,这里所谓的基础就是电路元件图形和文字符号,如果这些都略知一二了,读起图了也会简单很多。 ...

光谱宽覆盖遥感图像模拟信号源设计

523637

【花雕动手做】有趣好玩的音乐可视化系列小项目(05)---WS2812柱跳灯

偶然脑子发热心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当 ...

是德科技有奖直播|感恩月开幕式——示波器大讲堂 今日10点开始!

是德科技有奖直播|感恩月开幕式——示波器大讲堂 今日10点开始! >>点击进入直播 直播时间:2022年 ...

功率效率促进电子创新

618204 高效使用功率是电子设备设计的核心。 从 5G 基站、相位阵列天线、数据中心和车辆到平板电脑、智能手机和可视门铃, ...

【Follow me第二季第1期】开箱贴

感谢论坛和得捷组织的Follow me活动,非常的有教学意义,本次是第二季的第一期,我们学习的开发板为Adafruit Circuit Playground ...

关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表