别急 别急...

文章背景图

哈哈

2026-09-28
4
- 字
- 分钟
|

从梯度下降到神经网络:一次简单的机器学习实验

机器学习的目标,是通过数据学习模型参数,使预测结果尽可能接近真实值。

本文以线性回归为例,介绍损失函数、梯度下降和 Python 实现。


  1. 一个简单的问题

给定数据:

x| y
1| 3
2| 5
3| 7
4| 9
5| 11

可以看出:

y=2x+1

模型为:

\hat y=wx+b

目标是学习出 w=2、b=1。

1.1 损失函数

使用均方误差衡量预测效果:

L(w,b)= \frac{1}{n} \sum_{i=1}^{n} (wx_i+b-y_i)^2

预测越接近真实值,损失越小。


  1. 梯度下降

我们希望找到使损失最小的参数:

(w^,b^)=\arg\min_{w,b}L(w,b)

梯度下降的更新公式为:

\theta_t-\eta\nabla L(\theta_t)

其中 \eta 是学习率。

梯度为:

\frac{2}{n} \sum_{i=1}^{n} x_i(wx_i+b-y_i)
\frac{2}{n} \sum_{i=1}^{n} (wx_i+b-y_i)

然后更新:

w\leftarrow w-\eta\frac{\partial L}{\partial w}
b\leftarrow b-\eta\frac{\partial L}{\partial b}

  1. Python 实现

import numpy as np

x = np.array([1, 2, 3, 4, 5], dtype=float)
y = np.array([3, 5, 7, 9, 11], dtype=float)

w, b = 0.0, 0.0
learning_rate = 0.01

for epoch in range(1000):
y_pred = w * x + b
error = y_pred - y

loss = np.mean(error ** 2)
dw = 2 * np.mean(x * error)
db = 2 * np.mean(error)

w -= learning_rate * dw
b -= learning_rate * db

print("w =", w)
print("b =", b)

结果会逐渐接近:

w ≈ 2
b ≈ 1


  1. PyTorch 实现

import torch

x = torch.tensor([[1.0], [2.0], [3.0], [4.0], [5.0]])
y = torch.tensor([[3.0], [5.0], [7.0], [9.0], [11.0]])

model = torch.nn.Linear(1, 1)
loss_fn = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

for _ in range(1000):
prediction = model(x)
loss = loss_fn(prediction, y)

optimizer.zero_grad()
loss.backward()
optimizer.step()

"loss.backward()" 会自动计算梯度,这个过程叫自动微分。


  1. 神经网络

多维线性模型可以写成:

\hat{\mathbf y}=X\mathbf w+b

加入非线性函数后,就得到简单的神经网络:

\mathbf h=\sigma(W_1\mathbf x+\mathbf b_1)
\mathbf y=W_2\mathbf h+\mathbf b_2

常用激活函数 ReLU 为:

\operatorname{ReLU}(x)=\max(0,x)

  1. Transformer 注意力

Transformer 的注意力公式为:

\operatorname{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right)V

  1. 总结

从线性回归到神经网络,训练过程都可以概括为:

  1. 输入数据;
  2. 前向传播;
  3. 计算损失;
  4. 反向传播;
  5. 更新参数。

核心思想是:

\text{机器学习训练}

博客 Markdown 渲染测试完成。

上一篇 没有了
下一篇 没有了
评论交流

文章目录