重学逻辑回归 (LR) —— 从极大似然到 FTRL 工业实践
前言
在深度学习满天飞的今天,逻辑回归(Logistic Regression, LR)听起来像是一个上个世纪的老古董。很多人觉得它“太简单”、“只是个 baseline”。
但当你真正深入工业界,特别是推荐系统(CTR预估)和广告算法领域,你会发现 LR 依然是不死的灵魂。它不仅是无数复杂模型的基石,更蕴含着机器学习最底层的数学美感和工程智慧。
最近我在重刷基础和实习项目的过程中,对 LR 有了全新的认识。今天这篇文章,不讲 sklearn.fit(),我们从最底层的数学推导开始,聊聊 MSE vs BCE 的爱恨情仇、极大似然的物理意义、偏置项的几何本质,最后硬核拆解工业界大杀器 FTRL。
一、 灵魂拷问:分类问题为什么不用 MSE?
面试官最爱问:“为什么逻辑回归的损失函数是交叉熵(BCE),而不是均方误差(MSE)?”
很多人只能回答:“因为 MSE 效果不好。” 但究竟哪里不好?
1.1 从梯度的角度看“学不动”
假设我们的激活函数是 Sigmoid:。
如果使用 MSE (),对权重 求导,根据链式法则:
致命的问题就在这个 上。
想象一下,真实标签 ,但模型预测错得离谱,输出 。此时误差 很大,我们要大力修正参数对吧?
然而,当 时,Sigmoid 的导数 趋近于 0。
结论:你的模型虽然错得离谱,但梯度却是 0。模型“躺平”了,根本更新不动。这就是梯度消失。
1.2 从几何的角度看“非凸”
MSE + Sigmoid 组合出来的损失函数曲面,是非凸的(Non-Convex)。它像连绵起伏的山峦,充满了局部最优解(Local Minima)和平坦区(Plateau) 。梯度下降很容易陷在半山腰出不来。
1.3 BCE 的救赎
反观二元交叉熵(BCE):。
它的梯度推导极其优雅,对数 完美抵消了 Sigmoid 的指数项:
没有了 的阻碍!你错得越离谱( 越大),梯度就越大,回传的力度就越猛。
这就是为什么在分类问题上,BCE 是绝对的统治者——它把 Loss 曲面变成了一个光滑的凸函数(Convex)大碗,让你能一路滚到全局最优的谷底。
二、 溯源:为什么是交叉熵?
BCE 不是凭空捏造的,它的数学根基是极大似然估计(Maximum Likelihood Estimation, MLE) 。
直觉理解:
既然我们在训练集中观测到了样本 发生了,那么我们相信,最优的模型参数 ,应该让**“这组数据出现的概率”最大化**。
对于二分类,样本服从伯努利分布。似然函数为:
为了方便计算(变连乘为连加)和优化(变最大化为最小化),我们做如下操作:
- 取对数:
- 取负号:Max Likelihood Min Negative Log-Likelihood
一顿操作猛如虎,推导出来的公式,正是交叉熵。所以,用 BCE 本质上就是在做极大似然估计。
三、 细节魔鬼:为什么要计算偏置 (Bias) 的梯度?
在写代码实现反向传播时,我们会有两行代码:
Python
dl_dw = (prediction - y) * x # 权重的梯度
dl_db = (prediction - y) # 偏置的梯度
既然 dl_db 只是纯误差,为什么不能忽略它?这就涉及到了线性代数和几何变换。
- 几何自由度:如果不更新 (即 ),决策超平面 被强制锁死在坐标原点。模型只能旋转,不能平移。如果数据分布远离原点,模型将无法正确切分。
- Sigmoid 的平移: 决定了 Sigmoid 函数的中心点位置。计算 的梯度,就是让激活函数根据数据分布左右平移,寻找最佳的阈值点。
- 零输入陷阱:如果遇到稀疏特征,输入 ,此时 的梯度也是 0(学不动)。只有 依然能收到误差信号并更新,保证模型具有基础的判别能力(Base Rate)。
四、 演进之路:从 LR 到 Deep Learning
LR 很强,但它有一个致命弱点:线性坍塌。
如果不加激活函数,多层网络 等价于单层 。
为了解决非线性问题,工业界走了两条路:
-
向深走 (Deep) :引入 Sigmoid/ReLU。非线性激活函数阻断了线性合并,让每一层网络都能对特征空间进行扭曲。没有激活函数,深度学习就是伪命题。
-
向宽走 (Divide & Conquer) :比如阿里的 MLR (LS-PLM) 。既然一个 LR 画不出曲线,我就用 个 LR 来拼。
- 分片 (Softmax) :决定样本属于哪个区域。
- 拟合 (Sigmoid) :区域内用 LR 拟合。
- 这就是“三个臭皮匠顶个诸葛亮”的工程实践。
五、 工业级大杀器:FTRL (Follow The Regularized Leader)
在动辄百亿特征的推荐系统中,普通的 SGD(随机梯度下降)已经不够看了。我们需要模型既准,又稀疏(省内存),还适应流式数据。
Google 在 2013 年提出的 FTRL 至今仍是工程标杆。它不是存权重 ,而是维护两个“账本”:
- (强弱账本) :累积梯度。反映该特征在历史上的整体方向。
- (稳定账本) :累积梯度平方和。反映该特征的抖动程度。
FTRL 的核心魔法公式:
这里蕴含了三个设计哲学:
-
L1 正则的硬截断:
if |z| < lambda1, w=0。如果一个特征累积的梯度不够强(没啥用),直接把权重置为 0。这带来了极高的稀疏性,节省了海量内存。 -
自适应学习率:分母中包含 。
- 热门特征(出现多, 大):学习率自动降低,防止震荡。
- 冷门特征(出现少, 小):学习率自动调高,快速学习。
-
Lazy Evaluation:每次只更新非零特征对应的 和 ,计算时现算 ,用完即焚。
结语
逻辑回归看起来简单,但它串联起了概率论(MLE)、凸优化(BCE Convexity)、深度学习基础(Activation Function)以及大规模工程实践(FTRL)。