梯度及梯度下降与上升法

1 分类

  • 牛顿法(Newton‘s method)
  • 最小二乘法(Least Squares method)
  • 梯度下降法(Gradients Descent)

2 方向导数与梯度

2.1 方向导数

若函数f(x,y,z)在点P(x,y,z)处沿方向l(方向角为α、β、γ),方向导数:

∂ f ∂ l = lim ⁡ ρ → 0 Δ f Δ ρ = lim ⁡ ρ → 0 f ( x + Δ x , y + Δ y , z + Δ z ) − f ( x , y , z ) ρ = δ f δ x cos ⁡ α + δ f δ y cos ⁡ β + δ f δ z cos ⁡ γ \frac{\partial f}{\partial l}=\lim_{\rho\to0}\frac{\Delta f}{\Delta \rho}\\=\lim_{\rho\to0}\frac{f(x+\Delta x, y+\Delta y, z+\Delta z)-f(x, y, z)}{\rho} \\ = \frac{\delta f}{\delta x}\cos \alpha+ \frac{\delta f}{\delta y}\cos \beta + \frac{\delta f}{\delta z}\cos \gamma lf=ρ0limΔρΔf=ρ0limρf(x+Δx,y+Δy,z+Δz)f(x,y,z)=δxδfcosα+δyδfcosβ+δzδfcosγ
其中
{ ρ = ( Δ x ) 2 + ( Δ y ) 2 + ( Δ z ) 2 Δ x = ρ cos ⁡ α Δ y = ρ cos ⁡ β Δ z = ρ cos ⁡ γ \begin{cases} \rho = \sqrt{(\Delta x)^2 + (\Delta y)^2 + (\Delta z)^2} \\ \Delta x = \rho \cos \alpha \\ \Delta y = \rho \cos \beta \\ \Delta z = \rho \cos \gamma \end{cases} ρ=(Δx)2+(Δy)2+(Δz)2 Δx=ρcosαΔy=ρcosβΔz=ρcosγ

证明
∵ Δ f = ∂ f ∂ x Δ x + ∂ f ∂ y Δ y + ∂ f ∂ z Δ z = ρ ( ∂ f ∂ x cos ⁡ α ) + ∂ f ∂ y cos ⁡ β + ∂ f ∂ z cos ⁡ γ ∴ ∂ f ∂ l = lim ⁡ ρ → 0 Δ f Δ ρ = Δ f Δ x cos ⁡ α + ∂ f ∂ y cos ⁡ β + ∂ f ∂ z cos ⁡ γ \because \Delta f = \frac{\partial f}{\partial x}\Delta x + \frac{\partial f}{\partial y}\Delta y + \frac{\partial f}{\partial z}\Delta z \\ =\rho(\frac{\partial f}{\partial x}\cos \alpha) + \frac{\partial f}{\partial y}\cos \beta + \frac{\partial f}{\partial z}\cos \gamma\\ \therefore \frac{\partial f}{\partial l}= \lim_{\rho\to0}{\frac{\Delta f}{\Delta \rho}}\\ =\frac{\Delta f}{\Delta x}\cos \alpha+\frac{\partial f}{\partial y}\cos \beta+\frac{\partial f}{\partial z}\cos \gamma Δf=xfΔx+yfΔy+zfΔz=ρ(xfcosα)+yfcosβ+zfcosγlf=ρ0limΔρΔf=ΔxΔfcosα+yfcosβ+zfcosγ

2.2 梯度

2.2.1 定义

向量G称为函数 f ( P ) f(P) f(P)在点P处的梯度(gradient),记为 g r a d f grad f gradf
∂ f ∂ l = ∂ f ∂ x cos ⁡ α + ∂ f ∂ y cos ⁡ β + ∂ f ∂ z cos ⁡ γ = G → ⋅ l → \frac{\partial f}{\partial l}=\frac{\partial f}{\partial x}\cos \alpha + \frac{\partial f}{\partial y}\cos \beta + \frac{\partial f}{\partial z}\cos \gamma=\overrightarrow{G}\cdot \overrightarrow{l} lf=xfcosα+yfcosβ+zfcosγ=G l
可知:
{ G → = ( ∂ f ∂ x , ∂ f ∂ y , ∂ f ∂ z ) l → = ( cos ⁡ α , cos ⁡ β , cos ⁡ γ ) \begin{cases} \overrightarrow{G}=(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z})\\ \overrightarrow{l}=(\cos \alpha, \cos \beta, \cos \gamma) \end{cases} G =(xf,yf,zf)l =(cosα,cosβ,cosγ)
g r a d f = ( ∂ f ∂ x , ∂ f ∂ y , ∂ f ∂ z ) = ∂ f ∂ x i → + ∂ f ∂ y j → + ∂ f ∂ z k → grad f = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z})=\frac{\partial f}{\partial x}\overrightarrow{i} + \frac{\partial f}{\partial y}\overrightarrow{j} + \frac{\partial f}{\partial z}\overrightarrow{k} gradf=(xf,yf,zf)=xfi +yfj +zfk
其中, i → , j → , k → \overrightarrow{i},\overrightarrow{j}, \overrightarrow{k} i ,j ,k x , y , z x,y,z x,y,z方向的单位向量, l → \overrightarrow{l} l 为方向 l l l的单位向量.
函数的方向导数为梯度在该方向上的投影。

