在深度学习的知识体系中,线性回归与 Softmax 回归是入门级的核心模型。线性回归作为回归任务的基础框架,搭建了 “输入特征到连续输出” 的映射逻辑;Softmax 回归则基于线性回归扩展,成为解决多分类问题的经典方案。这两种模型不仅是后续复杂神经网络的基石,更蕴含了深度学习中 “建模 - 损失 - 优化” 的核心思想。本文将从原理、实践差异到核心共性,全面解析这两大模型的技术细节。


一、线性回归:回归任务的 “奠基模型”


线性回归是描述输入特征与连续输出值之间线性关系的模型,广泛应用于房价预测、销量估计等需预测具体数值的场景。其核心逻辑是通过学习特征权重与偏置,构建最优的线性拟合函数。


1. 核心原理:从 “房价预测” 理解线性关系

以房价预测为例,房屋的卧室数量、车库面积、所在学区等特征(输入X)与房价(输出y)存在潜在的线性关联。线性回归通过以下公式建模这种关系:

从神经网络视角看,线性回归本质是单层无激活函数的神经网络:输入层接收特征x1,x2,......,xd,输出层通过权重w1,w2,......,wd与偏置b的线性组合直接输出预测值y,无隐藏层参与。

2. 训练核心:损失函数与优化算法

模型训练的目标是找到最优参数(w,b),使预测值与真实值的差异最小化,这需要通过 “损失函数定义误差” 和 “优化算法更新参数” 两步实现。

损失函数:量化预测误差

回归任务中最常用均方损失(L2 损失),计算公式为:

其中n为样本数量,为真实值,为预测值。均方损失通过平方项放大较大误差,迫使模型优先修正偏差显著的预测。

由于无法直接求解损失函数的最小值,深度学习中普遍采用梯度下降法迭代寻优,核心逻辑是 “沿梯度反方向更新参数以减小损失”。
• 梯度的含义:由损失函数对所有参数的偏导数组成的向量,指示函数值增长最快的方向,其反方向即为损失减小最快的方向。
• 基本流程:初始化参数→计算当前梯度→沿梯度反方向更新参数→重复迭代直至收敛。
• 关键超参数:
◦ 学习率:控制每次参数更新的步长。过大易导致震荡不收敛,过小则训练效率低下。
◦ 批量大小:每次计算梯度使用的样本数量。过小难以利用并行计算资源,过大则浪费资源且泛化性下降,小批量随机梯度下降(Mini-batch SGD) 是深度学习的默认选择。

二、Softmax 回归:多分类任务的 “入门方案”

当任务从 “预测连续值” 转为 “预测离散类别”(如手写数字识别、图像分类)时,线性回归不再适用,Softmax 回归应运而生。它基于线性回归扩展,专门解决多分类问题。

1. 回归与分类的核心差异

两类任务的本质区别决定了模型设计的不同,具体对比如下:

2. 核心原理:从 “置信度” 到 “概率分布”

Softmax 回归的核心是通过 “线性变换 + Softmax 运算” 将输入特征映射为各类别的概率分布,具体流程如下:

1. 线性变换:

与线性回归类似,对输入特征进行线性组合,得到k个未归一化的置信度(k为类别数):
其中为第i类的权重向量,为偏置。

2. Softmax 运算:

将置信度转换为符合概率性质(非负、和为 1)的预测概率:

例如,置信度[1,-1,2]经过 Softmax 运算后得到概率[0.26,0.04,0.7],表示样本属于第 3 类的概率最高。

从神经网络视角看,Softmax 回归是单层全连接神经网络:输入层接收特征,输出层包含k个神经元(对应k个类别),每个输出神经元的计算均依赖所有输入特征。

3. 训练核心:交叉熵损失的必要性

Softmax 回归的损失函数需适配 “概率分布匹配” 的需求,传统的均方损失存在梯度消失问题,因此普遍采用交叉熵损失
交叉熵损失:量化概率分布差异
交叉熵损失用于衡量模型预测概率分布q与真实分布p的差异,计算公式为:

在多分类任务中,真实分布p通常为 “one-hot 编码”(如样本属于第 3 类时,p=0,0,1,0,0,...,0),此时损失函数简化为:即只需关注真实类别对应的预测概率的对数负值。

