在深度学习的世界里,不管多么庞大的巨兽(比如千亿参数的大模型),如果你把它拆解到最微小的细胞,你会发现它流淌的依然是逻辑回归(Logistic Regression)的血液。

在面试和技术交流中,关于逻辑回归的考察往往十分基础,却最能看出一个人的底层功底:

核心知识点:

  • 直觉解释: 通过一个 S 型激活函数将线性预测值映射到 0 到 1 之间,将其解释为某事件发生的概率(如“图片中是猫的概率”)。
  • 数学核心: 预测值 a=σ(wTx+b)a = \sigma(w^Tx + b)a=σ(wTx+b),其中激活函数 σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+ez1
  • 常见变体及适用场景: Softmax 回归(逻辑回归的多分类推广);适用于二分类任务,如简单的猫图识别。

如果你面对这几行公式和术语有些模糊,那我们就一层层把这个最底层的“细胞”彻底看透。

第一步:打破“回归”的字面陷阱

很多同学第一眼看到 Logistic Regression(回归),就会陷入痛苦:“回归不是用来预测连续数字的吗?(比如预测明天的气温是 18°C 还是 25°C)。为什么这里却说它适用于‘二分类任务’(比如判断一张图是不是猫)?”

提问: 假设我们现在要玩一个简单的游戏。我给你一个包含 100 种特征的向量 xxx(比如图片的像素、猫耳朵的尖锐度、胡须的数量),让你通过最简单的线性组合算出一个总分:
z=wTx+bz = w^Tx + bz=wTx+b

如果这只动物越像猫,算出来的总分 zzz 就越高(比如 z=10000z = 10000z=10000);如果越像狗,总分就越低(比如 z=−5000z = -5000z=5000)。
现在,我要求你把这个从负无穷到正无穷的粗暴总分 zzz,立刻转换成一个全人类都能看懂的、介于 0% 到 100% 之间的“概率”。你打算怎么切这一刀?直接用一刀切的硬阈值(大于 0 就是猫,小于 0 就是狗)会有什么问题?

解析: 你的大脑一定会给出直觉:一刀切太粗暴了。如果一个样本算出来的 zzz 是 0.01,另一个是 10000,它们都大于 0,但我们对它们的“信心”显然是不一样的。我们希望这个分数的增加,能够平滑地映射成概率的上升。

第二步:数学核心——那条拯救直觉的“S型曲线”

为了实现这种“把任意实数平滑缩放到 0 和 1 之间”的魔法,数学家祭出了 Sigmoid 激活函数

σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+ez1

我们不需要去死记硬背这个公式,让我们来做三道极其简单的算术题,看看它的身体里流淌着怎样的逻辑:

提问:

  1. 场景一: 如果一只动物长得实在太像猫了,网络算出来的总分 zzz 趋近于正无穷大(z→+∞z \to +\inftyz+)。此时,公式分母里的 e−ze^{-z}ez 会变成多少?整个 σ(z)\sigma(z)σ(z) 会变成多少?
  2. 场景二: 如果这只动物完全是条狗,总分 zzz 趋近于负无穷大(z→−∞z \to -\inftyz)。此时,e−ze^{-z}ez 会爆炸式增长,整个 σ(z)\sigma(z)σ(z) 又会趋近于多少?
  3. 场景三: 如果网络彻底迷茫了,觉得一半像猫一半像狗,算出来的总分 z=0z = 0z=0。此时,σ(0)\sigma(0)σ(0) 算出来是多少?

推演闭环:

  • z→+∞z \to +\inftyz+ 时: e−∞=0e^{-\infty} = 0e=0,所以 σ(z)=11+0=1\sigma(z) = \frac{1}{1+0} = 1σ(z)=1+01=1(100% 绝对是猫)。
  • z→−∞z \to -\inftyz 时: e−(−∞)=e+∞=∞e^{-(-\infty)} = e^{+\infty} = \inftye()=e+=,分母无穷大,所以 σ(z)=0\sigma(z) = 0σ(z)=0(0% 绝对不是猫)。
  • z=0z = 0z=0 时: e0=1e^{0} = 1e0=1,所以 σ(0)=11+1=0.5\sigma(0) = \frac{1}{1+1} = 0.5σ(0)=1+11=0.5(50% 抛硬币概率)。

这就是那个 S 型激活函数(Sigmoid)的本质:它像一个极其温柔的转化器,把网络算出来的粗暴得分,整整齐齐地驯化成了人类世界通用的“概率 aaa

第三步:PyTorch 代码落地与多分类演进

在真实的 PyTorch 代码里,这个细胞的生命周期是这样被定义的:

import torch
import torch.nn as nn

class LogisticRegressionModel(nn.Module):
    def __init__(self, input_dim):
        super(LogisticRegressionModel, self).__init__()
        # w^T * x + b 的线性映射
        self.linear = nn.Linear(input_dim, 1) 
        # S型激活函数
        self.sigmoid = nn.Sigmoid()           

    def forward(self, x):
        z = self.linear(x)
        a = self.sigmoid(z) # 吐出 0 到 1 之间的概率
        return a

终极追问: 如果现在我们的任务升级了。我们不想只认猫了,我们想同时在一张图里识别出“猫、狗、猪、鸟”这 4 种动物。
原本的逻辑回归只能回答“是/否”(0 或 1),面对这 4 个并排的互斥选项,我们该怎么升级这个函数,让它吐出的 4 个概率加起来刚好等于 100%?

答案: 这就是变体——Softmax 回归(Softmax Regression)

逻辑回归是 Softmax 在只有两个类别(二分类)时的特例。当面对多分类时,Softmax 会把多个类别的得分同时指数化并进行归一化,确保所有类别的概率和为 1。

总结报告

我们再次用最清晰的逻辑线条,把逻辑回归的本质串联起来:

特征输入 X  ⟹  线性加权得分 z=wTx+b  ⟹  通过 Sigmoid 压缩 a=11+e−z  ⟹  输出 0 1 之间的事件概率\text{特征输入 } X \implies \text{线性加权得分 } z = w^Tx+b \implies \text{通过 Sigmoid 压缩 } a = \frac{1}{1+e^{-z}} \implies \text{输出 0~1 之间的事件概率}特征输入 X线性加权得分 z=wTx+b通过 Sigmoid 压缩 a=1+ez1输出 0 之间的事件概率

不要觉得它简单。深度学习的本质,就是无数个逻辑回归的叠加。 当你把几百万个这样的逻辑回归细胞并排堆叠(增加宽度)、前后串联(增加深度)、加上跳跃连接(ResNet)时,它就会化身为吞噬一切数据的超级人工智能。


欢迎在评论区留下你的思考: 逻辑回归在面对线性不可分的数据(比如著名的异或问题 XOR)时会失效,深度学习又是通过引入什么机制来打破这个魔咒的?

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