梯度下降:
梯度下降法的基本思想可以类比为一个下山的过程。
假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了
这个过程先简单的可以看成是例如在F=x**2 +x 这个方程所描绘的山谷的某个点一直向下走,每一步的方向就是每一步所在该点的梯度值
# 梯度下降优化函数
def torch24():
x = torch.tensor(5, requires_grad=True, dtype=torch.float64)
for _ in range(2000):#迭代次数2000
f = x ** 2 + x
if x.grad is not None: # 梯度清0,因为每次自动微分都会累加到x.grad中
x.grad.data.zero_()
f.backward()#自动微分
x.data = x.data - 0.01 * x.grad # 更新数据 0.01为步长
print('%.10f' % x.data)
大概迭代1300次就结果为-0.5000000000