用户:四九圣尊查看:0 回复:3 评论:0 创建时间:2018-10-26T19:19:13
梯度下降是一种求函数最小值的方法,是现在很多机器学习算法的基础。它可以使损失函数的值降低,是问题得到优化。
(损失函数的概念大家可以去查一下)
现在假设有一个问题的损失函数是这样子的:

将它的函数图像画出来
可以看出,当x为0时损失函数最小。我们的问题得到最优解。
我们初始化seita的起点
。然后不断地减去函数中x为seita时的斜率。
可以看到斜率越低时,取seita时损失函数的值越来越小。
的导数(求指定点的斜率)是2x。这个之前发的一篇教程我已经给大家推到过了,虽然已经不知道沉到哪里去了,大家可以翻一下。
for i in range(100):
seita = seita-learn_rate*function(seita,True)
最后损失函数的下降如图所示:
可以看出结果正在不断变好,可以通过调整学习率来加速训练,在这种凹函数中不会存在什么局部最优的问题。
这是一个最简单的例子,下次我们讨论更加复杂的梯度下降,损失函数的设定将不会怎么简单(这只是个例子,这个损失解决不了任何实际问题),
而是依照实际问题来设定,所以它可能会存在多个参数。
求:(x,y)在y=x²上的斜率:
∴(x+∆x) ² = y+ ∆y
∴x²+ ∆x ² + 2 x ∆x = y + ∆y
∴x²/∆x + ∆x + 2x = y/∆x + ∆y/∆x(上面除以∆x )
∴x²/∆x + ∆x + 2x - y/∆x = ∆y/∆x
又: ∆x, ∆y= 1/∞, x²= y
∴ ∆x + 2x = ∆y/∆x
∴ 2x = ∆y/∆x 注释:快速求K法
点赞0
评论
import matplotlib.pyplot as plt
th = 1
def function(a,devi=False):
if devi:
return 2*a
else:
return a ** 2
F = [i for i in range(-100,100)]
print(F)
F = [function(i) for i in F ]
lr = 0.01
x = []
y = []
for i in range(100):
th = th-lr*function(th,True)
x.append(th*3)
y.append(th**2)
print(th)
plt.scatter(x,y)
plt.show()
plt.plot(F)
plt.show()
点赞0
评论