侧边栏壁纸
博主头像
ZHD的小窝博主等级

行动起来,活在当下

  • 累计撰写 81 篇文章
  • 累计创建 53 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

AI大模型学习之路(四)

江南的风
2025-05-19 / 0 评论 / 0 点赞 / 11 阅读 / 7168 字 / 正在检测是否收录...

阶段1:基础知识储备

第三课:微积分基础


学习目标

  1. 理解导数与偏导数的定义及其几何意义。
  2. 掌握链式法则在神经网络反向传播中的应用。
  3. 学会梯度下降法的原理与实现。
  4. 实战:用梯度下降法优化线性回归模型。

1. 导数与偏导数

(1) 导数(Derivative)

  • 定义:函数在某一点的瞬时变化率
    f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}
  • 几何意义:曲线在该点的切线斜率。
    示例f(x) = x^2 的导数为 f'(x) = 2x

(2) 偏导数(Partial Derivative)

  • 定义:多元函数对某一变量的导数(其他变量视为常数)。
    \frac{\partial f}{\partial x_i} = \lim_{h \to 0} \frac{f(x_1, \dots, x_i + h, \dots, x_n) - f(x_1, \dots, x_n)}{h}
  • 示例f(x, y) = x^2 + 3xy 的偏导数:
    \frac{\partial f}{\partial x} = 2x + 3y, \quad \frac{\partial f}{\partial y} = 3x

2. 链式法则与反向传播

(1) 链式法则(Chain Rule)

  • 单变量函数:若 y = f(g(x)),则
    \frac{dy}{dx} = f'(g(x)) \cdot g'(x)
  • 多变量函数:若 z = f(x, y), x = u(t), y = v(t),则
    \frac{dz}{dt} = \frac{\partial z}{\partial x} \frac{dx}{dt} + \frac{\partial z}{\partial y} \frac{dy}{dt}

(2) 反向传播(Backpropagation)

  • 核心思想:通过链式法则从输出层向输入层逐层计算梯度。
    神经网络示例
    设损失函数 L = (y_{\text{pred}} - y_{\text{true}})^2,权重 w 的梯度:
    \frac{\partial L}{\partial w} = 2(y_{\text{pred}} - y_{\text{true}}) \cdot \frac{\partial y_{\text{pred}}}{\partial w}

(3) 参考

https://log.new2wen.com/archives/lianshifaze-fanxiangchuanbo
https://log.new2wen.com/archives/JD-SJWL-ZD%20LSFZ-FXCB


3. 梯度下降法

(1) 梯度(Gradient)

  • 定义:多元函数所有偏导数组成的向量,指向函数增长最快的方向。
    \nabla f = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \dots, \frac{\partial f}{\partial x_n} \right)

(2) 梯度下降更新规则

  • 公式:沿负梯度方向更新参数以最小化损失函数。

    w_{t+1} = w_t - \eta \nabla f(w_t)
    • \eta:学习率(learning rate)。
      示例:优化 f(w) = w^2,初始 w=3\eta=0.1
    w_1 = 3 - 0.1 \times 6 = 2.4, \quad w_2 = 2.4 - 0.1 \times 4.8 = 1.92, \quad \dots

4. 实战:用梯度下降优化线性回归

(1) 问题定义

  • 模型y = wx + b
  • 损失函数:均方误差(MSE)
    L = \frac{1}{N} \sum_{i=1}^N (y_i - (wx_i + b))^2

(2) Python实现

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
np.random.seed(42)
X = np.linspace(0, 10, 100)
y = 2 * X + 3 + np.random.randn(100) * 2  # 真实关系:y = 2x + 3 + 噪声

# 初始化参数
w, b = 0.0, 0.0
lr = 0.01
epochs = 100

# 梯度下降
loss_history = []
for epoch in range(epochs):
    # 前向计算
    y_pred = w * X + b
    loss = ((y_pred - y) ** 2).mean()
    loss_history.append(loss)
  
    # 反向传播(计算梯度)
    dw = 2 * (y_pred - y).dot(X) / len(X)
    db = 2 * (y_pred - y).mean()
  
    # 参数更新
    w -= lr * dw
    b -= lr * db

# 可视化结果
plt.figure(figsize=(12, 4))

# 损失曲线
plt.subplot(121)
plt.plot(loss_history)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Loss Convergence')

# 回归拟合
plt.subplot(122)
plt.scatter(X, y, label='Data')
plt.plot(X, w * X + b, color='red', label=f'Fit: y = {w:.2f}x + {b:.2f}')
plt.legend()
plt.show()

(3) 输出结果

  • 损失下降曲线:随着迭代次数增加,损失逐渐收敛。
  • 拟合直线:最终参数接近真实值 w=2,b=3

5. 练习题目

  1. 导数计算:求 f(x)=3x3+2ex 的导数 f′(x)
  2. 偏导数计算:对 f(x,y)=x2y+sin(y),求 ∂x∂f∂y∂f
  3. 梯度下降调参:修改学习率 lr=0.1lr=0.001,观察损失曲线变化并解释原因。

6. 扩展思考

  • 局部最小值问题:梯度下降可能陷入局部最优,如何改进?(提示:随机梯度下降、动量法)
  • 学习率选择:学习率过大会导致震荡,过小收敛慢,有哪些自适应学习率算法?(如Adam、RMSProp)

下一课预告:第四课将讲解信息论基础(熵、交叉熵、KL散度)及其在损失函数中的应用。

0

评论区