2.2.2 几何意义

函数在一点的梯度垂直于该点等值面或等值线,为该等值面的法向量 n n n,指向函数增大的方向,从一条等值线到另一条等值线,沿梯度方向距离最短,即下降或上升最快。
梯度方向: f f f变化率最大的方向;
梯度模: f f f的最大变化率的值;

2.2.3 梯度方向变化率最大推导

据上面梯度推导,可知:
∂ f ∂ l = ∂ f ∂ x cos ⁡ α + ∂ f ∂ y cos ⁡ β + ∂ f ∂ z cos ⁡ γ = G → ⋅ l → = ∣ G → ⋅ l → ∣ cos ⁡ [ G → , l → ] \frac{\partial f}{\partial l}=\frac{\partial f}{\partial x}\cos \alpha + \frac{\partial f}{\partial y}\cos \beta + \frac{\partial f}{\partial z}\cos \gamma \\=\overrightarrow{G}\cdot \overrightarrow{l}=|\overrightarrow{G}\cdot\overrightarrow{l}|\cos[\overrightarrow{G}, \overrightarrow{l}] lf=xfcosα+yfcosβ+zfcosγ=G l =G l cos[G ,l ]
因此当 G → \overrightarrow{G} G l → \overrightarrow{l} l 方向一致时, ∂ f ∂ l \frac{\partial f}{\partial l} lf取最大值,所以函数的某一点沿梯度方向变化率最大,最大值为该梯度的模.

3 梯度优化方法

梯度法中,求函数极值时,沿着梯度方向走,可最快达到极大值点;反之,沿着负梯度方向,可最快到达极小值点。这也就引出了两个不同的概念,梯度上升和梯度下降两种不同的梯度优化方法.

3.1 梯度下降法

梯度下降法又称最速下降法,函数f(x)在某点 x k x_k xk的梯度 ∇ f ( x k ) \nabla f(x_k) f(xk)的一个向量,其方向是f(x)增长最快的方向(变化率最大的方向),负梯度方向是f(x)减少最快的方向,如图2.1所示。
算法流程


(1) 确定目标函数 f ( x ) f(x) f(x)
(2) 选择初始点 x 0 x_0 x0,给定允许误差 α > 0 , β > 0 \alpha>0, \beta>0 α>0,β>0,令 k = 0 k=0 k=0
(3) 计算负梯度 s k = − ∇ f ( x k ) s^{k}=-\nabla f(x_k) sk=f(xk)及单位向量 s ^ k = − ∇ f ( x k ) ∣ ∣ ∇ f ( x k ) ∣ ∣ \hat{s}^k=-\frac{\nabla f(x_k)}{||\nabla f(x_k)||} s^k=f(xk)f(xk)
(4) 检查是否满足条件: ∣ ∣ s k ∣ ∣ ≤ α ||s^k||\leq \alpha skα,若满足转(9),否则继续
(5) 计算的最佳步长 ρ k ∗ \rho_{k}^{*} ρk(即机器学习的学习率)
(6) 更新变量: x k + 1 = x k + ρ k ∗ s k = x k − ρ k ∗ ∇ f ( x k ) x_{k+1}=x_{k}+\rho_{k}^{*}s^k=x_k-\rho_{k}^{*}\nabla f(x_k) xk+1=xk+ρksk=xkρkf(xk)
(7) 计算并检验:若 f ( x k + 1 ) − f ( x k ) ≤ β f(x_{k+1})-f(x_k)\leq \beta f(xk+1)f(xk)β转(9),否则继续
(8) 更新步长: k = k + 1 k=k+1 k=k+1,转(3)
(9) 输出结果,停止迭代


求函数 f ( x ) f(x) f(x)极小值,可任意选初始点 x 0 x0 x0,从 x 0 x0 x0出发沿着负梯度方向搜索,可使 f ( x ) f(x) f(x)下降最快。
梯度下降

