zoukankan      html  css  js  c++  java
  • 判断目标函数凸或者凹的方法

    1 梯度法

    就是直接对目标函数进行计算,然后判断其是否凸。具体地,就是计算目标函数的一阶导数和二阶导数。然后作出判断。

    凸函数的一阶充要条件

    这里写图片描述

    等号右边是对函数在x点的一阶近似。这个条件的意义是,对于函数在定义域的任意取值,函数的值都大于或者等于对函数在这点的一阶近似。用图来说明就是:

    这里写图片描述

    通过图可以很清楚地理解这个充要条件,但是,具体在应用中,我们不可能对每一个点都去计算函数的一阶导数吧,因此下面这个充要条件更加实用。

    凸函数的二阶充要条件

    这里写图片描述

    很简单,如果一个函数的二阶导数大于等于零,那么这个函数就是凸函数。图就不上了,很好理解,函数的一阶导数具有递增性,那么函数本身就是凸函数。

    通过暴力计算法,可以很快地判断函数是不是凸函数。凹函数同理。

    2 结构分析法

    有时候我们不必通过暴力计算,可以通过分析目标函数的结构,就能在一些情况下判断函数是否是凸函数。下面给出一些结论:

    1. 指数函数是凸函数;
    2. 对数函数是凹函数,然后负对数函数就是凸函数;
    3. 对于一个凸函数进行仿射变换,可以理解为线性变换,结果还是凸函数;
    4. 二次函数是凸函数(二次项系数为正);
    5. 高斯分布函数是凹函数;
    6. 多个凸函数的线性加权,如果权值是大于等于零的,那么整个加权结果函数是凸函数。

    下面出一道题目:如何判断最大似然函数一定有最大值?

    思路:最大似然函数是求最大值,那么函数必须是凹函数。就拿我们常用的对数似然函数,是多个对数函数的线性加权而且权值为1,而对数函数是凹函数,然后每个对数内部有没有嵌套其他函数再分析一下,最后就能判断整个对数似然函数是凹函数,因此一定有最大值。

    机器学习中的最优化问题

    很多机器学习算法都设计最优化问题,判断目标函数是凸是凹是第一步,这只是可以最优化的前提,那么,有哪些最优化的问题呢?

    • 线性规划
    • 二次规划
    • 二次约束的二次规划
    • 半正定规划

    有哪些最优化的手段呢?常见的有:

    • 梯度上升(下降)法
    • 牛顿法 / 拟牛顿法
    • 坐标下降法

    参考资料:

    http://blog.csdn.net/xmu_jupiter/article/details/47400411

    http://www.cnblogs.com/tornadomeet/p/3300132.html

  • 相关阅读:
    Vue路由机制
    谷歌浏览器打不开应用商店的解决方法
    Vue报错——Component template should contain exactly one root element. If you are using vif on multiple elements, use velseif to chain them instead.
    Vue.js学习之——安装
    Vue使用axios无法读取data的解决办法
    关于localstorage存储JSON对象的问题
    2013年整体计划
    个人喜欢的警语收集
    Linux防火墙的关闭和开启
    Flex修改title 转载
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/6637181.html
Copyright © 2011-2022 走看看