首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Octave梯度下降法最优化代价函数的一个例子—ML Note 38

Octave梯度下降法最优化代价函数的一个例子—ML Note 38

作者头像
讲编程的高老师
发布2020-08-25 10:47:39
1K0
发布2020-08-25 10:47:39
举报

“Logistic Regression——Advanced optimization”。

01

笔记

本节讲的高级优化是相对于上一节的梯度下降法来说的,相对于上一节的梯度下降法本节的优化算法速度更快,更适合解决大型的机器学习问题。是什么样的高级算法呢?

除了梯度下降法还有?

回忆一下上一小节梯度下降法的思路。

首先,梯度下降法是通过梯度方向指明参数\theta变化的方向;

其次,迭代变换,知道找到那个能使代价函数J(\theta)最小那组\theta.

如下图:

上图中,使用梯度下降法的时候每一步我们都需要编码做两件事(1)求偏导数;(2)求代价函数的值。

为了实现上面的两个小目标,除了梯度下降法,还有几种更加高级、复杂的算法可选。如下图:

共轭梯度、BFGS、L-BFGS就是其中三个比较常用的。这三种算法的优点:不需要手动设置学习率\alpha;收敛速度比较快。这三种算法,比较复杂,需要花好多天的时间才能弄明白,这里吴老师没有详细介绍。可以在数值分析类的课程中学习到。

吴老师自己讲,这三种算法他已经在10多年前就用过了,但真正搞明白也就是这两年的事。就是说,我们可以在一知半解的情况下使用一些机器学习算法很好的去解决一些实际问题。边用边学吧。

一个Octave实现代价函数优化的例子

假设有下图这样一个例子的代价函数,这里有两个参数\theta_1, \theta_2, 代价函数J(\theta)如下:

当然,这里一看就知道\theta=[5;5]的时候代价函数取最小值。这里,假设我们不知道,那该怎样用代码来找到最小值呢?

首先,需要定义一个costFunction来计算偏导数。以Octave为例,即:

上图中的costFunction有两个返回,一个jVal即代价函数、一个gradient数组即theta向量每个分量上的偏导数。

其次,我们使用optimset函数创建一个最优化参数选项。代码

optimset('Gradobj', 'on', 'MaxIter', '100');
%‘Gradobj','MaxIter'表示参数名,紧接着后面的'on'、'100'为对应的值。
%‘Gradobj’,是否使用用户自己创建的梯度函数,此处设置为‘on’,即使用自定义的梯度函数
%‘MaxIter’,最大迭代次数,设置为100

然后,设置\theta的初始值,此处设置为[0;0],zeros(2,1)。

最后,使用fminunc函数寻找局部最小值。Octave中,这个函数的具体使用方法,可以在Octave中使用命令“help fminunc”。笼统地讲,就是使用指定的梯度函数、梯度函数的初始输入、最优化参数选项这三个东东来迭代寻找局部最优解;找到最优解后呢,把取得最优解的参数、函数最终返回原因的标示这三个东东抛回给用户,这里分别存在optTheta、functionVal、exitFlg这三个变量中。

具体调用方法如下图红色框框中所示:

所以,在Octave中对这个例子进行代价函数最优化求解的过程就是。首先,定义一个costFunction的函数,这个我们在第二周的课程中有讲过;然后,在命令行窗口中通过optimset函数定义一个最优化参数配置项、调用fminunc求解最优质就可以了。

调用过程如下图:

上图中,exitFlag=1说明本例是收敛了的。关于exitFlag其它可能的取值即对应的意义,同样可以在Octave中通过help fminunc命令来查看。

总结

总结一下,我们使用梯度下降一类的方法对有n+1个维度的参数向量的代价函数进行优化的关键是定义一个如下图所示的函数,函数中要给出代价函数的求法、每个维度上的偏导数的求法,即:返回代价函数、各个方向上的梯度。

伪代码如下图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 讲编程的高老师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 除了梯度下降法还有?
  • 一个Octave实现代价函数优化的例子
  • 总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档