02-第一个模型代码

第一个模型:单变量线性回归

一、什么是模型

最简单的模型可以看成一个带参数的数学公式:

预测结果 = w × 输入 + b

其中:

  • w(权重):表示输入对结果的影响程度
  • b(偏置):表示基础值
  • 训练:通过数据不断修改w和b,让预测越来越准
  • 推理:参数不再修改,只让模型预测新数据

二、训练数据

假设真实规律是 y = 2x + 1,我们准备5组训练数据:

输入x正确答案y
01
13
25
37
49

但模型一开始不知道"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微调
    ↓
预训练大模型(可选)

八、四个推荐的小项目

项目输入输出学到的东西
温度转换摄氏温度华氏温度线性关系、常数偏移
商品总价商品数量总价单价、基础费用
房价预测房屋面积房价噪声、异常值、真实数据不完全落在直线上
设备异常分类温度/振动/电流正常或异常从回归过渡到分类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值