跳到主要内容

Reading notes — Deep Learning Crash Course (通读笔记)

格式:每章记「讲了什么机制 / 关键数字 / 可引段落(文件:行,短语)」。

导论(text/08, 20k)

  • 定位:零基础、动手项目驱动;每个项目可在普通硬件跑(几分钟到几小时)。
  • 术语分层:AI ⊃ 机器学习 ⊃ 深度学习(08:1008:14,搜「artificial intelligence (AI) refers」「deep learning is a branch」)。
  • 历史:1950s–80s 神经网络研究奠基;2012 AlexNet 赢 ImageNet 是转折点;动力来自游戏 GPU + 社交网络数据(08:16,搜「AlexNet」)。
  • 工具:PyTorch 为主 + Lightning + Deeplay(作者自己的库)(08:40,搜「Deeplay」)。
  • 代码/数据:github.com/DeepTrackAI/DeepLearningCrashCourse(08:56)。
  • 章结构:ch1–2 基础(必读);中间章由浅入深;最后三章(active learning、RL、reservoir computing)相对独立(08:90,搜「final three chapters」)。
  • 硬件:CPU 可跑多数例子;GAN/diffusion 需要 GPU(08:52)。
  • 数学:高中数学起步,线性代数+微积分在后面章节需要,「以直观层面引入,不用太多记号」(08:32)。

Ch1 分类与单个神经元(text/09–16)

  • 人工神经元仿生:输入 x → 激活电位 p = w·x + b → 输出 y = H(p),H 是 Heaviside 阶跃函数(10:1510:25,搜「activation potential」)。生物对应:突触信号/突触电位/发放。
  • 1D 分类:一个权重 w0,输出 (w0*x>0)。训练循环:随机挑样本→算预测→错则 w0 ← w0 − η·error·x(10:15710:167,搜「learning rate」)。error ∈ {−1,0,1}。
  • 学习率权衡:太大跳过最小值,太小收敛慢/卡局部最小;可用 schedule 或自适应(10:193,搜「trade-off」)。
  • 单神经元只能切「一个变号点」(1D)/一条直线(2D);非凸数据必然失败(10:234,搜「convex datasets」)。
  • bias = 常值 +1 的额外输入,让分界线不必过原点(10:418,搜「shift the activation function」)。
  • 权重正则化:权重跑飞(太小→error 相对变化巨大)是训练大问题;定期除以 L2 范数,等价于约束权重在超圆上移动(10:45210:467,搜「weight regularization」「hypercircle」)。L1/L2/Lp 范数定义在 NOTE(10:46910:483)。
  • 激活函数库:sigmoid [0,1]、tanh [−1,1]、线性、ReLU、Leaky ReLU(避免 vanishing gradient)(11:511:13)。连续+几乎处处可微 → 反向传播可用(11:19)。换了激活函数单神经元仍是线性边界(11:21)。
  • 两层网络:隐藏层每个神经元切半个平面,输出层用「并/交」组合出复杂形状(12:11,搜「synthesizes these regions」)。dense = 全连接 = MLP(12:15)。「deep」通常指 ≥2 隐藏层(12:7)。
  • 逻辑门练习:两层可做 NOT/AND/OR/NAND 但做不了 XOR;三层可以(12:2113:15)。XOR 不可行的原因:单隐藏层只能组合出半平面的并/交。
  • 损失函数定义:MSE E=½Σ(y−ỹ)²(12:133,搜「mean squared error」)。
  • 梯度下降:每个权重朝减小误差方向微调(12:117)。反向传播 = 用链式法则逐层从后往前算梯度,避免重复计算中间项;要求激活函数几乎处处可微(12:123,搜「chain rule」)。作者称反向传播「arguably the main technique responsible for the widespread success of deep learning」(12:119)。
  • 推导关键:输出层 δ2,m = (y2,m−ỹm)·f′(p2,m),Δw = −η·δ·y(下层输出);隐藏层误差要「反传」:∂E/∂y1,q = Σ δ2,m·w2,qm(12:14112:171)。
  • 三层网络:num_neurons 7/5,能分两层不可能的非凸数据(13:2913:3113:73)。「神经元+层数够多,网络能近似任何函数」(13:17,搜「approximate any function」)→ 指向万能近似定理(Cybenko 1989 / Hornik 1989,16:1316:15)。
  • Project 1A(MNIST):60,000 训练 + 10,000 测试,28×28;LeCun & Cortes 1998(14:7)。
    • Deeplay MLP:784→32→32→10,sigmoid,26,506 参数(14:108)。MSE loss + SGD lr=.1,1 epoch → accuracy ≈0.67(14:199)。
    • 混淆矩阵:c_ij = 真类 i 被预测成 j 的次数;5/8/9/2 最难(14:20714:229 附近)。
    • 改进阶梯:softmax 输出(概率和为 1)→ 0.77;配 categorical cross-entropy,最小化它等价于最大似然(14:274 附近,搜「maximum likelihood」);激活换 ReLU → 0.94;batch=32 + RMSprop lr=0.001 + 10 epochs → 0.97(14:383 附近,搜「0.97」在 sed 320 段)。
    • 动量直觉:连续同向更新的权重步子变大(14:355 附近,搜「momentum」)。Adam 引用:Kingma & Ba 2014, arXiv 1412.6980。
    • 失败分析:挑错分的图看,确实写得潦草(14:47 段后,搜「sloppily」)。
  • Seminal:McCulloch-Pitts 1943 神经元;Rosenblatt 1958 perceptron;Widrow-Hoff 1960 ADALINE;Werbos 1974 博士论文反向传播;Rumelhart-Hinton-Williams 1986 Nature(Hinton 2024 诺贝尔物理奖);Cybenko 1989 万能近似;Hornik 1989;Hinton 2006 deep belief nets 逐层预训练(16:316:17)。

