您的位置:首页 > 其它

coursera《机器学习》吴恩达-week1-03 梯度下降算法

2017-08-11 19:48 246 查看

梯度下降算法

最小化代价函数J

梯度下降

使用全机学习最小化

首先查看一般的J()函数

问题

我们有J(θ0, θ1)

我们想获得 min J(θ0, θ1)

梯度下降适用于更一般的功能

J(θ0, θ1, θ2 …. θn)

min J(θ0, θ1, θ2 …. θn)

这一算法如何工作?:

从初始假定开始

从0,0开始(或任何其他值)

保持一点点的改变θ0和θ1,来试图减少

每次更改参数时,可以选择这降低了梯度J(θ0, θ1)的最可能的

重复

这样做直到你收敛到局部的最低点

有一个有趣的性质

你开始的位置可以确定你最终的最低点



这里我们可以看到一个初始化点产生一个局部最小值

另一个初始化点产生了另一个局部最小值

更正式的定义

重复以下步骤直到收敛



这是什么意思?

通过将θj设置为θj减去α倍的局部成本函数对于θj的导数

符号

:=

表示赋值

NB a = b是 真实断言

α (alpha)

是一个叫做学习速率的数字

控制你采取的更新速度有多大

如果α大,则具有较大的下降幅度

如果α小,则幅度较小

导数



- 之后详细解释

一个巧妙的实现梯度下降算法的实现

如下处理θ0和θ1

For j = 0 and j = 1 意味着同时更新θ0和θ1的值

如何实现?

为θ0和θ1计算等式右手侧

所以我们需要一个临时值

然后,更新θ0和θ1的同时

我们以图形方式显示



如果您实现非同步更新,则不是梯度下降,并且会出现异常

但它可能看起来是对的 - 所以重要的是要记住这一点!

了解算法

要了解梯度下降,我们将返回一个更简单的函数,我们最小化一个参数来帮助更详细地解释算法

当θ1是一个实数时 ,min θ1 J(θ1)

算法中的两个关键术语

α(alpha)

细微差别

- 偏导与导数

- 当我们有多个变量但是只相对于一个变量导出时,使用偏导数

- 当我们相对于所有变量导出时,使用导数

微分项



导数说明

在这一点做切线并观察切线斜率

所以向下移动会生成一个负导数,α总是正的。因此更新j(θ1) 到一个更小的值。

类似的,向上移动会使得j(θ1) 更大

alpha(α)

如果alpha太小或太大,会发生什么

太小

步进太小

太耗时了

太大了

可能错过最小值,最终不能收敛

当你获得一个局部最小值

此处切线斜率\导数为0

因此微分项也为0

alpha*0=0

则θ1=θ1-0

θ1将保持不变

当您接近全局最小值时,导数项变小,所以即使alpha固定,您的更新也会变小

随着算法的运行,当您接近最小值时,您将采取较小的步骤

所以不需要随着时间的推移来改变alpha

梯度下降的线性回归

应用梯度下降来最小化平方差代价函数J(θ0, θ1)

现在我们有一个偏导数



现在我们展开第一对表达式、

J(θ0, θ1) = 1/2m….

hθ(x) = θ0 + θ1*x

当我们需要决定每个参数的导数时:

When j = 0

When j = 1

标识出针对于θ0和θ1的偏导数

当我们根据j = 0和j = 1对这个表达式求导时,我们得到以下结果



要检查这个,你需要知道多元微积分

所以我们可以将这些值重新插入梯度下降算法

它是如何工作的

遇到不同的局部最优的风险

线性回归代价函数总是一个凸函数 - 总是有一个最小值

碗型曲面

一个全局最优

因此梯度下降总会收敛到全局最优

实践中

初始化:

θ0 = 900

θ1 = -0.1



最终达到全局最低点

这实际上是批量梯度下降

指的是在每个步骤中,您可以查看所有的培训数据

每个步骤计算m个训练样例

有时,非批次版本存在,它们查看小数据子集

我们将在课程的后面研究其他形式的梯度下降(当m太大时使用)

存在用于找到最小函数的解的数值解

正则方程 法

渐变下降可以更好地扩展到大型数据集

用于大量的语境和机器学习

下一步 - 重要的扩展

两个算法的扩展

数值解的正则方程

为了解决[min J(θ0,θ1)]这个最小化问题,我们使用精确地数值方法而不是不断迭代梯度下降的方法

正则方程法

有优缺点

优点

不再是Alpha术语

对于一些问题可以快一些

坏处

更复杂

我们可以学习更多的功能

我们可以学习更多的函数

所以可能有其他参数有助于价格

例如与房屋

尺寸

年龄

卧室数字

楼层数

x1,x2,x3,x4

有多个功能变得很难绘制

不能真正绘制在三维以上

符号也变得更加复杂

绕过这个最好的方法是线性代数的符号

提供符号和一系列可以使用矩阵和向量的事物

例如矩阵





我们在这里看到这个矩阵显示了我们

尺寸

卧室数量

楼层数

家庭年龄

所有数据都在一个变量中

数字块,将所有数据组织成一个大块

向量

显示为y

向我们显示价格

需要线性代数来获得更复杂的线性回归模型

线性代数对于制作计算效率高的模型是有好处的(如后所述)

提供使用大量数据集的好方法

通常,问题的向量化是常见的优化技术
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习