为何不用均方损失?
均方损失会导致 Softmax 输出的梯度与成正比,当预测概率接近 0 或 1 时,梯度会变得极小(梯度消失),导致模型难以收敛;而交叉熵损失的梯度为,梯度大小与概率偏差直接相关,能有效驱动参数更新。

三、线性回归与 Softmax 回归的核心关联与差异

1. 核心关联

  • 共享 “线性基础”:两者均以线性变换(Xw + b)为核心计算模块,本质都是对输入特征的线性建模。
  • 统一训练框架:均遵循 “损失函数定义误差→梯度下降法优化参数” 的训练逻辑,关键超参数(学习率、批量大小)的调优思路一致。
  • 同为神经网络基础:二者均可视为单层神经网络,是构建深层网络的基本单元(如深层网络的输出层常采用 Softmax 回归结构)。

2. 关键差异

四、实践落地:关键注意事项与代码示例

1. 线性回归实践:房价预测简化示例

使用 PyTorch 实现线性回归,以 “卧室数量、车库面积” 预测房价:

import torch
import torch.nn as nn
import torch.optim as optim

# 1. 数据准备(特征:卧室数、车库面积;标签:房价)
X = torch.tensor([[3, 2], [4, 2], [5, 3]], dtype=torch.float32)  # 3个样本,2个特征
y = torch.tensor([150, 180, 220], dtype=torch.float32).reshape(-1, 1)  # 房价(万元)

# 2. 定义模型(线性回归=单层线性层)
class LinearRegression(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(2, 1)  # 2输入特征,1输出值
    
    def forward(self, x):
        return self.linear(x)

model = LinearRegression()

# 3. 定义损失函数与优化器
criterion = nn.MSELoss()  # 均方损失
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降

# 4. 训练
for epoch in range(1000):
    # 前向传播
    y_pred = model(X)
    loss = criterion(y_pred, y)
    
    # 反向传播与参数更新
    optimizer.zero_grad()  # 清空梯度
    loss.backward()  # 计算梯度
    optimizer.step()  # 更新参数

# 5. 预测
new_house = torch.tensor([[4, 2.5]], dtype=torch.float32)
print(f"预测房价:{model(new_house).item():.2f}万元")

2. Softmax 回归实践:MNIST 数字识别简化示例

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# 1. 数据准备(MNIST:28×28灰度图,10类数字)
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))  # 数据归一化
])
train_data = datasets.MNIST('./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_data, batch_size=64, shuffle=True)

# 2. 定义模型(Softmax回归=线性层+Softmax,PyTorch中交叉熵损失已包含Softmax)
class SoftmaxRegression(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(28*28, 10)  # 28×28输入特征,10类输出
    
    def forward(self, x):
        x = x.view(-1, 28*28)  # 展平图像为一维向量
        return self.linear(x)  # 输出未归一化的置信度

model = SoftmaxRegression()

# 3. 定义损失函数与优化器
criterion = nn.CrossEntropyLoss()  # 交叉熵损失(含Softmax)
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# 4. 训练
for epoch in range(5):
    for batch_idx, (data, target) in enumerate(train_loader):
        # 前向传播
        output = model(data)
        loss = criterion(output, target)
        
        # 反向传播与更新
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        if batch_idx % 100 == 0:
            print(f"Epoch {epoch}, Batch {batch_idx}, Loss: {loss.item():.4f}")

五、总结:从基础模型看深度学习核心思想

线性回归与 Softmax 回归虽简单,却浓缩了深度学习的三大核心思想:

1. 建模思想:

通过可学习的参数(权重、偏置)构建输入与输出的映射关系,实现对数据规律的拟合。

2. 优化思想:

以损失函数量化误差,通过梯度下降法迭代优化参数,寻找最优解。

3. 扩展思想:

从单一任务(回归)扩展到复杂任务(分类),核心是对输出层进行适配改造(Softmax 运算)和损失函数优化(交叉熵损失)。
这两种模型是深度学习的 “入门钥匙”—— 掌握线性回归,可理解回归任务的建模逻辑;掌握 Softmax 回归,能打通多分类任务的入门路径。在此基础上,后续的深层网络(如 CNN、DNN)本质是通过增加隐藏层和激活函数,实现更复杂的非线性映射,但其 “损失 - 优化” 的核心框架始终不变。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