用梯度下降算法求最值

1.梯度方向

对多元函数的参数求偏导,得到函数增加或减小最快的方向。具体来说,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。

2.梯度下降算法过程如下:

(1)随机初始值a0

(2)迭代ak+1=ak+skak直至收敛。sk表示在ak处的负梯度方向,ak表示学习率。

3.求y=cos(x)在(0,2*pi)上的最小值

(1)随机初值设置为5,学习率为0.1。

(2)cos(x)的导数为-sin(x),所以ak+1=ak+ska 为xk+1=xk-(learn_rate×(-sin(x)))。

import numpy as np
x=5
learn_rate=0.1
for i in range (200):
    x+=learn_rate*np.sin(x)
    print(i,x)


结果收敛:

988 3.14159265359
989 3.14159265359
990 3.14159265359
991 3.14159265359
992 3.14159265359
993 3.14159265359
994 3.14159265359
995 3.14159265359
996 3.14159265359
997 3.14159265359
998 3.14159265359
999 3.14159265359

原文地址:https://www.cnblogs.com/fuhang/p/8056965.html