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

Posted FrigidWinter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图文详解神秘的梯度下降算法原理(附Python代码)相关的知识,希望对你有一定的参考价值。


🔥 作者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机器学习强基计划7-2:图文详解K-均值聚类(K-means)算法(附Python实现)

梯度下降法的原理是啥?

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

梯度下降算法有哪些?有什么区别?背景原理公式代码

梯度下降算法实现

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