第一个模型:单变量线性回归
一、什么是模型
最简单的模型可以看成一个带参数的数学公式:
预测结果 = w × 输入 + b
其中:
- w(权重):表示输入对结果的影响程度
- b(偏置):表示基础值
- 训练:通过数据不断修改w和b,让预测越来越准
- 推理:参数不再修改,只让模型预测新数据
二、训练数据
假设真实规律是 y = 2x + 1,我们准备5组训练数据:
| 输入x | 正确答案y |
|---|---|
| 0 | 1 |
| 1 | 3 |
| 2 | 5 |
| 3 | 7 |
| 4 | 9 |
但模型一开始不知道"2"和"1",它从下面开始:
w = 0
b = 0
训练的目的就是让模型通过数据,逐渐学出 w=2、b=1。
三、完整训练代码
这份代码不需要PyTorch、TensorFlow,也不需要GPU,只要有Python即可。
# 准备模型的输入数据
xs = [0.0, 1.0, 2.0, 3.0, 4.0]
# 准备每个输入对应的正确答案
ys = [1.0, 3.0, 5.0, 7.0, 9.0]
# 初始化模型的权重
w = 0.0
# 初始化模型的偏置
b = 0.0
# 设置学习率,控制每次修改参数的幅度
learning_rate = 0.01
# 计算训练样本数量
sample_count = len(xs)
# 重复训练五千次
for epoch in range(5000):
# 使用当前权重和偏置计算所有预测值
predictions = [w * x + b for x in xs]
# 计算损失函数对权重w的梯度
gradient_w = sum(
2 * (prediction - answer) * x
for x, answer, prediction in zip(xs, ys, predictions)
) / sample_count
# 计算损失函数对偏置b的梯度
gradient_b = sum(
2 * (prediction - answer)
for answer, prediction in zip(ys, predictions)
) / sample_count
# 沿着降低损失的方向更新权重
w = w - learning_rate * gradient_w
# 沿着降低损失的方向更新偏置
b = b - learning_rate * gradient_b
# 计算训练完成后的平均损失
loss = sum(
(w * x + b - answer) ** 2
for x, answer in zip(xs, ys)
) / sample_count
# 使用训练完成的模型预测x等于5时的结果
predicted_value = w * 5 + b
# 输出训练得到的权重
print("学习到的权重w:", w)
# 输出训练得到的偏置
print("学习到的偏置b:", b)
# 输出最终损失
print("最终损失:", loss)
# 输出新数据的预测结果
print("输入5时的预测结果:", predicted_value)
四、实际运行结果
代码已执行,得到:
学习到的权重w: 2.000000
学习到的偏置b: 1.000000
最终损失: 0.000000000000
输入5时的预测结果: 11.000000
说明模型成功从训练数据中找到了规律:
y = 2x + 1
所以输入5时,模型预测:2 × 5 + 1 = 11
五、训练过程中发生了什么
每轮训练主要执行四步:
1. 前向计算
模型先根据当前参数进行预测:
预测值 = w × x + b
2. 计算损失
使用均方误差衡量预测错误:
损失 = 所有(预测值 - 正确答案)²的平均值
预测越准确,损失越接近0。
之所以要平方:
- 避免正误差和负误差互相抵消
- 对较大的错误给予更重惩罚
- 便于计算梯度
3. 计算梯度
梯度告诉模型:
- w应该往哪个方向修改?
- b应该往哪个方向修改?
- 修改多少才能降低错误?
可以把梯度理解成山坡的方向。如果损失是一座山,训练就是往山下走,目标是找到最低点。
4. 更新参数
更新公式是:
新参数 = 旧参数 - 学习率 × 梯度
学习率决定每一步走多远:
- 太大:可能跨过最低点,来回震荡甚至训练失败
- 太小:训练非常慢
- 合适:稳定接近最低点
六、需要掌握的五个核心概念
| 概念 | 说明 |
|---|---|
| 数据 | 特征(提供给模型的信息)+ 标签(模型要学习的正确答案) |
| 模型 | 一个包含可训练参数的函数 |
| 损失函数 | 判断模型"错得有多严重" |
| 优化器 | 根据梯度修改模型参数 |
| 训练与推理 | 训练=改参数,推理=只预测不改参数 |
七、建议的学习路线
纯Python线性回归
↓
NumPy多变量回归
↓
逻辑回归分类
↓
手写两层神经网络
↓
PyTorch重新实现
↓
微型Transformer文本生成
↓
开源模型推理与RAG
↓
LoRA微调
↓
预训练大模型(可选)
八、四个推荐的小项目
| 项目 | 输入 | 输出 | 学到的东西 |
|---|---|---|---|
| 温度转换 | 摄氏温度 | 华氏温度 | 线性关系、常数偏移 |
| 商品总价 | 商品数量 | 总价 | 单价、基础费用 |
| 房价预测 | 房屋面积 | 房价 | 噪声、异常值、真实数据不完全落在直线上 |
| 设备异常分类 | 温度/振动/电流 | 正常或异常 | 从回归过渡到分类 |

1万+

被折叠的 条评论
为什么被折叠?



