《为什么梯度的负方向是损失函数下降最快的方向》
之前从来没有考虑过这个问题如何证明,因为函数某点处的梯度作为一个向量它自身就是指向着某点处变化最大的方向的,所以梯度的负方向肯定是下降最快的方向,但是怎么从理论上给予给力的证明呢,这篇博客来讨论下这个问题。
Key Words:梯度下降、优化损失函数、负方向下降最快推导
Beijing, 2020
优化问题
- 1、损失函数为: L ( θ ) L(\theta) L(θ)
- 2、优化目标为: θ ∗ = arg min θ L ( θ ) \theta^* = \argmin_\theta L(\theta) θ∗=θargminL(θ)
- 3、优化方法为:gradient descent
- 4、我们通过迭代来更新参数,每次更新的参数
θ
\theta
θ都使得
L
(
θ
)
L(\theta)
L(θ)更小
- L ( θ 0 ) > L ( θ 1 ) > L ( θ 2 ) > . . . L(\theta^0) > L(\theta^1) > L(\theta^2) > ... L(θ0)>L(θ1)>L(θ2)>...
下面的ppt是来自李宏毅老师的ppt课件,直观的反映了通过梯度下降法来求解使得损失函数最小的参数 θ 1 , θ 2 \theta^1,\theta^2 θ1,θ2。下图中的每个点表示 θ 1 , θ 2 \theta^1,\theta^2 θ1,θ2的坐标,对应的等高线的数值是损失函数 L ( θ 1 , θ 2 ) L(\theta^1,\theta^2) L(θ1,θ2)的函数值,目的是为了让该函数向最小的地方优化。红色的圆圈是每次更新的范围,我们在这个范围中选取能让损失函数最小的方向来更新参数。
![](https://i-blog.csdnimg.cn/blog_migrate/c96c56425dcb0f3a0edaccdba552d65a.png)
Taylor级数
Taylor展开式近似函数的理解
不是对所有的函数的任意值的泰勒展开式都能够很好的逼近原始函数的,因为需要考虑到 收敛半径 的问题,x的取值半径过大就可能导致近似值上下波动。所以理论上我们使用泰勒级数对一个函数逼近的时候x的取值半径尽量的小,这样不需要太多高阶项参与的时候就有很好的近似效果。
用几个泰勒级数在0点处近似函数的情形来理解泰勒级数,也就麦克劳林展开式。对 e x e^x ex来说,明显在距离0越远的地方,有高阶项的加入就会对函数贴合的更好。
![](https://i-blog.csdnimg.cn/blog_migrate/d8cbcd284fcaae33030417f77a6b376d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b788b8117b5a44059a53911013fbbe8f.png)
对 s i n ( x ) sin(x) sin(x)来说,同样在距离0越远的地方,有高阶项的加入就会对函数贴合的更好。但这是由于收敛半径所决定的,如果x的取值范围超过收敛半径就会出现上下波动的情况,所以级数的敛散性判定在多项式近似的过程中很重要。
![](https://i-blog.csdnimg.cn/blog_migrate/faeed123029ce9d997564fe056a4ba33.png)
![](https://i-blog.csdnimg.cn/blog_migrate/377786d6376966b30559f7b225dc5df1.png)
推导
二阶的泰勒级数展开式如下:
f ( x , y ) = f ( x 0 , y 0 ) + ∂ f ( x 0 , y 0 ) ∂ x ( x − x 0 ) + ∂ f ( x 0 , y 0 ) ∂ y ( y − y 0 ) + . . . + 1 n ! ( ∂ f ( x 0 , y 0 ) ∂ x ( x − x 0 ) + ∂ f ( x 0 , y 0 ) ∂ y ( y − y 0 ) ) n . . . + o n f(x,y) = f(x_0, y_0) + \frac{\partial{f(x_0, y_0)}}{\partial x}(x-x_0) + \frac{\partial{f(x_0, y_0)}}{\partial y}(y - y_0) +... + \frac{1}{n!}( \frac{\partial{f(x_0, y_0)}}{\partial{x}}(x - x_0) + \frac{\partial{f(x_0, y_0)}}{\partial{y}}(y - y_0) )^n... + o^n f(x,y)=f(x0,y0)+∂x∂f(x0,y0)(x−x0)+∂y∂f(x0,y0)(y−y0)+...+n!1(∂x∂f(x0,y0)(x−x0)+∂y∂f(x0,y0)(y−y0))n...+on
就像上面理解的那样,当 x x x和 x 0 x_0 x0足够接近的时候就有:
f ( x , y ) ≈ f ( x 0 , y 0 ) + ∂ f ( x 0 , y 0 ) ∂ x ( x − x 0 ) + ∂ f ( x 0 , y 0 ) ∂ y ( y − y 0 ) f(x,y) \approx f(x_0, y_0) + \frac{\partial f(x_0, y_0)}{\partial{x}}(x - x_0) + \frac{\partial f(x_0, y_0)}{\partial{y}}(y - y_0) f(x,y)≈f(x0,y0)+∂x∂f(x0,y0)(x−x0)+∂y∂f(x0,y0)(y−y0)
基于上面的理解,我们继续之前的优化问题,如下图所示,假设(a,b)点是我们参数当前的取值,那么我们可以对该点处进行泰勒展开,这里我们只保留一次项就可以了,因为理论上我们认为红色的圈是非常小的,所以保留一次项就足以在(a,b)对函数进行近似了。
![](https://i-blog.csdnimg.cn/blog_migrate/baeef56a6c4bc0a34ad89846eba8acb6.png)
显然这个红色的圈就是学习率,如果学习率过大,那么梯度下降法就会受到影响,考虑问题:为什么学习率过大会导致梯度下降法不work其原理是一样的。仍旧是对泰勒展开式的理解,因为梯度下降法对x的取值半径是有要求的。
![](https://i-blog.csdnimg.cn/blog_migrate/9d5460a7f06f8988336032555ed9f440.png)
接下来开始推导为什么梯度的负方向是损失函数下降最快的方向,在降低损失函数的时候,我们可以先不考虑常数项s,只考虑向量 ( Δ θ 1 , Δ θ 2 ) (\Delta{\theta_1}, \Delta{\theta_2}) (Δθ1,Δθ2)与梯度向量 u , v {u, v} u,v,那么此时的 L ( θ 1 , θ 2 ) L(\theta_1, \theta_2) L(θ1,θ2)就是两个向量的内积的形式。两个向量的内积可以理解为,一个向量在另一个向量上的投影,具体的计算方法就是两个向量的模长乘以余弦夹角。两个向量的夹角 c o s θ cos \theta cosθ 的取值越小,那么 L ( θ 1 , θ 2 ) L(\theta_1, \theta_2) L(θ1,θ2)的值就越小,所以 c o s θ = − 1 cos \theta = -1 cosθ=−1时最小,也正是梯度的反方向。
![](https://i-blog.csdnimg.cn/blog_migrate/f9980666a824c0df39850338c26af0d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/efa68101bd6cebd16df34ea79b69e8b3.png)
总结
- 对损失函数进行泰勒展开,只到一阶导数项。
- 对参数的搜索圆圈加以限制。
- 构建梯度与变化量间的内积形式,加以证明。
- 考虑问题:为什么学习率过大会导致梯度下降法不work?答案尽在其中。
参考
https://blog.csdn.net/qq_37213964/article/details/89476075
https://zhuanlan.zhihu.com/p/43506482
https://www.zhihu.com/question/21149770
https://baijiahao.baidu.com/s?id=1626714973748256700&wfr=spider&for=pc