1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 吴恩达机器学习笔记:(三)梯度下降法

吴恩达机器学习笔记:(三)梯度下降法

时间:2018-08-08 17:57:16

相关推荐

吴恩达机器学习笔记:(三)梯度下降法

梯度下降法

知识点:

偏导数、微积分、局部最优解

概念介绍

梯度下降法目的是为了“下降”,下降的方法是按照“梯度”。比如你在一座山上,当前你只能迈出一步,如何走才能使你的高度下降的最多呢,根据梯度的理论,我们沿着当前梯度的反方向走,会让我们的下降幅度最大。

上述例子中,山就是一个函数,在山上的你就是函数中待优化的变量,人的坐标表示变量初始值,我们要 求的是函数最小值即到达山底,人该如何走即如何迭代变量。所以我们只要沿着函数梯度的反方向,就能最快的到达我们要去的地方。

梯度下降是一种更新参数的方法,具体如何更新跟原函数的在某点的梯度有关。不会改变要求的最优解。

我们可以利用梯度下降法求最大值和最小值,求最大值沿着梯度方向走即可,求最小值则沿着梯度的反方向走。

公式

抽象的公式就一个

代码实现:

import numpy as nprow = 20x0 = np.zeros((row,1))x1 = np.arange(0,row+0).reshape(row,1)x2 = np.arange(10,row+10).reshape(row,1)x3 = np.arange(21,row+21).reshape(row,1)x = np.hstack((x1,x2,x3))y = 2*x1 +3*x2 + 4*x3 + np.random.random(row).reshape(row,1)#定义代价函数def error_function(theta, x, y):diff = np.dot(x, theta) - yreturn (1./2*row) * np.dot(np.transpose(diff), diff)#求梯度的函数def gradient_function(theta, x, y):diff = np.dot(x, theta) - yreturn (1./row) * np.dot(np.transpose(x), diff)#利用梯度下降法不断迭代参数def gradient_descent(x, y, alpha):theta = np.array([1, 1, 1]).reshape(3, 1)gradient = gradient_function(theta, x, y)while not np.all(np.absolute(gradient) <= 1e-5):theta = theta - alpha * gradientgradient = gradient_function(theta, x, y)# print(gradient)return thetaalpa = 0.001theta = gradient_descent(x,y,alpa)print(theta)

result:

[[1. ][1.97155845][2.96137676][4.05017691]]

上述代码中 ,学习率为0.001,把学习率改成1会发生什么呢,自己试试看,会发现程序会一直运行不停止,打印出梯度会发现,梯度一直增加最终变成了无限大。

这是因为,如果学习率过大,会导致不收敛,因为跨的步数太大,会越过那个最低点,并一直震荡。至于为什么梯度会变得越来越大以至于无限大;

举个例子

在A(10,200)点,梯度为40,所以下一时刻到B点的横坐标为10-140= -30,

在B(-30,1800)点,梯度为-120,所以下一时刻到达的点的横坐标为-30+1120=90,这样会导致离最优值越来越远。

所以:

学习率太大会导致不收敛

学习率太小会导致到达最低点的迭代次数太大,费时

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。