1. 项目概述
线性模型是机器学习领域最基础也最重要的模型之一,就像学习数学要从加减乘除开始一样。作为深度学习入门的第一步,手写实现一个线性模型能帮助我们真正理解神经网络底层的运作机制。不同于直接调用现成的框架API,从零开始编写代码会让你对权重初始化、前向传播、损失计算和梯度下降等核心概念有更直观的认识。
我在教学和工程实践中发现,很多初学者虽然能用TensorFlow或PyTorch快速搭建复杂网络,但当被问到"模型参数是如何更新的"这类基础问题时却答不上来。这就是为什么我始终坚持:想要真正掌握深度学习,就必须从最基础的线性回归开始,亲手实现每一个运算步骤。
这个项目我们将使用纯Python和NumPy来实现一个完整的线性回归模型,包括数据生成、模型定义、训练循环和结果可视化。虽然代码量不大,但涵盖了深度学习的核心流程。无论你是刚入门的新手,还是想巩固基础的老兵,这个练习都会让你对神经网络的底层原理有更深刻的理解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心原理与数学基础
2.1 线性模型的定义
线性模型的基本形式可以表示为:
ŷ = w·x + b
其中:
- x是输入特征(在我们的例子中是单个数值)
- w是权重(weight)
- b是偏置(bias)
- ŷ是模型预测值
这个简单的公式实际上定义了输入空间到输出空间的一个线性映射。在二维情况下,它就是我们熟悉的直线方程。模型训练的目标就是找到最优的w和b,使得预测值ŷ尽可能接近真实值y。
2.2 损失函数的选择
为了量化预测值与真实值的差距,我们需要定义一个损失函数(loss function)。对于回归问题,最常用的是均方误差(MSE):
L = 1/N * Σ(ŷ_i - y_i)²
其中N是样本数量。MSE的优点是对大误差给予更大的惩罚(因为平方项),同时数学性质良好(处处可导)。在实际计算中,我们通常会使用批量样本的平均损失,而不是整个数据集,这就是所谓的批量梯度下降。
2.3 梯度下降算法
模型训练的核心是通过梯度下降来最小化损失函数。具体步骤是:
- 初始化参数w和b(通常设为小随机数或零)
- 计算当前参数下损失函数对参数的梯度(偏导数)
- 沿梯度反方向更新参数(因为梯度指向函数增长最快的方向)
- 重复2-3步直到收敛
对于我们的线性模型,梯度计算如下:
∂L/∂w = 2/N * Σ(ŷ_i - y_i)*x_i
∂L/∂b = 2/N * Σ(ŷ_i - y_i)
参数更新公式:
w = w - α * ∂L/∂w
b = b - α * ∂L/∂b
其中α是学习率,控制每次更新的步长。
3. 代码实现详解
3.1 环境准备与数据生成
我们先导入必要的库并生成一些合成数据用于训练:
python复制import numpy as np
import matplotlib.pyplot as plt
# 设置随机种子保证可复现性
np.random.seed(42)
# 生成随机数据
true_w = 2.5 # 真实权重
true_b = 1.0 # 真实偏置
num_samples = 100
# 生成带噪声的线性数据
X = np.random.rand(num_samples, 1)
noise = np.random.randn(num_samples, 1) * 0.1
y = true_w * X + true_b + noise
# 可视化数据
plt.scatter(X, y, s=10)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Generated Data
