MLP 实战:用手工数据拟合直线 y = mx + b
前面我们讲到 MLP 的本质就是“函数建模”,即通过调整参数(权重 w、偏置 b)去逼近输入与输出之间的关系。
那么问题来了:如果我们给出一组很简单的线性数据,比如一条直线 y = mx + b,MLP 能不能自己学会这条直线呢?
答案是 可以。这就是线性回归在神经网络框架中的最小演示。
二、实验设计
• 我们不再用函数公式生成 y,而是 手工定义一组数字对 (x, y)。
• 输入 x = [0,1,2,3,4]
• 输出 y = [1,3,5,7,9]
• 这些点近似符合 y = 2x + 1。
• 用一个最简单的 单层 MLP(nn.Linear(1,1)) 来拟合。
• 优化器:SGD,损失函数:均方误差(MSE)。
• 训练结束后,读取模型的权重、偏置,看是否接近 m=2, b=1。
# -*- coding: utf-8 -*-
# 用手工数据训练 y = mx + b,并读出 m 和 b
import torch
import torch.nn as nn
import torch.optim as optim
# 1) 手工定义数据
x_list = [0., 1., 2., 3., 4.]
y_list = [1., 3., 5., 7., 9.]
X = torch.tensor(x_list, dtype=torch.float32).unsqueeze(1) # [N,1]
y = torch.tensor(y_list, dtype=torch.float32).unsqueeze(1) # [N,1]
# 2) 定义模型:单层线性层,相当于 y = w*x + b
model = nn.Linear(1, 1)
# 3) 损失函数 & 优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.05)
# 4) 训练过程
for epoch in range(2000):
optimizer.zero_grad()
y_pred = model(X)
loss = criterion(y_pred, y)
loss.backward()
optimizer.step()
if (epoch+1) % 400 == 0:
w = model.weight.item()
b = model.bias.item()
print(f"Epoch {epoch+1:4d} | loss={loss.item():.6f} | w={w:.4f} | b={b:.4f}")
# 5) 最终结果
w = model.weight.item()
b = model.bias.item()
print("\n===> 学到的参数:")
print(f"w (斜率 m) = {w:.6f}")
print(f"b (截距 b) = {b:.6f}")
# 6) 测试预测
with torch.no_grad():
test_x = torch.tensor([[6.0]])
pred = model(test_x)
print(f"\n当 x=6.0 时,预测 y_hat={pred.item():.4f}")
总结与对应关系
1. 模型定义:nn.Linear(1,1) 就是一个简单的函数机器,只有一个权重 w 和一个偏置 b。
2. 损失函数:用 MSE 衡量预测值与真实值的差距。
3. 训练过程:通过梯度下降不断调整 w, b。
4. 结果:模型学会了最优的直线,参数接近我们手工定义的真实关系。
🌱 一句话总结
MLP 不仅能解决复杂的非线性分类问题,在最简单的情况下,它也能像传统线性回归一样,学会一条直线的函数关系。
小结
通过本章的代码实验,我们验证了:即使是最简单的一条直线关系 y = mx + b,也可以通过一个 单层线性网络(Linear(1,1)) 来完成建模。
• 我们在数据中人为指定了已知的输入与输出关系(线性映射)。
• 计算机在训练过程中,并不知道这条直线的斜率和截距是多少,它只能通过 数据模式的学习 来逐步“猜测”合适的参数。
• 在反复的迭代中,权重(对应斜率)和偏置(对应截距) 不断被调整,使得预测值与真实值越来越接近。
这就是训练的核心任务:
👉 让模型参数通过数据驱动不断逼近最优解,使得模型的预测结果能够匹配实际观测数据。
这就引出了一个关键问题:
👉 如果我们遇到的不是直线,而是更加复杂的曲线关系,单层的线性模型还能胜任吗?
答案是否定的。
为了解决这种情况,我们需要引入:
• 多层感知机(MLP)的非线性建模能力,
• 激活函数的作用,让决策边界可以弯曲甚至分段,
• 以及 更复杂的优化方法 来帮助模型收敛。
✨ 所以下一章,我们将从“优化器与非线性模型”开始,探索如何让 MLP 在面对复杂数据时依然能够找到合理的规律。

浙公网安备 33010602011771号