一些闲话
去年就想看一下优化和泛函变分相关的内容,但没有空余的排期,大部分学习时间花在了强化学习方面。
今年,正好近期项目也有需要,凸优化提上了自学日程。
参考书目:
《凸优化》清华大学出版社,Stephen Boyd, Lieven Vandenberghe著,王书宁,许鋆,黄晓霖 译
全书700页,计划用半年的时间完成一刷。
凸优化问题
数学优化:
数学模型
m i n i n i z e f 0 ( x ) s u b j e c t t o f i ( x ) ≤ b i , i = 1 , 2 , ⋯ , m \begin{aligned} mininize \ &f_0(x) \\ subject \ to \ &f_i(x)\leq b_i, \ i=1,2,\cdots,m \end{aligned} mininize subject to f0(x)fi(x)≤bi, i=1,2,⋯,m
- x x x 优化变量
- f 0 ( x ) f_0(x) f0(x) 目标函数
- f i ( x ) f_i(x) fi(x) 约束函数
线性优化:目标函数和约束函数均为线性函数;
凸优化:目标函数和约束函数均为凸函数;
凸性是较线性更为一般的性质,线性函数是凸函数的一个特例,因此线性规划问题也是凸优化问题。
应用
- 资源分配、成本控制
- 数据拟合
- 最优决策 等
求解
- 以给定精度求解优化问题中的一个实例;
- 即便目标函数和约束函数是光滑的,一般形式的优化问题仍然难以求解;
- 一些特殊的优化问题,存在一些有效地算法
- 最小二乘问题
- 线性规划
- 凸优化
最小二乘问题
m i n i n i z e f 0 ( x ) = ∥ A x − b ∥ 2 2 \begin{aligned} mininize \ &f_0(x)=\lVert Ax-b\rVert _2^2 \end{aligned} mininize f0(x)=∥Ax−b∥22
等效于求解:
A T A x = A T b A^TAx=A^Tb ATAx=ATb
存在解析解:
x
=
(
A
T
A
)
−
1
A
T
b
x=(A^TA)^{-1}A^Tb
x=(ATA)−1ATb
即
b
b
b左乘
A
A
A的广义逆。
可以认为,最小二乘问题的求解是一项(成熟的)技术。
线性规划
目标函数和约束函数均为线性函数
m i n i n i z e f 0 ( x ) = c T x s u b j e c t t o f i ( x ) = a i T x ≤ b i , i = 1 , 2 , ⋯ , m \begin{aligned} mininize \ &f_0(x)=c^Tx \\ subject \ to \ &f_i(x)=a_i^Tx\leq b_i, \ i=1,2,\cdots,m \end{aligned} mininize subject to f0(x)=cTxfi(x)=aiTx≤bi, i=1,2,⋯,m
不存在解析解,但存在很多有效地求解方法:
- 单纯形法
- 内点发
可以说,求解(大部分)线性规划问题,也是一项(成熟的)技术。
凸优化
目标函数和约束函数,都是凸函数。
有效的求解方法:内点法。
虽然有点夸张,如果某个实际问题可以表述为凸优化问题,那么事实上已经解决了这个问题
非线性优化
目标函数或者约束函数,是非线性,且不一定为凸函数。
局部优化
- 可能不能找到全局最优解
- 对初始值敏感
- 局部优化方法是一种技巧而不是技术
全局优化
- 付出的代价是计算效率,只能寄希望遇到特殊问题
- 适用于:
- 变量个数少的小规模问题;
- 对计算时间没有苛刻要求;
- 全局最优足够有价值
- 例子:最坏情况分析,寻找最坏情况的参数值;
- 无法保证系统是可靠的,只是没找到更坏情况的参数取值。
应用
- 局部优化中利用凸优化进行初始值的选取;
- 非凸优化中的凸启发算法