AI

d2l 学习笔记:预备知识

·9 分钟阅读·3496 字

d2l 学习笔记:预备知识 的详细笔记

📋 目录

d2l 学习笔记:预备知识

核心概念 《动手学深度学习》预备知识,涵盖数据操作、线性代数、微积分、概率论等。 预备知识一共4块:数据操作、数据预处理、线性代数、微积分,下面分模块列出不弄懂后面全程看不懂的核心内容,每一条附带通俗解释、学习底线标准。

1. 1 数据操作(PyTorch张量基础,代码根基)

1.1. 张量基础创建与运算

需要弄懂:

  1. torch.arangetorch.zeros/ones 创建张量,区分浮点数/整数张量
  2. 张量四则运算、点积 torch.dot、矩阵乘法 @
  3. 广播机制:不同形状张量自动扩展计算(后续批量训练必备)
    详细解释:
    全书所有网络输入、权重、梯度全是张量,梯度计算、前向传播全部依赖张量运算。如果看不懂点积,就理解不了 x^\top x、损失函数;不懂广播,后面批量样本训练代码完全读不懂。
    底线标准:给一段张量运算代码,能手动算出输出形状与数值。

1.2. 原地操作(带下划线函数,如 requires_grad_zero_

详细解释:

x.requires_grad_(True)x.grad.zero_() 都是原地修改,不产生新张量;梯度清零、开启求导全靠原地函数,对应你代码里梯度累积的问题。

底线标准:能区分 x = x+1(新建张量)和 x += 1(原地修改)的区别。

1.3. 索引、切片、形状变换 reshape

详细解释:

数据集批量读取、特征提取、权重维度调整全部依赖;神经网络输入必须固定维度,不懂reshape会看不懂所有网络输入输出。

2. 2 数据预处理(工程必备,看懂数据集处理逻辑)

2.1. 缺失值处理:填充均值/0

详细解释:真实数据集一定存在缺失数据,训练前必须清洗,第三章线性回归实战会直接复用这套逻辑。

2.2. 分类独热编码

详细解释:离散标签(比如图像分类、文本类别)不能直接输入网络,必须转独热向量,是所有分类任务基础。

2.3. 标准化(减去均值除以方差)

详细解释:梯度下降训练的关键操作,特征尺度差距过大会导致梯度震荡、收敛极慢,不懂标准化就看不懂调参逻辑。

3. 3 线性代数(梯度、矩阵权重的数学载体,重中之重)

3.1. 标量、向量、矩阵、张量的定义与区分

详细解释:

  • 标量:单个数字(损失函数y、梯度下降学习率)
  • 向量:一维数组(输入样本x、梯度向量 $\nabla f$)
  • 矩阵:二维数组(网络权重W,一层网络参数)
    所有梯度、反向传播、权重更新全部建立在这4个概念上,分不清就看不懂梯度向量公式。

3.2. 向量点积 $x^\top x$、L2范数 $|x|^2$

详细解释:

点积对应你代码 torch.dot(x,x),L2范数是正则化核心;梯度公式 $\nabla_x |x|^2=2x$ 完全基于这个知识点,损失衰减、权重衰减全程使用。

3.3. 矩阵-向量乘法 $Ax$、矩阵转置 $A^\top$

详细解释:

单层网络前向传播 $z=Wx+b$ 本质就是矩阵乘向量;梯度公式 $\nabla_x Ax=A^\top$ 依赖转置,反向传播链式求导全靠矩阵转置。

3.4. 对称矩阵、单位矩阵

详细解释:二次型 $x^\top Ax$ 求梯度会用到,L2正则等价于单位矩阵二次型,看懂梯度推导必备。

4. 4 微积分(梯度、反向传播数学核心,你的主要卡点,必须吃透)

4.1. 偏导数

完整解释:

多元函数(输入是向量x)只对其中一个分量x_i求导,其余变量视作常数。

梯度就是把全部偏导数按顺序拼成一个列向量 $\nabla f = [\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},…]^\top$。

解决你核心疑问:梯度不是程序凭空生成的,数学定义就是所有偏导的集合;只是代码需要backward()才计算出数值存入.grad

底线标准:给简单二元函数,能手动写出全部偏导数。

