《最优化理论基础》8课时模块化教案(续)
模块4第1课时:应用专题——稀疏优化与深度学习中的优化挑战
核心目标:掌握稀疏优化的数学原理与实现方法,分析深度学习优化问题的非凸性、大规模特性及解决方案。
1. 稀疏优化:LASSO回归与几何解释(60分钟)
1.1 L1正则化的数学形式
LASSO问题:
min
β
1
2
n
∥
y
−
X
β
∥
2
2
+
λ
∥
β
∥
1
\min_{\beta} \frac{1}{2n} \| y - X\beta \|_2^2 + \lambda \|\beta\|_1
βmin2n1∥y−Xβ∥22+λ∥β∥1
- 目标:在最小化残差平方和的同时,促使系数稀疏化(部分 β j = 0 \beta_j = 0 βj=0)。
1.2 几何解释:L1 vs L2正则化
- 岭回归(L2):约束区域为球体,解倾向于均匀收缩系数。
- LASSO(L1):约束区域为菱形,解倾向于在坐标轴上(稀疏性)。
示例:二维系数空间对比
设
β
=
(
β
1
,
β
2
)
\beta = (\beta_1, \beta_2)
β=(β1,β2),约束区域:
- L2: β 1 2 + β 2 2 ≤ t \beta_1^2 + \beta_2^2 \leq t β12+β22≤t(圆形)。
- L1:
∣
β
1
∣
+
∣
β
2
∣
≤
t
|\beta_1| + |\beta_2| \leq t
∣β1∣+∣β2∣≤t(菱形)。
最优解为等高线首次接触约束区域的位置,LASSO更易在顶点(坐标轴)接触,产生稀疏解。
1.3 坐标下降法求解LASSO
算法步骤:
- 初始化 β = 0 \beta = 0 β=0。
- 对每个系数
β
j
\beta_j
βj依次更新:
β j ← S λ / n ( 1 n ∑ i = 1 n x i j ( y i − ∑ k ≠ j x i k β k ) ) \beta_j \leftarrow S_{\lambda/n} \left( \frac{1}{n} \sum_{i=1}^n x_{ij} (y_i - \sum_{k \neq j} x_{ik} \beta_k) \right) βj←Sλ/n n1i=1∑nxij(yi−k=j∑xikβk)
其中软阈值函数 S τ ( z ) = sign ( z ) ( ∣ z ∣ − τ ) + S_\tau(z) = \text{sign}(z)(|z| - \tau)_+ Sτ(z)=sign(z)(∣z∣−τ)+。
手动计算示例:
设数据
X
=
[
1
2
3
4
]
X = \begin{bmatrix}1 & 2 \\ 3 & 4\end{bmatrix}
X=[1324],
y
=
[
5
6
]
y = \begin{bmatrix}5 \\ 6\end{bmatrix}
y=[56],
λ
=
1
\lambda = 1
λ=1, 初始
β
=
(
0
,
0
)
\beta = (0,0)
β=(0,0)。
- 第1轮更新
β
1
\beta_1
β1:
残差 r = y − X β = [ 5 , 6 ] T r = y - X\beta = [5,6]^T r=y−Xβ=[5,6]T,
更新量 z = ( 1 × 5 + 3 × 6 ) / 2 = ( 5 + 18 ) / 2 = 11.5 z = (1 \times 5 + 3 \times 6)/2 = (5 + 18)/2 = 11.5 z=(1×5+3×6)/2=(5+18)/2=11.5,
β 1 = S 0.5 ( 11.5 ) = 11.5 − 0.5 = 11 \beta_1 = S_{0.5}(11.5) = 11.5 - 0.5 = 11 β1=S0.5(11.5)=11.5−0.5=11。 - 第1轮更新
β
2
\beta_2
β2:
残差 r = [ 5 − 1 × 11 , 6 − 3 × 11 ] = [ − 6 , − 27 ] r = [5 - 1 \times 11, 6 - 3 \times 11] = [-6, -27] r=[5−1×11,6−3×11]=[−6,−27],
更新量 z = ( 2 × ( − 6 ) + 4 × ( − 27 ) ) / 2 = ( − 12 − 108 ) / 2 = − 60 z = (2 \times (-6) + 4 \times (-27))/2 = (-12 -108)/2 = -60 z=(2×(−6)+4×(−27))/2=(−12−108)/2=−60,
β 2 = S 0.5 ( − 60 ) = − 60 + 0.5 = − 59.5 \beta_2 = S_{0.5}(-60) = -60 + 0.5 = -59.5 β2=S0.5(−60)=−60+0.5=−59.5。
问题:此结果明显过拟合,需调整 λ \lambda λ,展示正则化强度的影响。
2. 深度学习中的优化挑战(60分钟)
2.1 非凸优化景观
示例:简单神经网络损失函数
考虑单隐层网络:
f
(
x
;
W
1
,
W
2
)
=
W
2
σ
(
W
1
x
)
,
损失
L
=
1
2
∥
y
−
f
(
x
)
∥
2
f(x; W_1, W_2) = W_2 \sigma(W_1 x), \quad \text{损失} \ L = \frac{1}{2} \| y - f(x) \|^2
f(x;W1,W2)=W2σ(W1x),损失 L=21∥y−f(x)∥2
- 非凸性来源:权重矩阵 W 1 , W 2 W_1, W_2 W1,W2的乘积结构导致损失函数存在多个局部极小。
2.2 随机梯度下降(SGD)的优势
- 大规模数据:每次迭代随机采样小批量(mini-batch),计算梯度估计:
∇ L B ( θ ) = 1 ∣ B ∣ ∑ i ∈ B ∇ l i ( θ ) \nabla L_B(\theta) = \frac{1}{|B|} \sum_{i \in B} \nabla l_i(\theta) ∇LB(θ)=∣B∣1i∈B∑∇li(θ) - 逃离鞍点:噪声帮助跳出鞍点,探索更优区域。
2.3 自适应优化器:Adam算法
更新规则:
m
t
=
β
1
m
t
−
1
+
(
1
−
β
1
)
g
t
(
一阶矩估计
)
v
t
=
β
2
v
t
−
1
+
(
1
−
β
2
)
g
t
2
(
二阶矩估计
)
m
^
t
=
m
t
1
−
β
1
t
,
v
^
t
=
v
t
1
−
β
2
t
θ
t
+
1
=
θ
t
−
α
m
^
t
v
^
t
+
ϵ
m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \quad (\text{一阶矩估计}) \\ v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \quad (\text{二阶矩估计}) \\ \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} \\ \theta_{t+1} = \theta_t - \alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}
mt=β1mt−1+(1−β1)gt(一阶矩估计)vt=β2vt−1+(1−β2)gt2(二阶矩估计)m^t=1−β1tmt,v^t=1−β2tvtθt+1=θt−αv^t+ϵm^t
代码示例(PyTorch):
import torch
model = torch.nn.Linear(10, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
for epoch in range(100):
for batch in data_loader:
loss = torch.nn.MSELoss()(model(batch.x), batch.y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
3. 稀疏优化与深度学习结合案例(30分钟)
3.1 稀疏神经网络训练
目标:通过L1正则化剪枝冗余连接。
损失函数:
L
(
θ
)
=
交叉熵
+
λ
∑
l
,
i
,
j
∣
W
i
j
(
l
)
∣
L(\theta) = \text{交叉熵} + \lambda \sum_{l,i,j} |W_{ij}^{(l)}|
L(θ)=交叉熵+λl,i,j∑∣Wij(l)∣
训练策略:
- 初始阶段使用较大 λ \lambda λ促进稀疏性。
- 剪枝接近零的权重,微调剩余参数。
3.2 稀疏自编码器示例
网络结构:输入层→瓶颈层(低维稀疏表示)→输出层。
激活函数:ReLU + L1约束,损失函数:
L
=
∥
X
−
X
^
∥
2
2
+
λ
∥
h
∥
1
(
h
为瓶颈层激活值
)
L = \| X - \hat{X} \|_2^2 + \lambda \| h \|_1 \quad (h \text{为瓶颈层激活值})
L=∥X−X^∥22+λ∥h∥1(h为瓶颈层激活值)
应用场景:特征提取、去噪。
4. 课堂实验:对比SGD与Adam在非凸问题中的表现(20分钟)
任务:在MNIST数据集上训练全连接网络,比较两种优化器的收敛速度与测试精度。
实验步骤:
- 代码框架:使用PyTorch定义相同网络结构(2隐层,ReLU)。
- 参数设置:
- SGD:学习率0.1,动量0.9。
- Adam:学习率0.001, β 1 = 0.9 , β 2 = 0.999 \beta_1=0.9, \beta_2=0.999 β1=0.9,β2=0.999。
- 观测指标:
- 训练损失曲线。
- 测试集准确率随时间变化。
典型结果:Adam更快收敛,最终精度相当或略优。
5. 板书设计示例
- LASSO与岭回归解路径对比图:
横轴为 λ \lambda λ,纵轴为 β j \beta_j βj,LASSO路径呈现分段线性,部分系数突变为零。 - 深度学习优化挑战总结表:
挑战类型 表现 解决方案 非凸性 多个局部极小 SGD噪声、模型初始化策略 大规模参数 计算内存不足 分布式训练、梯度压缩 病态曲率 梯度下降震荡 自适应优化器(Adam)
6. 课后练习(选做)
- 理论题:推导LASSO问题的闭式解(当 X X X正交时)。
- 编程题:实现坐标下降法求解LASSO,并在糖尿病数据集上比较不同 λ \lambda λ的稀疏性。
- 分析题:解释批量大小(batch size)如何影响SGD的梯度估计方差和收敛速度。
参考答案:
- 闭式解推导:当
X
T
X
=
I
X^TX = I
XTX=I,LASSO解为:
β j = S λ / n ( 1 n X j T y ) \beta_j = S_{\lambda/n} \left( \frac{1}{n} X_j^T y \right) βj=Sλ/n(n1XjTy) - 编程题示例:
def coordinate_descent(X, y, lambda_, max_iter=100): n, p = X.shape beta = np.zeros(p) for _ in range(max_iter): for j in range(p): r = y - X @ beta + X[:,j] * beta[j] z = np.dot(X[:,j], r) / n beta[j] = np.sign(z) * max(0, abs(z) - lambda_ / n) return beta
- 批量大小分析:
- 小批量:梯度估计方差大,但迭代速度快,适合逃离局部极小。
- 大批量:梯度估计准确,但计算成本高,易陷入尖锐极小。
对比图**:
横轴为
λ
\lambda
λ,纵轴为
β
j
\beta_j
βj,LASSO路径呈现分段线性,部分系数突变为零。
- 深度学习优化挑战总结表:
挑战类型 表现 解决方案 非凸性 多个局部极小 SGD噪声、模型初始化策略 大规模参数 计算内存不足 分布式训练、梯度压缩 病态曲率 梯度下降震荡 自适应优化器(Adam)
6. 课后练习(选做)
- 理论题:推导LASSO问题的闭式解(当 X X X正交时)。
- 编程题:实现坐标下降法求解LASSO,并在糖尿病数据集上比较不同 λ \lambda λ的稀疏性。
- 分析题:解释批量大小(batch size)如何影响SGD的梯度估计方差和收敛速度。
参考答案:
- 闭式解推导:当
X
T
X
=
I
X^TX = I
XTX=I,LASSO解为:
β j = S λ / n ( 1 n X j T y ) \beta_j = S_{\lambda/n} \left( \frac{1}{n} X_j^T y \right) βj=Sλ/n(n1XjTy) - 编程题示例:
def coordinate_descent(X, y, lambda_, max_iter=100): n, p = X.shape beta = np.zeros(p) for _ in range(max_iter): for j in range(p): r = y - X @ beta + X[:,j] * beta[j] z = np.dot(X[:,j], r) / n beta[j] = np.sign(z) * max(0, abs(z) - lambda_ / n) return beta
- 批量大小分析:
- 小批量:梯度估计方差大,但迭代速度快,适合逃离局部极小。
- 大批量:梯度估计准确,但计算成本高,易陷入尖锐极小。
本课时重点:通过稀疏优化与深度学习优化的深度解析,结合理论推导与代码实验,培养学生解决实际复杂优化问题的综合能力,理解现代机器学习核心算法的设计哲学。