为什么是梯度?

我们经常会用到梯度下降,那为什么是梯度呢?为什么不是硬度?长度?零度?百度?
优化问题分成无约束优化和有约束优化,有约束优化最终都要调整成无约束优化问题,所以我们直接看无约束优化问题,它的标准形式如下:
min ⁡ x f ( x ) \min_{x}f(x) xminf(x)
严格的数学定义里要求 f ( x ) f(x) f(x)是一个平滑函数,一般来说 x x x是向量,比如机器学习里面动不动就是几百维的,我们的目标是找到一个 x x x使得 f ( x ) f(x) f(x)最小,小学二年级在学习完微积分后我们知道最小值肯定出现在 f ( x ) f(x) f(x)一阶导数等于0的时候,可以使一阶导数等于0的 x x x叫驻点,那你可能就要问了,既然可以得到解析解(analytical solution/closed solution),为什么还要用梯度下降求呢?原因大概如此:如果 f ( x ) f(x) f(x)极其复杂的话,计算它的一阶导数非常困难,其次还得让计算机求解 f ′ ( x ) = 0 f'(x)=0 f(x)=0,为了求解一个问题,引入另一个复杂问题~这不是解决问题的思路~所以才会出现优化算法。

求解优化问题肯定脱离不了大概也许是计算机世界最伟大的思想——迭代,给定一个初始的 x x x,叫它 x 0 x_0 x0, 通过某种策略,得到一个新的 x x x,叫它 x 1 x_1 x1,要求 f ( x 1 ) < f ( x 0 ) f(x_1) < f(x_0) f(x1)<f(x0),再找一个新的 x x x,叫 x 2 x_2 x2,同样要求 f ( x 2 ) < f ( x 1 ) f(x_2) < f(x_1) f(x2)<f(x1),一只更新 x x x,一直得到更小的 f ( x ) f(x) f(x),直到您满意为止,如何从 x 0 x_0 x0 x 1 x_1 x1直到 x n x_n xn就是各种优化算法干的活,大概有两种思路,一种叫线性搜索(Linear Search),另一种叫信任域(Trust Range),Trust Range我没仔细看过,不瞎指挥~梯度下降属于线性搜索。

既然要求 f ( x k + 1 ) < f ( x k ) f(x_{k+1})<f(x_k) f(xk+1)<f(xk),下次迭代的函数值要小于这次的函数值,只要每次迭代都能保证这样,函数值就会一直变小,美好的愿景~~如何得到 x k + 1 x_{k+1} xk+1 呢?这里需要引荐一个人,Taylor

图片来自百度搜索
当然不是霉霉,而是下面这位:
图片来自百度搜索

以这位泰勒命名的定理,泰勒定理,还记得么?


