负梯度
梯度下降有点像人下山,为了节省时间挑选最快下山路径,用到的是高数的求导。
1.定义简单的二次函数及其导数。
初始值是一开始下山的位置,学习率是下山走路的步子,步子大就下的快。
每一步都对位置进行更新,这里要注意关注的位置是在同一个坐标轴维度。
def f(x):
return x ** 2 + 2 * x
def gradf(x):
return 2 * x + 2
x0 = 0 # 初始值
eta = 1e-4 #学习率
for step in range(20):
g = gradf(x0)
x0 = x0 - eta * g
print(f"Setp:{step}, {x0}, {f(x0)}")
2.二元二次函数,偏导。
def f(x1, x2):
return x1 ** 2 + 2 * x1 + x2 ** 2 + x2
def gradf(x1, x2):
return 2 * x1 + 2, 2 * x2 + 1
x1, x2 = 0, 0 # 初始值
eta = 0.3 # 学习率
for step in range(200):
g1, g2 = gradf(x1, x2)
x1 = x1 - eta * g1
x2 = x2 - eta * g2
print(f"Setp:{step}, {(x1, x2)}, {f(x1, x2)}")