ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

李宏毅机器学习2021:全套笔记与作业复盘实战指南

2026/8/30 4:00:16 拓冰建站 浏览量
李宏毅机器学习2021:全套笔记与作业复盘实战指南 简介本资源是李宏毅教授2021年机器学习与深度学习课程的完整配套学习材料面向高校学生、AI初学者及转行从业者旨在系统构建从理论到实践的ML/DL知识体系。压缩包共312.61MB包含PPT课件、手写/整理版笔记、课后作业题与参考解答等核心文件类型——PPT聚焦直观概念推导与模型图解笔记强化公式演进与关键假设说明作业则覆盖线性回归、SVM、CNN、RNN、GAN、VAE等典型算法的代码实现与调参分析。已有2600人下载学习内容严格对标课程进度涵盖监督/无监督学习、反向传播、优化器Adam/RMSprop、正则化、特征工程及PyTorch/TensorFlow实战要点并嵌入图像分类、情感分析等项目级练习便于边学边练、闭环验证。 这套资料我整理了两轮。第一轮是2021年秋天跟着视频课刷了一遍第二轮是今年帮学弟学妹做期末辅导时重新梳理了一遍。两次整理下来的感受完全不同第一次是跟着学第二次是挑着讲。到了第二遍我才真正看清楚这门课的PPT、笔记、作业这三样东西拆开看各有各的毛病合在一起却恰好能拼出一个完整的学习闭环。先说说这份资料解决的是什么问题。很多人学机器学习最大的痛点不是没有资料而是资料太多不知道从哪下手。李宏毅的课程视频在B站上播放量很高评论区却常年有人问该配什么笔记看作业怎么做这就是典型的信息过载。我整理这份笔记和作业复盘就是想给出一条清晰的路线视频课讲到哪里笔记跟到哪里作业练到哪里三线并行一步不落。适用的人群我大概分成三类刚入门的大学生有Python基础线性代数和概率论还在脑子里需要一个系统性强、中文友好的课程来建立框架。准备考研或期末复习的在校生时间有限需要一份高密度、可检索的知识清单来快速过考点。转行做算法工程师的职场人理论不需要挖太深但要能快速上手写模型、调训练流程作业部分对这种需求帮助很大。1. 内容整体设计与思路拆解1.1 为什么是李宏毅2021而不是吴恩达或周志华这个问题的答案直接决定了我整理资料的侧重点。市面上最主流的三门中文课程定位差异其实很大课程定位适合场景短板李宏毅《机器学习》偏应用和直觉理解强调模型为什么有效快速入门、建立直觉、跟练作业数学推导较少部分章节深度不足吴恩达《机器学习》经典入门数学基础扎实适合零基础打基础、理解核心算法原理内容偏旧深度学习部分少周志华《机器学习》西瓜书理论性最强的中文教材研究生课程、考试复习、深度理解需要较强的数学基础不适合零基础入门我自己的判断是吴恩达帮你建立地基周志华帮你深挖理论而李宏毅帮你快速砌墙。如果你目标是尽快能跑通一个深度学习的项目、能看懂一篇论文的大致思路、能做出一份像样的课程作业李宏毅的性价比是最高的。李宏毅2021这版特别值得整理还有一个原因是它的时效性恰好卡在了一个关键节点上。2021年Transformer已经全面统治了NLP领域而Self-attention、BERT、GPT这些内容在吴恩达的老课程里几乎没有在周志华的新版西瓜书里也只是简单带过。李宏毅这一版把这些前沿内容正式纳入了课程主线等于给学习者补上了一个从传统机器学习到现代深度学习的过渡桥。课程语言也有优势。全程中文讲解术语对照英文公式和概念之间的逻辑关系讲得比英文课程更细。这一点对刚开始接触这个领域的人很友好不需要一边听课一边查术语表。1.2 三层结构PPT章节、随堂笔记、作业复现我把整套资料设计成了三层结构第一层是PPT章节整理。李宏毅的PPT信息密度很高但页与页之间的逻辑链条不够明显经常一页PPT塞了十几个公式下一页突然跳到一张图。我的处理方式是按照问题-方法-推导-实验四段论重新组织每章内容把散落的PPT页面归纳成几个大块让每一页PPT在整体逻辑中的位置一目了然。第二层是随堂笔记。这一层不是PPT的复制而是加入了我自己的思考和扩充。比如训练GNN那节课PPT上只讲了GCN的公式$H^{(l1)} \sigma(\tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2}H^{(l)}W^{(l)})$我会在旁边补充这个公式到底在做什么、为什么邻居节点的聚合要标准化、如果不标准化会出什么问题。这些补充恰恰是面试和考试中最常问的为什么。第三层是作业复现。李宏毅课程的作业质量我认为是同类课程里最高的。HW1-HW8覆盖了从回归、分类到Transformer、BERT、GAN的完整技术栈每份作业都需要你真正去训练模型、调参、对比实验结果而不是填个选择题就完事。这套作业完成下来你对训练一个模型这件事的流程感会建立得相当扎实。1.3 这份资料不适合谁来用说实话我也把丑话说在前头。如果你已经有两年以上的深度学习工作经验这份资料对你来说偏基础了你更适合直接去看原论文和开源代码。如果你是完全零基础、连Python都没写过我也建议你先花两周把Python基础语法过一遍再开始否则作业部分会让你非常痛苦。这门课的定位是从1到10不是从0到1。2. 核心章节知识点与笔记方法2.1 课程主线从回归到Transformer李宏毅2021的课程主线可以概括为一句话从最简单的线性模型出发一步步引入神经网络、CNN、RNN、Transformer最后落到GNN和自监督学习。这个递进逻辑设计得非常巧妙每引入一个新模型都是因为在解决前一个模型的痛点。我用一个表格把整门课的知识脉络梳理了出来章节核心问题关键技术需要掌握的数学工具Regression如何预测连续值梯度下降、过拟合、正则化微积分、线性代数Classification如何预测离散标签Softmax、交叉熵概率论、信息论CNN如何提取图像局部特征卷积、池化、感受野线性代数、信号处理RNN如何处理序列数据LSTM、GRU矩阵运算Self-attention如何建模长距离依赖Query-Key-Value机制线性代数、矩阵分解Transformer如何并行处理序列Multi-head attention线性代数GAN如何生成新数据判别器与生成器的博弈博弈论、概率论BERT如何进行预训练Masked LM、Sentence prediction概率论GNN如何处理图结构数据GCN、GraphSAGE图论这个主线的好处是每个模型都不是孤立的而是作为前一个模型问题的解决方案出现的。记笔记时如果只记公式不记这个模型是为了解决什么问题等于白记。2.2 几个关键章节的精读方法Regression和Classification部分是全课程的根基。很多人觉得简单就跳过了结果后面理解不了为什么神经网络最后一层要用Softmax、为什么要用Cross-entropy而不是MSE。这里我建议笔记里至少要包含以下推导链为什么线性回归要用最小二乘估计——因为高斯噪声假设下最大似然估计等价于最小化均方误差。为什么分类问题不直接用MSE——因为MSE对应的是回归假设分类的标签是离散的MSE会惩罚错得太多的样本导致梯度方向偏离。Cross-entropy和KL散度的关系是什么——交叉熵 信息熵 KL散度最小化交叉熵等价于最小化预测分布与真实分布的KL散度。这三条链理解透了后面所有模型基本上都是在这个框架上加复杂度。Self-attention和Transformer部分是全课程的难点也是重点。我在整理时花了最多功夫的是把那张经典的Self-attention结构图画清楚。这里有一个特别容易绕晕的点Query、Key、Value到底分别是什么。我的理解方式是Query是你手头的问题我要找什么样的信息Key是每个候选信息的标签我提供了什么信息Value是候选信息本身我提供的内容是什么这三者的点积算出来的是注意力分数经过Softmax归一化之后就成了对Value的加权权重。这个类比方式对初学者特别管用我后来给别人讲Attention的时候都用这个比喻。2.3 笔记形式三种方式结合使用我在整理过程中尝试过三种笔记形式最后发现各有用途不能互相替代纸质手写笔记适合推导公式。手写的过程本身就在强迫你理解每一步推导的逻辑而不是像复制粘贴一样无脑抄公式。Markdown结构化笔记适合记录模型结构、实验对比、优缺点。Markdown的层级结构能让一个复杂的模型拆成输入-处理-输出三块看的时候能快速定位。One-page总结每个章节结束后用一页纸画一张思维导图把这章的所有知识点串联起来。这个方法在期末复习时特别管用考前过一遍One-page比翻整本笔记效率高五倍以上。提示One-page不是越详细越好而是越有结构越好。目标是让你在看到这张图时能凭记忆复述整章的内容如果做不到说明这章还没吃透。3. 作业HW1-HW8实操复盘3.1 作业全景图与技术点李宏毅2021课程的8次作业是一个完整的梯度递进序列我先把全景放在这里作业任务类型核心技术点数据集规模模型类型HW1COVID-19病例预测回归、特征选择、过拟合处理约4000条线性回归/MLPHW2肺炎分类分类、类别不平衡、数据增强约5000张CNN/MLPHW3食物图片分类CNN、迁移学习、数据增强约7000张ResNet/VGGHW4说话人识别RNN、LSTM、序列特征提取约10000段音频LSTMHW5中文文本情感分类RNN/Transformer、词向量约12000条BiLSTMHW6异常检测Autoencoder、重建误差约5000张AE/VAEHW7BERT问答预训练模型微调约30000条BERTHW8图像生成GAN、DCGAN、训练稳定性约20000张GAN这个梯队设计其实非常有讲究。前两次作业是打基础让你熟练训练流程第三到第五次作业分别覆盖三个主流应用领域图像、语音、文本第六次开始进入进阶方向无监督学习第七、第八次则是直接对标前沿应用。3.2 HW1-HW4的实操细节HW1 疫情预测的难点不是建模型而是特征工程和过拟合控制。原始数据集里有很多冗余特征直接用会把模型带偏。我在复现时做了三件事一是用相关性热力图筛选特征去掉高共线性特征二是加入了简单的滞后特征比如前3天的确诊数三是用小批量训练配合早停防止验证集loss抬升。这三点做完Public score直接从1.2降到了0.8左右。这一步对新手特别有价值因为它让你第一次真切感受到数据处理比调参更影响结果。HW2 肺炎分类的难点在类别不平衡。正常样本占绝大多数肺炎样本只占一小部分直接用原始分布训练模型会学成永远预测正常。我的处理方法是先用Class Weight给少数类更大的损失权重再用随机裁剪、翻转、颜色抖动做数据增强。这两步操作配合上简单的CNN模型F1-score能从0.55提高到0.68以上。HW3 食物分类我开始接触迁移学习。这个作业的核心不是你从头训练CNN而是如何在预训练模型上做微调。我的经验是先固定住backboneResNet50的前几层只训练最后的分类头跑几个epoch看看loss能不能降再把backbone的最后几层也加入训练用一个较小的学习率比如backbone用1e-5分类头用1e-3最后再解冻更多层用更低的学习率做端到端微调。这种分阶段微调的方式比直接全量微调稳定得多Public score能到0.88左右。HW4 说话人识别需要处理序列数据输入的音频要提取成MFCC特征每个样本是一个时间序列。LSTM在这种任务上的表现比纯MLP好很多但训练时间也长了不止一个量级。这里的常见坑是token的长度要定好太短了语义不充分太长了LSTM训练慢且容易梯度消失。我试过用256帧约2.56秒作为每个样本的长度效果比较均衡。3.3 HW5-HW8的进阶实操HW5 情感分类是第一次上手Transformer。我的做法是先用预训练的中文BERT做特征提取然后加上一层简单的分类头。这里有一个非常关键的点BERT的嵌入层输出是768维的很多人第一次用的时候以为可以直接扔给分类器但实际上下文向量要经过mean-pooling或CLS token提取才能用。我的经验是用CLS token效果通常比mean-pooling稳定。HW6 异常检测的思路和前面的分类回归完全不同。这里你是用一个Autoencoder去学习正常样本的数据分布然后通过重建误差判断新样本是否为异常。实操中我在验证集上画了一张重建误差的分布图发现正常样本的误差集中在0.5以下而异常样本的误差在0.8以上阈值设在0.65效果最好。这种可视化分析的习惯值得养成比只看单一指标亏大了。HW7 BERT问答是技术难度最高的一次作业。你需要使用HuggingFace的Transformers库加载预训练模型然后在SQuAD格式的数据集上做微调。这个作业的关键技巧是理解start position和end position两个头如何从BERT的输出中提取答案区间。我复现时踩过一个坑数据集的答案文本位置和tokenizer切分后的位置对不上因为中文BERT用的是字级tokenizer和英文的subword tokenizer不一样。解决方式是在预处理阶段用offset mapping做对齐。HW8 GAN的图像生成是最好玩也是训练最不稳定的作业。我跑DCGAN时遇到了两个经典问题Mode collapse生成器只学会生成某几种图片多样性不足。解决思路是用WGAN-GP的梯度惩罚项代替原始GAN的损失函数。训练不平衡判别器loss降得飞快生成器却一直不进步。解决思路是降低判别器的学习率或者增加判别器的dropout。这些问题是GAN理论课上讲过的但只有亲手在训练日志里看到loss曲线的形态时你才会真正理解为什么。我建议作业完成后把生成器的中间输出图保存下来每隔一定轮数看一次看到图像从纯噪声慢慢变成有结构的内容这种实感是任何教科书都给不了的。3.4 作业复现流程和跑通经验每次作业我的复现流程基本固定为四步先把baseline跑通。用课程给出的示例代码不修改任何参数先跑通完整的训练-验证-预测流程。这一步的目的是确保数据读入、模型前向、loss计算、梯度回传这条链路是通的。读取提交结果。把baseline的预测结果提交到Kaggle或课程评分系统记录Public score作为基准线。针对性优化。对照baseline分析瓶颈在数据处理还是模型结构然后用我在上面说的方法去优化。每次只改一个变量。或者改特征或者改模型结构或者改学习率但不要同时改多个否则无法判断哪个改动带来了效果提升。这个过程看起来简单但很多人会跳过第一步直接开始调参结果连bug是在数据处理还是模型构建都没搞清楚越调越乱。我的经验是baseline跑通花的时间永远不算浪费它会帮你建立一个可靠的系统基线后面所有的优化都是在和这个基线做对比。4. 学习环境配置与踩坑记录4.1 明确可用性高的环境清单深度学习环境的安装是一个让人崩溃的环节如果你用Windows很可能装驱动就装掉一整天。我用的是Ubuntu系统踩过各种坑之后总结出一套比较顺滑的方案组件版本选择安装要点操作系统Ubuntu 22.04 LTS更新系统源安装基础工具包GPU驱动NVIDIA Driver 535通过ubuntu-drivers autoinstall自动安装避免手动编译CUDACUDA 11.8通过runfile安装设置环境变量cuDNN8.9.x与CUDA版本严格对应Python3.10系统自带但建议在conda中单独创建虚拟环境PyTorch2.0.1cu118用pip安装避免conda包冲突4.2 GPU驱动和PyTorch安装的常见问题很多人在Ubuntu上安装GPU驱动时遇到安装了没反应的问题。我排查过最多的原因是Secure Boot没有关闭。新一点的机器默认开启Secure Boot会导致驱动模块加载时签名验证失败驱动虽然装上了但实际加载不了。我的处理方式是进BIOS关掉Secure Boot然后重新安装驱动立刻就好了。还有一个常见的坑是PyTorch的CUDA版本和系统CUDA版本不匹配。PyTorch的安装包自带CUDA runtime所以其实你不需要单独装系统CUDA也能跑PyTorch。我的建议是单独装系统CUDA主要是为了跑一些需要编译的第三方库比如某些自定义的CUDA算子如果只是跑课程作业用PyTorch官方安装命令里指定的CUDA版本就够了没必要给自己找麻烦。验证环境是否安装成功的方法# 检查GPU是否可见 nvidia-smi # 检查PyTorch是否能使用GPU python -c import torch; print(torch.cuda.is_available()) # 跑一个简单的张量计算 python -c import torch; x torch.randn(3, 3); y torch.matmul(x, x); print(y.device)如果torch.cuda.is_available()返回False直接卸载重装PyTorch往往比重装驱动更省时间。4.3 conda虚拟环境与Jupyter组织方式我强烈建议把每个作业单独放在一个conda虚拟环境里否则你的依赖会乱成一锅粥。HW7需要Transformers库HW8可能需要特定版本的TorchGAN这些库的依赖版本经常互相冲突。在Jupyter Notebook里搭配使用虚拟环境的方式# 创建虚拟环境 conda create -n ml2021 python3.10 # 激活环境中一定用 source activate ml2021 # 在Jupyter中注册这个环境 python -m ipykernel install --user --nameml2021 --display-nameML2021 # 启动Jupyter后在Kernel切换菜单中选择ML2021即可 jupyter notebook注意如果你在服务器上跑远程Jupyter还需要配置SSH隧道把端口转发到本地才能访问。这个配置网上教程很多但关键是记住远端Jupyter的端口号和本地转发端口要一一对应。5. 常见问题与排查技巧实录5.1 CPU和GPU训练速度差距有多大一个在Kaggle上经常遇到的问题本地CPU跑一个epoch要10分钟在云GPU上一分钟不到就跑完了。如果你的实验比较多、数据量比较大强烈建议用Google Colab的免费GPU或者租用云GPU服务器。我自己做HW8GAN的时候纯CPU跑一个epoch大约需要25分钟生成器图像基本看不出变化换到一张T4 GPU之后同样一个epoch只需要1分钟出头迭代速度完全不在一个量级上。对比数据大概是这样的硬件环境HW1训练时间HW8训练时间CPU4核约10分钟大于3小时入门级GPUT4约40秒约20分钟中高端GPUA100约15秒约5分钟5.2 作业卡的比较经典的坑数据形状错误。这在第一次处理音频和文本数据时特别常见。HW4的音频特征是三维的batch_size, time_steps, n_mfcc如果你忘了reshape直接把二维数据丢进LSTM就会报Expected 3D tensor的错误。HW5的文本经过BERT tokenizer后是二维的attention_mask也是很多人把mask忘了传给模型导致训练时loss不降。batch size过大导致显存溢出。HW7的BERT模型本身就占了2GB以上的显存如果你的batch size开到328GB显存根本扛不住。我的处理方式是先用batch size8试跑看显存占用情况再逐步调大。学习率设置不合理。这个问题在HW1和HW8的表现完全不同。HW1是回归问题学习率设太大loss直接发散到NaNHW8是GAN学习率设太大生成器和判别器都会不稳定。我一般先跑一遍代码看loss曲线是上升还是下降如果上升就调低学习率如果下降得太慢就稍微调高。5.3 理论学习和代码实操怎么搭配很多人会问作业不会做是不是应该先把理论学完再动手我的回答是不要等边做边学。理论课程看到第三章就去做HW1做到哪不会了再回头翻PPT这种做法比全部学完再动手有效得多。原因是深度学习是一个强反馈的领域代码跑通那一刻的反馈比任何理论讲解都能加深记忆。我看到过太多同学理论书啃了两个星期结果打开Jupyter发现连torch.nn.Linear都不会用。反过来如果先做HW1用到nn.Linear时再回头看PPT里的线性模型公式这时候公式和代码就彻底对上了不容易忘。这里列一个我看过的理论知识的对照参考遇到回归问题 → 看课程Regression章节 周志华西瓜书第三章线性模型遇到分类问题 → 看课程Classification章节 吴恩达课程第三周遇到CNN任务 → 看课程CNN章节 动手学深度学习第6章遇到Transformer → 看课程Self-attention章节 李宏毅的Transformer口述版遇到预训练模型 → 直接看HuggingFace官方文档比你翻任何书都快5.4 期末复习的高效打开方式如果你是为了期末复习我不建议再从头翻笔记。正确姿势是先用One-page总结过一遍知识框架把章节间的逻辑串联起来。把作业里每个模型的核心公式自己默写一遍默写不出来的就是还没掌握的。查漏补缺针对默写不出来的部分回看对应章节笔记但只看那一段就好了。最后做一遍真题或往年卷熟悉题型和考点分布。这个方法能让你在极短的时间内把知识密度拉满。我自己在期末时大概用三天时间完成了六门课的复习机器学习这门课是状态最好的就是靠这套方法。6. 与其他经典学习资料的搭配使用6.1 李宏毅课程与吴恩达课程的互补关系李宏毅的课讲得生动、应用导向强但数学推导相对较少。吴恩达的课恰好补上了这块短板尤其在逻辑回归、神经网络反向传播这些关键概念上吴恩达的推导过程非常细致。我的使用方法是先看李宏毅对应章节建立直觉再看吴恩达对应章节补数学推导最后回到作业代码把公式和实现一一对应这样一轮下来理论、直觉、代码三个维度都覆盖到了。6.2 与周志华《机器学习》配合的复习路径西瓜书是纯理论教材章节顺序和李宏毅课程不一样。如果你在做期末复习建议以李宏毅课程的章节顺序为主线每一章配合西瓜书的对应章节做补充阅读。下面是章节对应关系李宏毅课程章节西瓜书对应章节Regression第3章线性模型Classification第3章对数几率回归CNN第5章神经网络 第11章特征选择RNN第6章支持向量机部分类比序列处理Self-attention第8章集成学习部分类比注意力加权GAN第14章概率图模型思想的延展注意西瓜书没有Transformer和GAN的详细内容这两块只能靠原论文和博客补。6.3 与《动手学深度学习》的组合打法《动手学深度学习》最大的优势是代码质量高每章都附带可以运行的代码而且PyTorch版本的代码风格非常标准。我的建议是李宏毅的课负责讲道理动手学深度学习负责写代码比如李宏毅讲了CNN的卷积核是怎么回事动手学深度学习里就有nn.Conv2d的完整使用示例和维度计算讲解。两者配合理论和代码无缝衔接。7. 学习时间线与投入产出建议7.1 我的三个月学习计划表如果你有完整的一个学期我建议的学习节奏是时间学习内容配套产出第1-2周Regression Classification 作业HW1完成HW1并提交第3-4周CNN 作业HW2、HW3完成HW2、HW3并提交第5-6周RNN 作业HW4完成HW4并提交第7-8周Self-attention Transformer 作业HW5完成HW5并提交第9-10周无监督学习AE/VAE 作业HW6完成HW6并提交第11-12周BERT 作业HW7、GAN 作业HW8完成HW7、HW8并提交这个节奏看起来慢但如果你能坚持下来八份作业都会认真提交到课程结束时你对深度学习整个体系的掌握程度会比刷了三遍教程但不动手的人强一个档次。7.2 哪些部分可以直接跳过说实话课程里有一部分内容对大多数人来说优先级不高可以后面再补深度强化学习章节如果你主要做CV或NLP方向这块不是重点作业也没有覆盖到。Life-long Learning、Meta Learning章节这些是研究前沿对入门者来说过于抽象看完容易劝退。可解释性章节了解一下大致思路就好不需要深入推导。我身边不少人在这些章节上消耗了大量时间结果主线的作业反而没有时间做了非常可惜。7.3 投入产出比分析学这门课的总投入大概在150-200个小时如果每周学5-6个小时大约需要一个学期。这个时间投入换来的是什么能独立完成一个图像分类或文本分类任务能看懂一篇深度学习论文的大致方法能熟练使用PyTorch搭模型、训练、验证、部署面试时能聊清楚Transformer、BERT、GAN的基本原理如果你只是看视频而不做作业这个投入产出比会大打折扣。我的建议始终是视频可以两倍速看作业不能跳过。最后分享一个我自己的整理技巧。每完成一次作业我都会在一张A4纸上画出这次作业的技术流程图从原始数据开始经过哪些处理步骤进入什么模型输出什么最后怎么评估。这张图帮助我在期末复习时迅速回忆起每次作业的技术细节。八张纸贴在书桌前学期结束时看到它们比看任何理论笔记都有成就感。如果你正在学这门课我的建议很简单不要追求把每个公式都推导一遍先把每个作业完整跑完。你会发现当你亲手训练完八个模型之后那些在上课时觉得听懂了但记不住的概念已经不知不觉刻在脑子里了。本文还有配套的精品资源点击获取