图2.1 梯度下降法图示

3.2 梯度上升法

梯度上升法又称为最速上升法(可能没有,按照最速下降法命名),即求函数 f ( x ) f(x) f(x)极大值,可任意选初始点 x 0 x0 x0,从 x 0 x0 x0出发沿着梯度方向搜索,可使 f ( x ) f(x) f(x)上升最快,如图2.2所示。
算法流程


(1) 确定目标函数 f ( x ) f(x) f(x)
(2) 选择初始点 x 0 x_0 x0,给定允许误差 α > 0 , β > 0 \alpha>0, \beta>0 α>0,β>0,令 k = 0 k=0 k=0
(3) 计算梯度 s k = ∇ f ( x k ) s^{k}=\nabla f(x_k) sk=f(xk)及单位向量 s ^ k = ∇ f ( x k ) ∣ ∣ ∇ f ( x k ) ∣ ∣ \hat{s}^k=\frac{\nabla f(x_k)}{||\nabla f(x_k)||} s^k=f(xk)f(xk)
(4) 检查是否满足条件: ∣ ∣ s k ∣ ∣ ≤ α ||s^k||\leq \alpha skα,若满足转(9),否则继续
(5) 计算的最佳步长 ρ k ∗ \rho_{k}^{*} ρk(即机器学习的学习率)
(6) 更新变量: x k + 1 = x k + ρ k ∗ s k = x k + ρ k ∗ ∇ f ( x k ) x_{k+1}=x_{k}+\rho_{k}^{*}s^k=x_k+\rho_{k}^{*}\nabla f(x_k) xk+1=xk+ρksk=xk+ρkf(xk)
(7) 计算并检验:若 f ( x k + 1 ) − f ( x k ) ≤ β f(x_{k+1})-f(x_k)\leq \beta f(xk+1)f(xk)β转(9),否则继续
(8) 更新步长: k = k + 1 k=k+1 k=k+1,转(3)
(9) 输出结果,停止迭代


在这里插入图片描述

图2.2 梯度上升搜索示意

4 基于GradientDescent神经网络

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

#模拟数据集
x_data = np.random.rand(200).astype(np.float32)
#目标函数:权重=0.5,偏置=0.8
y_data = x_data*0.5+0.8

#权重与偏置
weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))
biases = tf.Variable(tf.zeros([1]))
#训练生成函数
y = weights*x_data+biases

#损失函数
loss = tf.reduce_mean(tf.square(y-y_data))

#梯度下降法优化器
optimizer = tf.train.GradientDescentOptimizer(0.5)
#训练
train = optimizer.minimize(loss)

#新建会话
with tf.Session() as sess:
	#初始化变量
	init_op = tf.global_variables_initializer()
	sess.run(init_op)
	for step in range(301):
		sess.run(train)
		if step % 10 == 0:
#每训练20步,输出一次权重与偏置结果			print(step,sess.run(weights),sess.run(biases))
#绘制结果图像
	plt.title("Train Results")
	plt.xlabel('x-axis')
	plt.xlabel('y-axis')
	plt.scatter(x_data,y_data,c='blue',marker='+',label='source data')
#绘制数据需要list,y为numpy.ndarray,使用tolist()转换	plt.plot(x_data,sess.run(y).tolist(),c='red',label='train data')
	plt.grid(True)
	plt.legend(loc='best')
	plt.show()

结果

图4.1 训练结果

从图4.1中,可看出计算的权重为0.4999,偏置为0.8000,从训练100步开始,与目标权重0.5和偏置0.8极为接近,神经网络学习成功。
输出结果

图4.2 训练结果图

5 总结

(1) 梯度:对于二维平面曲线而言,梯度是线上某一点的导数,且沿着数值增大的方向;对于三维平面,梯度垂直于等值面和等值线,沿梯度方向上升速度最快,即梯度方向函数变化率最大;
(2) 方向导数由两部分组成:方向和导数,方向即 l l l的方向,使用角度表示,导数即梯度,表示变化率;
(3) 梯度下降法即使用负梯度方向,使更新的值下降速度最快;
(4) 优化算法核心是优化目标函数,将问题抽象成目标函数,如机器学习中,将估计值和真实值计算损失,该损失表达式即为该训练的目标函数,进一步使用不同的优化算法进行优化,常用的优化算法有:Momentum、Nesterov、RMSProp、AdaGrad、Adam、SGD、GD等;
(5) 梯度上升法和梯度下降法比较如下:

序号优化方法搜索方向目标
1梯度上升法梯度方向求极大值
2梯度下降法负梯度方向求极小值

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值