跳到主要内容

01-outline — python-shen-du-xue-xi-pytorch

定稿:13 章。 原书 16 章 + 前言 + 2 附录全部覆盖。合并裁决:ch3+ch4(训练脚手架一体)、ch5 拆二(机制/优化与GPU)、ch10+ch13(「迁移」两义:迁移学习+模型迁移部署)、ch12+ch14(生成与攻击=同一梯度机制的正反两用)、ch15+ch16(Q-Learning→DQN 一条链)。附录A(0.4 变更)作全书代码习语的时代注脚,只在边界与总纲出现;附录B(行业汇编)不入正文,当总纲时代坐标。

#拆解章原书来源主走查
01from-numpy-to-tensor第1章 + 第2章§2.1-2.4广播 (4,1)+(3,)→(4,3) 逐格算
02autograd第2章§2.5-2.8同一回归 y=3x²+2 的三种实现
03training-scaffold第3章+第4章MNIST 训练循环逐行 + 每层数参数
04ml-fundamentals第5章§5.1-5.510000θ3²+10000θ4² 罚项压平多项式
05optimizers-and-gpu第5章§5.6-5.7先 Adam 后 SGD(150 轮分界)
06cnn第6章5×5×3×3 卷积九次乘加=4 + 68→95% 阶梯
07rnn-and-word-embedding第7章RNN 两步前向带数 + 词性标注错→对
08generative-vae-gan第8章GAN 一步训练(D 两半 + G 一次)
09face-recognition第9章softmax 类内散开→ArcFace 角度 margin
10transfer-learning第10章+第13章冻结后可训参数 11,181,642→5,130
11attention-translation第11章翻「杰瑞」的注意力分配 (0.3/0.2/0.5)
12generative-practice-and-attacks第12章+第14章风格迁移两损失(1e6:1) + FGSM 57.7%→99.3%
13rl-dqn第15章+第16章25 格迷宫的 Q 表更新带数

01-from-numpy-to-tensor.md

  • §1 为什么数组和列表都不够用:以为 Python 自带结构能用 → 知道 list 存指针、array 不支持多维,数值计算要「整块连续内存+整批运算」的 ndarray
  • §2 生成与取用:以为建数组要背 API → 知道四类来源(已有数据/random/特定形状/arange-linspace)与一套切片语法,随机种子保证可复现
  • §3 两种乘法与激活的形状:以为矩阵运算只有一种 → 知道逐元乘与点积是两回事、维度怎么对齐;激活函数不改变形状是层能堆叠的前提
  • §4 主走查:广播——(4,1) 加 (3,) 怎么变成 (4,3):以为形状对不上就报错 → 知道四条广播规则;值逐格算出来,内存上并没有复制
  • §5 向量化的收益与批处理:以为循环写法只是慢一点 → 知道同一点积 798ms vs 1.9ms(约 400 倍),为什么深度学习固定按 batch 喂数据
  • §6 Tensor:带 GPU 与梯度的 NumPy:以为 Tensor 只是改名 → 知道两套接口、下划线就地改、torch.Tensor 与 torch.tensor 的坑、view 与 reshape 的内存差别

02-autograd.md

  • §1 从手算梯度到自动求导:以为求导是数学活 → 知道训练里梯度是每轮必算的机械活,计算图+反向模式自动微分代劳
  • §2 计算图:z=wx+b 长什么样:以为「图」是比喻 → 知道叶子节点/算子/根节点是真实数据结构,backward 溯源把梯度累进 grad
  • §3 主走查:同一个回归任务的三种写法:以为框架只是省代码 → 知道三种实现里「梯度从哪来」「更新在图内还是图外」的本质差别
  • §4 标量与非标量反向传播:以为 backward 千篇一律 → 知道张量对张量被禁止,要传 gradient 参数(雅可比向量积);多次反传要 retain_graph 并清零
  • §5 动态图为什么赢在调试:以为静态动态只是术语 → 知道动态图每步立即执行,静态图先建图后执行——TF2 转 eager 的原因
  • 锚:micrograd 全引擎 94 行(②类),佐证「自动求导不是魔法」

