设要求方程的值:
我们采用mse(误差平方和)作为优化函数:
上面的问题即可转化为求:的最小值了
求该公式的导数/梯度为:
我们随机给x初始化一个值,然后使用导数公式来更新x的值,其中lr为学习率/步长:
若设置初始值x=10,则更新代码为:
x = 10
lr = 0.001
for i in range(1000):
grad = 2 * (x**2 - 5) * (2 * x)
x = x - lr * grad
print("iteration: {}, grad: {}, x: {}".format(i, grad, x))
打印的记录为:
iteration: 0, grad: 3800, x: 6.199999999999999
iteration: 1, grad: 829.3119999999997, x: 5.3706879999999995
iteration: 2, grad: 512.2409599499898, x: 4.8584470400500095
iteration: 3, grad: 361.5560603194475, x: 4.496890979730562
...
iteration: 997, grad: 2.1449095084056491e-13, x: 2.236067977499795
iteration: 998, grad: 2.1449095084056491e-13, x: 2.236067977499795
iteration: 999, grad: 2.1449095084056491e-13, x: 2.236067977499795
可以看到,迭代1000次后,已经找到了一个极值2.236