首先看一个二元函数(再复杂一点的函数就很难直观地呈现出来)的三维图像和对应的等高线,其中函数表达式为 z = x 2 + y 2 z=x^2+y^2 z=x2+y2:
对于一个一元函数而言,导数的定义想必大家都很清楚,具体的表达式为:
f ′ ( x ) = lim △ x → 0 f ( x + △ x ) − f ( x ) △ x = lim △ x → 0 f ( x ) − f ( x − △ x ) △ x f'(x)=\lim_{\triangle x\rightarrow0}\frac{f(x+\triangle x)-f(x)}{\triangle x}=\lim_{\triangle x \rightarrow 0}\frac{f(x)-f(x-\triangle x)}{\triangle x} f′(x)=△x→0lim△xf(x+△x)−f(x)=△x→0lim△xf(x)−f(x−△x)
一元函数中只有一个自变量,因此在某个点的导数即函数在该点的斜率,高中物理在路程-时间问题中赋予导数的含义为瞬时速度。
对于一个二元函数 f ( x , y ) f(x,y) f(x,y),偏导数即固定其他变量时的函数变化率,也就是沿着坐标轴正方向的变化率:
f x ( x , y ) = lim △ x → 0 f ( x + △ x , y ) − f ( x , y ) △ x f_x(x,y) = \lim_{\triangle x \rightarrow 0} \frac{f(x+\triangle x,y)-f(x,y)}{\triangle x} fx(x,y)=△x→0lim△xf(x+△x,y)−f(x,y)
f y ( x , y ) = lim △ y → 0 f ( x , y + △ y ) − f ( x , y ) △ y f_y(x,y) = \lim_{\triangle y \rightarrow 0} \frac{f(x, y+\triangle y)-f(x,y)}{\triangle y} fy(x,y)=△y→0lim△yf(x,y+△y)−f(x,y)
这里引入偏导数的原因是因为在多元函数中,经过函数某一点的切线有无数条,这些切线共同组成切平面。借助于“基向量”的思想,我们通过两个偏导数表示出经过该点的任意方向切线的导数,这也就是方向导数。
现在我们放开对所有变量的限制,记点 ( x , y ) (x,y) (x,y)为二元函数上一点,自该点引一条射线 l l l, 在该点射线方向邻域内存在一点 ( x + △ x , y + △ y ) (x+\triangle x,y+\triangle y) (x+△x,y+△y),那么函数沿着 l l l方向的方向导数为:
∂ y ∂ l = lim ρ → 0 f ( x + △ x , y + △ x ) − f ( x , y ) ρ , ρ = ( △ x ) 2 + ( △ y ) 2 \frac{\partial y}{\partial l} = \lim_{\rho\rightarrow 0} \frac{f(x+\triangle x, y+\triangle x)-f(x,y)}{\rho},\rho = \sqrt{(\triangle x)^2 + (\triangle y)^2} ∂l∂y=ρ→0limρf(x+△x,y+△x)−f(x,y),ρ=(△x)2+(△y)2
前面提到方向导数就是二元函数 f ( x , y ) f(x,y) f(x,y)在 ( x , y ) (x,y) (x,y)点处沿着任一方向的函数的变化率,而偏导数反映了函数沿着坐标轴方向上的变化率。
借助“基向量”的思想,我们可以用偏导数表示任意方向的方向导数:
∂ f ∂ l = ∂ f ∂ x c o s α + ∂ f ∂ y c o s β \frac{\partial f}{\partial l}=\frac{\partial f}{\partial x}cos\alpha + \frac{\partial f}{\partial y} cos\beta ∂l∂f=∂x∂fcosα+∂y∂fcosβ
一元函数在一个点只有一个斜率,二元函数在一个点处有一个切平面。在无约束最优化问题中,我们希望找到函数下降速度最快的方向,然后不断逼近函数的最小值点,如下图所示:
一言以蔽之,梯度方向就是函数值下降最快的方向。
注:为防止不同教材知识的混淆,本篇不明确区分梯度方向与负梯度方向,重在理解拉格朗日乘子法的思想即可,具体推导可找专业的数学资料。
举个例子,当我们迭代求解函数 f ( x ) f(x) f(x)的最小值时,所有迭代值构成一个不断递减的有序数列 { x ( k ) } \{x^{(k)}\} {x(k)}。
前面提到的梯度下降法和牛顿法都是求解无约束最优化问题的常用方法,无约束的最优化问题可以抽象为:
min x ∈ R n f ( x ) \min _{x \in R^n} f(x) x∈Rnminf(x)
当函数满足处处一阶可导时,极值点存在的必要条件是该点的一阶偏导数为0,高数中对于简单的问题我们可以直接解出满足 d f ( x ) d x \frac{df(x)}{dx} dxdf(x)为零的所有 x x x,并代入函数判断他是否为极值点。
当函数复杂到我们无法轻易求出可能的极值点时,我们通过构造初始值 x ( 0 ) x^{(0)} x(0)和递推公式去不断逼近函数的极值点,比较典型的算法包括梯度下降法、坐标下降法和拟牛顿法等。
假设目标函数为线性回归的目标函数:
h θ ( x ( i ) ) = ∑ j = 1 n θ j x j ( i ) h_\theta(x^{(i)})=\sum_{j=1}^{n} \theta_jx_j^{(i)} hθ(x(i))=j=1∑nθjxj(i)
J ( θ ) = 1 2 m ( y ( i ) − h θ ( x ( i ) ) ) 2 J(\theta) = \frac{1}{2m}(y^{(i)}-h_\theta(x^{(i)}))^2 J(θ)=2m1(y(i)−hθ(x(i)))2
其中自变量维度为 m m m,样本数为 n n n, x j ( i ) x_j^{(i)} xj(i)表示第 i i i个样本的第 j j j个自变量的取值。
接下来我们需要做的就是找到最佳的参数组合使得目标函数值达到最小。
以批量梯度下降法(BGD)为例,每一步我们都沿着目标函数的负梯度方向更新参数值:
∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) ) − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j}=-\frac{1}{m}\sum_{i=1}{m}(y^{(i)})-h_\theta(x^{(i)}))x_j^{(i)} ∂θj∂J(θ)=−m1i=1∑m(y(i))−hθ(x(i)))xj(i)
θ j ′ = θ j + 1 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) \theta_j' = \theta_j+\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-h_\theta (x^{(i)})) θj′=θj+m1i=1∑m(y(i)−hθ(x(i)))
牛顿法是求解函数值等于0的自变量取值的一种迭代算法,因此我们可以使用牛顿法求解满足函数一阶导为0的参数值。
迭代公式如下所示,具体推导过程可以在牛顿法那篇文章中看。
θ ′ = θ − H k − 1 g k \theta'=\theta-H^{-1}_kg_k θ′=θ−Hk−1gk
前面我们讨论的都是无约束情况下的最优化,根据极值的必要条件(一阶导为0),我们可以通过构造数列不断逼近最优值。但是有很多实际问题是有约束的,拉格朗日乘子法就是解决有约束最优化的一种常用方法。
上图中的多个黑色圆圈是二元函数 f ( x , y ) f(x,y) f(x,y)投影在平面上的等高线(即同一条线代表函数值相同),蓝色的箭头代表函数的梯度方向(即函数值下降速度最快的方向)。如果在没有约束的情况下,我们应该直接沿着梯度方向找到使函数值不再下降的最小值,现在我们给函数加上了约束条件(即红色线,代表着 ( x , y ) (x,y) (x,y)的取值要落在红线上)。
现在问题转化为我们需要在红线上找到使得函数值最小化的 ( x , y ) (x,y) (x,y)的取值。
由于函数的等高线是密集的,因此我们只需要在满足函数等高线和约束曲线相切的点集合中寻找可能的极值点。(相切是极值点的必要非充分条件)
由于在极值点处函数等高线和约束函数的梯度都与切平面垂直,从而他们的梯度方向在同一条直线上,即:
下图展示了拉格朗日乘子法的几何含义:在左边的等式约束( g ( x ) = 0 g(x)=0 g(x)=0)下和右边的不等式约束 g ( x ) ≤ 0 g(x)\leq 0 g(x)≤0下最小化目标函数 f ( x , y ) f(x,y) f(x,y)。其中红色曲线表示 g ( x ) = 0 g(x)=0 g(x)=0围成的曲面。
不等于约束 g ( x ) ≤ 0 g(x)\leq 0 g(x)≤0的情形中,最优点 x ∗ x^* x∗要么出现在边界 g ( x ) = 0 g(x) = 0 g(x)=0上,要么出现在区域 g ( x ) < 0 g(x)<0 g(x)<0中:
当最优值落在 g ( x ) < 0 g(x)<0 g(x)<0区域时,约束条件件 g ( x ) ≤ 0 g(x)\leq 0 g(x)≤0不起作用,因此我们令约束条件的乘子 λ = 0 \lambda =0 λ=0;当最优值落在 g ( x ) = 0 g(x)=0 g(x)=0边界上时, λ g ( x ) \lambda g(x) λg(x)自然等于0。考虑到这两种情形,我们可以推出 λ g ( x ) = 0 \lambda g(x)=0 λg(x)=0。
因此,拉格朗日乘子法可以写成如下的等价形式,括号的条件也叫做KKT条件。
L ( x , λ ) = f ( x ) + λ g ( x ) L(x,\lambda) = f(x) + \lambda g(x) L(x,λ)=f(x)+λg(x)
{ g ( x ) ≤ 0 λ ≥ 10 λ g ( x ) = 0 \left\{\begin{matrix} g(x)\leq 0\\ \lambda \ge1 0\\ \lambda g(x) = 0 \end{matrix}\right. ⎩⎨⎧g(x)≤0λ≥10λg(x)=0
考虑具有 m m m个等式约束和 n n n个不等式约束的一般优化情形:
min x f ( x ) \min_{x} f(x) xminf(x)
{ h i ( x ) = 0 ( i = 1 , 2 , . . . , m ) g j ( x ) ≤ 0 ( j = 1 , 2 , . . . , n ) \left\{\begin{matrix} h_i(x) = 0 \quad (i=1,2,...,m)\\ g_j(x) \leq 0 \quad (j=1,2,...,n) \end{matrix}\right. {hi(x)=0(i=1,2,...,m)gj(x)≤0(j=1,2,...,n)
引入拉格朗日乘子 λ = ( λ 1 , λ 2 , . . . , λ m ) T \lambda = (\lambda_1, \lambda_2,...,\lambda_m)^T λ=(λ1,λ2,...,λm)T和 μ = ( μ 1 , μ 2 , . . . , μ n ) T \mu=(\mu_1,\mu_2,...,\mu_n)^T μ=(μ1,μ2,...,μn)T,对应的拉格朗日函数为:
L ( x , λ , μ ) = f ( x ) + ∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) L(x,\lambda,\mu)=f(x)+\sum_{i=1}^{m} \lambda_i h_i(x)+\sum_{j=1}^{n}\mu_jg_j(x) L(x,λ,μ)=f(x)+i=1∑mλihi(x)+j=1∑nμjgj(x)
不等式问题对应的KKT条件为:
{ g j ( x ) ≤ 0 μ j ≥ 0 μ j g j ( x ) = 0 \left\{\begin{matrix} g_j(x) \leq 0 \\ \mu_j \geq 0\\ \mu_j g_j(x) = 0 \end{matrix}\right. ⎩⎨⎧gj(x)≤0μj≥0μjgj(x)=0
主问题:
min x f ( x ) \min_x f(x) xminf(x)
{ h i ( x ) = 0 ( i = 1 , 2 , . . . , m ) g j ( x ) ≤ 0 ( j = 1 , 2 , . . . , n ) \left\{\begin{matrix} h_i(x) = 0 \quad (i=1,2,...,m)\\ g_j(x) \leq 0 \quad (j=1,2,...,n) \end{matrix}\right. {hi(x)=0(i=1,2,...,m)gj(x)≤0(j=1,2,...,n)
对应的拉格朗日函数为:
min x ∈ D , μ i ≥ 0 , λ L ( x , λ , μ ) = min x ∈ D , μ i ≥ 0 , λ f ( x ) + ∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) \min_{x\in\mathbb{D},\mu_i\geq 0,\lambda} L(x,\lambda,\mu)=\min_{x\in\mathbb{D},\mu_i\geq 0,\lambda}f(x)+\sum_{i=1}^{m} \lambda_i h_i(x)+\sum_{j=1}^{n}\mu_jg_j(x) x∈D,μi≥0,λminL(x,λ,μ)=x∈D,μi≥0,λminf(x)+i=1∑mλihi(x)+j=1∑nμjgj(x)
其中 D \mathbb{D} D为主问题中基于等式和不等式约束的可行域,那么对于任意的 μ ≥ 0 , λ \mu\geq 0, \lambda μ≥0,λ,都有:
∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) ≤ 0 \sum_{i=1}^{m}\lambda_ih_i(x)+\sum_{j=1}^{n}\mu_j g_j(x) \leq0 i=1∑mλihi(x)+j=1∑nμjgj(x)≤0
我们通过对偶函数给出主问题最优值的下界
Γ ( λ , μ ) = inf x ∈ D L ( x , λ , μ ) = inf x ∈ D ( f ( x ) + ∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) ) \Gamma(\lambda,\mu)=\inf_{x\in \mathbb{D}}L(x,\lambda,\mu)=\inf_{x\in \mathbb{D}} \bigg( f(x)+\sum_{i=1}^{m}\lambda_ih_i(x)+\sum_{j=1}^{n}\mu_j g_j(x) \bigg) Γ(λ,μ)=x∈DinfL(x,λ,μ)=x∈Dinf(f(x)+i=1∑mλihi(x)+j=1∑nμjgj(x))
假设主问题的最优点为 x ∗ x^* x∗,对应的最优值为 p ∗ p^* p∗,则对于任意的 μ ≥ 0 \mu \geq 0 μ≥0、 λ \lambda λ和可行域内的任一点 x ~ ∈ D \tilde{x} \in \mathbb{D} x~∈D都有:
Γ ( λ , μ ) = inf x ∈ D L ( x , λ , μ ) ≤ L ( x ~ , λ , μ ) ≤ f ( x ~ ) \Gamma(\lambda, \mu)=\inf_{x\in \mathbb{D}}L(x,\lambda,\mu) \leq L(\tilde{x},\lambda,\mu) \leq f(\tilde{x}) Γ(λ,μ)=x∈DinfL(x,λ,μ)≤L(x~,λ,μ)≤f(x~)
即对偶函数小于主问题中的每一个函数值(下界的定义),给出了主问题的一个下界,并且这个下界的值取决于 μ , λ \mu, \lambda μ,λ的值。一个很自然的问题是:基于对偶函数能获得的最好下界是什么(下确界的思想),这就引入了对偶问题:
max λ , μ ≥ 0 Γ ( λ , μ ) \max_{\lambda, \mu \geq0} \Gamma(\lambda,\mu) λ,μ≥0maxΓ(λ,μ)
假设主问题的最优值 p ∗ p^* p∗,对偶问题的最优值为 d ∗ d^* d∗,根据下界的定义,显然有 d ∗ ≤ p ∗ d^*\leq p^* d∗≤p∗。
在强对偶性成立时,将拉格朗日函数分别对原变量和对偶变量求导,再令导数等于零,即可得到原变量与对偶变量的数值关系。于是,对偶问题解决了,主问题也就解决了。
[1]https://www.cnblogs.com/lyr2015/p/9010532.html
[2]https://www.cnblogs.com/xinchen1111/p/8804858.html
[3]https://puui.qpic.cn/fans_admin/0/3_1692378290_1568465189769/0
[4]《统计学习方法》
[5]《机器学习》