机器学习中关于判断函数凸或凹以及最优化的问题
2015-08-10 16:26
447 查看
在很多机器学习算法中,都会遇到最优化问题。因为我们机器学习算法,就是要在模型空间中找到这样一个模型,使得这个模型在一定范围内具有最优的性能表现。因此,机器学习离不开最优化。然而,对于很多问题,我们并不总能够找到这个最优,很多时候我们都是尽力去找到近似最优,这就是解析解和近似解的范畴。
很多最优化问题都是在目标函数是凸函数或者凹函数的基础上进行的。原因很简单,凸函数的局部极小值就是其全局最小值,凹函数的局部极大值就是其全局最大值。因此,只要我们依据一个策略,一步步地逼近这个极值,最终肯定能够到达全局最值附近。
那么,如何判断目标函数凸或者凹呢?
![](https://img-blog.csdn.net/20150810154237167)
等号右边是对函数在x点的一阶近似。这个条件的意义是,对于函数在定义域的任意取值,函数的值都大于或者等于对函数在这点的一阶近似。用图来说明就是:
![](https://img-blog.csdn.net/20150810154553206)
通过图可以很清楚地理解这个充要条件,但是,具体在应用中,我们不可能对每一个点都去计算函数的一阶导数吧,因此下面这个充要条件更加实用。
![](https://img-blog.csdn.net/20150810154850724)
很简单,如果一个函数的二阶导数大于等于零,那么这个函数就是凸函数。图就不上了,很好理解,函数的一阶导数具有递增性,那么函数本身就是凸函数。
通过暴力计算法,可以很快地判断函数是不是凸函数。凹函数同理。
指数函数是凸函数;
对数函数是凹函数,然后负对数函数就是凸函数;
对于一个凸函数进行仿射变换,可以理解为线性变换,结果还是凸函数;
二次函数是凸函数(二次项系数为正);
高斯分布函数是凹函数;
多个凸函数的线性加权,如果权值是大于等于零的,那么整个加权结果函数是凸函数。
下面出一道题目:如何判断最大似然函数一定有最大值?
思路:最大似然函数是求最大值,那么函数必须是凹函数。就拿我们常用的对数似然函数,是多个对数函数的线性加权而且权值为1,而对数函数是凹函数,然后每个对数内部有没有嵌套其他函数再分析一下,最后就能判断整个对数似然函数是凹函数,因此一定有最大值。
线性规划
二次规划
二次约束的二次规划
半正定规划
有哪些最优化的手段呢?常见的有:
梯度上升(下降)法
牛顿法 / 拟牛顿法
坐标下降法
关于这部分的知识下次详谈,先给出几篇相关的资料:
凸优化和机器学习
关于凸优化的一些简单概念
斯坦福凸优化综述
很多最优化问题都是在目标函数是凸函数或者凹函数的基础上进行的。原因很简单,凸函数的局部极小值就是其全局最小值,凹函数的局部极大值就是其全局最大值。因此,只要我们依据一个策略,一步步地逼近这个极值,最终肯定能够到达全局最值附近。
那么,如何判断目标函数凸或者凹呢?
判断目标函数凸或者凹的方法
1 暴力计算法
这个方法是我自己起的名字,哈哈,但是方法不是我发明的。。所谓暴力计算法,就是直接对目标函数进行计算,然后判断其是否凸。具体地,就是计算目标函数的一阶导数和二阶导数。然后作出判断。凸函数的一阶充要条件
等号右边是对函数在x点的一阶近似。这个条件的意义是,对于函数在定义域的任意取值,函数的值都大于或者等于对函数在这点的一阶近似。用图来说明就是:
通过图可以很清楚地理解这个充要条件,但是,具体在应用中,我们不可能对每一个点都去计算函数的一阶导数吧,因此下面这个充要条件更加实用。
凸函数的二阶充要条件
很简单,如果一个函数的二阶导数大于等于零,那么这个函数就是凸函数。图就不上了,很好理解,函数的一阶导数具有递增性,那么函数本身就是凸函数。
通过暴力计算法,可以很快地判断函数是不是凸函数。凹函数同理。
2 结构分析法
重要的内容都在后面,哈哈。有时候我们不必通过暴力计算,可以通过分析目标函数的结构,就能在一些情况下判断函数是否是凸函数。下面给出一些结论:指数函数是凸函数;
对数函数是凹函数,然后负对数函数就是凸函数;
对于一个凸函数进行仿射变换,可以理解为线性变换,结果还是凸函数;
二次函数是凸函数(二次项系数为正);
高斯分布函数是凹函数;
多个凸函数的线性加权,如果权值是大于等于零的,那么整个加权结果函数是凸函数。
下面出一道题目:如何判断最大似然函数一定有最大值?
思路:最大似然函数是求最大值,那么函数必须是凹函数。就拿我们常用的对数似然函数,是多个对数函数的线性加权而且权值为1,而对数函数是凹函数,然后每个对数内部有没有嵌套其他函数再分析一下,最后就能判断整个对数似然函数是凹函数,因此一定有最大值。
机器学习中的最优化问题
很多机器学习算法都设计最优化问题,判断目标函数是凸是凹是第一步,这只是可以最优化的前提,那么,有哪些最优化的问题呢?线性规划
二次规划
二次约束的二次规划
半正定规划
有哪些最优化的手段呢?常见的有:
梯度上升(下降)法
牛顿法 / 拟牛顿法
坐标下降法
关于这部分的知识下次详谈,先给出几篇相关的资料:
凸优化和机器学习
关于凸优化的一些简单概念
斯坦福凸优化综述
相关文章推荐
- MySQL 优化
- Google排名优化的几个影响因素
- DB2优化(简易版)
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- C#中尾递归的使用、优化及编译器优化
- 优化Ruby脚本效率实例分享
- mysql -参数thread_cache_size优化方法 小结
- 详解mysql的limit经典用法及优化实例
- oracle数据库sql的优化总结
- SQL优化经验总结
- SQL优化技巧指南
- SQL Server优化50法汇总
- C++快速排序的分析与优化详解
- 手把手教你如何优化C语言程序
- mysql 分页优化解析
- 非常不错的MySQL优化的8条经验
- 优化Node.js Web应用运行速度的10个技巧
- JavaScript学习笔记(十七)js 优化
- 如何改进javascript代码的性能
- javascript代码加载优化方法