机器学习基础 线性回归与 Softmax 回归
机器学习基础 线性回归与 Softmax 回归
文章目录
- 机器学习基础 线性回归与 Softmax 回归
- 1. 最小二乘法
- 1.1 数据集定义
- 1.2 最小二乘的矩阵推导
- 1.3 最小二乘的几何解释
- 1.4 概率视角下的最小二乘估计
- 2. 正则化
- 2.1 L1 范数与 L2 范数
- 2.2 正则化的作用
- 2.3 Lasso 回归的求解
- 2.3.1 L-Lipschitz 条件
- 2.3.2 L-Lipschitz 条件的证明
- 2.4 近端梯度下降
- 2.4.1 近端梯度下降的定义
- 2.4.2 迭代方法
- 2.4.3 Descent Lemma 的证明
- 2.4.4 求解 Lasso
- 2.4.5 具体求解例子
- 3. 最大后验估计
- 4. 自动求导
- 4.1 向量求导
- 4.2 链式法则
- 4.3 反向传播
- 5. 线性回归代码实现
- 5.1 线性回归的从零实现
- 5.2 线性回归的简洁实现
- 6. Softmax 回归
- 6.1 Softmax 与 交叉熵
- 6.2 损失函数
- 参考
1. 最小二乘法
1.1 数据集定义
给定数据集 D = { ( x 1 , y 1 ) , ⋯ , ( x N , y N ) } D=\{(x_1,y_1),\cdots,(x_N,y_N)\} D={(x1,y1),⋯,(xN,yN)},其中 x i ∈ R p x_i\in \mathbb{R}^p xi∈Rp, y i ∈ R y_i\in \mathbb{R} yi∈R, i = 1 , 2 , ⋯ , N i=1,2,\cdots,N i=1,2,⋯,N。对于输入样本定义为:
X = ( x 1 x 2 ⋯ x N ) T = [ x 1 T x 2 T ⋮ x N T ] = [ x 11 x 12 ⋯ x 1 p x 21 x 22 ⋯ x 2 p ⋮ ⋮ ⋱ ⋮ x N 1 x N 2 ⋯ x N p ] N × p . (1) \begin{align} X=(x_1\; x_2\; \cdots \; x_N)^T= \begin{bmatrix} x_1^T \\ x_2^T \\ \vdots \\ x_N^T \end{bmatrix}= \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{N1} & x_{N2} & \cdots & x_{Np} \end{bmatrix}_{N \times p}. \end{align}\tag{1} X=(x1x2⋯xN)T= x1Tx2T⋮xNT = x11x21⋮xN1x12x22⋮xN2⋯⋯⋱⋯x1px2p⋮xNp N×p.(1)
定义输出为:
Y = [ y 1 y 2 ⋮ y N ] N × 1 . (2) \begin{align} Y= \begin{bmatrix} y_1 \\[4pt] y_2 \\[4pt] \vdots \\[4pt] y_N \end{bmatrix}_{N \times 1}. \end{align}\tag{2} Y= y1y2⋮yN N×1.(2)
1.2 最小二乘的矩阵推导
最小二乘法的损失函数定义为:
L ( w ) = ∑ i = 1 N ∥ w T x i − y i ∥ 2 = ∑ i = 1 N ( w T x i − y i ) 2 = ( w T x 1 − y 1 w T x 2 − y 2 ⋯ w T x N − y N ) [ w T x 1 − y 1 w T x 2 − y 2 ⋮ w T x N − y N ] , (3) \begin{align} L(w) &= \sum_{i=1}^N \lVert w^T x_i - y_i \rVert^2 \\[4pt] &= \sum_{i=1}^N (w^T x_i - y_i)^2 \\[4pt] &= (w^Tx_1-y_1\; w^Tx_2-y_2\; \cdots\; w^Tx_N-y_N) \begin{bmatrix} w^T x_1 - y_1 \\[4pt] w^T x_2 - y_2 \\[4pt] \vdots \\[4pt] w^T x_N - y_N \end{bmatrix}, \end{align}\tag{3} L(w)=i=1∑N∥wTxi−yi∥2=i=1∑N(wTxi−yi)2=(wTx1−y1wTx2−y2⋯wTxN−yN) wTx1−y1wTx2−y2⋮wTxN−yN ,(3)
第一项可继续化简:
= ( w T x 1 w T x 2 ⋯ w T x N ) − ( y 1 y 2 ⋯ y N ) = w T ( x 1 x 2 ⋯ x N ) − ( y 1 y 2 ⋯ y N ) = w T X T − Y T . (4) \begin{align} &=(w^Tx_1\; w^Tx_2\; \cdots\; w^Tx_N) - (y_1\; y_2\; \cdots\; y_N)\\[4pt] &=w^T(x_1 \; x_2 \; \cdots x_N) - (y_1\; y_2\; \cdots\; y_N)\\[4pt] &=w^T X^T - Y^T. \end{align}\tag{4} =(wTx1wTx2⋯wTxN)−(y1y2⋯yN)=wT(x1x2⋯xN)−(y1y2⋯yN)=wTXT−YT.(4)
因为 x i T = [ x i 1 x i 2 ⋯ x i p ] x_i^T=[x_{i1}\; x_{i2}\;\cdots \;x_{ip}] xiT=[xi1xi2⋯xip] 是 1 × p 1\times p 1×p 的行向量,那么 x i x_i xi 是一个 p × 1 p\times 1 p×1 的列向量。 w w w 作为权重系数,是一个 p × 1 p\times 1 p×1 的列向量,转置后就变成了 1 × p 1\times p 1×p 的行向量。故第二项可以写成如下的矩阵形式:
X w − Y . (5) \begin{align} Xw-Y \end{align}.\tag{5} Xw−Y.(5)
因此,可以将损失函数表示为:
L ( w ) = ( w T X T − Y T ) ( X w − Y ) = w T X T X w − Y T X w − w T X T Y + Y T Y = w T X T X w − 2 Y T X w + Y T Y . (6) \begin{align} L(w)&=(w^T X^T - Y^T)(Xw-Y)\\[4pt] &=w^T X^T X w - Y^T X w - w^T X^TY + Y^TY\\[4pt] &=w^T X^T X w - 2Y^T X w + Y^TY. \end{align}\tag{6} L(w)=(wTXT−YT)(Xw−Y)=wTXTXw−YTXw−wTXTY+YTY=wTXTXw−2YTXw+YTY.(6)
最小二乘的目标是求解损失函数 L ( w ) L(w) L(w) 的最小值,即:
w ^ = argmin w L ( w ) . (7) \begin{align} \hat w = \underset{w}{\text{argmin}}\; L(w). \end{align}\tag{7} w^=wargminL(w).(7)
对矩阵求导有:
∂ L ( w ) ∂ w = 2 X T X w − 2 X T Y = △ 0 ⇒ X T X w = X T Y ⇒ w = ( X T X ) − 1 X T Y , (8) \begin{align} \frac{\partial{L(w)}}{\partial{w}}&=2X^TXw - 2X^TY \overset{\triangle}{=} 0\\[4pt] &\Rightarrow X^TXw = X^TY\\[4pt] &\Rightarrow w = (X^TX)^{-1}X^TY, \end{align}\tag{8} ∂w∂L(w)=2XTXw−2XTY=△0⇒XTXw=XTY⇒w=(XTX)−1XTY,(8)
其中, X T X = X + X^TX=X^{+} XTX=X+ 表示伪逆。
1.3 最小二乘的几何解释
公式 (3) 可以理解为线性回归总的误差,假设拟合的是二维平面上的一条直线,那么第一种几何解释就是每个样本点的拟合值到真实值的距离,可视化如图 1 所示。
我们假设拟合的直线是 f ( w ) = X w f(w)=Xw f(w)=Xw,如果横着看 X X X,每一行可以理解为是一个样本。如果竖着看,那么每一列都是一个列向量,这些列向量都存在于 N N N 维的空间中。
当列向量线性无关时, p p p 个列向量会张成一个 p p p 维的子空间。比如,两个列向量在 3 维空间中张成了一个平面。在一般情况下,观测向量 Y Y Y 不会完美地被直线拟合,故 Y Y Y 不会存在于 X X X 的列空间中。
最小二乘法的另一种几何解释即为,在 p p p 维子空间中寻找一个向量 f ( w ) f(w) f(w),使得 f ( w ) f(w) f(w) 与 Y Y Y 的距离最小。显然是当 f ( w ) f(w) f(w) 为 Y Y Y 的投影时距离最小,则满足 Y − f ( w ) Y-f(w) Y−f(w) 与 p p p 维子空间的基向量正交,故求解:
X T ( Y − f ( w ) ) = 0 ⇒ X T Y = X T X w ⇒ w = ( X T X ) − 1 X T Y . (9) \begin{align} &X^T(Y-f(w))=0\\[4pt] &\Rightarrow X^TY = X^T Xw\\[4pt] &\Rightarrow w = (X^TX)^{-1}X^TY. \end{align}\tag{9} XT(Y−f(w))=0⇒XTY=XTXw⇒w=(XTX)−1XTY.(9)
1.4 概率视角下的最小二乘估计
假设 y = w T x + ϵ y=w^Tx+\epsilon y=wTx+ϵ,这里的 x x x 是 p × 1 p\times 1 p×1 维的列向量, ϵ \epsilon ϵ 是数据中的噪声,且 ϵ ∼ N ( 0 , σ 2 ) \epsilon\sim \mathcal{N}(0,\sigma^2) ϵ∼N(0,σ2)。因此,对于 y y y 有:
y ∣ x ; w ∼ N ( w T x , σ 2 ) . \begin{align} y|x;w \sim \mathcal{N}(w^Tx,\sigma^2).\tag{10} \end{align} y∣x;w∼N(wTx,σ2).(10)
因为 y y y 也服从正态分布,接下来可以用极大似然估计求解 w w w。假设 N N N 个样本之间独立同分布,有以下似然函数:
L ( w ) = log P ( Y ∣ X , w ) = log ∏ i = 1 N P ( y i ∣ x i , w ) = ∑ i = 1 N log P ( y i ∣ x i , w ) , \begin{align} \mathcal{L}(w)=\text{log}\; P(Y|X,w)=\text{log}\; \prod_{i=1}^N P(y_i|x_i,w) = \sum_{i=1}^N \text{log}\; P(y_i|x_i,w),\tag{11} \end{align} L(w)=logP(Y∣X,w)=logi=1∏NP(yi∣xi,w)=i=1∑NlogP(yi∣xi,w),(11)
其中,正态分布的概率密度函数:
P ( y ∣ x ; w ) = 1 2 π σ exp { − ( y − w T x ) 2 2 σ 2 } , (12) \begin{align} P(y|x;w)=\frac{1}{\sqrt{2\pi}\sigma}\text{exp}\{-\frac{(y-w^Tx)^2}{2\sigma^2}\} \end{align},\tag{12} P(y∣x;w)=2πσ1exp{−2σ2(y−wTx)2},(12)
代回似然函数中可得:
L ( w ) = ∑ i = 1 N log P ( y i ∣ x i , w ) = ∑ i = 1 N log 1 2 π σ exp { − ( y i − w T x i ) 2 2 σ 2 } = ∑ i = 1 N ( log 1 2 π σ − ( y i − w T x i ) 2 2 σ 2 ) . \begin{align} \mathcal{L}(w)&=\sum_{i=1}^N \text{log}\; P(y_i|x_i,w)\\[4pt] &=\sum_{i=1}^N \text{log}\; \frac{1}{\sqrt{2\pi}\sigma}\text{exp}\{-\frac{(y_i-w^Tx_i)^2}{2\sigma^2}\}\\[4pt] &=\sum_{i=1}^N (\text{log}\; \frac{1}{\sqrt{2\pi}\sigma} - \frac{(y_i-w^Tx_i)^2}{2\sigma^2}).\tag{13} \end{align} L(w)=i=1∑NlogP(yi∣xi,w)=i=1∑Nlog2πσ1exp{−2σ2(yi−wTxi)2}=i=1∑N(log2πσ1−2σ2(yi−wTxi)2).(13)
极大似然估计有:
w ^ = argmax w L ( w ) = argmax w − 1 2 σ 2 ( y i − w T x i ) 2 = argmin w ( y i − w T x i ) 2 . \begin{align} \hat w &= \underset{w}{\text{argmax}}\; \mathcal{L}(w)\\[4pt] &= \underset{w}{\text{argmax}}\; - \frac{1}{2\sigma^2}(y_i-w^Tx_i)^2\\[4pt] &= \underset{w}{\text{argmin}}\; (y_i-w^Tx_i)^2.\tag{14} \end{align} w^=wargmaxL(w)=wargmax−2σ21(yi−wTxi)2=wargmin(yi−wTxi)2.(14)
由此可见,最小二乘估计等价于噪声服从正态分布的极大似然估计。
2. 正则化
2.1 L1 范数与 L2 范数
L1 正则化和 L2 正则化可以看做是损失函数的惩罚项。所谓惩罚是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用 L1 正则化的模型建叫做 Lasso 回归,使用 L2 正则化的模型叫做 Ridge 回归。其中,Lasso 回归的形式如下:
argmin w 1 2 n ∥ X w − y ∥ 2 2 + α ∥ w ∥ 1 . (15) \underset{w}{\text{argmin}}\ \frac{1}{2n}\lVert Xw-y \rVert_2^2+\alpha\lVert w \rVert_1.\tag{15} wargmin 2n1∥Xw−y∥22+α∥w∥1.(15)
Ridge 回归的形式如下:
argmin w ∥ X w − y ∥ 2 2 + α ∥ w ∥ 2 2 . (16) \underset{w}{\text{argmin}}\ \lVert Xw-y \rVert_2^2+\alpha\lVert w \rVert_2^2.\tag{16} wargmin ∥Xw−y∥22+α∥w∥22.(16)
2.2 正则化的作用
如图 3 所示,其目标在于在满足正则化约束的前提下,让损失函数最小。也就是说,让误差函数的等值线(椭圆)尽可能小,但又不能越过正则化约束线(菱形或圆),交点即为最优解。
由于菱形有“尖角”正好在坐标轴上,故 L1 范数得到的最优解,恰好可能落在某条坐标轴上。进而某些参数会被压缩为 0,相当于自动做了“特征选择”。
L2 范数的作用是改善过拟合。过拟合是:模型训练时候的误差很小,但是测试误差很大,也就是说模型复杂到可以拟合到所有训练数据,但在预测新的数据的时候,结果很差。相对于 L1 范数,L2 范数可以使得 w w w 的每个元素都很小,都接近于 0。
2.3 Lasso 回归的求解
2.3.1 L-Lipschitz 条件
较为常见的是使用近端梯度下降法对 Lasso 进行求解,近端梯度下降要求如下形式的 ∇ f \nabla f ∇f 满足 L-Lipschitz 条件
min x f ( x ) + h ( x ) (17) \min_x\ \ f(x)+h(x)\tag{17} xmin f(x)+h(x)(17)
因此,首先证明 Lasso 表达式(公式 15)的第一部分的梯度满足 L-Lipschitz 条件,即证明线性回归模型的均方误差满足 L-Lipschitz 条件。这里引用知乎用户 cielo 的回答,说得非常形象。
L-Lipschitz 连续,要求函数图像的曲线上任意两点连线的斜率一致有界,就是任意的斜率都小于同一个常数,这个常数就是 L-Lipschitz 常数。
从局部看:我们可以取两个充分接近的点,如果这个时候斜率的极限存在的话,这个斜率的极限就是这个点的导数。也就是说函数可导,又是 L-Lipschitz 连续,那么导数有界。反过来,如果可导函数,导数有界,可以推出函数 L-Lipschitz 连续。
从整体看:L-Lipschitz 连续要求函数在无限的区间上不能有超过线性的增长,所以 x 2 x^2 x2, e x e^x ex 这些函数在无限区间上不是 L-Lipschitz 连续的。
这里可以通过维基百科的示意图进行辅助解释:
2.3.2 L-Lipschitz 条件的证明
定义线性回归的均方误差函数为:
f ( w ) = 1 2 n ∥ y − X w ∥ 2 2 . (18) f(w)=\frac{1}{2n}\lVert y-Xw \rVert^2_2.\tag{18} f(w)=2n1∥y−Xw∥22.(18)
Lasso 回归的 f ( x ) f(x) f(x) 部分与线性回归的均方误差函数相同,下面证明该部分满足 L-Lipschitz 条件,定义:
F ( x 1 , x 2 ) = ∥ ∇ f ( x 1 ) − ∇ f ( x 2 ) ∥ 2 2 − L ∥ x 1 − x 2 ∥ 2 2 . (19) F(x_1,x_2)=\lVert \nabla f(x_1) - \nabla f(x_2) \rVert_2^2 - L\lVert x_1-x_2 \rVert_2^2.\tag{19} F(x1,x2)=∥∇f(x1)−∇f(x2)∥22−L∥x1−x2∥22.(19)
首先求解 ∇ f ( w ) \nabla f(w) ∇f(w),对式 (18) 进行展开得:
f ( w ) = 1 2 n ( y − X w ) T ( y − X w ) . (20) f(w)=\frac{1}{2n}(y-Xw)^T(y-Xw).\tag{20} f(w)=2n1(y−Xw)T(y−Xw).(20)
根据矩阵求导法则:
∂ ∂ w ( a T a ) = 2 a T ∂ a ∂ w . (21) \frac{∂}{∂w}(a^Ta)=2a^T\frac{∂a}{∂w}.\tag{21} ∂w∂(aTa)=2aT∂w∂a.(21)
令 a = ( y − X w ) a=(y-Xw) a=(y−Xw),对式 (18) 求导后转置,故 ∇ f ( w ) \nabla f(w) ∇f(w) 为:
∇ f ( w ) = − 1 n X T ( y − X w ) , (22) \nabla f(w)=-\frac{1}{n}X^T(y-Xw),\tag{22} ∇f(w)=−n1XT(y−Xw),(22)
代入式 (19) 得:
F ( w 1 , w 2 ) = ∥ 1 n X T ( X w 1 − y ) + 1 n X T ( X w 2 + y ) ∥ 2 2 − L ∥ w 1 − w 2 ∥ 2 2 = 1 n 2 ∥ X T X ( w 1 − w 2 ) ∥ 2 2 − L ∥ w 1 − w 2 ∥ 2 2 . (23) \begin{align} F(w_1,w_2)&=\lVert \frac{1}{n}X^T(Xw_1-y) +\frac{1}{n}X^T(Xw_2+y) \rVert_2^2-L\lVert w_1-w_2 \rVert_2^2\\[4pt] &=\frac{1}{n^2}\lVert X^TX(w_1-w_2) \rVert_2^2 - L\lVert w_1-w_2 \rVert_2^2 \end{align}.\tag{23} F(w1,w2)=∥n1XT(Xw1−y)+n1XT(Xw2+y)∥22−L∥w1−w2∥22=n21∥XTX(w1−w2)∥22−L∥w1−w2∥22.(23)
现在要证明 F ( w 1 , x 2 ) ≤ 0 F(w_1,x_2)\le0 F(w1,x2)≤0,则要证明下式:
∥ X T X ( w 1 − w 2 ) ∥ 2 2 n 2 ∥ w 1 − w 2 ∥ 2 2 ≤ L , (24) \frac{\lVert X^TX(w_1-w_2) \rVert_2^2}{n^2\lVert w_1-w_2 \rVert_2^2}\le L,\tag{24} n2∥w1−w2∥22∥XTX(w1−w2)∥22≤L,(24)
记 A = X T X A = X^T X A=XTX,实际上是证明对于任意的 x x x,下式有界:
∥ A x ∥ 2 2 ∥ x ∥ 2 2 . (25) \frac{\lVert Ax \rVert_2^2}{\lVert x \rVert_2^2}.\tag{25} ∥x∥22∥Ax∥22.(25)
由于 A A A 是实对称矩阵,因此可以被对角化,即存在一个正交矩阵 Q Q Q 和一个对角矩阵 Λ \Lambda Λ,使得:
A = Q Λ Q T , (26) A=Q\Lambda Q^T,\tag{26} A=QΛQT,(26)
其中, Q Q Q 是 A A A 的特征向量, Λ \Lambda Λ 的对角线元素是 A A A 的特征值。
对于特征向量的正交性,如果 v i v_i vi 和 $v_j $ 是两个不同的特征向量,分别对应不同的特征值 λ i ≠ λ j \lambda_i \neq \lambda_j λi=λj,满足:
A v i = λ i v i , A v j = λ j v j , (27) Av_i=\lambda _iv_i,\quad Av_j=\lambda _jv_j,\tag{27} Avi=λivi,Avj=λjvj,(27)
则它们之间满足正交关系:
v i T v j = 0. (28) v_i^T v_j = 0.\tag{28} viTvj=0.(28)
除此之外,可以进一步选择特征向量使其单位化,即 ∥ v i ∥ = 1 \lVert v_i\rVert = 1 ∥vi∥=1,使得它们形成一个标准正交基。
基于此, x x x 可以表示为 A A A 的特征向量的线性组合:
x = ∑ i = 1 n k i v i , (29) x=\sum_{i=1}^n{k_iv_i},\tag{29} x=i=1∑nkivi,(29)
其中, v i v_i vi 是 A A A 的特征向量, k i k_i ki 是系数。
因此, A x Ax Ax 可以化简为:
A x = A ( ∑ i = 1 n k i v i ) = ∑ i = 1 n k i A v i = ∑ i = 1 n k i λ i v i , (30) Ax=A(\sum_{i=1}^n{k_iv_i})=\sum_{i=1}^n{k_iAv_i}=\sum_{i=1}^n{k_i\lambda_iv_i},\tag{30} Ax=A(i=1∑nkivi)=i=1∑nkiAvi=i=1∑nkiλivi,(30)
其中, ∥ A x ∥ 2 2 \lVert Ax \rVert_2^2 ∥Ax∥22 可以化简为:
∥ A x ∥ 2 2 = ∥ ∑ i = 1 n k i λ i v i ∥ 2 2 = ∑ i = 1 n ( k i λ i ) 2 ∥ v i ∥ 2 2 = ∑ i = 1 n ( k i λ i ) 2 . (31) \lVert Ax \rVert_2^2=\lVert \sum_{i=1}^n{k_i\lambda_iv_i} \rVert_2^2=\sum_{i=1}^n(k_i\lambda_i)^2\lVert v_i\rVert_2^2=\sum_{i=1}^n(k_i\lambda_i)^2.\tag{31} ∥Ax∥22=∥i=1∑nkiλivi∥22=i=1∑n(kiλi)2∥vi∥22=i=1∑n(kiλi)2.(31)
同理, ∥ x ∥ 2 2 \lVert x \rVert_2^2 ∥x∥22可以化简为:
∥ x ∥ 2 2 = ∑ i = 1 n k i 2 . (32) \lVert x \rVert_2^2=\sum_{i=1}^{n}{k_i}^2.\tag{32} ∥x∥22=i=1∑nki2.(32)
综上所述,可以将式 (25) 化简为:
∥ A x ∥ 2 2 ∥ x ∥ 2 2 = ∑ i = 1 n ( k i λ i ) 2 ∑ i = 1 n k i 2 . (33) \frac{\lVert Ax \rVert_2^2}{\lVert x \rVert_2^2}=\frac{\sum_{i=1}^n(k_i\lambda_i)^2}{\sum_{i=1}^{n}{k_i}^2}.\tag{33} ∥x∥22∥Ax∥22=∑i=1nki2∑i=1n(kiλi)2.(33)
式 (33) 是一个加权平均式,因此有如下结论:
min i ( λ i 2 ) ≤ ∑ i = 1 n ( k i λ i ) 2 ∑ i = 1 n k i 2 ≤ max i ( λ i 2 ) . (34) \min_i{(\lambda_i^2)}\le \frac{\sum_{i=1}^n(k_i\lambda_i)^2}{\sum_{i=1}^{n}{k_i}^2}\ \le\max_i(\lambda_i^2).\tag{34} imin(λi2)≤∑i=1nki2∑i=1n(kiλi)2 ≤imax(λi2).(34)
因此式 (25) 有界,即:
∥ X T X ( w 1 − w 2 ) ∥ 2 2 ∥ w 1 − w 2 ∥ 2 2 ≤ max i ( λ i 2 ) . (35) \frac{\lVert X^TX(w_1-w_2) \rVert_2^2}{\lVert w_1-w_2 \rVert_2^2}\le\max_i(\lambda_i^2).\tag{35} ∥w1−w2∥22∥XTX(w1−w2)∥22≤imax(λi2).(35)
接下来求解符合条件的 L L L:
F ( w 1 , w 2 ) = 1 n 2 ∥ X T X ( w 1 − w 2 ) ∥ 2 2 − L ∥ w 1 − w 2 ∥ 2 2 = L ∥ w 1 − w 2 ∥ 2 2 ( ∥ X T X ( w 1 − w 2 ) ∥ 2 2 n 2 L ∥ w 1 − w 2 ∥ 2 2 − 1 ) ≤ L ∥ w 1 − w 2 ∥ 2 2 ( 1 n 2 L max i ( λ i 2 ) − 1 ) ≤ 0. (36) \begin{align} F(w_1,w_2)&=\frac{1}{n^2}\lVert X^TX(w_1-w_2) \rVert_2^2 - L\lVert w_1-w_2 \rVert_2^2\\[4pt] &=L\lVert w_1-w_2 \rVert_2^2(\frac{\lVert X^TX(w_1-w_2) \rVert_2^2}{n^2L\lVert w_1-w_2 \rVert_2^2}-1)\\[4pt] &\le L\lVert w_1-w_2 \rVert_2^2(\frac{1}{n^2L}\max_i(\lambda_i^2)-1) \le 0. \end{align}\tag{36} F(w1,w2)=n21∥XTX(w1−w2)∥22−L∥w1−w2∥22=L∥w1−w2∥22(n2L∥w1−w2∥22∥XTX(w1−w2)∥22−1)≤L∥w1−w2∥22(n2L1imax(λi2)−1)≤0.(36)
故可得 L-Lipschitz 常数的上界:
L ≥ max i ( λ i 2 ) n 2 . (37) L\ge \frac{\max_i(\lambda_i^2)}{n^2}.\tag{37} L≥n2maxi(λi2).(37)
2.4 近端梯度下降
2.4.1 近端梯度下降的定义
在上一节已经证明了 Lasso 的 ∇ f \nabla f ∇f 满足 L-Lipschitz 条件,因此可以使用近端梯度下降算法进行求解。实际上,近端梯度下降的本质可以视为先对光滑的函数 f ( x ) f(x) f(x) 进行梯度下降,再对正则项进行隐性的梯度下降。
梯度的 L-Lipschitz 连续性要求梯度的变化不能过于剧烈,保证了存在合适的步长,使得 f ( x ) f(x) f(x) 沿着梯度方向前进这个步长可以使函数值下降,即 descent lemma,这可用于证明算法收敛性。
近端梯度算法(Proximal Gradient Descent, PGD)常用来解决如下形式的优化问题:
min x f ( x ) + h ( x ) . (38) \min_x\ \ f(x)+h(x).\tag{38} xmin f(x)+h(x).(38)
近端梯度下降的 h ( x ) h(x) h(x) 有以下几种形式:
-
h ( x ) = 0 h(x)=0 h(x)=0:则为一般的梯度下降算法。
-
h ( x ) = I C ( x ) h(x)=I_C(x) h(x)=IC(x):则称为投影梯度下降(Projected gradient descent),其中:
I C ( x ) = { 0 , x ∈ C , ∞ , x ∉ C . (39) I_C(x)=\begin{cases}0,&x\in C,\\[4pt] \infty,&x\notin C.\tag{39} \end{cases} IC(x)={0,∞,x∈C,x∈/C.(39) -
h ( x ) = λ ∥ x ∥ 1 h(x)=\lambda\lVert x\rVert_1 h(x)=λ∥x∥1:则被称为迭代收缩阈值算法(Iterative Shrinkage Thresholding Algorithm, ISTA),Lasso 回归为该种类型。
2.4.2 迭代方法
对于函数 f ( x ) f(x) f(x),在 x k x_k xk 附近进行二阶泰勒展开得:
f ^ ( x ) ≃ f ( x k ) + ∇ f ( x k ) T ( x − x k ) + 1 2 ( x − x k ) T ∇ 2 f ( x k ) ( x − x k ) , (40) \hat f(x)\simeq f(x_k)+\nabla f(x_k)^T(x-x_k)+\frac{1}{2}(x-x_k)^T\nabla ^2f(x_k)(x-x_k),\tag{40} f^(x)≃f(xk)+∇f(xk)T(x−xk)+21(x−xk)T∇2f(xk)(x−xk),(40)
上式中, ∇ 2 f ( x k ) \nabla ^2f(x_k) ∇2f(xk) 为 Hesse 矩阵,并且正定,L-Lipschitz 常数是 Hesse 矩阵的上界,在优化算法中常这样进行简化,故上式可以化简为如下形式:
f ^ ( x ) ≤ f ( x k ) + ⟨ ∇ f ( x k ) , ( x − x k ) ⟩ + L 2 ∥ ( x − x k ) ∥ 2 2 , (41) \hat f(x)\le f(x_k)+\lang \nabla f(x_k),(x-x_k)\rang+\frac{L}{2}\lVert (x-x_k)\rVert _2^2,\tag{41} f^(x)≤f(xk)+⟨∇f(xk),(x−xk)⟩+2L∥(x−xk)∥22,(41)
上述化简中,向量内积写法为: ∇ f ( x k ) T ( x − x k ) = ⟨ ∇ f ( x k ) , x − x k ⟩ \nabla f(x_k)^T(x-x_k)=\lang\nabla f(x_k),x-x_k\rang ∇f(xk)T(x−xk)=⟨∇f(xk),x−xk⟩,范数平方写法为: ∥ x − x k ∥ 2 2 = ( x − x k ) T ( x − x k ) \lVert x-x_k\rVert_2^2=(x-x_k)^T(x-x_k) ∥x−xk∥22=(x−xk)T(x−xk)。此外,由于 ∇ f \nabla f ∇f 满足 L-Lipschitz 条件,故 ∥ ∇ 2 f ( x ) ∥ 2 ≤ L , ∀ x \lVert \nabla^2f(x)\rVert_2\le L,\ \forall x ∥∇2f(x)∥2≤L, ∀x,综合这些条件即可化简上式。
进一步化简有:
f ^ ( x ) ≤ f ( x k ) + ⟨ ∇ f ( x k ) , ( x − x k ) ⟩ + ⟨ L 2 ( x − x k ) , x − x k ⟩ = f ( x k ) + ⟨ ∇ f ( x k ) + L 2 ( x − x k ) , x − x k ⟩ = f ( x k ) + L 2 ⟨ 2 L ∇ f ( x k ) + ( x − x k ) , x − x k ⟩ = f ( x k ) + L 2 ⟨ x − x k + 1 L ∇ f ( x k ) + 1 L ∇ f ( x k ) , x − x k + 1 L ∇ f ( x k ) − 1 L ∇ f ( x k ) ⟩ = f ( x k ) + L 2 ∥ x − x k + 1 L ∇ f ( x k ) ∥ 2 2 − 1 2 L ∥ ∇ f ( x k ) ∥ 2 2 = L 2 ∥ x − ( x k − 1 L ∇ f ( x k ) ) ∥ 2 2 + const , (42) \begin{align} \hat f(x)&\le f(x_k)+\lang \nabla f(x_k),\ (x-x_k)\rang+\lang \frac{L}{2}(x-x_k),\ x-x_k \rang\\[4pt] &=f(x_k)+\lang \nabla f(x_k)+\frac{L}{2}(x-x_k),\ x-x_k \rang\\[4pt] &=f(x_k)+\frac{L}{2}\lang\frac{2}{L} \nabla f(x_k)+(x-x_k),\ x-x_k \rang\\[4pt] &=f(x_k)+\frac{L}{2}\lang x-x_k+\frac{1}{L}\nabla f(x_k)+ \frac{1}{L}\nabla f(x_k),\ x-x_k+\frac{1}{L}\nabla f(x_k)-\frac{1}{L}\nabla f(x_k)\rang\\[4pt] &=f(x_k)+\frac{L}{2}\lVert x-x_k+\frac{1}{L}\nabla f(x_k)\rVert_2^2-\frac{1}{2L}\lVert \nabla f(x_k) \rVert_2^2\\[4pt] &=\frac{L}{2}\lVert x-(x_k-\frac{1}{L}\nabla f(x_k)) \rVert_2^2+\text{const}, \end{align}\tag{42} f^(x)≤f(xk)+⟨∇f(xk), (x−xk)⟩+⟨2L(x−xk), x−xk⟩=f(xk)+⟨∇f(xk)+2L(x−xk), x−xk⟩=f(xk)+2L⟨L2∇f(xk)+(x−xk), x−xk⟩=f(xk)+2L⟨x−xk+L1∇f(xk)+L1∇f(xk), x−xk+L1∇f(xk)−L1∇f(xk)⟩=f(xk)+2L∥x−xk+L1∇f(xk)∥22−2L1∥∇f(xk)∥22=2L∥x−(xk−L1∇f(xk))∥22+const,(42)
上式中,第一步到第二步的化简利用了内积合并的线性性质: ⟨ a , c ⟩ + ⟨ b , c ⟩ = ⟨ a + b , c ⟩ \lang a,\ c\rang+\lang b,\ c\rang=\lang a+b,\ c\rang ⟨a, c⟩+⟨b, c⟩=⟨a+b, c⟩,第四步到第五步的化简可以令 a = x − x k + 1 L ∇ f ( x k ) a=x-x_k+\frac{1}{L}\nabla f(x_k) a=x−xk+L1∇f(xk),则 ⟨ a + δ , a − δ ⟩ = ∥ a ∥ 2 − ∥ δ ∥ 2 \lang a+\delta,\ a-\delta \rang=\lVert a \rVert^2-\lVert \delta \rVert^2 ⟨a+δ, a−δ⟩=∥a∥2−∥δ∥2,代入后乘上因子 L 2 \frac{L}{2} 2L 即可得到第五步。最后化简结果中的 const \text{const} const 是常数。
显然,式 (42) 的最小值在如下 x k + 1 x_{k+1} xk+1 获得:
x k + 1 = x k − 1 L ∇ f ( x k ) . (43) x_{k+1}=x_k-\frac{1}{L}\nabla f(x_k).\tag{43} xk+1=xk−L1∇f(xk).(43)
下面证明通过迭代上式可以使 f ( x ) f(x) f(x) 逐步下降。
2.4.3 Descent Lemma 的证明
对于函数 f ( x ) f(x) f(x),由定积分的定义可得:
f ( x 2 ) − f ( x 1 ) = ∫ x 1 x 2 f ′ ( x ) d x . (44) f(x_2)-f(x_1)=\int_{x_1}^{x_2}f'(x)dx.\tag{44} f(x2)−f(x1)=∫x1x2f′(x)dx.(44)
设 f ( x ) f(x) f(x) 二次连续可微, x k ∈ R n x_k\in\R^n xk∈Rn,令 g ( t ) = f ( x k + t ( x − x k ) ) g(t)=f(x_k+t(x-x_k)) g(t)=f(xk+t(x−xk)),则:
g ( 0 ) = f ( x k ) , g ( 1 ) = f ( x ) . (45) \begin{align} g(0)&=f(x_k), \\[3pt]g(1)&=f(x). \end{align}\tag{45} g(0)g(1)=f(xk),=f(x).(45)
因此,由定积分的定义可得:
f ( x ) − f ( x k ) = g ( 1 ) − g ( 0 ) = ∫ 0 1 g ′ ( t ) d t . (46) f(x)-f(x_k)=g(1)-g(0)=\int_0^1{g'(t)dt}.\tag{46} f(x)−f(xk)=g(1)−g(0)=∫01g′(t)dt.(46)
对于 g ′ ( t ) g'(t) g′(t) 有:
g ′ ( t ) = ∂ f ( x k + t ( x − x k ) ) ∂ t , = ∇ f ( x k + t ( x − x k ) ) T ( x − x k ) , (47) \begin{align} g'(t)&=\frac{\partial f(x_k+t(x-x_k))}{\partial t},\\[4pt] &=\nabla f(x_k+t(x-x_k))^T(x-x_k), \end{align}\tag{47} g′(t)=∂t∂f(xk+t(x−xk)),=∇f(xk+t(x−xk))T(x−xk),(47)
代入式 (46) 可得:
f ( x ) − f ( x k ) = ∫ 0 1 ∇ f ( x k + t ( x − x k ) ) T ( x − x k ) d t , = ∫ 0 1 [ ∇ f ( x k + t ( x − x k ) ) − ∇ f ( x k ) + ∇ f ( x k ) ] T ( x − x k ) d t , = ∫ 0 1 ∇ f ( x k ) T ( x − x k ) d t + ∫ 0 1 [ ∇ f ( x k + t ( x − x k ) ) − ∇ f ( x k ) ] T ( x − x k ) d t , (48) \begin{align} f(x)-f(x_k)&=\int_0^1{\nabla f(x_k+t(x-x_k))^T(x-x_k)}dt,\\[4pt] &=\int_0^1[\nabla f(x_k+t(x-x_k))-\nabla f(x_k)+\nabla f(x_k)]^T(x-x_k)dt,\\[4pt] &=\int_0^1\nabla f(x_k)^T(x-x_k)dt+\int_0^1[\nabla f(x_k+t(x-x_k))-\nabla f(x_k)]^T(x-x_k)dt, \end{align}\tag{48} f(x)−f(xk)=∫01∇f(xk+t(x−xk))T(x−xk)dt,=∫01[∇f(xk+t(x−xk))−∇f(xk)+∇f(xk)]T(x−xk)dt,=∫01∇f(xk)T(x−xk)dt+∫01[∇f(xk+t(x−xk))−∇f(xk)]T(x−xk)dt,(48)
对上式使用如下内积性质进行放缩:
x T y = ∥ x ∥ ⋅ ∥ y ∥ cos θ ≤ ∥ x ∥ ⋅ ∥ y ∥ . (49) x^Ty=\lVert x \rVert \cdot \lVert y \rVert \cos\theta\le \lVert x \rVert \cdot \lVert y \rVert.\tag{49} xTy=∥x∥⋅∥y∥cosθ≤∥x∥⋅∥y∥.(49)
故式 (48) 可以放缩为如下形式:
f ( x ) − f ( x k ) ≤ ∫ 0 1 ∇ f ( x k ) T ( x − x k ) d t + ∫ 0 1 ∥ ∇ f ( x k + t ( x − x k ) ) − ∇ f ( x k ) ∥ 2 ⋅ ∥ x − x k ∥ 2 d t . (50) f(x)-f(x_k)\le\int_0^1\nabla f(x_k)^T(x-x_k)dt+\int_0^1\lVert\nabla f(x_k+t(x-x_k))-\nabla f(x_k)\rVert_2\cdot \lVert x-x_k\rVert _2dt.\tag{50} f(x)−f(xk)≤∫01∇f(xk)T(x−xk)dt+∫01∥∇f(xk+t(x−xk))−∇f(xk)∥2⋅∥x−xk∥2dt.(50)
接下来对上式使用 L-Lipschitz 常数进行放缩,可得到:
f ( x ) − f ( x k ) ≤ ∫ 0 1 ∇ f ( x k ) T ( x − x k ) d t + ∥ x − x k ∥ 2 ∫ 0 1 L ∥ t ( x − x k ) ∥ 2 d t , (51) f(x)-f(x_k)\le\int_0^1\nabla f(x_k)^T(x-x_k)dt+\lVert x-x_k\rVert _2\int_0^1L\lVert t(x-x_k)\rVert _2dt,\tag{51} f(x)−f(xk)≤∫01∇f(xk)T(x−xk)dt+∥x−xk∥2∫01L∥t(x−xk)∥2dt,(51)
对上式进行定积分,可化简为:
f ( x ) − f ( x k ) = ∇ f ( x k ) T ( x − x k ) + L 2 ∥ ( x − x k ) ∥ 2 2 , (52) f(x)-f(x_k)=\nabla f(x_k)^T(x-x_k)+\frac{L}{2}\lVert (x-x_k)\rVert _2^2,\tag{52} f(x)−f(xk)=∇f(xk)T(x−xk)+2L∥(x−xk)∥22,(52)
令
f ^ ( x ) = f ( x k ) + ∇ f ( x k ) T ( x − x k ) + L 2 ∥ ( x − x k ) ∥ 2 2 , (53) \hat f(x)=f(x_k)+\nabla f(x_k)^T(x-x_k)+\frac{L}{2}\lVert (x-x_k)\rVert _2^2,\tag{53} f^(x)=f(xk)+∇f(xk)T(x−xk)+2L∥(x−xk)∥22,(53)
则有 f ( x ) ≤ f ^ ( x ) f(x)\le\hat f(x) f(x)≤f^(x),当 x = x k x=x_k x=xk 时等号成立,该不等式被称为 descent lemma。
由于 f ( x ) f(x) f(x)在 x = x k − 1 L ∇ f ( x k ) x=x_k-\frac{1}{L}\nabla f(x_k) x=xk−L1∇f(xk) 处取得最小值,因此以下不等式成立:
f ^ ( x k − 1 L ∇ f ( x k ) ) ≤ f ^ ( x k ) . (54) \hat f(x_k-\frac{1}{L}\nabla f(x_k))\le \hat f(x_k).\tag{54} f^(xk−L1∇f(xk))≤f^(xk).(54)
根据 descent lemma 的推导有 f ( x ) ≤ f ^ ( x ) f(x)\le\hat f(x) f(x)≤f^(x) 恒成立,因此以下不等式也成立:
f ( x k − 1 L ∇ f ( x k ) ) ≤ f ^ ( x k − 1 L ∇ f ( x k ) ) , (55) f(x_k-\frac{1}{L}\nabla f(x_k))\le \hat f(x_k-\frac{1}{L}\nabla f(x_k)),\tag{55} f(xk−L1∇f(xk))≤f^(xk−L1∇f(xk)),(55)
且当 x = x k x=x_k x=xk 时,由式 (53) 可知 f ( x k ) = f ^ ( x k ) f(x_k)=\hat f(x_k) f(xk)=f^(xk),因此:
f ( x k − 1 L ∇ f ( x k ) ) ≤ f ^ ( x k − 1 L ∇ f ( x k ) ) ≤ f ^ ( x k ) = f ( x k ) . (56) f(x_k-\frac{1}{L}\nabla f(x_k))\le \hat f(x_k-\frac{1}{L}\nabla f(x_k))\le\hat f(x_k)=f(x_k).\tag{56} f(xk−L1∇f(xk))≤f^(xk−L1∇f(xk))≤f^(xk)=f(xk).(56)
综上所述,可以通过迭代下式使得 f ( x ) f(x) f(x) 逐步下降:
x k + 1 = x k − 1 L ∇ f ( x k ) . (57) x_{k+1}=x_k-\frac{1}{L}\nabla f(x_k).\tag{57} xk+1=xk−L1∇f(xk).(57)
2.4.4 求解 Lasso
上面的证明和推导都是针对 Lasso 的第一部分,Lasso 相对于线性回归只是加上了 L1 范数,故将式 (57) 应用在 Lasso 回归上,可得到如下一阶近似的迭代式:
x k + 1 = arg min x L 2 ∥ x − ( x k − 1 L ∇ f ( x k ) ) ∥ 2 2 + λ ∥ x ∥ 1 , (58) x_{k+1}=\underset{x}{\arg\min}\ \frac{L}{2}\lVert x-(x_k-\frac{1}{L}\nabla f(x_k)) \rVert_2^2+\lambda\lVert x\rVert_1,\tag{58} xk+1=xargmin 2L∥x−(xk−L1∇f(xk))∥22+λ∥x∥1,(58)
令 z = x k − 1 L ∇ f ( x k ) z=x_k-\frac{1}{L}\nabla f(x_k) z=xk−L1∇f(xk), L = 1 t L=\frac{1}{t} L=t1 其实际上为 f ( x ) f(x) f(x) 的梯度下降形式,可以将上式转换成如下形式:
x k + 1 = arg min x 1 2 ∥ x − z ∥ 2 2 + λ t ∥ x ∥ 1 , (59) x_{k+1}=\underset{x}{\arg\min}\ \frac{1}{2}\lVert x-z \rVert_2^2+\lambda t\lVert x\rVert_1,\tag{59} xk+1=xargmin 21∥x−z∥22+λt∥x∥1,(59)
上式也被称为近端算子(proximal operator),记为:
p r o x t , h ( ⋅ ) ( z ) = arg min x 1 2 ∥ x − z ∥ 2 2 + t ⋅ h ( x ) . (60) prox_{t,h(\cdot)}(z)=\underset{x}{\arg\min}\ \frac{1}{2}\lVert x-z\rVert_2^2+t\cdot h(x).\tag{60} proxt,h(⋅)(z)=xargmin 21∥x−z∥22+t⋅h(x).(60)
总体而言,首先对可导部分使用一阶泰勒展开和二次近似,然后再对整体目标函数应用近端操作。即先走一小步梯度下降,然后用近端算子来处理非光滑部分。特别地,当 h ( x ) = λ ∥ x ∥ 1 h(x)=\lambda\lVert x\rVert_1 h(x)=λ∥x∥1时,近端算子有封闭解,称为 Soft Thresholding:
[ p r o x t λ ∥ ⋅ ∥ 1 ( z ) ] i = { z i − t λ , z i > t λ , 0 , ∣ z i ∣ ≤ t λ , z i + t λ , z i < − t λ , (61) [prox_{t\lambda \lVert \cdot \rVert_1}(z)]_i= \begin{cases} z_i-t\lambda,&z_i>t\lambda,\\[4pt] 0,&|z_i|\le t\lambda,\\[4pt] z_i+t\lambda,&z_i<-t\lambda, \end{cases}\tag{61} [proxtλ∥⋅∥1(z)]i=⎩ ⎨ ⎧zi−tλ,0,zi+tλ,zi>tλ,∣zi∣≤tλ,zi<−tλ,(61)
更简洁地,可以写为:
p r o x t λ ∥ ⋅ ∥ 1 ( z ) = sign ( z ) ⋅ max ( ∣ z ∣ − t λ , 0 ) . (62) prox_{t\lambda\lVert\cdot \rVert_1}(z)=\text{sign}(z)\cdot \max (|z|-t\lambda,\ 0).\tag{62} proxtλ∥⋅∥1(z)=sign(z)⋅max(∣z∣−tλ, 0).(62)
对于式 (17) 的问题,近端梯度下降算法的一般迭代过程是先对 f ( x ) f(x) f(x) 进行梯度下降求得 z ( k ) z^{(k)} z(k),然后代入近端算子 p r o x t , h ( ⋅ ) ( z ( k ) ) prox_{t,h(\cdot)}(z^{(k)}) proxt,h(⋅)(z(k)),然后迭代求解:
z ( k ) = x ( k ) − t ∇ f ( x ( k ) ) , x ( k + 1 ) = p r o x t , h ( ⋅ ) ( z ( k ) ) . (63) \begin{align} z^{(k)}&=x^{(k)}-t\nabla f(x^{(k)}),\\[4pt] x^{(k+1)}&=prox_{t,h(\cdot)}(z^{(k)}). \end{align}\tag{63} z(k)x(k+1)=x(k)−t∇f(x(k)),=proxt,h(⋅)(z(k)).(63)
2.4.5 具体求解例子
假设数据设置有:
X = [ 1 3 3 4 ] , y = [ 1 2 ] w ( 0 ) = [ 0 0 ] , λ = 0.1 , t = 0.01. (64) X= \begin{bmatrix} 1&3\\[4pt] 3&4 \end{bmatrix},\quad y=\begin{bmatrix} 1\\[4pt]2 \end{bmatrix}\quad w^{(0)}=\begin{bmatrix} 0\\[4pt]0 \end{bmatrix},\quad \lambda=0.1,\quad t=0.01.\tag{64} X=[1334],y=[12]w(0)=[00],λ=0.1,t=0.01.(64)
第一步需要计算梯度 ∇ f ( w ) \nabla f(w) ∇f(w):
f ( w ) = 1 2 n ∥ X w − y ∥ 2 ⇒ ∇ f ( w ) = − 1 n X T ( y − X w ) ⇒ ∇ f ( w ( 0 ) ) = [ − 7 − 10 ] . (65) \begin{align} f(w)&=\frac{1}{2n}\lVert Xw-y \rVert^2\\[4pt]&\Rightarrow \nabla f(w)=-\frac{1}{n}X^T(y-Xw)\\[4pt] &\Rightarrow \nabla f(w^{(0)})= \begin{bmatrix} -7\\[4pt]-10 \end{bmatrix}. \end{align}\tag{65} f(w)=2n1∥Xw−y∥2⇒∇f(w)=−n1XT(y−Xw)⇒∇f(w(0))=[−7−10].(65)
第二步进行梯度下降和近端操作:
z ( 0 ) = w ( 0 ) − t ∇ f ( w ( 0 ) ) = [ 0.07 0.10 ] , (66) z^{(0)}=w^{(0)}-t\nabla f(w^{(0)})=\begin{bmatrix} 0.07\\[4pt]0.10 \end{bmatrix},\tag{66} z(0)=w(0)−t∇f(w(0))=[0.070.10],(66)
对每一维使用 Soft-thresholding:
0.07 → max ( 0.07 − 0.001 , 0 ) = 0.069 , 0.10 → max ( 0.10 − 0.001 , 0 ) = 0.099 , (67) \begin{align} 0.07\rightarrow\max(0.07-0.001,\ 0)=0.069,\\[4pt] 0.10\rightarrow\max(0.10-0.001,\ 0)=0.099, \end{align}\tag{67} 0.07→max(0.07−0.001, 0)=0.069,0.10→max(0.10−0.001, 0)=0.099,(67)
因此第一轮更新的权重为:
w ( 1 ) = p r o x ( z ( 0 ) ) = [ 0.069 0.099 ] . (68) w^{(1)}=prox(z^{(0)})= \begin{bmatrix} 0.069\\[4pt]0.099 \end{bmatrix}.\tag{68} w(1)=prox(z(0))=[0.0690.099].(68)
3. 最大后验估计
最大后验估计是从贝叶斯的角度上的一种求解方式。假设 w w w 有一个先验,满足 w ∼ N ( 0 , σ 0 2 ) w\sim \mathcal N(0,\sigma_0^2) w∼N(0,σ02),噪声 ϵ ∼ N ( 0 , σ 2 ) \epsilon\sim \mathcal N(0,\sigma^2) ϵ∼N(0,σ2),目标变量 y ∼ N ( w T x , σ 2 ) y\sim \mathcal N(w^Tx,\sigma^2) y∼N(wTx,σ2)。根据高斯分布的概率密度函数可写出似然函数和 w w w 的先验分布:
p ( y ∣ w ) = ∏ i = 1 n 1 2 π σ exp { − ( y i − w T x i ) 2 2 σ 2 } , (69) \begin{align} p(y|w)&=\prod_{i=1}^n\frac{1}{\sqrt{2\pi}\sigma}\exp\{-\frac{(y_i-w^Tx_i)^2}{2\sigma^2}\}, \end{align}\tag{69} p(y∣w)=i=1∏n2πσ1exp{−2σ2(yi−wTxi)2},(69)
取对数并忽略常数:
log p ( y ∣ w ) ∝ − 1 2 σ 2 ∑ i = 1 n ( y i − w T x i ) 2 = − 1 2 σ 2 ∥ X w − y ∥ 2 . (70) \log\ p(y|w)\propto -\frac{1}{2\sigma^2}\sum_{i=1}^n (y_i-w^Tx_i)^2=-\frac{1}{2\sigma^2}\lVert Xw-y \rVert^2.\tag{70} log p(y∣w)∝−2σ21i=1∑n(yi−wTxi)2=−2σ21∥Xw−y∥2.(70)
先验项有:
p ( w ) = 1 ( 2 π σ 0 2 ) d / 2 exp { − ∥ w ∥ 2 2 σ 0 2 } , (71) p(w)=\frac{1}{(2\pi \sigma_0^2)^{d/2}}\exp\{-\frac{\lVert w \rVert^2}{2\sigma_0^2}\},\tag{71} p(w)=(2πσ02)d/21exp{−2σ02∥w∥2},(71)
取对数并忽略常数:
log p ( w ) ∝ − 1 2 σ 0 2 ∥ w ∥ 2 . (72) \log \ p(w)\propto -\frac{1}{2\sigma_0^2} \lVert w \rVert^2.\tag{72} log p(w)∝−2σ021∥w∥2.(72)
最大后验等价于最小负对数后验:
w ^ = argmax w log p ( y ∣ w ) + log p ( w ) = argmin w 1 2 σ 2 ∥ X w − y ∥ 2 + 1 2 σ 0 2 ∥ w ∥ 2 , (73) \begin{align} \hat w&=\underset{w}{\text{argmax}}\ \log\ p(y|w)+\log \ p(w)\\[4pt] &=\underset{w}{\text{argmin}}\ \frac{1}{2\sigma^2}\lVert Xw-y \rVert^2 + \frac{1}{2\sigma_0^2} \lVert w \rVert^2, \end{align}\tag{73} w^=wargmax log p(y∣w)+log p(w)=wargmin 2σ21∥Xw−y∥2+2σ021∥w∥2,(73)
乘上 2 σ 2 2\sigma^2 2σ2 不影响最小化目标:
w ^ = argmin w ∥ X w − y ∥ 2 + λ ∥ w ∥ 2 , λ = σ 2 σ 0 2 . (74) \hat w=\underset{w}{\text{argmin}}\ \lVert Xw-y \rVert^2 + \lambda \lVert w \rVert^2,\quad \lambda=\frac{\sigma^2}{\sigma_0^2}.\tag{74} w^=wargmin ∥Xw−y∥2+λ∥w∥2,λ=σ02σ2.(74)
回顾最小二乘估计的求解结果,如果样本量 N N N 没有远大于维度 p p p 的时候, X T X X^TX XTX 往往不可逆,也就是直观上理解的“过拟合”。在这种情况下,有三种方法:增加样本量、特征选择/降维、正则化。其中,正则化的框架为:
J ( w ) = L ( w ) + λ P ( w ) . (75) J(w)=L(w)+\lambda P(w).\tag{75} J(w)=L(w)+λP(w).(75)
在岭回顾中,其克服过拟合的思想为,一个半正定矩阵加上对角矩阵为正定矩阵,必定可逆。在上式框架中令 P ( w ) = w T w P(w)=w^Tw P(w)=wTw,经最小二乘估计可求出 w w w 为:
w ^ = arg min x J ( w ) = ( X T X + λ I ) − 1 X T Y , (76) \hat w=\underset{x}{\arg \min}\ {J(w)}=(X^TX+\lambda I)^{-1}X^TY,\tag{76} w^=xargmin J(w)=(XTX+λI)−1XTY,(76)
上式等价于式子 (16),观察式子 (16) 和式子 (74),因此可以得出结论:噪声和先验为高斯分布的最大后验估计等价于正则化的最小二乘估计。
4. 自动求导
4.1 向量求导
如果 x x x 和 y y y 都是标量,那么 ∂ y / ∂ x \partial y/\partial x ∂y/∂x 也是标量;如果 y y y 是标量, x \boldsymbol{x} x 是向量,那么 ∂ y / ∂ x \partial y/\partial \boldsymbol x ∂y/∂x 是行向量;如果 y \boldsymbol y y 是向量, x x x 是标量,那么 ∂ y / ∂ x \partial \boldsymbol y/\partial x ∂y/∂x 还是向量;如果 x \boldsymbol x x 和 y \boldsymbol y y 都是向量,那么 ∂ y / ∂ x \partial \boldsymbol y/\partial \boldsymbol x ∂y/∂x 是矩阵。具体而言,可以看作是向量 y \boldsymbol y y 的每个元素对 x \boldsymbol x x 求导,那么就会得到一个向量,向量中的每个元素为 ∂ y i / ∂ x \partial y_i/\partial \boldsymbol x ∂yi/∂x,相当于标量对向量求导,变成一个个行向量,比如 [ ∂ y 1 / ∂ x 1 , ∂ y 1 / ∂ x 2 , ⋯ , ∂ y 1 / ∂ x n ] [\partial y_1/\partial x_1,\ \partial y_1/ \partial x_2,\cdots,\ \partial y_1/\partial x_n] [∂y1/∂x1, ∂y1/∂x2,⋯, ∂y1/∂xn]。
4.2 链式法则
4.3 反向传播
反向传播可以理解为神经网络加速梯度计算的方式。在图 8 中,为了求 L L L 对 w 1 w_1 w1 的梯度,通过链式法则写成多个梯度相乘的形式。其中,计算的顺序是从后往前,黄色部分是已经计算的部分,不需要重新计算。
在计算机中,使用计算图来表示求导过程。如图 9 所示,这是一个正向传播的结构图,每个方块里面的计算都简单且可复制。
如图 10 所示,这是一个反向传播的计算图,黄色的式子就是通过之前的步骤得到的,绿色的式子就是在向前传播过程中得到的结果。
5. 线性回归代码实现
5.1 线性回归的从零实现
代码来自为李沐《动手学深度学习》:https://zh.d2l.ai/chapter_linear-networks/linear-regression-scratch.html
import random
import torch
import matplotlib.pyplot as plt# 随机生成数据
def synthetic_data(w, b, num_examples):X = torch.normal(0, 1, (num_examples, len(w))) # 正态分布生成随机数y = torch.matmul(X, w) + b # 矩阵乘法y += torch.normal(0, 0.01, y.shape)return X, y.reshape((-1, 1)) # reshape 把一维张量转换成二维列向量true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)# 获取批量数据
def data_iter(batch_size, features, labels):num_examples = len(features)indices = list(range(num_examples))random.shuffle(indices)for i in range(0, num_examples, batch_size):batch_indices = torch.tensor(indices[i:min(i + batch_size, num_examples)])yield features[batch_indices], labels[batch_indices] # 反复调用反复返回数据batch_size = 10
for X, y in data_iter(batch_size, features, labels):print(X,'\n', y)break# 初始化参数
w = torch.normal(0, 0.01, size=(2, 1), requires_grad = True) # 启用梯度跟踪
b = torch.zeros(1, requires_grad = True)# 定义线性回归模型
def linreg(X, w, b):return torch.matmul(X, w) + b# 定义损失函数
def square_loss(y_hat, y):return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2# 定义优化算法
def sgd(params, lr, batch_size):# 小批量随机梯度下降with torch.no_grad(): # 禁用梯度计算for param in params:param -= lr * param.grad / batch_size # .grad 会储存张量在反向传播中计算的梯度param.grad.zero_() # 清零梯度,pytorch不会自动清零# 训练过程
lr = 0.03
num_epochs = 3
net = linreg
loss = square_lossfor epoch in range(num_epochs):for X, y in data_iter(batch_size, features, labels):l = loss(net(X, w, b), y) # 此时并不是一个标量l.sum().backward()'''对这个标量损失进行反向传播,计算所有 requires_grad=True 的参数(w 和 b)的梯度,并存储到它们的 .grad 属性中梯度计算基于链式法则,从损失函数反向传播到每个参数'''sgd([w, b], lr, batch_size)with torch.no_grad():train_l = loss(net(features, w, b), labels)print(f'epoch {epoch + 1}, loss {float(train_l.mean()):f}')print(f' w 的估计误差: {true_w - w.reshape(true_w.shape)}')
print(f' b 的估计误差: {true_b - b}')
5.2 线性回归的简洁实现
代码来自为李沐《动手学深度学习》:https://zh.d2l.ai/chapter_linear-networks/linear-regression-concise.html
# 线性回归的简洁实现
import numpy as np
import torch
from torch.utils import data# 随机生成数据
def synthetic_data(w, b, num_examples):X = torch.normal(0, 1, (num_examples, len(w))) # 正态分布生成随机数y = torch.matmul(X, w) + b # 矩阵乘法y += torch.normal(0, 0.01, y.shape)return X, y.reshape((-1, 1)) # reshape 把一维张量转换成二维列向量true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)# 调用框架中现有的 API 来读取数据
def load_array(data_arrays, batch_size, is_train = True):# 构造一个pytorch数据迭代器dataset = data.TensorDataset(*data_arrays) # 将传入的数据集转换成 Tensor 形式return data.DataLoader(dataset, batch_size, shuffle=is_train) # 随机抽取一些样本batch_size = 10
data_iter = load_array((features, labels), batch_size)
next(iter(data_iter))# 使用框架的预定义好的层
from torch import nn
net = nn.Sequential(nn.Linear(2, 1))
# 把包含一个线性层的网络放在 Sequential 容器里面,容器可以放置多个层
# 网络的输入特征维度为 2,输出维度为 1# 初始化模型参数
net[0].weight.data.normal_(0, 0.01)
net[0].bias.data.fill_(0)# 计算均方误差
loss = nn.MSELoss()# 实例化 SGD 实例
trainer = torch.optim.SGD(net.parameters(), lr = 0.3)
# 把这个神经网络里所有要学习的参数都给net.parameters(),用优化器去更新它们# 训练部分
num_epochs = 3
for epoch in range(num_epochs):for X, y in data_iter:l = loss(net(X), y)trainer.zero_grad() # 梯度清零l.backward()trainer.step() # 用于根据当前参数的梯度更新模型参数l = loss(net(features), labels)print(f'epoch {epoch + 1}, loss {l:f}')
6. Softmax 回归
6.1 Softmax 与 交叉熵
输出的匹配概率非负且和为 1:
y ^ = softmax ( o ) , (77) \hat{\boldsymbol{y}}=\text{softmax}(\boldsymbol o),\tag{77} y^=softmax(o),(77)
也可以以元素的方式进行表示:
y ^ i = exp o i ∑ k exp ( o k ) . (78) \hat y_i=\frac{\exp o_i}{\sum_k \exp(o_k)}.\tag{78} y^i=∑kexp(ok)expoi.(78)
交叉熵常用来衡量两个概率的区别:
H ( p , q ) = ∑ i − p i log ( q i ) , (79) H(\boldsymbol p, \boldsymbol q )=\sum_{i}-p_i\log (q_i),\tag{79} H(p,q)=i∑−pilog(qi),(79)
上式的 i i i 不是样本索引,而是类别索引。将上式作为 Softmax 的损失:
l ( y , y ^ ) = − ∑ i y i log y ^ i = − y y log y ^ y − ∑ i ≠ y y i log y ^ i = − log y ^ y . (80) \begin{align} l(\boldsymbol y, \hat{\boldsymbol y})&= -\sum_{i}y_i\log\hat y_i\\[4pt] &=-y_y\log \hat y_y-\sum_{i\neq y}y_i\log \hat y_i \\[4pt] &=-\log \hat y_y. \end{align}\tag{80} l(y,y^)=−i∑yilogy^i=−yylogy^y−i=y∑yilogy^i=−logy^y.(80)
对于上式为什么可以这样化简,这是因为真实标签 y \boldsymbol{y} y 是一个 ont-hot 向量:
y i = { 1 , i = y , 0 , otherwise . (81) y_i= \begin{cases} 1,&i=y,\\[4pt] 0,&\text{otherwise}. \end{cases}\tag{81} yi={1,0,i=y,otherwise.(81)
因此,公式 (80) 只有在 i = y i=y i=y 时不为 0, y y y_y yy 表示真实类别。
进一步地,梯度是真实概率和预测概率的区别:
∂ ∂ o i l ( y , y ^ ) = − ∑ j y j ⋅ ∂ ∂ o i log y j ^ = ∑ j y j ⋅ ∂ ∂ o i log ( exp ( o j ) ∑ k exp ( o k ) ) = ∑ j y j ⋅ ∂ ∂ o i ( o j − log ( ∑ k exp ( o k ) ) ) , (82) \begin{align} \frac{\partial }{\partial o_i}l(\boldsymbol y,\hat {\boldsymbol y})&=-\sum_{j} y_j\cdot \frac{\partial }{\partial o_i} \log \hat{y_j}\\[4pt] &=\sum_{j}y_j\cdot \frac{\partial }{\partial o_i}\log(\frac{\exp(o_j)}{\sum_k\exp(o_k)})\\[4pt] &=\sum_{j}y_j\cdot \frac{\partial }{\partial o_i}(o_j-\log(\sum_k\exp(o_k))), \end{align}\tag{82} ∂oi∂l(y,y^)=−j∑yj⋅∂oi∂logyj^=j∑yj⋅∂oi∂log(∑kexp(ok)exp(oj))=j∑yj⋅∂oi∂(oj−log(k∑exp(ok))),(82)
对 o j o_j oj 求导的部分,如果 i = j i=j i=j,则结果为 1;否则结果为 0。对对数项求导的部分,使用链式法则有:
∂ ∂ o i log ( ∑ k exp ( o k ) ) = 1 ∑ k exp ( o k ) ⋅ ∂ ∂ o i ( ∑ k exp ( o k ) ) = 1 ∑ k exp ( o k ) ⋅ exp ( o i ) = y ^ i . (83) \begin{align} \frac{\partial }{\partial o_i}\log(\sum_k\exp(o_k))&= \frac{1}{\sum_k\exp(o_k)}\cdot \frac{\partial }{\partial o_i}(\sum_k\exp(o_k))\\[4pt] &=\frac{1}{\sum_k\exp(o_k)}\cdot\exp(o_i)\\[4pt] &=\hat y_i. \end{align}\tag{83} ∂oi∂log(k∑exp(ok))=∑kexp(ok)1⋅∂oi∂(k∑exp(ok))=∑kexp(ok)1⋅exp(oi)=y^i.(83)
综合上述两项的结果,求偏导的结果为:
∂ ∂ o i log y j ^ = { 1 − y i ^ , if i = j , − y i ^ , if i ≠ j . (84) \frac{\partial }{\partial o_i} \log \hat{y_j}= \begin{cases} 1-\hat{y_i},&\text{if}\quad i=j,\\[4pt] -\hat{y_i},&\text{if}\quad i\neq j. \end{cases}\tag{84} ∂oi∂logyj^={1−yi^,−yi^,ifi=j,ifi=j.(84)
将上式代入式 (82) 可得:
∂ ∂ o i l ( y , y ^ ) = − ∑ j y j ⋅ ( δ i j − y i ^ ) = ∑ j y j δ i j + ∑ j y j y i ^ = − y i + y i ^ . (85) \begin{align} \frac{\partial }{\partial o_i}l(\boldsymbol y,\hat {\boldsymbol y})&=-\sum_jy_j\cdot(\delta_{ij}-\hat{y_i})\\[4pt] &=\sum_jy_j\delta_{ij}+\sum_jy_j\hat{y_i}\\[4pt] &=-y_i+\hat{y_i}. \end{align}\tag{85} ∂oi∂l(y,y^)=−j∑yj⋅(δij−yi^)=j∑yjδij+j∑yjyi^=−yi+yi^.(85)
6.2 损失函数
下面给出几种损失函数的可视化,都是真实值为 0 的情况。
图 11 想表达的是,当真实值和预测值相差较大的时候,梯度比较大,下降比较快;反之,真实值和预测值相差较小的时候,梯度较小。
绝对值损失函数想表达的是,无论误差有多大,梯度始终是常数,权重更新不会太大,带来稳定性,但也具有不平滑和不可导的缺陷。比如,当预测值和真实值较为接近时,在迭代后期,会变得不稳定。
参考
[1] Machine Learning基础:正则化项(Regularization)
[2] 【西瓜书】 第11章 特征选择与稀疏学习
[3] 近端梯度(Proximal Gradient)下降算法的过程以及理解|ISTA算法|LASSO问题 - 红泥小火炉的文章 - 知乎
[4] Lasso回归与近端梯度下降推导与实现Posted by Welt Xing on September 30, 2021
[5] 【西瓜书】 第11章 特征选择与稀疏学习笔记
[6] 利普希茨连续的几何意义是什么?怎么较好的理解它呢? - cielo的回答 - 知乎
[7] L1范数中为什么需要证明目标函数的梯度满足Lipschitz(利普希茨)连续? - Spectre的回答 - 知乎
[8] 【机器学习】【白板推导系列】【合集 1~33】
[9] 08 线性回归 + 基础优化算法【动手学深度学习v2】
[10] [5分钟深度学习] #02 反向传播算法