Ch2 回归(text/17–24)

  • 回归 vs 分类:输出从 0/1 变连续;线性神经元 y=w0·x,同一训练更新公式 w0 ← w0 − η·error·x(18:100,搜「square error」)——因为更新量正比于平方误差对权重的负导数。
  • 线性神经元只有过原点的一条线;非线性数据只能给出「它能给出的最好近似」(18:135)。
  • 回归网络:隐藏层 sigmoid,输出层线性(delta_b = error*1,激活导数=1)(19:82,搜「delta_b = error」)。
  • batch 训练(20):online(1 样本/更新)vs batch(mini-batch,平均误差信号)vs steepest-descent(全数据集)。batch 平均能平滑误差景观、更稳、减少震荡;中间 batch size 最好;可随训练增大(20:320:9,搜「batch training」「intermediate batch size」)。
  • 预测-真值图(plot_pred_vs_gt)和对角线 bisectrix:完美预测所有点落在对角线上(20:43,搜「bisectrix」)。
  • MSE 曲线:先快后慢;线性坐标看绝对变化,log 坐标看相对变化(20:150)。
  • 每 epoch 随机打乱样本顺序 → MSE 不再单调下降,要加平滑趋势线(20:179,搜「monotonically」)。
  • 数据三分:训练(拟合参数)/验证(调超参+早停)/测试(最终无偏评估,holdout);约 70% 训练(21:321:11,搜「70 percent」)。早停的实践难点:验证误差会波动,有多个局部最小,所以有很多 ad hoc 规则(21:7)。
  • 过拟合定义:模型只对训练数据有用;验证 MSE 先降后升(21:121,搜「overfitting」)。欠拟合:训练和验证都差(21:125)。
  • Project 2A 光镊数字孪生(22):digital twin = 物理系统的虚拟表示(22:3)。光镊:激光 400–1064nm,测 DNA/马达蛋白力。几何光学近似:把光束拆成有限条光线算力 → 有 artifact;NN 3→256,256,256→3,133,379 参数,~10^5 数据点,100 epochs,MAE ≈30 fN(力典型值几千 fN)(22:22422:346)。
  • 亮点论断:NN 比 GO 训练数据本身更准——网络复杂到「学得动光滑力曲线、学不动叠加的涨落伪影」,精度超过训练数据(22:376,搜「higher than that of the training data」)。
  • 位置和力量纲差 10^6/10^15 → 重标到 ~1 再训(22:144,搜「rescale」)。
  • Seminal ch2:Smith et al. 2018「Don't Decay the Learning Rate, Increase the Batch Size」ICLR/arXiv 1711.00489(24:3)。
  • 深度收益(练习 2-17):三层达到同样性能需要的神经元和 epoch 都显著少于两层(19:117,搜「substantially less」)。

Ch3 卷积(text/25–33)

  • 卷积定义:小滤波器在主数据上滑动,每步「对应相乘再求和」得一个输出数(26:326:5,搜「blending process」)。
  • 1D 例子:[0,2,0,2,…] 卷 [0.5,0.5] → 全是 1(滑动平均);输出长度 = 信号长 − 滤波器长 + 1(「valid」完全放置)(26:31,搜「smoothed version」)。Sobel [−1,0,1] = 差分,检测阶跃;高斯滤波器平滑(26:38)。
  • 2D:4×10 图卷 2×2 滤波器 → 3×9;输出叫 feature map(26:86)。多通道(RGB):滤波器贯穿所有颜色通道(26:100)。
  • 关键:深度学习里滤波器是训练学出来的,不是手工设计(26:108,搜「learned during training」)。
  • PyTorch 积木(27):Conv2d(kernel=filter 同义词)、ReLU、MaxPool2d(kernel+stride,高度减半)、Upsample(复制像素)、Flatten+Linear+Softmax(dense top)。棋盘图 12×16,S=4。
  • 卷积层+ReLU+池化堆两轮:1 通道 12×16 → 32 个 1×2 feature map——「空间分辨率降了,特征丰富度升了」(27:201,搜「richness of its feature representation」)。
  • CNN 分类标准结构:convolutional base + flatten + dense top(27:213,搜「convolutional base」)。softmax 输出「常被解读为相对似然,但不是传统统计意义的概率」(27:225)。
  • Project 3A 疟疾(28):27,558 张细胞图,感染/未感染各半(Rajaraman 2018 PeerJ)。dense 基线 acc≈0.68(loss 0.60);CNN → acc≈0.95、loss≈0.12(28:17628:263)。
  • hook:挂在层上的函数,前向/反向时触发,用来窥视/操纵激活(28:314,搜「Hooks are functions」);用完要移除。
  • Project 3B 粒子定位(29):CNN+dense top 输出 (x,y);ground truth 靠手工标注(精度 precision ≠ 准确度 accuracy——没有真值时只能评标注一致性)(29:254);另一路:用 DeepTrack2 仿真生成训练数据(29:300)。基于 Helgadottir「Digital Video Microscopy Enhanced by Deep Learning」Optica。
  • Project 3C DeepDream(30):问题=「怎么变换一张图,让它最大激活训练好的 CNN 的某一层」;把训练翻转:不动权重,对输入图做梯度上升(30:5,搜「flips the neural network training process」)。云像鸟 → 改得更像鸟(30:126)。VGG16:features 64→512 通道,classifier 4096/4096/1000,ImageNet 归一化均值方差必须用(30:10030:106)。requires_grad_(True) 让图可求导。
  • Project 3D 风格迁移(31):内容=大尺度结构(深层),风格=纹理(浅层);Gram 矩阵=feature map 之间的相关性矩阵(自身转置乘积,按 H*W 归一)(31:67,搜「Gram matrix represents」);损失=内容差+风格差;优化器用 L-BFGS(变量是图不是权重),closure 反复重算损失(31:8731:107)。Gatys 2016。演示:Gaudí 蜥蜴马赛克纹理 → 果蝇神经组织显微图。
  • Seminal ch3:LeNet-5 1998(LeCun);AlexNet 2012;VGG 2014(小滤波器加深);Inception/GoogLeNet 2015(每层多尺寸);ResNet 2016(残差连接解决 vanishing gradient)(33:333:11)。
  • Summary 明说承上启下:conv → encoder-decoder(潜空间)→ U-Net → GAN/diffusion(32:13)。

