深度学习数学基础
用张量、矩阵乘法、梯度、概率、交叉熵和 KL 理解模型计算。
学习目标
- 同时核对链式法则与稳定 softmax
- 为什么要先确认 softmax 的维度?
- 说明:平移技巧解决指数溢出,不能修复输入本身含 NaN 或错误的概率建模。
为什么需要这个概念
深度学习的数学基础包括张量与线性代数、复合函数求导、概率分布和数值稳定计算。每条公式都应能对应到输入形状、输出形状及可执行操作。
学习前需要掌握
背景与问题
神经网络同时涉及矩阵运算、链式法则和概率目标。学习这些数学工具时,最容易出错的往往是计算轴和数值范围,而不是复杂证明。
概念定义
深度学习的数学基础包括张量与线性代数、复合函数求导、概率分布和数值稳定计算。每条公式都应能对应到输入形状、输出形状及可执行操作。
直观理解
shape 是公式的单位检查。就像不能把米和秒直接相加,也不能把“每个样本的损失”与“每个类别的分数”当成同一个维度。
核心原理
矩阵 的行通常表示样本、列表示特征, 把 D 维表示变为 H 维。求和、均值和广播都要明确轴;对类别求 softmax 和对样本求 softmax 对应完全不同的概率解释。
链式法则把损失对输出的变化率,沿各层局部导数传回参数。若 、,则 。梯度与参数形状相同,标量损失不会意味着只有一个参数梯度。
概率目标常含指数和对数。softmax 的分子分母可同时减去最大 logit,避免 exp 溢出;logsumexp 直接在对数域完成归一化。交叉熵分解为熵与 KL 时,两个分布及其支持也必须明确。
数学表达
核心公式
深度学习的数学基础包括张量与线性代数、复合函数求导、概率分布和数值稳定计算。每条公式都应能对应到输入形状、输出形状及可执行操作。
变量含义
P真实分布Q模型分布
计算步骤
- 1预测为 2,平方损失为 16。
- 2梯度为 2×(2−6)×2=-16。
- 3对 logits 减去 1001,再求 softmax。
代码对应位置
示例 1同时核对链式法则与稳定 softmax的最小验证:使用完整构造输入核对同时核对链式法则与稳定 softmax,输出只表示本例计算。
变量解释
| 变量 | 含义 |
|---|---|
P | 真实分布 |
Q | 模型分布 |
完整数值示例
同时核对链式法则与稳定 softmax
已知条件
- w=1,x=2,目标 y=6
- 分类 logits 为 1000 和 1001
计算步骤
- 预测为 2,平方损失为 16。
- 梯度为 2×(2−6)×2=-16。
- 对 logits 减去 1001,再求 softmax。
计算结果
梯度为 -16;两个概率约为 0.268941 与 0.731059,和为 1。
处理前后对比
- 平移技巧解决指数溢出,不能修复输入本身含 NaN 或错误的概率建模。
案例推演与判断
如果只用损失对预测的导数 -8 更新 w,就漏掉了乘数 x=2。自动微分能避免手写每条链,但仍需要手算小例子确认目标和路径没有接错。
直接计算 exp(1001) 会超出常见浮点范围,而减去最大值后只需 exp(-1) 与 exp(0)。这种平移不改变 softmax 概率,因为分子分母拥有相同缩放。
计算与实现步骤
- 预测为 2,平方损失为 16。
- 梯度为 2×(2−6)×2=-16。
- 对 logits 减去 1001,再求 softmax。
代码实现
示例 1
同时核对链式法则与稳定 softmax的最小验证
example_01.py用途:使用完整构造输入核对同时核对链式法则与稳定 softmax,输出只表示本例计算。
import torch
w = torch.tensor(1., requires_grad=True)
loss = (w * 2 - 6) ** 2
loss.backward()
prob = torch.softmax(torch.tensor([1000., 1001.]), dim=0)
print(f"loss={loss.item():.1f} grad={w.grad.item():.1f}")
print([round(v, 6) for v in prob.tolist()])代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
使用完整构造输入核对同时核对链式法则与稳定 softmax,输出只表示本例计算。
loss- 当前预测与目标之间的损失值。
w- 模型权重或当前待优化参数。
prob- 模型输出的正类概率。
Step 1 · 1–7 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import torch
w = torch.tensor(1., requires_grad=True)
loss = (w * 2 - 6) ** 2
loss.backward()
prob = torch.softmax(torch.tensor([1000., 1001.]), dim=0)
print(f"loss={loss.item():.1f} grad={w.grad.item():.1f}")
print([round(v, 6) for v in prob.tolist()])代码与数学原理
平方误差代码对应均方损失。
预期输出或运行结果
loss=16.0 grad=-16.0 [0.268941, 0.731059]
常见错误 · 3 条
- 忽略广播
- 概率直接 log0
- 矩阵内维不匹配
实际应用
- 推导损失梯度
- 排查广播错误和数值溢出
常见错误
- 忽略广播
- 概率直接 log0
- 矩阵内维不匹配
常见问题
为什么要先确认 softmax 的维度?
归一化轴决定哪些元素相互竞争。多分类通常按类别归一化;若沿 batch 轴归一化,一条样本的概率会依赖同批其他样本。
这个示例能说明什么边界?
平移技巧解决指数溢出,不能修复输入本身含 NaN 或错误的概率建模。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。