三种梯度下降方法与代码实现(一)

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

前言

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


1.梯度下降方法

1.1 三种梯度下降不同

🚩梯度下降分三类:批量梯度下降BGD(Batch Gradient Descent)、小批量梯度下降 MBGD(Mini-Batch Gradient Descent)、随机梯度下降SGD(Stochastic Gradient Descent)。

image.png

三种梯度下降有什么不同呢?我们从梯度下降步骤开始讲起,梯度下降步骤分以下四步:

image.png

三种梯度下降不同,体现在第二步中:

image.png

1.2 线性回归梯度更新公式

🚩回顾上一讲公式!

最小二乘法公式如下:

image.png

矩阵写法:

image.png

接着我们来讲解如何求解上面梯度下降的第 2 步,即我们要推导出损失函数的导函数来。

image.png

image.png

1.3 批量梯度下降BGD

🚩批量梯度下降法是最原始的形式,它是指在每次迭代使用所有样本来进行梯度的更新。每次迭代参数更新公式如下:

image.png

注意这里更新时存在一个求和函数,即为对所有样本进行计算处理!

优点:

  (1)一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。

  (2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。

缺点:

  (1)当样本数目n很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。

从迭代的次数上来看:BGD迭代的次数相对较少。其迭代的收敛曲线示意图可以表示如下:

image.png

1.4 随机梯度下降SGD

🚩随机梯度下降法不同于批量梯度下降,随机梯度下降是每次迭代使用一个样本来对参数进行更新。使得训练速度加快。每次迭代参数更新公式如下:

image.png

批量梯度下降算法每次都会使用全部训练样本,因此这些计算是冗余的,因为每次都使用完全相同的样本集。而随机梯度下降算法每次只随机选择一个样本来更新模型参数,因此每次的学习是非常快速的。

优点:(1)由于不是在全部训练数据上的更新计算,而是在每轮迭代中,随机选择一条数据进行更新计算,这样每一轮参数的更新速度大大加快。

  缺点:

  (1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。(2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。

解释一下为什么SGD收敛速度比BGD要快:

image.png

image.png

1.5 小批量梯度下降MBGD

image.png

相对于随机梯度下降算法,小批量梯度下降算法降低了收敛波动性, 即降低了参数更新的方差,使得更新更加稳定。相对于全量梯度下降,其提高了每次学习的速度。并且其不用担心内存瓶颈从而可以利用矩阵运算进行高效计算。


一般情况下,小批量梯度下降是梯度下降的推荐变体,特别是在深度学习中。每次随机选择 2  的幂数个样本来进行学习,例如:8 、16 、32 、64、128 、256 。因为计算机的结构就是二进制的。但是也要根据具体问题而选择,实践中可以进行多次试验, 选择一个更新速度与更次次数都较适合的样本数。


MBGD梯度下降迭代的收敛曲线更加温柔一些:

image.png



目录
相关文章
|
存储 缓存 NoSQL
【分布式】Redis与Memcache的对比分析
【1月更文挑战第25天】【分布式】Redis与Memcache的对比分析
|
图形学 Windows
Unity调用Windows弹框、提示框(确认与否,中文)
Unity调用Windows弹提示框 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar...
3973 0
xxl-job执行器启动报错读取不到配置文件Could not resolve placeholder ‘xxl.job.executor.address‘ in value “${xxl.job
有几个不用配置的属性,也要写出来,不填值就行 但是最后一个日志天数得写,写个-1。不然空字符串无法转成数字
|
10月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
C++(十)operator=
本文档介绍了 C++ 中赋值运算符 `operator=` 的重载方法,包括其概念、语法格式及特性,并通过实现一个 `mystring` 类展示了具体的代码示例。赋值运算符用于将一个已创建的对象赋值给另一个已创建的对象,需注意自赋值、内存泄漏和重析构等问题。文档中的 `mystring` 类实现了字符串对象的赋值、拼接及比较等功能。
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
人工智能 数据挖掘 语音技术
通义语音AI技术问题之说话人识别的两种类型分类如何解决
通义语音AI技术问题之说话人识别的两种类型分类如何解决
267 5
|
机器学习/深度学习 人工智能 自然语言处理
向量和向量数据 | AI应用开发
向量vector 通常出现在自然语言NLP领域,NLP中称为词嵌入word embedding,词嵌入的工作就是如何将人类语言中的词汇、短语或句子转化为计算机能够理解和操作的数学向量。【7月更文挑战第2天】
687 15
|
机器学习/深度学习 人工智能 自然语言处理
机器学习系列1 机器学习历史
 人工智能(AI)作为计算机领域与机器学习的历史交叉点,随着支撑机器学习的算法和算力的增长,AI的发展也得到进步。值得关注的是,虽然这些研究从1950年代已经开始出现,但重要的算法:统计,数学,计算等相关技术理论的发现远早于这个时代。事实上,人们已经思考这些问题数百年 。本文将讨论“思考机器”概念的历史知识基础。
470 0
|
JSON 安全 Java
SpringBoot 整合 JustAuth 实现第三方登录 | gitee登录
SpringBoot 整合 JustAuth 实现第三方登录 | gitee登录
695 0

热门文章

最新文章