定理:
n n n 是一个正整数。如果定义在一个包含 a a a的区间上的函数 f f f a a a点处 n + 1 n+1 n+1次可导,那么对于这个区间上的任意 x x x,都有:
f ( x ) = f ( a ) + f ′ ( a ) 1 ! ( x − a ) + f ( 2 ) ( a ) 2 ! ( x − a ) 2 + ⋅ ⋅ ⋅ + f ( n ) ( a ) n ! ( x − a ) n + o [ ( x − a ) n ] f(x) = f(a) + \frac{{f}'(a)}{1!}(x-a)+ \frac{f^{(2)}(a)}{2!}(x-a)^{2} + \cdot \cdot \cdot + \frac{f^{(n)}(a)}{n!}(x-a)^{n} + o[(x - a)^{n}] f(x)=f(a)+1!f(a)(xa)+2!f(2)(a)(xa)2++n!f(n)(a)(xa)n+o[(xa)n]
其中的多项式称为函数在 a a a处的泰勒展开式,剩余的 R n ( x ) R_n(x) Rn(x)是泰勒公式的余项,是 ( x − a ) n (x-a)^n (xa)n的高阶无穷小。


上面定理来自维基百科泰勒公式,如果看着很伤,没关系,这不重要,放在我们的情况下可以这样解释,新引入一个 Δ x = x k + 1 − x k \Delta x=x_{k+1}-x_{k} Δx=xk+1xk,如果这个 Δ x \Delta x Δx足够小的话, f ( x k + Δ x ) f(x_{k} + \Delta x) f(xk+Δx)近似等于 f ( x k ) + ∇ f ( x k ) ⋅ Δ x f(x_k) + \nabla f(x_k) \cdot \Delta x f(xk)+f(xk)Δx,这里为啥把一阶导数换成梯度符号 ∇ \nabla ,因为帅,当然计算二阶导数会更准确,但是也更复杂了后面咱再聊,我们现在就使用一阶导数近似:
f ( x k + 1 ) = f ( x k + Δ x ) ≈ f ( x k ) + ∇ f ( x k ) ⋅ Δ x f(x_{k+1}) = f(x_k + \Delta x) \approx f(x_k)+\nabla f(x_k) \cdot \Delta x f(xk+1)=f(xk+Δx)f(xk)+f(xk)Δx
x x x是向量所以 Δ x \Delta x Δx也是向量,是向量就有两部分长度和方向,我们让
Δ x = α p k \Delta x = \alpha p_k Δx=αpk

α \alpha α是大于0的非常小的常数,叫它步长吧, p k p_k pk是单位向量,新一轮的函数值可以写成:
f ( x k ) + α p k T ∇ f ( x k ) f(x_k) + \alpha p_{k}^{T}\nabla f(x_k) f(xk)+αpkTf(xk)

既然要求它小于 f ( x k ) f(x_k) f(xk) ,所以 α p k T ∇ f ( x k ) \alpha p_{k}^{T}\nabla f(x_k) αpkTf(xk)小于0,既然是让 f ( x k ) + α p k T ∇ f ( x k ) < f ( x k ) f(x_k) + \alpha p_{k}^{T}\nabla f(x_k) < f(x_k) f(xk)+αpkTf(xk)<f(xk),反正是走一步,那就尽量让这一步的函数值小一点,索性就让这一次迭代的函数值最小得了,当然是在 α \alpha α这个常数一定的情况~~~所以新一轮迭代的要求可以写成:
min ⁡ f ( x k ) + α p k T ∇ f ( x k ) \min f(x_k) + \alpha p_{k}^{T}\nabla f(x_k) minf(xk)+αpkTf(xk)
因为每次迭代 x x x都发生了变化,所以每次都可以计算上面这个最小化问题,大概跟下山一样(NG的视频这样形容),每次下降到一个位置,就需要重新选择一个方向继续下降。其中 f ( x k ) f(x_k) f(xk) 是上一轮的函数值,已知, α \alpha α大于0的很小的常数,事先给定的,已知,与下面的最小化是等价的:
min ⁡ p k T ∇ f ( x k ) \min p_{k}^{T}\nabla f(x_k) minpkTf(xk)
啰嗦一句,最小化 p k T ∇ f ( x k ) p_{k}^{T}\nabla f(x_k) pkTf(xk)就是最小化 f ( x k ) + α p k T ∇ f ( x k ) f(x_k) + \alpha p_{k}^{T}\nabla f(x_k) f(xk)+αpkTf(xk),也就是最小化 f ( x k + Δ x ) f(x_k + \Delta x) f(xk+Δx),也就是最小化 f ( x k + 1 ) f(x_{k+1}) f(xk+1),意思就是,下一步在步长 α \alpha α固定的情况下尽可能的让 f ( x k + 1 ) f(x_{k+1}) f(xk+1)小,每一次迭代都尽可能的小,直到到达某个 x x x稳定下来~其实这个思路非常贪婪,很可能会掉入局部最小值无法自拔,当然也有解决思路,有机会聊~

min ⁡ p k T ∇ f ( x k ) \min p_{k}^{T}\nabla f(x_k) minpkTf(xk)怎么解?两个向量做乘法,假如两个向量的夹角 θ \theta θ,看下图:
在这里插入图片描述
根据向量乘法的定义 p k T ∇ f ( x k ) = ∥ p k ∥ ∥ ∇ f ( x k ) ∥ cos ⁡ θ p_k^T\nabla f(x_k)=\left \| p_k \right \|\left \| \nabla f(x_k) \right \| \cos \theta pkTf(xk)=pkf(xk)cosθ,其中 ∥ p k ∥ ∥ ∇ f ( x k ) ∥ \left \| p_k \right \|\left \| \nabla f(x_k) \right \| pkf(xk)是大于0的, cos ⁡ θ \cos \theta cosθ最小等于-1,于是 p k T ∇ f ( x k ) p_k^T\nabla f(x_k) pkTf(xk)最小等于 − ∥ p k ∥ ∥ ∇ f ( x k ) ∥ -\left \| p_k \right \|\left \| \nabla f(x_k) \right \| pkf(xk),此时 θ = 18 0 ∘ \theta = 180^{\circ} θ=180,像这样:

在这里插入图片描述
p k p_k pk ∇ f ( x k ) \nabla f(x_k) f(xk)的方向是相反的,向量表示就是 p k = − ∇ f ( x k ) p_k=-\nabla f(x_k) pk=f(xk),有没有一种似曾相识的感觉,没错,梯度下降的公式终于出现了,新一轮可以使 f ( x k + 1 ) f(x_{k+1}) f(xk+1)尽可能小移动方向是负梯度方向~梯度下降~
如果每次我们都选择负梯度方向更新x,在保证 f ( x k + Δ x ) < f ( x k ) f(x_k + \Delta x) < f(x_k) f(xk+Δx)<f(xk)的同时,还能保证 f ( x k + Δ x ) f(x_k + \Delta x) f(xk+Δx)一直是最小的,每次迭代都会更新 x x x,所以下次又可以计算 min ⁡ f ( x k + Δ x ) \min f(x_k + \Delta x) minf(xk+Δx) ,这样一直迭代下去,总是会找到一个 x x x使得 f ( x ) f(x) f(x)最小~当然可能是局部最小。

PS:

既然保证每次迭代 f ( x k + 1 ) < f ( x k ) f(x_{k+1}) < f(x_k) f(xk+1)<f(xk),也就是 p k T ∇ f ( x k ) p_{k}^{T}\nabla f(x_k) pkTf(xk) 小于0就可以,所以 p k p_k pk不一定非要选择负梯度方向,只要 α \alpha α足够小, p k p_k pk选择下图左边蓝色区域的任意方向,都以保证新一轮的 f ( x k + 1 ) 小 于 f ( x k ) f(x_{k+1})小于f(x_k) f(xk+1)f(xk)
在这里插入图片描述

参考文献:

  1. Jorge NocedalStephen J. Wright, Numerical Optimization
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值