03-training-scaffold.md

  • §1 四个核心组件:以为网络=一堆层 → 知道层/模型/损失函数/优化器四件套闭环,缺一件转不起来
  • §2 主走查:MNIST 训练循环逐行:以为训练循环是玄学 → 知道 train()/forward/zero_grad/backward/step/eval() 各在动什么,98% 怎么来的、梯度为什么必须清零
  • §3 Module 与 functional 怎么选:以为两者等价 → 知道含可学参数的层用 nn.Xxx(自动注册参数、eval() 自动切 Dropout),纯函数用 F
  • §4 优化器怎么换、学习率怎么动:以为优化器只是名字 → 知道同网络四优化器对比;改 param_groups 比重建优化器不破坏动量状态
  • §5 数据流水线:以为喂数据就是读文件 → 知道 getitem/len 协议、batch/shuffle/多进程/pin_memory 各管什么、ToTensor 的 HWC→CHW
  • §6 训练看得见:tensorboardX:以为训练是黑箱 → 知道 add_scalar/add_graph 把损失曲线与网络结构搬进浏览器

04-ml-fundamentals.md

  • §1 任务与流程:以为从写模型开始 → 知道四类任务、六步流程、预处理占大头、「没有免费的午餐」
  • §2 过拟合长什么样:以为训练误差低就是好 → 知道训练涨测试跌的分叉曲线;正则化是这一类手段的统称
  • §3 主走查:给损失函数加一记重罚:以为正则化抽象 → 知道 θ3、θ4 挂 10000 倍罚项后 4 次多项式压回 2 次;L2 即 weight_decay
  • §4 Dropout:训练时随机失明:以为删神经元是损坏 → 知道随机屏蔽打断协同适应、等于训子网络集合;20%-50% 起步、测试按比例缩小
  • §5 批标准化:以为归一化只在输入 → 知道 BN 把隐藏层输入拉回稳定分布再由 γβ 拉开、作用在激活前;小网络上不如 Dropout 明显
  • §6 初始化:以为随机给值就行 → 知道初始化决定收敛与否与掉进哪个极值;xavier 配 S 型、kaiming 配 ReLU
  • §7 激活与损失的选择:以为随便挑 → 知道 sigmoid 导数 ≤1/4 深层梯度消失、深层用 ReLU;回归 MSE、分类交叉熵,PyTorch 的 CrossEntropyLoss 内置 softmax

05-optimizers-and-gpu.md

  • §1 裸梯度下降的死法:以为一个学习率就够 → 知道过小爬不动、过大跳过极值、鞍点卡住、平坦区误判早停
  • §2 从动量到 NAG:以为「动量」是修辞 → 知道历史梯度累积冲过平坦区;NAG 先走半步看前方梯度再修正
  • §3 自适应学习率:AdaGrad→RMSProp→Adam:以为学习率全局统一 → 知道逐参数学习率;累积平方和过早衰减→指数加权平均→再加动量与偏置校正
  • §4 主走查:先 Adam 后 SGD:以为一个优化器用到底 → 知道前期 Adam 不挑初始化、约 150 轮后 SGD+动量更好,为什么能中途换
  • §5 GPU 加速:以为 GPU 只是更快的 CPU → 知道矩阵并行条件、to(device)、DataParallel 按 batch 拆发(128→64+64)、DDP 更好;GPU 数取偶、数据太少反而亏
  • 锚:pytorch 源码官方警告 DataParallel 应改用 DDP(②类)

06-cnn.md

  • §1 全连接处理图像的天花板:以为加大网络就行 → 知道 1 亿权重的参数爆炸;卷积用「小窗滑动+参数共享」破局
  • §2 主走查:一次卷积的真实算术:以为卷积是黑话 → 知道 5×5×3×3 左上角九次乘加=4;步幅跳格、填充保边、多通道逐层卷完求和;核的数值是训出来的
  • §3 池化与全局平均池化:以为特征越多越好 → 知道池化降尺寸抗噪;GAP 一张特征图一个值,参数 17.4 万→1.6 万
  • §4 转置卷积:以为卷积只能变小 → 知道卷积=稀疏矩阵乘法,转置即上采样;GAN 生成图靠它
  • §5 经典网络谱系:以为是历史陈列 → 知道每代解上一代痛点:LeNet 定形→AlexNet 训得动→VGG 小核加深→GoogLeNet 加宽→ResNet 残差破百层→CapsNet 保姿态(不成熟)
  • §6 CIFAR-10 精度阶梯:以为提升靠调参 → 知道 68%→74%(集成)→90%(VGG16)→95%(微调+增强);cat/bird 46%/50% 指出瓶颈;参数几乎全压在全连接

