深度学习中的优化器之FTRL(Follow-The-Regularized-Leader)算法原理与实现细节
题目描述
FTRL是一种在线优化算法,广泛应用于大规模机器学习场景(如推荐系统、CTR预估)。其核心思想是:在每次更新模型参数时,不仅考虑当前梯度的方向,还通过正则化项控制参数的变化幅度,避免过于激进的更新。题目要求详细解释FTRL的数学原理、与传统优化器(如AdaGrad)的区别,以及如何通过近端梯度下降实现稀疏解。
解题过程
-
问题背景
在线学习场景中,数据以流式到达,模型需实时更新。传统批量优化(如SGD)需多次遍历数据,而FTRL每收到一个样本即可更新参数,同时通过正则化(如L1)产生稀疏模型(部分权重为0),提升计算效率。 -
基础概念:FTRL的损失函数形式
设第\(t\)步的损失函数为\(f_t(w)\),FTRL的目标是最小化累积损失加正则项:
\[ w_{t+1} = \arg\min_{w} \left( \sum_{s=1}^{t} f_s(w) + \psi(w) \right) \]
其中\(\psi(w)\)是正则化项(如L1正则\(\lambda \|w\|_1\))。
- 关键步骤:线性化近似与正则化
- 将累积损失\(\sum f_s(w)\)在当前参数\(w_t\)处一阶泰勒展开,近似为:
\[ \sum_{s=1}^{t} \left[ f_s(w_t) + \nabla f_s(w_t)^\top (w - w_t) \right] + \psi(w) \]
- 忽略常数项,问题简化为:
\[ w_{t+1} = \arg\min_{w} \left( g_{1:t}^\top w + \psi(w) + \frac{1}{2} \sum_{s=1}^{t} \sigma_s \|w - w_s\|_2^2 \right) \]
其中$ g_{1:t} = \sum_{s=1}^{t} \nabla f_s(w_s) $是累积梯度,$ \sigma_s $是控制学习率的序列。
- 与AdaGrad的结合:自适应学习率
- 令\(\sigma_s = \frac{1}{\eta_s} - \frac{1}{\eta_{s-1}}\),其中\(\eta_s = \frac{\alpha}{\beta + \sqrt{\sum_{i=1}^{s} g_i^2}}\)(AdaGrad风格的学习率)。
- 代入后,问题转化为:
\[ w_{t+1} = \arg\min_{w} \left( g_{1:t}^\top w + \psi(w) + \frac{1}{2\eta_t} \|w\|_2^2 \right) \]
此形式称为"FTRL-Proximal",可高效求解。
- 稀疏性实现:L1正则化的近端算子
- 当\(\psi(w) = \lambda \|w\|_1\)时,闭式解可通过软阈值函数得到:
\[ w_{t+1,i} = \begin{cases} 0 & \text{if } |z_{t,i}| \leq \lambda \\ -\eta_t (z_{t,i} - \lambda \cdot \text{sign}(z_{t,i})) & \text{otherwise} \end{cases} \]
其中$ z_t = g_{1:t} - \sum_{s=1}^{t} \sigma_s w_s $为累积梯度修正项。稀疏性由L1正则的阈值控制。
-
算法伪代码
输入:学习率α, 正则参数λ, 参数β 初始化:z=0, n=0 (梯度平方和) for t=1 to T do 接收样本(x_t, y_t),计算梯度g_t = ∇f_t(w_t) 更新n_i = n_i + g_{t,i}^2 (每个维度单独更新) 计算学习率η_{t,i} = α / (β + √n_i) 更新z_i = z_i + g_{t,i} - (√n_i - √n_{i,old})/α * w_{t,i} 更新参数:w_{t+1,i} = 0 if |z_i|≤λ else -(η_{t,i}) * (z_i - λ·sign(z_i)) end for -
与AdaGrad的对比
- AdaGrad直接更新:\(w_{t+1} = w_t - \eta_t g_t\),缺乏显式正则化,稀疏性差。
- FTRL通过正则项和近端投影,显式控制参数幅度,更适合高维稀疏数据。
总结
FTRL通过结合自适应学习率与近端梯度下降,平衡了模型精度与稀疏性,成为大规模在线学习的核心算法。其优势在于:① 每步更新仅需当前样本;② L1正则化自动特征选择;③ 学习率自适应调整,稳定性强。