在Python中实现机器学习中的梯度下降

什么是梯度下降?

这是一个寻找函数最小值的优化算法。我们从函数上的一个随机点开始,沿着函数梯度的负方向移动,到达局部最小值。

在Python中实现机器学习中的梯度下降

手工举例:

问题 :从点x = 3开始,查找函数y =(x + 5)²的局部最小值

在Python中实现机器学习中的梯度下降

解答:我们通过查看图表知道答案。当x = -5时(即,当x = -5,y = 0时),y=(x+5)²达到它的最小值。因此x = -5是函数的局部和全局最小值。

现在,让我们看看如何使用梯度下降获得相同的数字。

第1步 :找到函数的梯度,dy / dx = 2 *(x + 5)。

第2步 :朝梯度负向移动。但是等等,移动多少?为此,我们需要一个学习率。让我们假设学习率→0.01

第3步 :我们执行2次梯度下降迭代

在Python中实现机器学习中的梯度下降

步骤4 :我们已经可以观察到X值缓慢下降并且应该收敛到-5(局部最小值)。但是,我们应该执行多少次迭代?

让我们在算法中设置一个精度变量,它计算两个连续的“x”值之间的差值。如果连续2次迭代的x值之间的差异小于我们设置的精度,请停止算法!

Python中的梯度下降:

步骤1 :初始化参数

cur_x = 3 # The algorithm starts at x=3

rate = 0.01 # Learning rate

precision = 0.000001 #这告诉我们何时停止算法

previous_step_size = 1 #

max_iters = 10000 # 最大迭代次数

iters = 0 #iteration counter

df = lambda x: 2*(x+5) #Gradient of our function

步骤 2:运行一个while循环执行梯度下降:

当连续两次迭代的x值之间的差值小于0.000001或迭代次数超过10,000时停止循环

while previous_step_size > precision and iters < max_iters:

prev_x = cur_x #Store current x value in prev_x

cur_x = cur_x - rate * df(prev_x) #Grad descent

previous_step_size = abs(cur_x - prev_x) #Change in x

iters = iters+1 #iteration count

print("Iteration",iters,"X value is",cur_x) #Print iterations

print("The local minimum occurs at", cur_x)

输出 :从下面的输出中,我们可以观察前10次迭代的x值 - 可以通过上面的计算进行交叉检查。该算法在终止之前运行595次迭代。

在Python中实现机器学习中的梯度下降

相关推荐