Ch4 编码器-解码器(text/34–41)

  • 编码器-解码器:encoder 压缩输入到低维潜表示,decoder 从它重建;用途:变换/重建/特征提取/生成(35:5,搜「compresses the input data into a low-dimensional latent representation」)。
  • 目标=输入自身(autoencoder)看似无意义,实义:decoder 只能用挤过潜空间瓶颈的东西重建 → 过滤/去噪/压缩(35:13,搜「bottleneck of the latent space」)。
  • 潜空间本身可当分析工具:分类任务里不同类会聚成簇;从潜空间采样→生成(35:17)。
  • 去噪实现(36):deeptrack 仿真显微镜粒子(64×64,Poisson 噪声 SNR 2–3,强噪);noisy→clean 配对;ConvolutionalEncoderDecoder2d encoder [16,16] 每层 max pooling ÷2,decoder 镜像上采样;L1 loss + Adam,150 epochs(36:13836:159)。SimulatedDataset buffer 256、replace=0.1(防过拟合、保多样性)(36:124)。
  • mode collapse 检查(36:19436:216):输入永远同信号、只有噪变 → 网络可能忽略输入直接背出目标。检验:喂纯噪声空图(particle^0),若输出仍画粒子=背答案;输出无粒子=真去噪。这是本章很妙的一段。
  • 泛化检查:只训过一个居中粒子,给偏心/更大半径 → 网络会聚出一团粒子(没学会画偏心粒子);用多样化数据重训后就好了(36:25436:282)。高频衍射环仍部分丢失(4-4 练习:加深加宽 [32,64,128])。
  • Project 4A VAE(37):编码成分布(均值+方差)而非点,解码时采样 → 引入随机性;损失=重建项+正则项,KL 散度把潜变量分布拉向高斯 → 潜空间连续有序、可平滑插值;两力比喻:重建=斥力(铺开),KL=引力(收拢)(37:23,搜「repulsive force」)。beta 缩放正则项,默认 1;KL 太强会欠用容量(37:25)。MNIST,latent_dim=2,channels [32,64]。
  • Project 4B WAE(38):Fashion-MNIST;与 VAE 差别在先验/正则方式:用 Wasserstein 距离(=Earth mover's distance,最优传输:搬土最少成本)度量学到的分布 vs 先验 → 重建更保多样性(38:17)。潜空间两点线性插值→逐帧 decode→图像变形(morphing)(38:16638:204)。
  • Project 4C ECG 异常检测(39):autoencoder 只用正常数据训练;重建误差=输入输出差;正常→低,异常→高;设阈值即可打标(39:11,搜「trained exclusively on normal data」)。适用:异常稀少/无定义、类别极不平衡(罕见病、欺诈)。140 点心跳时序;阈值=正常训练误差的 95 分位数(39:174)。两种方法:重建误差阈值 + 潜空间特征。
  • Seminal ch4:Hinton & Zemel 1994(autoencoders, MDL, Helmholtz free energy);Hinton & Salakhutdinov 2006 Science 降维;Long et al. 2015 FCN 全卷积分割;Kingma & Welling 2013/2014 VAE(arXiv 1312.6114);Tolstikhin et al. 2018 WAE(arXiv 1711.01558)(41:341:13)。
  • Summary:VAE 是「generative modeling 的第一次尝试」,第 9、10 章(GAN、diffusion)继续(40:5)。

Ch5 U-Net(text/42–49)

  • U-Net 动机:encoder-decoder 的瓶颈故意限制能学的函数复杂度(降噪好,细节保留差);分割需要精确保边界 → 2015 Ronneberger 提出 U-Net(43:543:7)。
  • U 形:下采样路径抓高层特征,上采样路径恢复分辨率;skip connection(跳连)把同尺寸 feature map 从下采样路径拼接到上采样路径 → 瓶颈处不丢细节;还给梯度提供直通路径,缓解 vanishing gradient(43:1143:15,搜「skip connections」)。
  • 语义分割=把每个像素的值换成更适合下游分析的属性(强度→「属于某类结构的概率」);实例分割再区分同类个体;panoptic=两者结合(44:7)。
  • U-Net 把分割变成逐像素多类分类:pixel-wise softmax + cross-entropy(44:13)。sparse categorical cross-entropy 只算真类那一个 log,省算力(44:2944:31)。可给边界像素加权/类不平衡加权。
  • 主项目(45):果蝇幼虫腹神经索 ssTEM,20 张 1024×1024,人工标注细胞内区域+线粒体;80/10/10 划分;U-Net 回归器;Jaccard index = IoU = 交并比,1.0=完美(45:125);100 epochs;EarlyStopping:监控验证 Jaccard、取 max、5 epochs 无改进就停(45:24545:250)。
  • Project 5A 量子点(46):荧光图中检测定位纳米半导体粒子;U-Net 输出概率图找位置。
  • Project 5B 数细胞(47):BBBC039v1,200 张视野 ~23,000 个核,Hoechst 染色;仿真生成训练数据 + U-Net 分割 + connected components 数数;直方图看背景/核双峰(47:100)。「仿真产生带真值的大数据集,免人工标注」是本章反复强调的方法论(48:11)。
  • Summary 埋伏笔:U-Net 会在第 9、10 章 GAN 和 diffusion 里再登场(生成器的骨干)(48:15)。
  • Seminal ch5:Ronneberger 2015 U-Net(MICCAI);Çiçek 2016 3D U-Net;Isensee 2020 nnU-Net(自配置,Nature Methods)(49:349:9)。

Ch6 自监督学习(text/50,55k)

  • 自监督 vs 无监督:SSL 处理的是经典监督任务(分类/检测);可完全替代监督,或当预训练(大量无标注+少量标注时)(50:12)。
  • 对比学习:正对=同一样本不同增广,负对=不同样本;表征对增广不变、对不同样本不同;之后可直接聚类或接小分类头(50:1650:26)。
  • 非对比学习:不要负对,只拉近正对 → 有 mode collapse 风险(全输出同一个表征);解法=双网络:online(学生)+ target(老师,可以是 online 的滑动平均),online 分支多一个 linear predictor 造成不对称,防坍缩(50:3650:38)。医学影像/NLP 里「负样本」难定义,非对比更合适(50:40)。
  • 几何自监督:从「对增广不变(invariance)」升级为「对增广等变(equivariance)」——输入怎么变,输出按已知规则跟着变;用 detransformation(逆变换)把增广的影响从预测里解出来(50:4850:52)。
  • 任务:定位显微图中粒子/细胞的 (x,y)。数据:仿真 51×51 点粒子(衍射极限光斑),训练集只要 100 张且不带位置标注(50:6950:98)。
  • 平移等变算法(五步,50:12650:136):取一张图 x → 随机平移两版 x1,x2 → CNN+dense top 预测位置 → 逆平移回原坐标系 y1,y2 → 最小化 |y1−y2|(实际实现是对 8 个变换的预测与均值算 L1,即最小化方差)(50:225)。
  • 后果:网络只对「自己」一致 → 有整体 bias(参考点自选);修法翻转技巧:flip 后物体在 −p,网络仍加同 bias,y_flipped=−p+b;p=(y_direct−y_flipped)/2(50:29150:293)。
  • 把翻转并入训练(条件翻转+逆变换),网络自动无偏,不再需要后处理(50:31850:320)。
  • 架构教训:conv 层平移等变、dense 层不是 → dense top 会逼网络逐个位置学;去掉 dense top,改用质心池化(r=Σri·ρi/Σρi,LodeSTAR 式 6.1/6.2,还预测像素内偏移 Δri),对平移严格等变,且可在任意大小图上预测多个物体(概率通道出多簇)(50:40450:426)。global average pooling 只有不变性没有等变性,不行(50:408)。
  • LodeSTAR(Midtvedt 2022 Nature Communications 13:7492):三输出通道 ρ、Δrx、Δry;从「十万张标注」降到「一张裁剪图」(50:6「from hundreds of thousands of images to just one」)。
  • Project 6A:Cell Tracking Challenge BF-C2DL-HSC(小鼠造血干细胞),单细胞裁剪图训练,多细胞大图检测;真值来自 TRA 分割的 centroid。
  • Seminal ch6:Doersch 2015 pretext(预测 patch 相对位置);Chen 2020 SimCLR(对比);Grill 2020 BYOL(非对比);Midtvedt 2022 LodeSTAR(50:737 段起)。

Ch7 循环神经网络(text/51–56)

  • RNN 动机:之前的网络把每个样本当独立处理;序列数据(时序/视频)里「上一帧的值决定下一帧」= 递归关系;RNN 用隐藏状态把历史喂回来 = 一种记忆(52:352:5)。
  • 梳状滤波器(comb filter)教学例(52:1552:37):h = 0.5·x + 0.5·h;方波输入 [0,0,0,0,1,1,...] → 输出爬升 0.50, 0.75, 0.88, 0.94, 0.97, 0.98, 0.99, 1.00(指数逼近);降落对称。回声/混响/flanger 音效原理。
  • 加 sigmoid 非线性 + 输出权重 W → 最简 RNN:h=sigmoid(U·x+V·h+b), y=sigmoid(W·h)(52:6152:66)。
  • Jena Climate 数据(53):德国耶拿,2009-01-01 到 2016-12-31,14 个测量,每 10 分钟一条(53:7)。
  • 任务:用过去 2 天(288 步)预测次日中午(滞后 72 步=12h)气温;输入形状 (2918, 288, 14)(53:80)。
  • 归一化:用训练集均值/方差;警告长期趋势会被归一化抹掉 → 可先去趋势(53:96)。
  • 常识基准(53:13253:148):「明天=今天同时刻」MAE=2.67°C(归一化 0.32);无基准就无法判断模型是否真有效。
  • 结果阶梯:简单 RNN(hidden=2,39 参数)MAE≈0.36/0.38,输给常识基准(53:286);堆两层 hidden=10(约 1,600 参数)也只是接近基准(53:350);GRU(update gate+reset gate,门=0~1 的开关;dropout 0.2)验证 0.27,明显优于基准;且因 dropout,验证损失低于训练损失(53:388);LSTM(4 门:input/forget/cell/output,参数更多,dropout 加到 0.3)≈0.27;更复杂任务(长期依赖)上 LSTM 一般更强(53:417)。
  • 深堆叠的代价:梯度太小(vanishing)或太大(exploding),参数多易过拟合(53:331)。
  • dropout 机制(53:36453:366):训练时随机关闭一部分神经元,逼其他神经元分担;预测时全开。
  • Project 7A seq2seq 翻译(54,55k):encoder RNN 逐词读英文→压成 context vector(最后隐藏态)→decoder 逐词生成西语;Anki 双语语料(eng-spa.txt)。流程:tokenize(正则过滤)→vocabulary(token→整数)→Embedding 层(token→向量)→RNN。teacher forcing:以概率 teacher_prob 把真值词当下一步输入(快而稳),否则用自己上一步预测;高 prob 会让模型在无真值时挣扎 = exposure bias(54:480)。损失=masked NLL(忽略 padding)。评估时 no_grad、无 teacher forcing、<sos> 起步、自回归。
  • Seminal ch7(56):Elman 1990「Finding Structure in Time」;Hochreiter & Schmidhuber 1997 LSTM(Neural Computation 9:1735–1780,为解决 vanishing gradient);Cho 2014 RNN encoder-decoder(arXiv 1406.1078);Sutskever 2014 seq2seq(NeurIPS 27)。

Ch8 注意力与 Transformer(text/57–63)

  • 开场例句:「The teacher praised a student because she improved」——improved 指 teacher 还是 student?算法要靠词间关系才能解歧;传统模型长程依赖弱(58:358:5)。
  • self-attention(句内)vs cross-attention(句间);示范用 cross-attention:query 句 × key 句(58:758:14)。
  • 流程:tokenize → embedding(GloVe 300 维,预训练,共现统计)→ 句=矩阵 ℝ^{n×d}(58:3958:49)。
  • 点积注意力(58:6158:75):attention scores = Q·Kᵀ/√d(scaled:除以嵌入维平方根稳梯度)→ softmax → attention matrix → 乘 V 得输出。点积=对齐分数:同向最大、90° 为零(58:67)。
  • hash table 类比(书里 NOTE):query=检索词,key=条目,value=返回的数据(58:101)。
  • 无可学参数时:注意力只反映 GloVe 通用语义(she↔her 高),真正的威力在可学习版本(58:14658:148)。
  • 可训练版本:Wq/Wk/Wv 三个线性变换(torch.nn.Linear 300→256),先变换再点积;这是现代 transformer 自注意力的骨干(58:16958:197)。
  • additive attention(Bahdanau):Q+K 过 tanh 再线性降为 1 分;更有表达力但更贵;dot-product 快、适合高维大规模(58:20958:237)。
  • Project 8A(59):把注意力装进 7A 的 seq2seq;动机:encoder 最后隐藏态一个向量装整句,长句必丢信息(「This book is very interesting.」译对,「The book that I bought is very interesting.」出错)(59:359:5);注意力让 decoder 每生成一词动态回看输入不同部分;热图可视化对齐。
  • Project 8B(60):Transformer encoder 做情感分析;transformer 不靠顺序处理,多头注意力并行看整句,可扩展性更好(60:360:5)。多头注意力=在不显著加参数的情况下增强注意力层表达力(多个低维头)(60:7)。
  • transformer 层结构:multi-head attention → feed-forward,各带 residual connection + layer normalization(60:65)。mask:padding 位 attention score 置 −inf,softmax 后为 0(60:231)。
  • IMDb:50,000 影评正/负,25k/25k(60:79)。
  • Project 8C ViT(61):Google 2020;把图切成 patch(4×4,32×32 图 → 64 个 patch),patch embedding 用卷积实现(kernel=stride=patch size)(61:13261:138);位置编码;7 层 transformer、hidden 384、12 头;CIFAR-10(60k 图,32×32,10 类)从零训只到 ~70% 就封顶;CutMix(剪 patch 拼贴、标签按面积混合)改善;在大数据上预训练后才显威力(61:761:161)。
  • Seminal ch8(63):Bahdanau 2014 attention(arXiv 1409.0473);Luong 2015(arXiv 1508.04025);Vaswani 2017「Attention Is All You Need」(NeurIPS 30,弃循环/卷积; paving way for BERT/GPT);Dosovitskiy 2020 ViT(「An Image Is Worth 16×16 Words」,arXiv 2010.11929)。

Ch9 GAN(text/64–71)

  • 生成=让样本「与真实不可分辨」;GAN 相对 autoencoder/VAE 的独特处:用一个独立神经网络(discriminator)现场定义并更新损失函数(65:7,搜「separate neural network to define and update the loss function」)。
  • generator:从噪声 z 生成假数据;discriminator:二分类真/假,输出 0–1;假类随生成器变好而不断变(65:1365:21)。
  • 损失(65:2365:51):BCE;D 的损失=½(−log D(x)) + ½(−log(1−D(G(z))))(式 9.4);G 的损失=−log D(G(z))(把假图标成真,式 9.5)。G 想最大化 D 损失的第二项——对抗的数学表述。
  • 训练循环 12 步(65:5765:81):采真样本→D 算真损失;采 z~N(0,1)→G(z)→D 算假损失→反向传播 D;再用 y=1 算 G 损失→反向传播 G。GAN 不求最小化损失,求平衡(equilibrium)(65:83)。
  • 理想平衡点:G 完美伪造,D 只能瞎猜(50% 正确),损失≈0.5;实践中很难达到(66:270)。
  • DCGAN 实现(66):MNIST resize 64×64,归一化到 [−1,1];generator=4 层转置卷积+batch norm+ReLU,末层 tanh;latent_dim=100;discriminator=4 层卷积+batch norm+LeakyReLU;权重初始化 normal(0,0.02)(防 mode collapse)(66:92);BCE + Adam lr=0.0002 betas=(0.5,0.999);batch 128;GPU 必要(CPU 每 epoch 数小时,GPU 分钟级)(66:58)。
  • 训练不稳定:损失震荡/发散是常态;mode collapse=输出多样性丧失;对策:给标签加噪、调学习率(66:272)。
  • Project 9A conditional GAN(67):把类标签并进生成过程,可以点名要「4」或「2」。
  • Project 9B 虚拟染色(68):化学荧光染色侵入性/毒性/改变细胞状态;条件 GAN 学 bright-field→fluorescence 映射;数据来自 Christiansen 2018「In Silico Labeling」。
  • Project 9C CycleGAN(69):全息 vs 明场显微;难点=需要精确配准的图像对(动态样品做不到);CycleGAN 用循环一致在不配对的两域间转换(Zhu 2017)。
  • Seminal ch9(71):Goodfellow 2014(arXiv 1406.2661);Johnson 2016 perceptual loss;Zhu 2017 CycleGAN(ICCV)。

Ch10 扩散模型(text/72–80)

  • 物理扩散(布朗运动:Brown 观察,Einstein 解释)类比:图像逐步加噪直到完全不可辨认=forward diffusion;反向逐步去噪=reverse diffusion(73:773:15)。
  • DDPM(74):同时建模 forward(加噪,Markov:下一张只由当前一张决定,容易)和 reverse(去噪,难,需要神经网络)(74:974:11)。
  • forward 公式(10.1):x_{t+1}=√(1−βt)·xt + √βt·nt;βt=variance schedule,原论文线性 0.0001→0.02(74:27);reparameterization 技巧:x=μ+σ·ε,ε~N(0,1)(74:29)。
  • fast forward(式 10.2):xt=√ᾱt·x0 + √(1−ᾱt)·n,ᾱt=Παs;T 常取 ~1000,不推导中间步,直接从 x0 跳到任意 t——训练需要的正是这个(74:3774:41)。推导关键:两个独立高斯之和仍是高斯,方差相加(74:59)。
  • reverse(式 10.7–10.11):假设反向也是高斯;固定方差项 σt=βt;网络只需学均值;最终形式 x_t=(1/√αt)(x_{t+1}−(βt/√(1−ᾱt))·n)+√βt·r_t。让网络预测噪声 ñ(xt,t) 比预测干净图更简单;MSE 损失(式 10.12)用 fast forward 直接从 x0 算(74:9774:101)。
  • 扩散轨迹=核心概念:同一张图每次见到不同噪声版本 → 网络学会整个加噪轨迹 → 隐式学会数据分布;与 VAE 压缩到低维潜空间不同,diffusion 在高维流形上保留细微变化——这是它相对其他生成模型的力量所在(74:10574:109)。
  • 实现(75):MNIST 28×28 归一化 [−1,1];T=1000,beta 1e-4→0.02(75:39);网络=attention U-Net(输入:噪声图+时间步编码;输出:噪声估计);sinusoidal positional encoding 把时间步 t 编码成 256 维向量(sin/cos 各半,逆频率)(75:15175:176)。去噪推理循环与式 10.11 逐行对应(75:145)。
  • 训练采样:从纯噪声开始反复去噪;随机性来自 r_t → 同一初始噪声也能生成不同图(74:103)。
  • Project 10A conditional diffusion(76):类标签作条件,点名生成数字。
  • Project 10B 文生图(77):「Generate an image of the digit one」;text encoder 把 prompt 变 embedding;CLIP(OpenAI,4 亿图文对,双编码器+余弦相似度+对比学习)(77:14 段附近);classifier-free guidance 训练。
  • Project 10C 超分辨率(78):Abbe 衍射极限:光学显微镜分辨不出相距 <200 nm 的细节(DNA 直径 ~2 nm,差 100 倍);条件 diffusion 把低分辨显微图变高分辨;BioSR 数据集;SR3(Saharia 2022)。
  • Seminal ch10(80):Sohl-Dickstein 2015(非平衡热力学);Ho 2020 DDPM(NeurIPS 33:6840–6851);Dhariwal & Nichol 2021「Diffusion Models Beat GANs」;Saharia 2022 SR3;Rombach 2022 latent diffusion(CVPR;=Stable Diffusion 的底座);Bachimanchi & Volpe 2025(作者自己的教程,J. Phys. Photonics)。

Ch11 图神经网络(text/81–88)

  • 图=节点+边;边本身带信息(键强、社交频率)(82:3)。图像卷积靠规则像素网格;图不规则 → 卷积重定义为「按邻接结构聚合加权邻居信息」(82:5,搜「aggregating and weighing information」)。社会网络例子:用朋友偏好预测你的偏好。
  • 邻接矩阵 A
    i,j
    =1 表示 i→j 有边;无向图 A 对称(82:39)。node attributes/节点特征(原子类型、电荷)。
  • 玩具走查(82:4382:79):5 节点有向环图,属性 [1,0,0,0,0];每卷一次属性沿边移动一格:第 1 次 [0,1,0,0,0] … 第 5 次回到 [1,0,0,0,0]——信息沿图结构流动的最直观演示。
  • 卷积 = 矩阵乘:A @ x;有向图要 Aᵀ @ x(练习 11-4)(83:2683:33)。
  • GCN 层三步:transform(线性层)→ propagate(A@x)→ update(ReLU)(83:3983:57)。
  • 两大缺陷+修法(83:5983:88):①不聚合自身属性 → 加 self-loops(A+I);②度高的节点聚合值大 → 归一化 D^{-1/2} A D^{-1/2}(对称归一化)。
  • ZINC 分子数据集(83:10483:160):节点=原子(28 种类型),边=化学键;预测 logP(亲脂性,water-octitol partition coefficient penalized);加 embedding 层 + global average pooling + dense top 做回归。
  • message passing(84):GCN 处理不了边属性(键级 1/2/3);MP 层也三步,但 message=concat(源节点属性,目标节点属性,边属性)过线性层;聚合用 scatter_add 到目标节点;update=concat(自身属性,聚合消息)过线性层(84:3384:98)。GCN 是 MP 的特例(84:9)。edge index(2×E 张量)取代邻接矩阵。
  • Project 11A 图网络仿真器(85):SAND 数据集(颗粒系统,1000 训练/30 验证/30 测试);传统分子动力学暴力算每对粒子交互,算不起;GNN 用 message passing 更新粒子状态,预测未来位置速度(85:385:5)。
  • Project 11B MAGIK(86):细胞追踪=检测+跨帧连接;MAGIK(Pineda 2023 Nature Machine Intelligence)用 GNN 预测跨帧连接,从分割图建图。
  • Seminal ch11(88):Scarselli 2009 GNN 奠基;Bruna 2014 spectral networks;Gilmer 2017 message passing 统一框架;Kipf & Welling 2016 GCN(arXiv 1609.02907);Veličković 2017 GAT(arXiv 1710.10903);Pineda 2023 MAGIK(NMI 5:71–82);AlphaFold(Jumper 2021 Nature 596:583–589,图+注意力,2024 诺贝尔化学奖 Hassabis & Jumper)。

Ch12 主动学习(text/89,55k)

  • 问题:标注贵、专家标注更贵;主动学习(半监督方法)只挑最有信息量的样本去标注(89:489:6)。
  • 三要素(89:1689:20):query strategy(怎么挑)、unlabeled pool(候选池,多样性和规模影响效果)、labeling oracle(给真值的人/专家/自动系统)。
  • 附加优势=适应性:数据分布漂移时持续学习(89:22)。
  • 二分类走查:两组高斯点(中心 (−2,0)/(2,0),σ=1,各 100 个);logistic regression 全量训练 acc=0.97(89:79);主动学习循环(89:8789:110):每类随机标 1 个作种子 → 训练 → query 挑一个标注 → 循环至预算耗尽。
  • 随机采样 budget=25:uncertainty acc 0.965 vs random 更差;uncertainty 收敛更快(89:18589:232)。uncertainty 选的点集中在决策边界附近(89:341 附近「near the decision boundaries」)。
  • 多分类:uncertainty 变向量,三种度量(89:240);least confidence(最大概率最小)/small margin(最高与次高概率差最小;更稳,靠近两类边界而非多类交界,练习 12-1)/entropy(总不确定性,练习 12-3);large margin 反着挑最自信的(巩固已懂区域)。100 trials 平均曲线:uncertainty 用更少标注达到更高精度(89:364 附近)。
  • Project 12A(89:385 起):MNIST + CNN(4×64 conv + adaptive avg pool + MLP head);对比 uniform/uncertainty(margin)/adversarial;每轮标 120 张,总预算 1800(≈3% 的 60k),5 trials 取中位数。
  • adversarial 采样(deep-active-learning 思路,89:53689:570):训练 discriminator 区分「已标注/未标注」的 embedding;判为「已标注」=与已标相似=信息少;判别器挑多样性,Margin 准则供不确定性,合成单一加权信息分数;对抗训练 backbone 顺带给 embedding 加结构 → 小训练集泛化更好。结果:只用 3% 训练数据达到接近全量训练的精度(89:622 附近「only 3 percent of the training data」)。
  • Seminal ch12:待查文末(文件结尾在 Summary 后)。

Ch13 强化学习与 Q-learning(text/90–96)

  • RL 五要素(91:5):agent、environment、state、action、reward;policy(状态→动作的映射)+ value function(期望累计回报)。目标=最大化长期总奖励。
  • Q-learning(91:991:23):学 action-value 函数 Q(s,a);Bellman 方程(式 13.1):Q = 即时奖励 R(s,a) + γ·max Q(s′,a′);γ=折扣因子(0–1,大=重未来);更新规则(式 13.2):Q̃ ← Q̃ + α[估计最优奖励 − Q̃] (时序差分)。model-free:不需要环境动力学模型;适合离散有限状态动作。
  • 状态空间规模直觉:井字棋 3^9=19,683(可行,查表);大棋盘组合爆炸 → 需要 deep Q-learning 泛化(91:2591:29)。
  • exploration vs exploitation(91:47);curiosity-driven exploration:内在奖励=预测误差;对可预测奖励「无聊」;稀疏/误导性外部奖励环境下特别有效(91:4991:51)。
  • 简化 Tetris(92):Pajitnov 1984;方块 2–4 格;棋盘 2D NumPy 数组;drop 清行;奖励设计:消 1 行 +1、2 行 +10(10^(n−1) 指数),输=−100(92:26092:266)。奖励设计要激励一次消多行。
  • Q-learning 版(93):teleport 机制(直接把方块放到指定位置+朝向)解决「奖励稀疏、反馈太慢」(93:393:31);状态=棋盘 16 bit + 方块 2 bit=18 bit → 2^18=262,144 个状态(93:166)——「相当简单的游戏就已经这么大」。
  • epsilon-greedy(93:199):以 epsilon 概率随机动作,否则查表取最大 Q;平衡探索/利用。训练:1000 局,α=0.2,γ=1,固定方块序列;但学到的策略脆弱——epsilon=0.1 时一步随机就崩(练习 13-4);随机序列 + 20 万局 + epsilon=0.001,Q 表非零行也只有 ~20,000/262,144(93:361)——查表路线在真实 Tetris 上不可行,引出 deep Q-learning。
  • Deep Q-learning(94):神经网络逼近 Q(s,a),跨相似状态泛化;QNet + TargetNet 双网络:只用 QNet 选动作+算目标会自激震荡(QNet 高估某动作→反复选它→误差放大);TargetNet=同一架构另一套权重,低频同步,提供稳定目标;师生类比(TargetNet=老师)(94:1194:21 NOTE)。
  • replay buffer(94:2794:271):存经验 (s,a,r,s′),到 buffer_size 后随机采 batch 训练;打破连续样本相关性 → 稳定训练;目标=r+γ·max Q_Target(next);epsilon 随训练渐减。
  • Seminal ch13(96):Bellman 1957 Dynamic Programming;Sutton 1988 temporal difference;Watkins & Dayan 1992 Q-learning;Sutton 1999 policy gradient;Mnih 2013「Playing Atari with Deep RL」(arXiv 1312.5602,DQN 超人级);Silver 2016 AlphaGo(Nature 529:484–489)。

Ch14 储层计算(text/97,42.7k)+ 结论(text/98)

  • 动机:前面所有方法都要训练大量参数;reservoir computing = 固定随机「储层」+ 只训练读出层(97:1097:14)。储层=把输入投影到高维空间让模式可分;动态记忆。储层做重活,输出层挑有用的计算(97:16)。
  • 只训输出权重 → 计算负担骤降、天然抗过拟合;擅长时序/动态系统。
  • Lorenz 系统(97:2297:32):气象学家 Lorenz 1960s,大气对流的简化模型,3 个非线性确定性微分方程;σ=10, ρ=28, β=8/3(原始参数);Lorenz attractor=蝴蝶形,不自交(确定性);蝴蝶效应:初始条件改 10⁻⁶(x0=1+0.000001)→轨迹先贴近后指数分离(97:156);Lyapunov 指数=邻近轨迹分离速率,正=混沌;但两条轨迹收敛到同一个 attractor——短期敏感、长期有界,不可预测性与秩序并存(97:19797:199)。
  • 实现(97:21397:268):dim_reservoir=300,edge_probability=0.1;A 随机初始化后缩放 spectral radius(特征值最大绝对值)到 ~1.1(略高于 1 可调);spectral radius 控制动力学:太小信号衰减太快,太大信号爆炸;W_out 初始为 0。图论小课:随机图、邻接矩阵、特征值。
  • 训练(97:29997:356):状态更新 rt=sigmoid(A·rt−1+W_in·xt)(式 14.3);W_out=正则最小二乘闭式解(式 14.5):(XᵀRᵀ)(RRᵀ+λI)⁻¹,λ=0.0001;训练完全确定性——不随机、收敛快、可复现、可解释;代价:探索不了随机方法能找到的解,储层结构设计需要专门知识(97:35297:356)。数值稳定 sigmoid(正负分支)。
  • 预测结果:短期贴合,长期发散(正 Lyapunov 指数,误差指数增长);但 attractor 拓扑被复现——单条轨迹必然分道扬镳,整体样式保持 → 可预测定性特征(97:44697:452)。
  • Seminal ch14:Hopfield 1982(PNAS 79:2554–2558,联想记忆、吸引子状态;2024 诺贝尔物理奖——和 ch1 的 Hinton 同年同奖);Jaeger & Haas 2004 echo state networks(Science 304:78–80)。
  • 结论(98):全书到此;后续建议:读 Nature Machine Intelligence/IEEE TNNLS、NeurIPS/ICML/CVPR、arXiv;社区;GitHub 开源贡献。无新技术内容。

贯穿全书的线索(供总纲用)

  1. 同一条主线:把「能调的数」装进越来越专门的结构——dense(全连接)→ conv(空间结构)→ encoder-decoder/潜空间 → U-Net(多尺度)→ RNN(时间)→ attention/Transformer(任意位置间的动态连接)→ 图网络(任意拓扑)→ GAN/diffusion(生成)→ active learning/RL/储层(训练与计算范式)。
  2. 显微镜/物理场景是全书项目底色(作者群是物理学家):光镊数字孪生、粒子定位、疟疾血涂片、组织分割、量子点、虚拟染色、全息↔明场、分子性质、颗粒模拟、细胞追踪、超分辨率、Lorenz 混沌。 Unique selling point:所有项目普通硬件可跑,大量用仿真生成带真值的训练数据(deeptrack)。
  3. 反复出现的方法论主题:ground truth 从哪来(人工标注/仿真/自监督);过拟合与数据划分;选型权衡(表达力 vs 计算成本/数据量)。
  4. MNIST 作为贯穿基准出现 5 次(ch1 分类、ch4 VAE/WAE、ch9 GAN、ch10 diffusion、ch12 主动学习)。
  5. 2024 双诺贝尔奖锚点:物理奖 Hinton(ch1 反向传播)+ Hopfield(ch14);化学奖 Hassabis & Jumper(ch11 AlphaFold)。
  6. crash course 定位证据:「如果你会写 for 循环和定义函数,就能开始」(导论);每章 summary+seminal works+挑战项目;作者自己的 Deeplay 库。