一、前介#
大 O 符号#
定义:对于两个有相同定义域的函数 f 与 g,如果存在常数 C>0 以及 x0,使得当 x≥x0 时 ∣f(x)∣≤C∣g(x)∣ ,记 f(x)=O(g(x))
性质:f=O(1) 表示 f 是有界的;f=O(g) 表示 f 的增长不超过 g 的量级。
证明思路:假设存在 C1,C2 使得 f1=O(g1)、f2=O(g2),则对和式有 ∣f1+f2∣≤C1∣g1∣+C2∣g2∣≤(C1+C2)max(∣g1∣,∣g2∣),令 C=C1+C2 即得 f1+f2=O(max(g1,g2)),得证。
一些简单关系:O(g1)+O(g2)=O(max(g1,g2)),O(g1)⋅O(g2)=O(g1g2)。
小 o 符号#
定义:如果对每一个常数 ϵ>0 都存在 x0,使得当 x≥x0 时,∣f(x)∣≤ϵ∣g(x)∣ , 记 f(x)=o(g(x))
等价于 limx→∞g(x)f(x)=0,即 f 的量级严格低于 g
性质:如果 f=o(g),则也有 f=O(g)(小 o 比大 O 更强)。
一些简单关系:o(g1)+o(g2)=o(max(g1,g2)),o(g1)⋅o(g2)=o(g1g2)。
Weierstrass 定理#
Weierstrass 定理:取值于闭区间 [a,b] 上的连续函数 f,其最大值、最小值一定存在,并且在区间中取得。
平衡点(驻点):使得梯度 ∇f(x)=0 的点称为平衡点。但 ∇f(x)=0 并不能保证是全局最优点,它可能只是局部最优点或鞍点。
凸函数#
凸函数:如果对任意 x1,x2 及 λ∈[0,1],有
f(λx1+(1−λ)x2)≤λf(x1)+(1−λ)f(x2)
那么 f 被称为凸函数。
严格凸函数:如果对任意 x1=x2 及 λ∈(0,1),把上式的 ≤ 换成严格的 <,那么 f 被称为严格凸函数。凸函数的重要意义在于:局部最优即全局最优。
中值定理#
假设连续函数 f 取值在闭区间 [a,b] 上,并且在 (a,b) 上可导,那么一定可以找到一点 ξ∈(a,b) 使得
f′(ξ)=b−af(b)−f(a)
泰勒展开#
假设 f 在点 x0 附近的区间中 n 阶可导,那么对任意 x,都可以把 f 在 x0 处泰勒展开:
f(x)=f(x0)+f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+⋯+n!f(n)(x0)(x−x0)n+o((x−x0)n)
算法的收敛速率#
如果存在常数 q 使得
limk→∞∥xk−x∗∥q∥xk+1−x∗∥=C(0<C<∞)
那么称 xk 收敛到 x∗ 的速率为 q 阶。当 q=1 时称线性收敛速率,q=2 时称二次收敛速率(牛顿法在良好条件下即二次收敛)。
梯度与 Hessian 矩阵#
梯度向量(一阶偏导组成的列向量):
∇f(x)=(∂x1∂f,…,∂xp∂f)⊤
Hessian 矩阵(二阶偏导组成的对称方阵):
∇2f(x)=[∂xi∂xj∂2f]p×p
二、牛顿迭代法(Newton’s method)#
对于优化问题 minxf(x),这里要求 f 为二阶可导的凸函数。在给定当前估计 xk 时,把 f 在 xk 处做二阶泰勒展开并对其极小化,可得迭代式:
xk+1=xk−[∇2f(xk)]−1∇f(xk)
证明:对二阶泰勒近似 f(x)≈f(xk)+∇f(xk)⊤(x−xk)+21(x−xk)⊤∇2f(xk)(x−xk) 求导并令导数为 0,得 ∇f(xk)+∇2f(xk)(x−xk)=0,解出 x=xk−[∇2f(xk)]−1∇f(xk)。
NR 算法的一些问题#
- Hessian 矩阵求逆的计算量在某些情况下过大,并且 Hessian 可能不可逆;
- 在 NR 算法中,函数值 f(xk) 并不保证随每次迭代递减(步长可能太大冲过头);
- NR 算法对初值的依赖程度较高,初值不好可能不收敛。
回溯线搜索(Backtracking line search)#
提出背景:为了解决 NR 算法在某些情况下迭代步长太大、导致不收敛的问题,用回溯线搜索筛选出既足够长、又能保证 f 递减的步长。
算法步骤:
- 给定参数 α∈(0,0.5)、β∈(0,1),令步长 t=1;
- 判断下面的充分下降条件是否成立:
f(x+tΔx)≤f(x)+αt∇f(x)⊤Δx
若为真则进行第 3 步(接受这个 t),否则进行第 4 步;
-
接受步长,更新 x←x+tΔx;
-
缩小步长 t←βt,并重新回到第 2 步
解释:充分下降条件成立时,说明 x 与 x+tΔx 之间连线的斜率,比 x 点处斜率的 α 倍还要平缓——若不满足就说明步子迈太大,需要缩小步长。
收敛标准#
- 绝对收敛标准:∥xk+1−xk∥<ϵ;
- 相对收敛标准:∥xk∥∥xk+1−xk∥<ϵ;
- 调整的相对收敛标准:∥xk∥+1∥xk+1−xk∥<ϵ(避免 ∥xk∥ 太小时分母失稳)。
例子:逻辑回归#
假设有一组样本 (xi,yi),考虑逻辑回归 pi=1+e−xi⊤β1。似然函数与对数似然分别为
L(β)=∏ipiyi(1−pi)1−yi,ℓ(β)=∑i[yilogpi+(1−yi)log(1−pi)]
对 β 分别求一阶导(梯度)、二阶导(Hessian),得到
∇ℓ(β)=X⊤(y−p),∇2ℓ(β)=−X⊤WX
其中 W=diag(pi(1−pi))。因而 β 可以通过下面的迭代(牛顿法 / IRLS)来估计
βk+1=βk+(X⊤WX)−1X⊤(y−p)
每次迭代后计算变化量并与给定阈值比较,判断是否收敛。
三、交替方向乘子法(ADMM)#
考虑带等式约束的问题 minx,zf(x)+g(z) s.t. Ax+Bz=c。定义增广拉格朗日函数:
Lρ(x,z,λ)=f(x)+g(z)+λ⊤(Ax+Bz−c)+2ρ∥Ax+Bz−c∥2
增广拉格朗日函数可以理解为在普通拉格朗日函数基础上加了一个二次惩罚项,所以该方法是拉格朗日函数法与罚函数法的结合。
标准 ADMM 的优化迭代步骤(交替更新):
xk+1=argminxLρ(x,zk,λk)
zk+1=argminzLρ(xk+1,z,λk)
λk+1=λk+ρ(Axk+1+Bzk+1−c)
Lasso 是带 L1 正则的回归:minβ21∥y−Xβ∥2+λ∥β∥1。引入辅助变量 z,写成约束形式 min21∥y−Xβ∥2+λ∥z∥1 s.t. β−z=0。增广拉格朗日函数为
Lρ=21∥y−Xβ∥2+λ∥z∥1+u⊤(β−z)+2ρ∥β−z∥2
对 β 求导并令其为 0,得到 β 更新是一个岭回归式解:
βk+1=(X⊤X+ρI)−1(X⊤y+ρzk−uk)
而 z 的更新公式是软阈值(soft-thresholding)算子:
zk+1=Sλ/ρ(βk+1+uk/ρ),Sκ(a)=sign(a)max(∣a∣−κ, 0)
例子:分位数回归#
分位数的定义与损失:分位数回归希望找一条直线拟合样本的 τ 分位数。它用的是检验损失(pinball loss):
ρτ(u)=u(τ−1[u<0])={τu,(τ−1)u,u≥0u<0
可以理解为:给小于分位数的点(残差为负)一个权重,给大于分位数的点另一个权重(给多数点小权重、少数点大权重)。
几何意义:希望回归曲线之下能够包含 τ 比例的数据点。
优化:对样本 (xi,yi),考虑 minβ∑iρτ(yi−xi⊤β)。同样引入辅助变量写成约束形式,构造增广拉格朗日函数,按 ADMM 交替更新 β、辅助变量、对偶变量;对 β 子问题求偏导并令其为 0,得到 β 的闭式更新(形如 β=(X⊤X)−1X⊤(⋅)),辅助变量更新则用与 pinball 损失对应的阈值算子。
四、梯度下降家族#
梯度下降算法(GD)#
给定一组样本 (xi,yi),考虑 minβn1∑iℓ(xi,yi;β)。若只考虑线性模型 y^i=xi⊤β,目标就是均方误差。对当前估计 βk,梯度下降的迭代步骤为
βk+1=βk−t∇f(βk),∇f(βk)=n1∑i=1n∇ℓ(xi,yi;βk)
其中 t 为步长。
步长 t 的选择:通常用 Backtracking line search 筛选出足够长、又能保证目标函数递减的步长。给定当前估计,若充分下降条件 f(β−t∇f)≤f(β)−αt∥∇f∥2 不成立,就令 t←βt 缩小步长再试。
随机梯度下降法(SGD)#
给定当前估计值 βk,随机梯度下降每步随机抽取一个样本 (xi,yi),只用它算梯度来更新:
βk+1=βk−t∇ℓ(xi,yi;βk)
直到事先给定的收敛准则被满足后停止。
GD 与 SGD 对比#
- 梯度下降法:每步用全体样本求平均梯度;
- 随机梯度下降法:每步随机抽取一个样本估计梯度。
当样本数量巨大时,GD 每步都要算全体样本的平均,计算量极大。SGD 不能保证每一步都让目标函数下降,相比 GD 往往需要更多迭代次数,但每次迭代的计算量小得多。折中办法是小批量(mini-batch):每次随机抽取一小组样本估计梯度,兼顾稳定与速度。
BFGS 与 L-BFGS#
BFGS 算法适用条件:当 Hessian 矩阵维度超大时,求逆非常困难、计算复杂度极高。BFGS 通过迭代逼近 Hessian 的逆,即在牛顿迭代过程中,用一个矩阵 Bk 来代替 [∇2f(xk)]−1,每步用梯度差和位置差对 Bk 做秩更新,避免直接求逆。
L-BFGS 算法:由于 BFGS 每次都要存储 p×p 的近似矩阵,内存开销很大,数据维度高时机器可能吃不消。L-BFGS 只保存最近 m 次迭代的信息(向量对)用于隐式重构更新方向,大幅节省内存,适合超高维问题。