图文详解神秘的梯度下降算法原理(附python代码)

FrigidWinter FrigidWinter     2022-11-30     549

关键词:


🔥 作者FrigidWinter

🔥 简介:主攻机器人与人工智能领域的理论研究和工程应用,业余丰富各种技术栈。主要涉足:【机器人(ROS)】【机器学习】【深度学习】【计算机视觉】

🔥 专栏


目录

1 引例

给定如图所示的某个函数,如何通过计算机算法编程求 f ( x ) m i n f(x)_min f(x)min

2 数值解法

传统方法是数值解法,如图所示

按照以下步骤迭代循环直至最优:

① 任意给定一个初值 x 0 x_0 x0

② 随机生成增量方向,结合步长生成 Δ x \\varDelta x Δx

③ 计算比较 f ( x 0 ) f\\left( x_0 \\right) f(x0) f ( x 0 + Δ x ) f\\left( x_0+\\varDelta x \\right) f(x0+Δx)的大小,若 f ( x 0 + Δ x ) < f ( x 0 ) f\\left( x_0+\\varDelta x \\right) <f\\left( x_0 \\right) f(x0+Δx)<f(x0)则更新位置,否则重新生成 Δ x \\varDelta x Δx

④ 重复②③直至收敛到最优 f ( x ) m i n f(x)_min f(x)min

数值解法最大的优点是编程简明,但缺陷也很明显:

① 初值的设定对结果收敛快慢影响很大;

② 增量方向随机生成,效率较低;

③ 容易陷入局部最优解;

④ 无法处理“高原”类型函数。

所谓陷入局部最优解是指当迭代进入到某个极小值或其邻域时,由于步长选择不恰当,无论正方向还是负方向,学习效果都不如当前,导致无法向全局最优迭代。就本问题而言如图所示,当迭代陷入 x = x j x=x_j x=xj时,由于学习步长 s t e p step step的限制,无法使 f ( x j ± S t e p ) < f ( x j ) f\\left( x_j\\pm Step \\right) <f(x_j) f(xj±Step)<f(xj),因此迭代就被锁死在了图中的红色区段。可以看出 x = x j x=x_j x=xj并非期望的全局最优。

若出现下图所示的“高原”函数,也可能使迭代得不到更新。

3 梯度下降算法

梯度下降算法可视为数值解法的一种改进,阐述如下:

记第 k k k轮迭代后,自变量更新为 x = x k x=x_k x=xk,令目标函数 f ( x ) f(x) f(x) x = x k x=x_k x=xk泰勒展开:

f ( x ) = f ( x k ) + f ′ ( x k ) ( x − x k ) + o ( x ) f\\left( x \\right) =f\\left( x_k \\right) +f'\\left( x_k \\right) \\left( x-x_k \\right) +o(x) f(x)=f(xk)+f(xk)(xxk)+o(x)

考察 f ( x ) m i n f(x)_min f(x)min,则期望 f ( x k + 1 ) < f ( x k ) f\\left( x_k+1 \\right) <f\\left( x_k \\right) f(xk+1)<f(xk),从而:

f ( x k + 1 ) − f ( x k ) = f ′ ( x k ) ( x k + 1 − x k ) < 0 f\\left( x_k+1 \\right) -f\\left( x_k \\right) =f'\\left( x_k \\right) \\left( x_k+1-x_k \\right) <0 f(xk+1)f(xk)=f(xk)(xk+1xk)<0

