204_从回归到分类:Softmax 回归、损失函数与多分类实战

在处理分类任务时,我们不仅需要模型告诉我们"它是哪一类",还需要模型给出"它是每一类的概率有多大"。这就是 Softmax 回归大显身手的地方。

1. Softmax 回归:虽然叫回归,其实是分类

Softmax 回归通过将输出层映射到 (0, 1) 区间内,且保证所有类别的概率之和等于 1

核心公式:

对于输出向量
,Softmax 的计算方式为:

这意味着每个类别的得分都被转化成了概率,得分越高,概率越大。


2. 交叉熵损失函数 (Cross-Entropy Loss)

在分类问题中,我们不再使用均方误差(MSE),而是使用交叉熵。它专门用来衡量两个概率分布(预测分布与真实分布)之间的差异。

  • 逻辑:如果预测正确类的概率趋近于 1,损失就趋近于 0;如果预测概率趋近于 0,损失就会变得无穷大。

3. 代码实战:简洁实现 Fashion-MNIST 分类

文件展示了如何利用 PyTorch 的 nn.Sequential 快速搭建一个单层神经网络,并处理 28x28 像素的图像分类。

Python

复制代码
import torch
from torch import nn
from d2l import torch as d2l

# 1. 搭建网络
# nn.Flatten() 将 28*28 的矩阵展平为 784 维向量
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))

# 2. 初始化参数
def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01) # 以正态分布初始化权重

net.apply(init_weights)

# 3. 定义损失函数与优化器
# 注意:PyTorch 的 CrossEntropyLoss 内部集成了 Softmax 计算,
# 因此网络最后一层不需要再手动加 Softmax 层,直接输出 logits 即可。
loss = nn.CrossEntropyLoss()
trainer = torch.optim.SGD(net.parameters(), lr=0.1)

# 4. 训练模型 (使用 d2l 封装好的训练函数)
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

4. 关键细节解析

为什么使用 nn.Flatten()

输入的 Fashion-MNIST 图片是 的矩阵,但全连接层(Linear)只接收一维向量。Flatten 能够把二维矩阵"拉直",而不破坏数据。

数值稳定性问题

在手动实现 Softmax 时,指数运算

容易导致数值溢出(太大或太小)。PyTorch 的 nn.CrossEntropyLoss 在底层通过数学变形(Log-Sum-Exp 技巧)解决了这个问题,因此直接使用官方损失函数更加稳健


5. 总结:多分类任务的"标准姿势"

  1. 输入处理 :展平图像 (Flatten)。
  2. 输出设计:输出节点数等于类别总数。
  3. 损失选择 :必选 CrossEntropyLoss
  4. 评价标准:使用准确率(Accuracy)而非 Loss 值作为最终衡量模型好坏的指标。

💡 学习小结

Softmax 回归是理解更复杂的深度学习模型(如多层感知机 MLP、卷积神经网络 CNN)的必经之路。掌握了它,你就掌握了计算机"识物"的最基础逻辑。

相关推荐
MobotStone39 分钟前
从“听得懂”到“干得了”:工业大模型落地工厂的三层进化路线
人工智能
wangruofeng1 小时前
GLM-5.3-Flash 发布:追平 Opus 4.8 的智力,1/40 的价格,跑在国产芯片上
人工智能·aigc·chatglm (智谱)
皮皮虾❀3 小时前
钉钉AI服务商×教育行业:AI现代产业学院共建一体化实战——从“高校AI教学缺平台”到“校企共建AI产业学院培养数字化人才
人工智能·钉钉
kobe_OKOK_4 小时前
DRF接口幂等操作
python·django
火山引擎开发者社区4 小时前
【议程来了】火山引擎开发者社区技术日・NVIDIA 独家赞助-成都站
人工智能
三声三视4 小时前
从崩溃日志到 AI 技能:tri-god 蒸馏实战
人工智能·ai·aigc·agent
ZGIAI4 小时前
ZGI Workflow 并发控制:保护下游接口
人工智能·架构
richard_first4 小时前
Transformer 与大语言模型:第9章 LayerNorm 归一化层
人工智能·深度学习·机器学习·transformer
ZGIAI4 小时前
知识库有结果,不等于召回率合格
人工智能·架构
东小西4 小时前
【SAA实战】第 1 篇:ReactAgent 入门——先撸个"会调工具的助手"跑起来
java·人工智能·spring