猫史档案馆


【梯度下降】梯度下降入门

用户:四九圣尊四九圣尊查看:0 回复:3 评论:0 创建时间:2018-10-26T19:19:13


梯度下降是一种求函数最小值的方法,是现在很多机器学习算法的基础。它可以使损失函数的值降低,是问题得到优化。

(损失函数的概念大家可以去查一下)

现在假设有一个问题的损失函数是这样子的:

将它的函数图像画出来

center_image

可以看出,当x为0时损失函数最小。我们的问题得到最优解。

 我们初始化seita的起点。然后不断地减去函数中x为seita时的斜率。

center_image

可以看到斜率越低时,取seita时损失函数的值越来越小。

 

的导数(求指定点的斜率)是2x。这个之前发的一篇教程我已经给大家推到过了,虽然已经不知道沉到哪里去了,大家可以翻一下。

for i in range(100):
seita = seita-learn_rate*function(seita,True)
最后损失函数的下降如图所示:
center_image
可以看出结果正在不断变好,可以通过调整学习率来加速训练,在这种凹函数中不会存在什么局部最优的问题。

这是一个最简单的例子,下次我们讨论更加复杂的梯度下降,损失函数的设定将不会怎么简单(这只是个例子,这个损失解决不了任何实际问题),
而是依照实际问题来设定,所以它可能会存在多个参数。


回复

上一页1 页 / 共 1下一页
无情的AC自动鸡无情的AC自动鸡

我觉得星

点赞0


评论


四九圣尊四九圣尊

求:(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 ∆y1/∞ 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


评论