第12章:从“多少”到“哪一类”——逻辑回归

📅 2026/7/11 3:07:38
第12章:从“多少”到“哪一类”——逻辑回归
上一章我们干了件事用一条直线预测房价。输入面积输出价格。输入是连续的数输出也是连续的数。这类问题叫“回归”——猜一个数字。但AI面临的大多数问题不是“猜多少”而是“是哪一类”。你手机相册里有一张照片AI要判断“这是猫还是狗”——只有两个答案。你的邮箱收到一封新邮件AI要判断“这是垃圾邮件还是正常邮件”——只有两个答案。医生拿到一张CT片AI要判断“是良性还是恶性”——还是只有两个答案。这类问题叫“分类”——猜一个类别。线性回归能直接用来做分类吗勉强能但效果很糟。我们需要给那条直线外面裹一层“壳”让它输出的不是一个任意数字而是一个“属于某个类别的概率”。这层壳就是逻辑回归。为什么直线不能直接做分类我们先试试用线性回归做分类看看哪里会出问题。假设你有一组数据横轴是“肿瘤大小”纵轴是“良性/恶性”。你把良性标成0恶性标成1。然后你画一条直线 y wx b试图拟合这些点。你会发现一个问题这条直线在大多数点上的预测值既不是0也不是1而是0.3、0.7、1.2这样的数。你本来想要的是“是或否”的干净答案得到的却是“0.73”——这到底算良性还是恶性你可以加一个规则预测值大于0.5就算恶性小于0.5就算良性。这在很多情况下勉强能用但有一个更严重的问题——线性回归对极端值太敏感了。假设你的数据里有一个极端案例——一个特别大的肿瘤明显是恶性。这个点会把整条直线往右上拉。结果大部分良性肿瘤的预测值也被拉高了分界线可能从0.5变成了0.3误判率大增。线性回归追求的是“所有点的误差平方最小”它在乎的是数值精确不是分类正确。你给一个样本预测成0.73误差是0.27预测成1.2误差是0.2。对线性回归来说1.2比0.73“更好”——但这个1.2在分类上没有任何意义它代表的只是“恶性”而已。所以我们需要一个更聪明的办法让模型直接输出概率而不是任意数字。Sigmoid把任意数字“压”成概率逻辑回归的核心就是一层“壳”——一个叫Sigmoid的函数。Sigmoid长得像一条S形的曲线它做的事情极其简单不管你输入什么数——正一亿、负一亿、零、3.14——它都给你一个0到1之间的输出。正无穷大的数输出无限接近1。负无穷大的数输出无限接近0。0输入输出0.5。这个性质刚好对上了概率的需要——概率就是0到1之间的数。逻辑回归的做法是先用线性回归算出 w·x b一个任意实数然后把这个数送进Sigmoid函数“压”成一个0到1之间的概率。写成公式就是p σ(w·x b)其中 σ 就是Sigmoid函数。输出 p 的含义是这个样本属于类别“1”的概率有多大如果 p0.92意思是“有92%的把握它是恶性”。如果 p0.13意思是“只有13%的把握它是恶性——也就是87%的把握它是良性”。你看逻辑回归跟线性回归的差别就是在线性部分外面套了一个Sigmoid。它把“任意实数”翻译成了“概率”——而我们人类天然理解概率。决策边界那条看不见的分割线逻辑回归最终输出的是一个概率。但你得做出判断——“到底是哪一类”最简单的规则是概率大于0.5判为1类小于0.5判为0类。0.5就是那条分界线。在输入空间里这条分界线对应的是 w·x b 0 的那个位置——也就是线性回归原本的那条“直线”。只不过现在这条直线不再直接用来预测数值而是用来划分两个类别的领土。如果输入只有两个特征比如肿瘤大小和患者年龄决策边界就是一条直线。如果有三个特征决策边界就是一个平面。如果有几十几百个特征决策边界就是一个超平面——你看不见它但它依然在那里把你的输入空间一刀劈成两半。这个“一刀劈开”的能力就是逻辑回归作为分类器的本质。它跟感知机第3章那个被XOR问题难住的家伙是近亲——都是线性分类器。区别在于感知机直接输出0或1逻辑回归输出的是概率。概率比硬边界更柔和——它不仅告诉你“是哪个”还告诉你有几分把握。交叉熵这次不用均方误差了线性回归用均方误差来衡量“猜得有多错”。逻辑回归不能用这个。为什么因为Sigmoid让整个模型变成了非线性的。如果你用均方误差作为损失函数你会发现误差曲面有很多坑坑洼洼的局部最小值——梯度下降容易陷在里面很难找到真正好的解。逻辑回归用的是另一个损失函数交叉熵。我们在第10章提过交叉熵的直觉。现在让它正式上场。它的公式写出来是这样的Loss -[y·log§ (1-y)·log(1-p)]其中 y 是真实标签0或1p 是模型预测的概率。这个公式看起来很凶但它的意思特别简单如果真实标签是1损失就是 -log§。当 p 接近1时损失接近0当 p 接近0时损失趋向无穷大。如果真实标签是0损失就是 -log(1-p)。当 p 接近0时损失接近0当 p 接近1时损失趋向无穷大。翻译成人话模型越确信地给出正确答案损失就越小。模型越确信地给出错误答案损失就越大——大到没边。交叉熵不关心“你猜的数值跟真实值差了多少”它只关心“你对你猜的结论有多自信而你的自信对不对”。这是分类问题最自然的损失函数。它把第10章的“概率”和第9章的“梯度下降”接在了一起。从逻辑回归到神经网络只差一步你现在已经理解了逻辑回归的全部骨架。它有一个线性部分 w·x b一个非线性部分 σSigmoid以及一个衡量错误的损失函数交叉熵。现在把“一个线性部分”换成“一连串线性部分中间插着非线性激活函数”——你就得到了神经网络。神经网络就是多层逻辑回归的堆叠。每一层都是一个“线性变换非线性激活”的组合只不过中间的层不输出概率只输出“特征”——也就是更高层次的数据表示。只有最后一层才会套上Sigmoid二分类或者Softmax多分类来输出概率。你从第6章一路走到这里所有的零件都已经在桌上了。函数是骨架。向量和矩阵是数据结构。导数是调整指南。概率是输出语言。线性回归和逻辑回归是第一个完整的工作模型。下一章我们要在逻辑回归的基础上再跨一步支持向量机。它走了一条不同的路——不输出概率而是直接画一条最宽的“马路”来分开两类数据。参考文献3Blue1Brown. (2017). “But what is a neural network? | Chapter 1, Deep Learning”. YouTube.推荐理由这期视频的结尾部分有一个“逻辑回归→神经网络”的极简过渡。它用一张手写数字识别的图展示了从单个神经元到多层网络的自然延伸。虽然我们还没有正式讲神经网络但提前看一眼那个过渡会很有帮助。Nielsen, M. (2015).Neural Networks and Deep Learning. 第1章Using neural nets to recognize handwritten digits。在线免费书籍http://neuralnetworksanddeeplearning.com/推荐理由Nielsen在第1章里用一个极简的神经网络识别手写数字然后把“Sigmoid神经元”作为基本单元来介绍。他对Sigmoid函数的解释——为什么用它、它跟感知机有什么不同——清晰得像在跟你聊天。适合在读完本篇后作为延伸阅读。Goodfellow, I., Bengio, Y., Courville, A. (2016).Deep Learning. MIT Press. 第6章Feedforward Deep Networks。推荐理由第6章从逻辑回归出发推导出前馈神经网络的结构。开篇就点明了一个核心关系逻辑回归是一个没有隐藏层的神经网络。如果你想知道“从逻辑回归到神经网络”在数学上是怎么被严格定义的这一章的前几页值得一看。