4.2. 梯度的完整定义与几何意义(最核心,绝对不能模糊)

  1. 定义:标量输出函数对输入向量的所有偏导数拼接而成的向量;
  2. 几何意义:梯度向量指向函数值上升速度最快的方向;反方向是下降最快方向;
  3. 落地应用:梯度下降算法,更新权重 $W=W-\eta\cdot\nabla_W L$,沿着梯度反方向减小损失。
    解决你的疑问:为什么训练要反方向更新权重。
    底线标准:能用方向导数公式解释「梯度上升、反方向下降」。

4.3. 4条基础向量梯度公式(不用手写证明,但要记住结论+代码验证)

  1. $\nabla_x Ax = A^\top$
  2. $\nabla_x x^\top A = A$
  3. $\nabla_x x^\top Ax = (A+A^\top)x$
  4. $\nabla_x |x|^2 = 2x$ 详细解释:
    PyTorch自动微分底层就是在计算这一类公式,你代码里 $y=2x^\top x$梯度为$4x$,就是第4条公式直接推导;正则化、线性层梯度全部复用。
    底线标准:写一段对应代码,运行后能验证公式结果正确。

4.4. 链式法则(反向传播唯一数学根基,重中之重)

完整解释:

复合函数求导规则:若 y=f(z), z=g(x),则 $\displaystyle \frac{dy}{dx}=\frac{dy}{dz}\cdot\frac{dz}{dx}$。

拓展到向量:上游梯度 × 当前层局部导数 = 当前变量梯度。

反向传播的完整流程就是从损失倒着链式相乘每一层局部导数,没有链式法则就无法计算多层网络梯度。

底线标准:多层复合函数,能手动分步写出梯度表达式。

5. 5 自动微分(代码实现梯度,打通数学与代码的桥梁,必须吃透)

这一节是把上面微积分落地,所有概念100%弄懂,对应你全部代码疑问:

5.1. requires_grad=True 计算图机制

解释:

只有开启这个标记,张量运算才会被记录,构建有向无环计算图;没有计算图,无法反向求梯度。普通张量默认False,不记录运算,永远没有梯度。

5.2. .grad 梯度缓存

解释:

  1. .grad 只是一块内存缓存,不存储数学公式,只存运行后算出的数值
  2. 未执行backward()时没有计算偏导,缓存为空,显示None
  3. 执行backward()后,链式求导算出全部偏导,拼成向量存入.grad
    解决你的疑问:梯度是函数固有数学性质,但代码必须运行求导才会有数值。

5.3. y.backward() 反向传播全过程

完整流程:

  1. 前向传播:计算输出标量y,同时记录整张计算图;
  2. 反向起点:从标量损失y出发,初始梯度=1;
  3. 倒序遍历计算图,链式法则逐层相乘局部导数;
  4. 所有叶子张量(x、权重W、偏置b)的梯度存入各自.grad
    底线标准:拿你之前y=2x^Tx的代码,手动分步拆解反向传播求梯度过程。

5.4. 梯度累积 + x.grad.zero_() 清零

完整解释:

PyTorch默认设计:多次调用backward(),新梯度会叠加到原有.grad缓存上,不会自动覆盖。

适用场景:多分支损失求和;

训练弊端:单批次迭代时,上一轮梯度会污染本轮更新,所以每一轮循环必须手动zero_()清空梯度缓存。

解决你的疑问:什么是梯度层层叠加、为什么必须清零。

5.5. 仅标量可直接反向传播

解释:梯度定义是「标量对向量/矩阵求导」,损失函数一定是单个数字;若输出为向量,需要传入梯度参数。

六、可以暂时跳过、不用死磕的内容(避免卡壳劝退)

  1. 向量/矩阵梯度的完整代数展开证明(看懂结论即可,不用手推);
  2. 雅可比矩阵、张量高阶导数拓展知识;
  3. 矩阵复杂微分拓展公式;
  4. 概率论2.6(分类回归会用到,前期线性回归可先浅读)。

七、整体学习底线判断标准

满足下面全部条件,代表预备知识核心内容完全弄懂,可以放心进入第三章线性回归实战:

  1. 给任意简单复合标量函数,能手动用链式法则写出梯度;
  2. 能完整复述requires_grad/backward()/zero_()三者各自作用、运行顺序;
  3. 能解释清楚三个核心疑问:
    ① 为什么初始.grad是None?
    ② 梯度为什么指向损失上升方向,更新权重要反向?
    ③ 不清零梯度会出现什么错误结果?
  4. 能看懂单层网络 z=Wx+b 的前向、反向梯度计算逻辑。

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro