YeeKal
optimization

optimization1 intro

YeeKal
"#optimization"

intro

  • 凸优化
    • 最小二乘
    • 线性规划
    • 一般的凸优化问题
  • 非线性优化

数学符号

  • $\Delta f(x)$: 单个多变量实函数的导数

$\nabla$: nabla算子,向量微分算子,表示对各个方向求梯度

三维情况下, $\nabla=\frac{\partial}{\partial x} \mathbf{i}+\frac{\partial}{\partial y} \mathbf{j}+\frac{\partial}{\partial z} \mathbf{k}$ 或 $\nabla=\left(\frac{\partial}{\partial x}, \frac{\partial}{\partial y}, \frac{\partial}{\partial z}\right)$ 二维情况下, $\nabla=\frac{\partial}{\partial x} \mathbf{i}+\frac{\partial}{\partial y} \mathbf{j}$ 或 $\nabla=\left(\frac{\partial}{\partial x}, \frac{\partial}{\partial y}\right)$

$\nabla$与函数之间通过不同的符号连接表示不同的含义:

  1. $\nabla F$: 求梯度,标量函数梯度为向量,向量函数为二阶张量

  2. $\nabla \cdot F$: 求散度

  1. $\nabla \times F$: 求旋度

  2. 雅可比矩阵,是指针对多元变量的向量函数求梯度

  1. Hesse-Matrix: 多变量实函数的二阶偏导

  1. 函数向量: $f(x) = Ax$

$\Delta$ 拉普拉斯算子:二阶偏导的加和,一般也写作 $\nabla^2$

linear optimization

  • 单纯形法
  • 椭球法
  • 内点算法

nonlinear optimization

  • 梯度下降(gradient descent), 负梯度,一阶收敛
  • 牛顿法(newton's method),二阶收敛
  • 拟牛顿法(quasi-newton method,BFGS), 用正定矩阵来近似Hessian矩阵的逆,简化运算的复杂度
  • 共轭梯度(Conjugate Gradient)
  • 启发式优化算法: 遗传算法,蚁群算法,粒子群算法,差分进化算法
  • SQP(Sequential Quadratic Programming, 序列二次规划/约束变尺度)
  • RSQP(Revised Sequential Quadratic Programming)
  • 拉格朗日乘子法

kkt 条件

Karush–Kuhn–Tucker conditions

对于具有等式和不等式约束的优化问题: kkt条件给出了判断$x$是否为最优解的必要条件:

kkt条件将多个约束方程转化成求零点的一个方程。

SQP

序列二次规划的算法思路是把约束问题的目标函数在迭代点$x^\ast$处通过泰勒展开简化成二次函数:

此问题是原约束问题的近似问题,其解不一定是原问题的可行点(??),为此,令:

则原约束问题转变为二次规划问题的一般形式:

  • L-SQP

优化库

  • python
    • cvxpy: 符号计算凸优化库
  • c++

凸优化基础

  1. 判定凸集,以及凸函数
  2. 线性规划与二次规划
  3. 拉格朗日与对偶函数
  4. Strong Duality与KKT条件
  5. Non-convex优化问题
  6. NP-Hard问题与松他化处理
  7. Discrete Optimization
  8. GD, SGD, Adam, Adagrad
  9. L-BFGS, ADMM

学习

  1. 线性代数: MIT公开课《线性代数》
  2. 最优化: Optimization Model + 方述诚 (线性规划 + 非线性规划)
  3. 进阶:应用 + 进阶

ref