本文主要参考卡耐基梅隆大学(CMU)的Ryan Tibshirani教授在Convex Optimization课上的Lecture Notes
在统计学习和机器学习领域,基本上你想做的绝大部分事情都是一种优化问题。所以,面对具体的问题,你要做的事情可以概括为下图所示
即:如何把头脑中的idea转换成寻找变量$x$的最优问题$\min \limits_{x\in D}f(x)$
所以,学习Optimization,就是学习
- 如何把具体问题写成或者公式化成一个优化问题
- 现有算法是如何具体求解上图中的问题$P:\min \limits_{x\in D}f(x)$
- 面对不同的具体问题如何选择已有算法或者甚至设计发明适合的算法去解决
绝大部分情况下,你只需要做上述的第1个,就是把问题转换成凸优化问题,并写成标准形式,剩下的交给计算机去求解
Optimization问题是现在非常热门的话题,现有算法还有很大的优化空间,而且还有很多问题没有得到很好的解决
Convexity:历史上,优化问题通常聚焦在Linear Programming(线性规划)。最初人们认为,优化问题是线性还是非线性,是不同的优化问题的根本区别
而现在人们认为,优化问题是凸还是非凸才是不同的优化问题之间的根本区别。因为有些问题虽然是非线性,但是解(因为是凸的),而有些非线性问题却非常难解(非凸的)
Convex sets(凸集)
对于属于集合$C$中的两个点$x,y$,将它俩连一条直线,如果直线上的任意点也都在集合$C$中,那么集合$C$就是凸集。下图中第一行是凸集,第二行是非凸集
凸集和凸函数有什么关系?函数$f(x)$是凸函数的必要条件是$dom(f)$为凸集。$dom(f)$表示$f$的定义域
Convex Function(凸函数)
常见的Convex function有$ax+b$、$e^{ax}$、$ax\ (x > 0, a\ge 1\ \text{or}\ a \leq 0)$、$|x|^p\ (p\ge 1)$、$x\log x\ (x>0)$、$\sum e^{x_i}$等
判断一个函数是否是凸函数有很多方法
First Order Convexity Condition
假设$f:\mathbb {R}^n\rightarrow \mathbb {R}$是可导的(differentiable),则$f$为凸函数,当且仅当
$$ f(y)≥f(x)+\nabla f(x)^T(y-x) $$
对于任意$x,y\in dom(f)$
从几何上解释如下图所示
Second Order Convexity Condition
假设$f:\mathbb {R}^n\rightarrow \mathbb {R}$是两次可导的(twice differentiable),则$f$为凸函数,当且仅当
$$ \nabla ^2f(x)≥0 $$
对于任意$x,y\in \text{dom}(f)$