尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

李沐《动手学深度学习》191集模块拆解与三条学习路径

李沐《动手学深度学习》191集模块拆解与三条学习路径 李沐的《动手学深度学习》课程视频在深度学习自学者群体里的地位有点特殊。它不是那种几十集的刷题课也不是只讲概念的科普视频而是真正把一本开源教材的每一小节都拆开讲、带着你一行一行过代码的硬核长课。很多人点开播放列表看到191集这个数字会先吸一口气然后开始纠结是要从头到尾全看吗哪些模块能跳过去学了几个月能不能把代码跑通这篇文章就把这191集拆开给你看按模块盘清楚每个篇章在讲什么再根据零基础、有机器学习经验、工程向转型这三种情况各给一条明确的学习路径。适合正在犹豫要不要学、以及已经开始但进度卡住的人收藏参考。1. 课程内容全景为什么这套课能成为“教材级”自学资源1.1 课程、教材、代码三者之间的关系李沐这套课程和《动手学深度学习》这本书是同源的作者团队把书里的每一节内容扩展成视频讲解配套的Jupyter Notebook代码可以随开随跑。191集这个数字在不同剪辑版本里不完全一致有些是按框架分开的有些是合并的但主体模块基本是同一套框架。也就是说课程本身是“视频教材可运行代码”三合一的组合这是它比大多数网课强的地方任何一个概念讲完紧接着就是一个能跑的实验你在notebook里改改参数立刻能看到效果变化。很多人容易忽略的一点看视频只是使用这套资源的最小环节。真正的学习发生在你亲自运行代码、修改代码、观察结果的过程中。我的经验是课上讲10分钟的概念自己动手调20分钟比听10遍都管用。1.2 先修要求数学和编程底线到底要多少被问得最多的就是“我数学不好能不能学”。我的答案一直都是不需要你变成数学系学生但这几个东西不能完全没有。线性代数里矩阵乘法、转置、形状要熟悉因为整个深度学习代码都在和张量形状打交道微积分里导数、偏导、链式法则要能认出来反向传播的核心就是链式法则概率统计里期望、方差、常见分布的基本概念要有个印象。换句话说不需要会证明但需要看公式时能知道它大概在说什么。编程方面Python的基础语法得先过关尤其是列表推导式、字典、类的基本用法和NumPy的常见操作。如果这些还没掌握就去看课很容易在跑notebook时一头雾水。个人建议正式上课之前最好能独立写一个小的Python脚本去处理一组数据比如读CSV、做简单统计、输出结果。有这个能力垫底跟课会顺很多。1.3 定位判断它是“动手学”不是“理论证明课”这套课程最容易被误解的点在于名字里的“动手”两个字。它不是让你先学完所有数学再做实验而是用一个又一个可运行的例子把抽象概念带出来。整体难度是在学的过程中一点点升高的前面偏简单越往后越需要时间消化。正因如此它适合的是愿意动手实操的人而不是只想“听一遍就懂”的旁观者。如果你能在看每个小节前先点开notebook跑一遍再看视频去验证理解学习效率会明显高于跟着视频无脑看下去。1.4 值不值得从头到尾学直接说我的判断对大多数人不需要“必须”从头到尾。课程是按教材顺序排的不是按每个人的学习目的排的。如果你是想系统打底建议按顺序学主流模块如果是项目驱动完全可以把课程当作一部“可以按目录查的工具书”哪里不懂查哪里。后面的学习路径部分我会专门展开说这层怎么选。2. 191集按模块拆解每个篇章到底在教什么2.1 预备知识与线性神经网络把“训练循环”长在肌肉里课程开头这部分的模块对应的是“能跑起第一个模型”的阶段。预备知识里会讲到数据操作张量、数据预处理、线性代数、微积分和自动求导。很多初学者觉得这些内容太偏理论但其实它们在为后面所有模型打底——比如张量形状搞不清楚后面写卷积层代码会反复报错自动求导不理解的后面手动实现反向传播时会一脸懵。线性神经网络分两块线性回归和softmax回归。这块最大的收获是第一次完整见到“模型定义—损失函数—优化算法—训练循环”这个流程拿数据喂给模型算损失求梯度更新参数反复迭代。这个流程会陪伴你整个深度学习生涯可以说把这段代码闭着眼睛写出来后面的课都会轻松很多。2.2 多层感知机与深度学习计算从几层网络走向工程结构多层感知机模块讨论的是“如果只用线性变换再多层也还是线性的怎么办”。于是引入激活函数ReLU、Sigmoid等给模型非线性能力接着讲权重衰减、暂退法dropout这些正则化手段再讲前向传播和反向传播的计算过程。为什么这章能劝退一批人因为数学公式开始变多模型也不像之前那么好调。但只要抓住一条主线——训练过程中信息的传播方向前向传播把输入变成预测反向传播把损失导数传回每一层用来更新参数——很多细节就能挂在这条主线上不容易散。深度学习计算模块是容易被当成“无聊章节”跳过的部分但我建议至少扫一遍层和块、参数管理、自定义层、读写文件、GPU使用。这块解决的是“模型在工程上怎么组织、怎么保存、怎么部署”的基本问题。比如你在实际项目里经常会遇到需要把模型文件保存再加载的情况如果没看过这章遇到“load模型报错”时多半会束手无策。2.3 卷积神经网络视觉任务的主战场从这部分开始课程进入“视觉”这个最经典的深度学习应用领域。卷积神经网络CNN模块从最基础的卷积层开始讲然后是填充和步幅怎么影响输出形状、多输入多输出通道到底是什么意思、汇聚层为什么能降低特征分辨率。基础结构讲完课程就带着你走一遍从LeNet到ResNet的经典网络演进史LeNet、AlexNet、VGG、NiN、GoogLeNet、批量规范化、ResNet、DenseNet。我的建议是网络结构不一定要全部手写但必须跟着代码过一遍理解每个网络解决的核心问题。比如ResNet的跳跃连接是为了缓解深网络梯度消失的问题DenseNet用稠密连接来加强特征复用。能用自己的话说出“为什么这个网络要这样设计”比背住每层参数重要得多。章节最后还会涉及一些更偏应用的视觉内容属于拓展视野。2.4 循环神经网络与序列建模处理有先后顺序的数据处理图片时像素之间讲的是空间关系而文本、语音、时间序列这些数据本质上是按顺序排列的。循环神经网络RNN模块就是为这类数据准备的。课程会先讲序列模型和文本预处理再讲语言模型是干什么的最后过渡到RNN单元的内部结构。RNN刚接触时会觉得计算图循环来循环去很绕。其实一个很粗的类比是你在音乐软件里点歌系统会根据你前面的点歌历史预测你下一首要点什么。RNN做的就是这个事情它把“前面出现过的信息”压缩成一个隐藏状态每往后读一步都会用这个隐藏状态和当前输入一起决定下一步的预测。比较难的是梯度在时间步上反向传播时会消失或爆炸这也是后面GRU、LSTM这些门控结构存在的意义。课程会把GRU、LSTM、深度循环网络、双向循环网络都过一遍还会讲机器翻译的编码器—解码器架构和序列到序列模型。这部分内容量很大但不需要一口气啃完可以拆开学。2.5 优化算法与计算性能训练总出问题时回看这章很多学员学到CNN或RNN时会发现模型结构照抄没问题但loss就是不掉或者训练特别慢。这时候去翻优化算法模块非常对症。课程会讲梯度下降、随机梯度下降、小批量随机梯度下降的区别接着是动量法、AdaGrad、RMSProp、Adam以及学习率调度策略。不要小看这部分动手实验时最常见的问题就是学习率设置不合理要么大得loss乱跳要么小得半天不动。计算性能模块则偏工程底层一点包括编译器和解释器的差别、异步计算、自动并行、硬件的选择策略、多GPU训练还有参数服务器思路。对刚开始学习的人来说这一部分建议放后面等你自己开始训练比较大的模型、觉得显存不够用或者GPU利用率上不去时再回来看会发现每一条都踩在痛点上。2.6 计算机视觉、自然语言处理与注意力机制走向综合应用课程最后的大模块是把前面学到的能力综合起来。计算机视觉部分除了前面CNN的经典结构外还会讲图像增广、微调迁移学习的重要工具、目标检测锚框、SSD、R-CNN系列、语义分割、样式迁移以及GAN的基本思想。自然语言处理部分会讲词嵌入word2vec、GloVe、情感分析、BERT还有自然语言推理。最后的注意力机制模块会统一讲Bahdanau注意力、多头注意力、自注意力最后用Transformer收尾这也是现代大模型底层的核心结构。到了这个阶段课程每个小节的信息密度都很高代码也更长更复杂。真正学到这里时建议不要追求一天看好几集而是宁可慢一点把每个notebook拆成几段来运行和调试搞清楚每段代码在做什么。把上面的内容汇总一下可以形成下面这张快速索引表我建议把它收藏下来学完一个模块勾一个模块。模块范围核心知识点建议侧重预备知识张量、自动求导、数据预处理打好基础线性神经网络线性回归、softmax回归必须吃透训练循环多层感知机激活函数、正则化、前向/反向传播建立非线性理解深度学习计算参数管理、自定义层、GPU工程入门卷积神经网络卷积、池化、经典网络、目标检测视觉方向重点循环神经网络RNN、GRU、LSTM、seq2seq序列方向重点优化算法SGD、Adam、学习率调度排错必备计算性能多GPU、自动并行、硬件按需选读视觉与NLP进阶图像增广、BERT、Transformer实际项目参考3. 三条学习路径按照基础对号入座3.1 完全零基础建议按主干顺序学时间预算4到6个月如果你是刚接触深度学习的纯新人我的建议是先不要想“哪里能跳”而是按课程自带顺序把主干模块走一遍走完再做减法。前期花两三周过预备知识部分同时补一补Python和NumPy然后进入线性神经网络和多层感知机这两个模块是整个体系的骨架代码一定要亲手敲最好能脱离notebook的提示独立写出来。CNN和RNN是接下来两个大块难度开始上升每天能高质量看一个小节就很不错。优化算法建议在训练模型遇到困难时再系统看计算性能模块可以先跳过到后面训练大模型时再回看。整个流程走下来通常需要4到6个月前提是几乎每天都有学习时间。3.2 有机器学习基础但没做过深度学习2到3个月集中攻坚如果你已经接触过机器学习比如懂线性回归、逻辑回归、SGD这些概念那预备知识里的很多数学内容可以快速刷过不用在理论推导上花太多时间。直接从线性神经网络开始会更高效但要注意即便概念都懂课程里的代码实现和sklearn那种调包风格差别很大必须在PyTorch的tensor操作上多花时间适应。多层感知机、CNN、RNN、注意力机制这几个模块是核心重点建议逐个吃透每个模块都完成配套代码练习。计算性能和深度学习计算这类偏工程的章节挑自己需要的看就行整体时间预算2到3个月。3.3 在职工程师或项目驱动型学习者按目标模块切入不追求全看完对这部分读者来说191集课程更像一本带视频的代码参考手册。建议先明确自己的实际任务属于哪类如果做图像分类直接切入CNN模块再重点看微调迁移学习和目标检测如果做文本分类或理解类任务直接看RNN到注意力机制尤其要把Transformer吃透如果做推荐系统或时序预测序列模型、优化算法是主要参考。采用这种方式时唯一的建议是“定向补基础”——看CNN之前至少要把线性神经网络和多层感知机快速过一遍因为课程后面的所有内容都建立在“训练循环”这个概念上直接跳太狠容易看不懂代码。3.4 关于学习节奏和复习的通用建议无论走哪条路径都建议把视频总时长和练习时间控制在1比2以上看一集视频只用二三十分钟但跑通并理解配套的notebook可能要花一两个小时。我的习惯是每完成一个模块就建一个Markdown笔记把当时卡住的问题、最后的解决方式、训练出来的loss曲线都贴进去。不要追求永远往前赶学新的内容时如果发现自己连前面模块的核心概念都要重新查说明节奏快了先回头巩固。4. 跟课实操最容易卡住我的几个环节4.1 环境问题先把PyTorch和d2l工具包装好课程代码依赖一个叫d2l的工具包里面有课程封装好的训练函数、画图函数和数据处理函数。建议不要在系统Python里直接装而是建一个独立虚拟环境比如用condaconda create -n d2l python3.9 conda activate d2l pip install jupyter d2l接着装PyTorch。CPU版本可以满足课程绝大多数实验如果电脑有NVIDIA显卡可以装GPU版本训练快一些。注意安装时要按照自己系统的命令执行直接照搬某些过时教程里的命令可能会踩坑。另外Jupyter Notebook运行时如果import d2l失败先把内核切换成d2l环境大部分这类问题都是内核没选对。4.2 没GPU能不能学初期预算不够的话CPU完全够用一个常被问的问题是不是必须买显卡才能学这门课。我的建议是前几章和大部分练习用CPU跑完全没问题尤其线性回归、多层感知机、小规模CNNCPU跑起来也就是慢一点并不会真的让人等不下去。真的学到目标检测、BERT这种大模型时再考虑租借云端GPU也不迟。在没有GPU的情况下把代码跑通、观察loss变化、理解每个模块的机制这些目标都可以实现。卡在“没显卡所以我先不学”这个心理门槛上才是真正影响进度的东西。4.3 代码报错的基本排查链路跟课过程中最常见的报错集中在张量维度不匹配、设备不一致CPU与GPU之间的tensor不能直接运算、API版本变化这三类。遇到报错时我的排查顺序是先看最底下的异常类型再定位到出错的代码行然后打印相关张量的shape和dtype确认是什么地方不匹配。如果是设备不一致把其中一个tensor移动到另一个设备再运算如果是API变化去查对应框架版本的官方文档或课程讨论区。总之把“看报错信息”当成一种技能来练而不是害怕它。正是通过亲手处理这些报错才会真正理解数据是怎么在网络里流动的。4.4 别急着“看下一集”把Notebook当主战场课程视频固然讲得好但我在实际跟课时发现最重要的不是“看完”而是“跑完改完”。一个小节看完了最好立刻把notebook里核心单元格重置凭记忆加上代码辅助重新实现一遍跑通之后再故意改几个参数比如把学习率从0.1改成1.0观察loss曲线为什么会飞掉把卷积核大小改大看模型参数量和训练时间怎么变。这个过程能建立的直觉是纯看视频完全给不了的。等到后面学到更复杂的模型这种“动一下参数看结果”的习惯会变成最重要的调试手段。4.5 卡住超过一个点先放一放跟这套课几乎必然会在某个模块卡住我当年卡得最久的是RNN的反向传播和Transformer的多头注意力。遇到这种情况不用硬啃更合理的做法是先把卡住的代码放一放往前继续学下一节过几天再回头重看。你会发现大脑在后台帮你整理了信息第二次理解的速度会快很多。卡住不是笨是大脑正在适应新的抽象层级。5. 学完这套课之后怎么判断自己“真的学会了”5.1 三个可操作的自测标准学完整套课或者自己的目标路径后不要只看“我刷完了191集”来确认成就感。更好的判断方式是三个自测第一能不能不靠视频只凭教材或自己的笔记从零写出一个可运行的LeNet做MNIST分类第二能不能清楚解释每一个模型的动机比如为什么CNN适合图像、为什么RNN需要门控、为什么Transformer能并行第三能不能把课程里的某个模型改一改迁移到自己的数据上。如果这三条基本能做到那就说明课程内容已经成为你的工具而不只是看过的视频列表。5.2 考察自己是否能做一个小项目作为收尾学完不是终点真正让能力落地的是一个完整的项目。不需要多复杂可以是找一套不在课程里的数据比如一个不常见的图像分类数据集、一摞自己收集的文本把课程里学过的微调方法或BERT模型套上去从数据准备、模型训练到指标评估完整跑一遍。这个过程会让你遇到大量课程里没提到但真实世界里一定会遇到的问题数据清洗怎么处理、类别不均衡怎么办、训练时间太长能不能早停。把这些问题解决掉深度学习才算真正入门这门课的完整价值才真正兑现。5.3 最容易让学习效果打折的三个误区一是“重视频数量轻动手”每天刷十几集笔记和练习却完全跟不上到头来只会“眼熟”。二是“抄代码不思考”跑通就完事从不去改参数、不看结果差异学完脑子里留下的只是复制粘贴记忆三是“线性推进没有复习”每个模块之间其实有强依赖关系学完CNN后隔两三周回头快速翻一翻之前笔记的人和只往前冲不回头的人后期的理解深度会差很多。只要避开这三个误区这套课的性价比在所有自学资源里算是第一梯队。如果非要说一条我最想安利给后来者的经验那就是用“复现改动”的方式跟这套课每一小节都亲手动过哪怕进度慢到一周只学三四个小时也比“光看不练”刷完全部集数要好得多。我自己在学到Transformer时一度很受挫后来把注意力计算拆成一行行带打印的代码逐段运行才真正理解Q、K、V三个矩阵在做什么。希望这套模块拆解和学习路径能帮你少走一些弯路。祝每个打开191集第一集的你最后都能在这套课里找到自己需要的那块拼图。
返回列表