机器学习-凸优化理论-课堂笔记

转载地址: http://blog.csdn.net/JoyceWYJ/article/details/51580139

前言     

        这节课主要介绍凸优化的入门知识,程博士推荐阅读Boyd的《凸优化》,最经典的凸优化的书,这本书有600多页,细致讲解了凸优化相关的理论知识,可以作为一门学科来学习。因为硕士阶段学过《工程优化》,在这次学习过程中能容易的get到思想。 一般的优化问题包括 有约束和无约束两种,在这里我们将要弄清楚两件事情:为什么要优化?为什么要凸优化?

        首先,为什么要优化?大致组织了以下两点:

        1)方程式组本身没有解,但是在工程应用中会有求近似解的需求,怎么办呢?可以转化为求f(x)的最小值,即最小二乘问题。通过求导、求梯度来解。

        2)如果方程式组变量特别多,且都是高阶的,可以想象是相当难解的。仍然可以转为最优化问题。


1. 优化问题基础知识

1.1 无约束优化问题

         首先来看无约束优化问题。无约束优化问题中会需要极值点分析,如局部最小(大)点、全局最小(大)点以及拐点(例如x3在x=0时)。高等数学有讲过,简单的函数求极值点可以求梯度,复杂一点的可以求二阶偏导,得到Hessian矩阵。
              
   从Hessian矩阵可以看出,Hessian矩阵是个对称矩阵,因此可以定义矩阵的正负,也就是求对应的二次型的正负。求解二次型的特征值,如果特征值全正,就是正定矩阵;如果有正有负,就是不定矩阵。

1.2 泰勒级数展开

   泰勒展开特别有用,可以很方便的把一个函数展开成幂级数,即从函数的线性近似来估计函数。

   1)输入为标量的泰勒级数展开:如果是极值点,一阶导数一定为0;如果一阶导数f’(xk)为0,可以是极大点、极小点或者拐点。然后再求二阶导数,f’’(xk)>0,xk为严格局部最小点,反之局部最大点,f’’(xk)=0则可能是一个鞍点。

               
   2)输入为矢量的泰勒级数展开如下,如果二次型>0,为正定矩阵,对应的xk是局部极小点;不定矩阵就是鞍点。二阶用矩阵表示,更高阶的用Tensor表示,处理高维矩阵,这里不作引申。

               

   下面举例说明如何判断极值点。例如有函数 f(x) = (x12+ x22 -1)2 + (x22-1)

   1)计算一阶偏导和二阶偏导得到

               

   2)另一阶偏导 f=0 得到稳定点[0,0],[1,0],[-1,0],[0,1],[0,-1]

   3)继续判断每一个稳定点对应的二阶偏导,如果某点得到的矩阵的特征值都小于0,函数在这个点就是严格

局部最大;如果特征值有正有负,就是不定矩阵,可以作为鞍点的候选点。


1.3 无约束优化迭代法

   无约束优化问题直接分析法的局限性:

   1)函数可能不可导;

   2)函数求出了导数,但是对于复杂函数,不一定能求出来f’(x)=0的x;

   3)求出的解可能是一个集合。

   

          由于直接分析存在上述局限性,一般复杂的问题都不是通过求导解决的,需要“迭代法”。

   迭代法的基本运算步骤如下:   

   1)选择一个初始点,设置收敛系数ε,计数k=0;

   2)决定一个搜索方向dk,使函数下降;(核心)

   3)决定步长αk使得f(xk+αdk)对于α≥0最小化,构建xk+1=xkkdk

   4)如果‖α kd k‖< ε,则停止迭代,输出解x k+1;否则继续迭代。


   下面看一下如何选择dk

 1)深度下降法中dk选作负梯度-f(x),该算法通常速度比较慢。

    2)牛顿法做近似时考虑了一阶导数和二阶导数,优势是下降的更快,如果选好了步长,可能一步到位。


1.4 约束性优化问题

   约束性优化问题是指除了给出方程外,方程的解还需要满足f(x)定义域约束等若干条约束条件,这种问题在实际生产中更有意义,在《工程优化》中学习过这类问题的解决方法。

   衡量一般约束性优化问题极值点的一阶必要条件叫做KKT条件。KKT条件

   (https://www.zhihu.com/question/23311674)说明了

   1)最优点x∗必须满足所有等式及不等式限制条件, 也就是说最优点必须是一个可行解;

   2)在最优点x,f必须是gihj的线性組合,μiλj都叫作拉格朗日乘子。

   那么什么条件下,KKT条件可以成为充要条件,什么条件下局部最小解可以成为全局最小解呢?这就是研究凸集和凸函数的意义啦。


2. 凸集和凸函数

        凸集的概念比较容易理解,满足集合上任意两点的连线上的点都在集合内,就是凸集。凸函数是定义在某个向量空间的凸子集C上的实值函数。
        若要判断一个函数是否是凸函数,比较易用的有个二阶充要条件:
        凸函数的二阶充要条件:如果函数f二阶可导,则凸函数充要条件 ,严格凸函数充要条件 。结合上文海森矩阵的性质,可以知道,海森矩阵是正定矩阵一定是凸函数。

        可以证明,凸函数局部最优解就是全局最优解。这也是研究凸函数的意义所在。

        凸函数和凸集的关系:一元函数f的α水平集为 Sα = {x|x≤α},则有“f是凸函可推导出Sα对于每个α是凸集。

3. 凸优化问题

3.1 凸优化问题的标准形式

        如果一个问题是这样的形式:
        
        这是一个求函数最小化的问题,同时满足一些约束条件。其中f 0(x)是凸函数,并且可行域是凸集,那么这个问题就是一个凸优化问题。

3.2 如何解凸优化问题

        简单的可以用KKT法解决,复杂的可以用牛顿法、内点法等。

        那么想一下,实际问题中凸优化适用范围大吗?对于非凸问题,有没有什么研究意义呢?办法就是“取近似“,把非凸优化问题近似为凸优化问题,再来求解。另外,有的问题在n维上看是非凸的,在n+1维上看可能就是凸问题。


你可能感兴趣的:(机器学习凸优化理论)