07-rnn-and-word-embedding.md

  • §1 序列数据与自循环:以为网络每步独立 → 知道状态 a 带着历史走,U/W/V 按时间步共享
  • §2 主走查:两步前向(带数):以为「记忆」抽象 → 知道 a0=[0,0]、x1=1 走 tanh 得 [0.537,0.462] 输出 1.561;再喂 x2=2 得 [0.860,0.884] 输出 2.727
  • §3 随时间反传与梯度消失:以为梯度消失只在深层前馈 → 知道 W 沿时间反复自乘,特征值 <1 消失 >1 爆炸;RNN 更严重
  • §4 LSTM:三门与细胞状态:以为加门是复杂化 → 知道遗忘/输入/输出门各管什么;细胞状态是梯度高速路;参数=RNN 的 4 倍(80 vs 20 实测)
  • §5 GRU 与双向:以为变体随意挑 → 知道 GRU 两门合一状态、参数 3 倍省算力;Bi-RNN 前向反向各一套、中间不通信
  • §6 PyTorch 的循环层:形状即契约:以为 API 靠记 → 知道 (seq,batch,feature) 默认序、h0 形状;单元版吃一步、封装版吃整段
  • §7 词向量:从电报码到分布式:以为机器「认识」词 → 知道 One-Hot 语义鸿沟;分布式表示让「麦克」靠近「话筒」;Word2Vec 是 3 层浅网络
  • §8 Word2Vec 的两种猜法:以为词向量靠标注 → 知道 CBOW 上下文猜词、Skip-Gram 词猜上下文;大词表用层次 softmax
  • §9 实例:词性标注:以为词性靠词典 → 知道 Embedding→LSTM→Linear;未训练 [2,2,1,1,1] 全错、400 轮后 [0,1,2,0,1] 全对并泛化
  • §10 实例:预测股价与边界:以为时序预测万能 → 知道 n=30 滑窗、标准化、走势形似;「图好看≠能赚钱」

08-generative-vae-gan.md

  • §1 判别与生成:以为神经网络只会分类 → 知道判别 x→y、生成 y→x;生成=建模数据分布
  • §2 自编码器为什么不会「创作」:以为压缩解压即生成 → 知道 AE 潜在变量逐图而定、空间不连续,无法取点造新图
  • §3 VAE:给潜在空间加正态约束:以为生成靠想象力 → 知道 mu/log_var、ε、z=mu+exp(log_var/2)·ε;损失=重构 BCE+KL
  • §4 GAN:造假者与验钞机:以为生成靠一个网络 → 知道生成器与判别器互相逼进;D 损失=真+假两半,G 损失=骗 D 认真
  • §5 主走查:GAN 的一步训练:以为训练就是最小化损失 → 知道一步里先训 D 再训 G,两股力量动态平衡,没有单一「损失最小」
  • §6 VAE 与 GAN 的分工:以为 GAN 全面胜出 → 知道 VAE 空间连续可解释但模糊;GAN 清晰但会坍塌、梯度经 D 传递难训;WGAN 换距离
  • §7 CGAN:按需生成:以为生成不可控 → 知道条件 y 与 z 拼接(100+10=110),D 同样吃条件(784+10)
  • §8 DCGAN 与训练技巧:以为卷积一上就稳 → 知道 G 用转置卷积+BN、末层 tanh 归 [-1,1]、LeakyReLU 防稀疏梯度、核尺寸被步幅整除防棋盘伪影

09-face-recognition.md

  • §1 五道工序:以为识别=一步 → 知道采集→检测→对齐→特征→比对,各有各的坑
  • §2 目标检测谱系:以为检测=分类加框 → 知道 R-CNN→Fast→Faster 演进:候选区域从哪来、特征在哪算、端到端怎么真起来
  • §3 MTCNN:三个小网络接力:以为一个大网最准 → 知道 P 粗筛→R 拒假→O 出五点,层层过滤让最慢的网只看最少的窗
  • §4 「类内要紧、类间要远」:以为 softmax 万能 → 知道分类只要求可分不要求紧凑;MNIST 二维可视化里同类散开
  • §5 主走查:损失三级跳:softmax→Triplet→Center→ArcFace:以为换损失是玄学 → 知道把「距离」折成「角度」加 margin;MegaFace 91%→98%;ArcFace 代码 s=30/m=0.5
  • §6 实战串讲与边界:以为 100% 是奇迹 → 知道 LFW 基准小、同源分布,数字要打折看

