2026/10/25 18:21:36

吴恩达DeepLearning.ai中文版笔记PDF:从公式推导到NumPy代码复现的体系化学习指南

吴恩达DeepLearning.ai中文版笔记PDF:从公式推导到NumPy代码复现的体系化学习指南 简介这份PDF是吴恩达DeepLearning.ai系列课程的中文笔记由黄海广团队翻译整理基于斯坦福大学2014年机器学习课程视频编写面向机器学习初学者与希望系统梳理算法体系的从业者。内容覆盖监督学习参数与非参数算法、支持向量机、核函数、神经网络、无监督学习聚类、降维、推荐系统以及深入学习等核心主题并结合自动驾驶、语音识别、网络搜索、医疗信息、计算机视觉等案例讲解算法落地思路。资源包为1个PDF文件大小约11.15MB结构按周次与章节组织包含课程概述、公式推导、Octave操作及配套PPT要点便于按目录逐章查阅。目前已有2054人学习下载。对于想打牢机器学习基础、对照视频复习概念与推导的读者这份笔记可作为体系化的中文参考材料。1. 吴恩达 DeepLearning.ai 中文版笔记 PDF一份被低估的体系化学习地图很多人第一次接触深度学习是在 Coursera 上点开吴恩达那门《Neural Networks and Deep Learning》然后被满屏的英文术语和数学推导劝退。而「吴恩达 DeepLearning.ai 中文版笔记 PDF」这个关键词背后其实是一群学习者把五门专项课程的视频内容、作业思路和公式推导重新用中文整理成的一份体系化文档。它不是官方教材也不是简单的字幕翻译而是把「反向传播为什么这么算」「正则化到底在惩罚什么」这类卡人的点用中文重新讲了一遍。适合谁适合英语阅读吃力、但又不想只看短视频切片的人适合考研 408 之外想补深度学习基础的人也适合已经会调库、但说不清梯度消失和梯度爆炸区别的工程师。这份笔记的价值不在于「新」而在于它把一条从逻辑回归到序列模型的完整路径压进了一份可以离线翻阅的 PDF 里。2. 这份笔记 PDF 到底覆盖了什么五门课的知识骨架拆解2.1 从神经网络基础到序列模型的内容边界DeepLearning.ai 的专项课程原本分为五门神经网络和深度学习、改善深层神经网络、结构化机器学习项目、卷积神经网络、序列模型。中文版笔记通常按这个顺序组织但不同整理者的取舍差别很大。有的版本把第三门「结构化机器学习项目」压缩成几页因为那部分偏工程经验缺少公式有的版本则把 CNN 和 RNN 的推导补得很厚因为这两块是面试和实际项目里最常被追问的。我一般会先看目录里有没有这几块内容前向传播和反向传播的链式法则推导、偏差方差与正则化、优化算法Momentum、RMSProp、Adam、卷积操作的手算示例、RNN 的 BPTT 展开、以及词嵌入和注意力机制的入门。如果一份笔记里只有概念定义没有推导那它更适合复习而不是学习如果推导完整但缺少代码对应那它适合考试但不适合落地。从检索到的热词来看「图解 transformer pdf」「操作系统笔记」「408 考研笔记」这些词频繁出现说明很多人是在用「笔记 PDF」这个形式做体系化学习。DeepLearning.ai 中文版笔记的定位类似它不是速查手册而是一条按周推进的学习路线。你拿到 PDF 之后第一件事不是从第一页读到最后一页而是先确认它对应的是哪一版课程大纲因为 2021 年之后课程有过一次比较大的改版旧版笔记里的编程作业链接和数据集可能已经失效。2.2 不同整理版本的差异与选择标准市面上的中文版笔记大致分三类。第一类是逐字翻译型把英文字幕直接转成中文优点是完整缺点是读起来像机翻术语不统一。第二类是课堂笔记型按视频顺序记录要点公式和图示保留适合跟着视频同步看。第三类是重构型整理者会用自己的话重新组织补充额外例子甚至加入 PyTorch 实现这类质量最高但数量最少。选择时看三个指标公式是否用 LaTeX 排版而不是截图、代码块是否有语言标注和注释、章节末尾是否有习题或自测。如果一份 PDF 里公式全是模糊截图那它在手机上的阅读体验会非常差打印出来也看不清下标。另外注意文件大小一份完整的五门课笔记通常在 5MB 到 20MB 之间如果只有几百 KB大概率是删减版或者只有目录。提示不要盲目追求「最全版本」。笔记的价值在于你能否跟着推导一遍而不是收藏了多少页。3. 把 PDF 笔记变成可运行代码从公式到 NumPy 的最小复现3.1 用 NumPy 手写一层神经网络的前向与反向看笔记最大的陷阱是「看懂了但写不出来」。我的做法是每看完一章就用 NumPy 把核心公式复现一遍。下面是一个单隐藏层网络的前向和反向传播对应笔记里「神经网络基础」那一周的内容。import numpy as np def sigmoid(z): return 1 / (1 np.exp(-z)) def forward_backward(X, Y, W1, b1, W2, b2): m X.shape[1] # 前向传播 Z1 np.dot(W1, X) b1 A1 np.tanh(Z1) Z2 np.dot(W2, A1) b2 A2 sigmoid(Z2) # 计算损失对应笔记里的交叉熵公式 cost -np.sum(Y * np.log(A2) (1 - Y) * np.log(1 - A2)) / m # 反向传播链式法则逐层回传 dZ2 A2 - Y dW2 np.dot(dZ2, A1.T) / m db2 np.sum(dZ2, axis1, keepdimsTrue) / m dZ1 np.dot(W2.T, dZ2) * (1 - np.power(A1, 2)) dW1 np.dot(dZ1, X.T) / m db1 np.sum(dZ1, axis1, keepdimsTrue) / m return cost, dW1, db1, dW2, db2这段代码的关键在dZ1那一行(1 - np.power(A1, 2))是 tanh 的导数。笔记里通常会写成 (1 - a^{[1]2})但落到代码里必须用np.power而不是**在数组上直接操作否则广播行为可能不符合预期。keepdimsTrue是为了保持维度一致避免后续加法时出现意外的广播。参数m是样本数除以它是为了取平均梯度这一点在笔记的「向量化」部分会重点讲。如果你用的是 ReLU导数就变成Z1 0但要注意 ReLU 在 0 点的次梯度问题实际实现里通常取 0。这些细节笔记里可能一笔带过但写代码时躲不掉。3.2 用笔记里的参数初始化方法验证梯度消失笔记里讲权重初始化时会给一个公式(W^{[l]} np.random.randn(shape) * np.sqrt(2 / n^{[l-1]}))。很多人看完就忘直到自己训练时发现损失不下降才想起来。下面这段代码可以直观看到不同初始化对激活值分布的影响。import numpy as np import matplotlib.pyplot as plt def init_and_check(layers_dims, scale1.0): np.random.seed(3) A np.random.randn(layers_dims[0], 1000) for i in range(1, len(layers_dims)): W np.random.randn(layers_dims[i], layers_dims[i-1]) * scale A np.tanh(np.dot(W, A)) return A # 放大初始化观察激活值饱和 A_big init_and_check([100, 50, 30], scale5.0) # 标准初始化 A_ok init_and_check([100, 50, 30], scalenp.sqrt(1/100)) print(大权重激活均值:, np.mean(np.abs(A_big))) print(标准初始化激活均值:, np.mean(np.abs(A_ok)))运行后你会看到大权重下激活值几乎全在 ±1 附近tanh 饱和梯度接近 0。这就是笔记里说的「梯度消失」的直观来源。参数scale控制初始权重的标准差标准做法是np.sqrt(1 / n_prev)或np.sqrt(2 / n_prev)前者适合 tanh后者适合 ReLU。这个实验不需要 GPU几秒钟就能跑完但比只看公式印象深得多。3.3 把笔记里的优化算法写成可对比的脚本笔记在「改善深层神经网络」那一周会讲 Momentum、RMSProp 和 Adam。只看公式容易混淆我一般会写一个最小对比脚本在同一个二次函数上跑这三种优化器。import numpy as np def optimize(optimizer, lr0.1, steps50): x np.array([5.0, -3.0]) v np.zeros_like(x) s np.zeros_like(x) beta1, beta2, eps 0.9, 0.999, 1e-8 for t in range(1, steps 1): grad 2 * x # 目标函数 f(x)x^2 的梯度 if optimizer momentum: v beta1 * v (1 - beta1) * grad x - lr * v elif optimizer rmsprop: s beta2 * s (1 - beta2) * grad ** 2 x - lr * grad / (np.sqrt(s) eps) elif optimizer adam: v beta1 * v (1 - beta1) * grad s beta2 * s (1 - beta2) * grad ** 2 v_hat v / (1 - beta1 ** t) s_hat s / (1 - beta2 ** t) x - lr * v_hat / (np.sqrt(s_hat) eps) return x for opt in [momentum, rmsprop, adam]: print(opt, optimize(opt))注意 Adam 里的偏差修正1 - beta1 ** t这是笔记里最容易漏掉的一步。如果不做修正前几步的更新会偏小收敛变慢。eps放在分母防止除零通常取1e-8。这个脚本跑完你会发现 Adam 在初始几步的下降幅度和另外两个明显不同这就是偏差修正的作用。4. 避坑与排查读这份笔记 PDF 时最容易翻车的五个地方4.1 公式符号和课程版本对不上现象笔记里写 (W^{[l]}) 的维度是 ((n^{[l]}, n^{[l-1]}))但你自己推的时候发现对不上矩阵乘法。原因不同整理者可能混用了旧版和新版的符号约定旧版课程里有些地方用行向量表示样本新版改成了列向量。解决以你正在看的视频版本为准如果只看 PDF就统一按「样本按列排列」来推即 (X) 的维度是 ((n_x, m))。遇到矛盾的地方用一个小矩阵手算一遍比反复看公式快。4.2 编程作业的环境依赖失效现象笔记里提到import h5py读取数据集但你本地跑的时候报错或者数据集下载链接 404。原因Coursera 的作业环境是定制的很多辅助函数和数据集路径在本地不存在。解决不要试图完整复现作业环境。把笔记里的核心函数抽出来用自己的数据跑通即可。数据集可以用 sklearn 的make_moons或load_digits替代效果一样能验证算法。4.3 把「结构化机器学习项目」当成技术章节读现象读到第三门课时觉得内容很水全是「什么时候该换评估指标」这类经验之谈于是跳过。原因这一部分本身就不是推导型内容它的价值在于工程判断。解决不要跳过但也不要逐字读。把它当成检查清单每读一条就问自己「我现在的项目有没有这个问题」。比如「如果开发集和测试集分布不同应该重新划分」这一条很多人在实际项目里踩过坑才回头翻。4.4 PDF 里的代码截图无法复制现象笔记里的代码是图片想复制到编辑器里跑结果只能手敲还容易敲错。原因整理者为了排版美观用了截图。解决优先找带文本代码块的版本。如果只有截图用 OCR 工具转一遍但转完必须逐行核对尤其是下标和括号。我一般会对照公式重新写一遍而不是直接信任 OCR 结果。4.5 只看不练笔记变成收藏品现象PDF 下载了几十份每份都只看了前几页感觉自己一直在「学习」但实际写不出代码。原因阅读带来的熟悉感被误认为掌握。解决给自己定一个规则——每读完一章必须写一段能运行的代码或者画一张手推图。笔记里的公式至少要在纸上推一遍链式法则再在代码里验证数值。这个习惯比任何笔记版本都重要。5. 进阶用法用这份笔记搭建自己的知识索引和面试题库笔记读完不是终点。我自己的做法是把它拆成两个衍生品一个用于快速检索的索引表一个用于面试自测的问题清单。索引表按「概念 → 笔记页码 → 我的代码文件」三列组织这样遇到问题时不用翻整本 PDF。问题清单则把笔记里的「为什么」抽出来比如「为什么用交叉熵而不是均方误差」「为什么 Adam 需要偏差修正」「为什么卷积核参数比全连接少」。每个问题要求自己用三句话回答答不上就回去翻对应章节。下面是一个索引表的示例结构你可以用 Markdown 或 Excel 维护概念笔记章节关键公式我的验证代码反向传播第 2 周链式法则bp_numpy.py正则化第 3 周L2 惩罚项reg_compare.pyAdam第 6 周偏差修正optimizer_compare.py卷积第 4 门互相关运算conv2d_manual.py另一个进阶用法是把笔记里的序列模型部分和 Transformer 对照看。笔记里讲的 RNN、GRU、LSTM 是理解注意力机制的前置知识但笔记本身可能没有深入 Transformer。这时候可以找一份「图解 transformer pdf」作为补充把自注意力的计算和 RNN 的隐状态更新做对比。你会发现两者都在做「根据上下文加权」只是 RNN 是串行递归Transformer 是并行加权。这个对比想清楚之后面试里被问到「为什么 Transformer 取代了 RNN」就能答到点上。我自己的习惯是每半年把这份笔记翻一遍但每次只挑一个主题深挖。第一次是反向传播第二次是优化器第三次是序列模型。每次都会发现之前漏掉的细节比如 Adam 的beta1和beta2默认值为什么是 0.9 和 0.999而不是 0.99 和 0.9999。这种问题没有标准答案但推一遍指数加权平均的公式就能理解beta越大历史窗口越长对近期变化的响应越慢。这些细节在面试里不一定考但在调参时能帮你判断该往哪个方向改。希望帮到你。本文还有配套的精品资源点击获取