梯度及梯度下降与上升法

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⁡ρ→0f(x+Δx,y+Δy,z+Δz)−f(x,y,z)ρ=δfδxcos⁡α+δfδycos⁡β+δfδzcos⁡γ\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 \gammalf=ρ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∂xcos⁡α)+∂f∂ycos⁡β+∂f∂zcos⁡γ∴∂f∂l=lim⁡ρ→0ΔfΔρ=ΔfΔxcos⁡α+∂f∂ycos⁡β+∂f∂zcos⁡γ\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),记为gradfgrad fgradf
∂f∂l=∂f∂xcos⁡α+∂f∂ycos⁡β+∂f∂zcos⁡γ=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γ=Gl
可知:
{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γ)
gradf=(∂f∂x,∂f∂y,∂f∂z)=∂f∂xi→+∂f∂yj→+∂f∂zk→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,kx,y,zx,y,zx,y,z方向的单位向量,l→\overrightarrow{l}l为方向lll的单位向量.
函数的方向导数为梯度在该方向上的投影。

2.2.2 几何意义

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

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

据上面梯度推导,可知:
∂f∂l=∂f∂xcos⁡α+∂f∂ycos⁡β+∂f∂zcos⁡γ=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γ=Gl=Glcos[G,l]
因此当G→\overrightarrow{G}Gl→\overrightarrow{l}l方向一致时,∂f∂l\frac{\partial f}{\partial l}lf取最大值,所以函数的某一点沿梯度方向变化率最大,最大值为该梯度的模.

3 梯度优化方法

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

3.1 梯度下降法

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


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


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

图2.1 梯度下降法图示

3.2 梯度上升法

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


(1) 确定目标函数f(x)f(x)f(x)
(2) 选择初始点x0x_0x0,给定允许误差α>0,β>0\alpha>0, \beta>0α>0,β>0,令k=0k=0k=0
(3) 计算梯度sk=∇f(xk)s^{k}=\nabla f(x_k)sk=f(xk)及单位向量s^k=∇f(xk)∣∣∇f(xk)∣∣\hat{s}^k=\frac{\nabla f(x_k)}{||\nabla f(x_k)||}s^k=f(xk)f(xk)
(4) 检查是否满足条件:∣∣sk∣∣≤α||s^k||\leq \alphaskα,若满足转(9),否则继续
(5) 计算的最佳步长ρk∗\rho_{k}^{*}ρk(即机器学习的学习率)
(6) 更新变量:xk+1=xk+ρk∗sk=xk+ρk∗∇f(xk)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(xk+1)−f(xk)≤βf(x_{k+1})-f(x_k)\leq \betaf(xk+1)f(xk)β转(9),否则继续
(8) 更新步长:k=k+1k=k+1k=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) 方向导数由两部分组成:方向和导数,方向即lll的方向,使用角度表示,导数即梯度,表示变化率;
(3) 梯度下降法即使用负梯度方向,使更新的值下降速度最快;
(4) 优化算法核心是优化目标函数,将问题抽象成目标函数,如机器学习中,将估计值和真实值计算损失,该损失表达式即为该训练的目标函数,进一步使用不同的优化算法进行优化,常用的优化算法有:Momentum、Nesterov、RMSProp、AdaGrad、Adam、SGD、GD等;
(5) 梯度上升法和梯度下降法比较如下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天然玩家

坚持才能做到极致

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

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

打赏作者

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

抵扣说明:

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

余额充值