10-transfer-learning.md

  • §1 站在巨人的肩膀上:以为每个任务从零训 → 知道预训练模型当起点;特征提取(冻结)与微调(小学习率更新)两条路
  • §2 预训练模型的「进料规范」:以为随便喂图 → 知道 ImageNet 三通道 224、固定 mean/std;进料不合规范精度必掉
  • §3 主走查:冻结前后,可训练参数 1118 万→5130:以为迁移就是继续训 → 知道 requires_grad=False 冻结骨干、只换末层;反向传播只走 5130 个数
  • §4 数据增强:免费的更多数据:以为数据只能收集 → 知道裁剪/翻转/色彩抖动;边界:别用会变类的变换(9 旋转成 6)
  • §5 特征提取 75% vs 微调 95%:以为冻结更划算 → 知道 3:22/轮到 75% vs 9:15/轮加增强到 95%;时间换精度的价格
  • §6 模型的另一侧:迁移与部署:以为训完就完 → 知道「迁移」另一义=搬去部署:ONNX 通用格式;书里的 Caffe2 已并回 PyTorch、_export 已被 dynamo 版取代(②类锚)

11-attention-translation.md

  • §1 Encoder-Decoder:以为翻译是映射表 → 知道编码器压成中间语义 C,解码器按 C+已生成词逐词产出
  • §2 固定 C 的瓶颈:以为压缩成一向量高效 → 知道长句信息全挤一个向量,细节丢失;书称「分心模型」
  • §3 主走查:翻译「杰瑞」时注意力怎么分:以为注意力是修辞 → 知道 (0.3/0.2/0.5) 分布→加权求和 C_i;对齐函数+softmax 归一化;C_i 逐输出词而变
  • §4 注意力=词对齐=影响力:以为是独立发明 → 知道与词对齐同构;变体 Soft/Hard/Global/Local/Self 一句带过
  • §5 实战与可视化:以为翻译模型难落地 → 知道 21007 句筛 640 对、75000 轮 loss 2.64→0.009;注意力矩阵能画出来

12-generative-practice-and-attacks.md

  • §1 DeepDream:反向问网络「你看见了什么」:以为网络内部不可视 → 知道冻结权重、对像素梯度上升、最大化特征 L2;八度+模糊;层越深图案越像「类别」
  • §2 主走查:风格迁移的两个损失:以为风格是玄学 → 知道内容损失(conv_4 的 MSE)+风格损失(Gram 矩阵);权重 1000000:1;LBFGS 优化的是像素
  • §3 修复与跨域:以为补洞/换域要配对数据 → 知道 Context Encoder 重构+对抗(只重构会模糊);DiscoGAN 用 A→B→A 重构逼出双射
  • §4 对抗攻击:同一梯度的另一面:以为模型可靠 → 知道 FGSM 沿损失上升加 ε·sign 噪声,熊猫 57.7%→长臂猿 99.3%;有目标只差一个负号;白盒/黑盒、迭代版更狠
  • §5 防御四类:以为有银弹 → 知道对抗训练/梯度掩码/随机化/去噪;攻防是持续军备竞赛

13-rl-dqn.md

  • §1 没有标签的学习:以为学习必须有答案 → 知道强化学习只有试错后的奖惩;五元素与 Policy(s→a)
  • §2 主走查:Q-Learning 在 25 格迷宫:以为 Q 表天生会填 → 知道 Q[s][a] += lr·(r+γ·maxQ(s')−Q[s][a]) 逐格填出「哪格往哪走」;ε-greedy 平衡经验与探索
  • §3 SARSA:同样是更新,胆子不同:以为两者只是公式差一项 → 知道用实际下一步动作而非 max,SARSA 学会躲陷阱、更难到宝藏
  • §4 Q 表的天花板:以为表格万能 → 知道状态高维连续时放不下;Q 表换成网络 Q(s,a;θ);DL+RL 的四个矛盾
  • §5 DQN 的两件武器:以为直接拟合会崩 → 知道经验回放(存四元组随机采样,打破相关)+目标网络(隔 C 步同步);Huber 损失
  • §6 实战与边界:以为 DQN 通用 → 知道 CartPole 50 轮训练循环长什么样;样本效率低、超参敏感仍是边界

自查记录(批量模式免停验,留档)

  • 「出去时知道」查重:04§3(参数收缩)≠04§4(随机屏蔽);05§3(自适应机制)≠03§4(选型实验);12§2(Gram 纹理)≠08§3(分布约束);13§2(Q表)≠13§5(网络化)。无重复。
  • 每章一条主走查已标,均带具体数;演示编的数在正文当场声明。
  • 原书每章有归宿;附录B不入正文。
  • 生词配额:每节 ≤5 新词、每段 ≤1,写作时按此执行,超了拆节不砍解释。