f ′ ( x k ) > 0 f'\\left( x_k \\right) >0 f(xk)>0 x k + 1 < x k x_k+1<x_k xk+1<xk,即迭代方向为负;反之为正。不妨设 x k + 1 − x k = − f ′ ( x k ) x_k+1-x_k=-f'(x_k) xk+1xk=f(xk),从而保证 f ( x k + 1 ) − f ( x k ) < 0 f\\left( x_k+1 \\right) -f\\left( x_k \\right) <0 f(xk+1)f(xk)<0。必须指出,泰勒公式成立的条件是 x → x 0 x\\rightarrow x_0 xx0,故 ∣ f ′ ( x k ) ∣ |f'\\left( x_k \\right) | f(xk)不能太大,否则 x k + 1 x_k+1 xk+1 x k x_k xk距离太远产生余项误差。因此引入学习率 γ ∈ ( 0 , 1 ) \\gamma \\in \\left( 0, 1 \\right) γ(0,1)来减小偏移度,即 x k + 1 − x k = − γ f ′ ( x k ) x_k+1-x_k=-\\gamma f'(x_k) xk+1xk=γf(x查看详情

机器学习:梯度下降算法原理讲解(代码片段)

背景学习机器学习时作为基础概念。转载自:《梯度下降算法原理讲解——机器学习》1.概述梯度下降(gradientdescent)在机器学习中应用十分的广泛,不论是在线性回归还是Logistic回归中,它的主要目的是通过迭代找到目标函数... 查看详情

机器学习梯度下降法(超详解)

线性回归-梯度下降法前言1.全梯度下降算法(FG)2.随机梯度下降算法(SG)3.小批量梯度下降算法(mini-batch)4.随机平均梯度下降算法(SAG)5.梯度下降法算法比较和进一步优化5.1算法比较5.2梯度下... 查看详情

梯度下降算法原理讲解(代码片段)

...后都归结为求解最优化问题。在各种最优化算法中,梯度下降法是最简单、 查看详情

机器学习梯度下降算法

目录1详解梯度下降算法1.1梯度下降的相关概念复习1.2梯度下降法的推导流程2梯度下降法大家族2.1全梯度下降算法(FG)2.2随机梯度下降算法(SG)2.3小批量梯度下降算法2.4随机平均梯度下降算法(SAG)3小结1详解梯度下降算法1.1梯度下降... 查看详情

梯度下降算法实现

...理及实现。 一.梯度下降的算法方程式为:二.方程式详解:  参数:    1.::表示网络中需要训练的参数。    2.:表示学习率。    3.:表示图像中一点的斜率。  含义:    假设一个二次函数,初... 查看详情

梯度下降法介绍-黑马程序员机器学习讲义

学习目标知道全梯度下降算法的原理知道随机梯度下降算法的原理知道随机平均梯度下降算法的原理知道小批量梯度下降算法的原理上一节中给大家介绍了最基本的梯度下降法实现流程,常见的梯度下降算法有:全梯度... 查看详情

机器学习强基计划7-2:图文详解k-均值聚类(k-means)算法(附python实现)(代码片段)

目录0写在前面1什么是聚类?2K均值聚类原理2.1原型聚类2.2K-means算法流程3Python实现3.1算法复现3.2可视化0写在前面机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的... 查看详情

python应用实战案例-pythongeopandas包详解(附大量案例及代码)(代码片段)

前言以下为博主为大家准备的人工智能&算法研究类精品专栏,喜欢的小伙伴自行下载。深度学习100例全系列详细教程 深度学习算法原理介绍及应用案例tensorflow从入门到精通100讲 深度学习框架TensorFlow的应用案例手把... 查看详情

机器学习强基计划5-4:图文详解影响流动与有向分离(d-分离)(附python实现)

目录0写在前面1影响流动性2有效迹3有向分离算法4Python实现0写在前面机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型:决策树... 查看详情

梯度下降法求解线性回归(代码片段)

梯度下降法梯度下降法(英语:Gradientdescent)是一个一阶最优化算法,通常也称为最速下降法。要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭... 查看详情

梯度下降算法vs正规方程算法

梯度下降算法的大家族:①批量梯度下降:有N个样本,求梯度的时候就用了N个样本的梯度数据  优点:准确  缺点:速度慢②随机梯度下降:和批量梯度下降算法原理相似,区别在于求梯度时没有用所有的N歌样本数据,而... 查看详情

反向传播与梯度下降详解(代码片段)

一,前向传播与反向传播1.1,神经网络训练过程神经网络训练过程是:先通过随机参数“猜“一个结果(模型前向传播过程),这里称为预测结果$a$;然后计算$a$与样本标签值$y$的差距(即损失函数的计算过程);随后通过反向... 查看详情

梯度下降法,二维空间三维空间代码实现(代码片段)

目录二维空间梯度下降法问题定义算法思想和推导一维问题就是不断求导,直到达到我们设置的精度Python代码实现一维问题三维空间梯度下降代码展示补充:泰勒展开式的意义泰勒展示的作用二维空间梯度下降法Python实... 查看详情

梯度下降算法的原理是啥?

参考技术A梯度下降是非常常用的优化算法。作为机器学习的基础知识,这是一个必须要掌握的算法。借助本文,让我们来一起详细了解一下这个算法。前言本文的代码可以到我的Github上获取:https://github.com/paulQuei/gradient_descent本... 查看详情

无约束优化算法-第二节:梯度类算法(代码片段)

文章目录一:梯度下降法(1)梯度下降法概述(2)梯度下降法求解步骤(3)Python实现(4)常见梯度下降算法A:全梯度下降算法(FGD)B:随机梯度下降算法(SGD)C:... 查看详情

优化算法—梯度下降(代码片段)

转自:https://www.cnblogs.com/shixiangwan/p/7532858.html梯度下降法,是当今最流行的优化(optimization)算法,亦是至今最常用的优化神经网络的方法。本文旨在让你对不同的优化梯度下降法的算法有一个直观认识,以帮助你使用这些算法... 查看详情

sparkmlib:梯度下降算法实现(代码片段)

声明:本文参考《 大数据:Sparkmlib(三)GradientDescent梯度下降算法之Spark实现》1.什么是梯度下降?梯度下降法(英语:Gradientdescent)是一个一阶最优化算法,通常也称为最速下降法。要使用梯度下降法找到一个函数的局部极小... 查看详情