李宏毅机器学习课程实战路线:从神经网络到强化学习与大模型

发布时间:2026/8/31 6:39:31
李宏毅机器学习课程实战路线:从神经网络到强化学习与大模型 如果你准备系统入门人工智能应该在很多学习资料、课程推荐帖和知乎答案里都看到过李宏毅机器学习这门课。作为一门面向中文学习者的 AI 入门课程它的优势不在于堆砌公式而在于把机器学习、深度学习、神经网络、强化学习、计算机视觉、自然语言处理等模块用“讲给普通人听”的方式拆开揉碎。很多初学者靠这套课程建立起了对 AI 整体知识框架的认知后续再看论文、做项目才不会一头雾水。这篇文章不是课程复述而是基于李宏毅课程的知识体系整理一份可执行的学习路线。我们会先梳理机器学习与深度学习的基本概念再结合完整代码示例拆解神经网络、CV、NLP、强化学习和大模型这些核心方向。无论你是零基础转行、在校学生期末复习还是工作中需要补 AI 知识都可以把本文当作一份“导读 实战索引”。1. 为什么很多人选择李宏毅机器学习系列课程1.1 课程到底在讲什么李宏毅机器学习课程的内容覆盖面非常广从最基础的“什么是机器学习”开始一路讲到 CNN、RNN、Transformer、Self-Attention、生成模型、强化学习甚至包括当前大模型背后的核心思想。课程的核心逻辑是先让你理解模型怎么“学习”再让你动手训练模型最后再讨论如何改进模型。课程最经典的部分是对“深度学习”的解释。它没有一上来就扔出反向传播公式而是先用“找一个函数”的角度把机器学习定义成“找函数”的过程。比如图像识别就是找一个输入图片、输出类别的函数语音识别就是找一个输入音频、输出文本的函数下围棋则是找一个输入棋盘状态、输出落子位置的函数。这个视角非常适合新手建立全局观。1.2 适合哪些人学习如果你是零基础但具备基本的 Python 语法能力可以直接跟着这门课走。课程不要求高等数学达到多深水平但建议先了解导数、偏导数、向量和内积等概念否则后续看反向传播和 Transformer 的 QKV 矩阵运算时会比较吃力。如果你已经有机器学习基础只是对深度学习、强化学习或大模型不熟悉也可以挑选课程中的对应章节做针对性学习。比如很多做后端开发的同学已经了解逻辑回归和决策树但不知道 CNN 为什么能提取图像特征那么直接看“卷积神经网络”章节就够。1.3 学习前需要哪些基础建议先掌握 Python 基础至少会写循环、函数、列表推导式会安装第三方库。数学方面重点复习以下内容导数与链式法则理解梯度下降和反向传播。线性代数基础矩阵乘法、向量内积、转置。概率论基础条件概率、最大似然估计、贝叶斯公式。不需要一开始就刷完整本《机器学习》周志华或《深度学习》花书而是带着课程中的问题去查阅。这样效率更高也不容易劝退。2. 机器学习核心概念准备2.1 三大学习范式监督学习、无监督学习、强化学习机器学习算法按训练方式可以粗略分成三类这也是课程最早建立的知识框架。监督学习是最常见的类型。训练数据中包含输入和标签模型需要学到输入到标签的映射关系。比如给一张猫的图片标签是“猫”给一条评论标签是“正面”或“负面”。常见的监督学习算法包括线性回归、逻辑回归、决策树、随机森林、支持向量机、神经网络等。无监督学习的数据没有标签。算法需要自己从数据中发现结构。典型的任务包括聚类、降维、异常检测。比如电商平台根据用户购买行为把用户分成不同群体就属于无监督学习的应用。强化学习则完全不同。它由一个智能体Agent和环境Environment组成智能体不断做出动作环境返回新的状态和奖励。目标是通过经验积累学习到一个能让累积奖励最大化的策略。自动驾驶、游戏 AI、机器人控制都属于强化学习的典型场景。2.2 损失函数与优化器机器学习几乎所有问题最终都归结为“最小化损失函数”。损失函数衡量模型预测结果与真实标签之间的差距。回归问题常用均方误差MSE分类问题常用交叉熵。模型训练的过程就是不断调整参数使损失函数的值下降。优化器是更新参数的算法。最基础的是梯度下降每次沿损失函数梯度的反方向走一小步。后来的 SGD、Momentum、Adam 等优化器都是在梯度下降基础上做了改进用来加快收敛、跳出局部最优。2.3 过拟合与正则化过拟合是机器学习中最重要的一个坎。当模型在训练集上表现很好但在测试集上表现很差通常就是过拟合了。原因一般是模型太复杂、训练数据太少、训练时间太长。解决办法有很多增加训练数据或者做数据增强。降低模型复杂度减少网络层数或神经元数量。添加正则化项例如 L1、L2 正则化。使用 Dropout在训练时随机丢弃部分神经元。早停Early Stopping在验证集指标不再提升时停止训练。课程中反复强调不能只看训练集准确率必须划分出验证集和测试集。这个习惯从第一天开始就要养成。3. 深度学习与神经网络基础3.1 神经元、激活函数、反向传播深度学习的核心是神经网络。一个最简单的神经元会接收多个输入做加权求和后加上偏置再经过激活函数输出。激活函数的作用是给模型引入非线性。如果没有激活函数多层神经网络无论有多少层本质上都是线性变换无法解决非线性问题。常见激活函数有 ReLU、Sigmoid、Tanh、GELU。反向传播是深度学习训练的基石它通过链式法则计算损失函数对每个参数的梯度然后利用优化器更新参数。如果你暂时记不住公式也没关系但必须理解整个流程前向传播计算输出计算损失反向传播计算梯度优化器更新参数。3.2 全连接网络代码示例下面用 PyTorch 实现一个简单的全连接神经网络用于 MNIST 手写数字分类。这是一个最基础的多分类任务非常适合理解神经网络训练全流程。# 文件路径mlp_mnist.py import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms # 1. 数据预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_dataset datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) test_dataset datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransform) train_loader DataLoader(train_dataset, batch_size64, shuffleTrue) test_loader DataLoader(test_dataset, batch_size64, shuffleFalse) # 2. 定义全连接网络 class MLP(nn.Module): def __init__(self): super(MLP, self).__init__() self.fc1 nn.Linear(28 * 28, 256) self.fc2 nn.Linear(256, 128) self.fc3 nn.Linear(128, 10) self.relu nn.ReLU() def forward(self, x): x x.view(-1, 28 * 28) x self.relu(self.fc1(x)) x self.relu(self.fc2(x)) x self.fc3(x) return x # 3. 定义模型、损失函数、优化器 model MLP() criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001) # 4. 训练一个 epoch def train_one_epoch(model, loader, criterion, optimizer): model.train() total_loss 0.0 correct 0 total 0 for images, labels in loader: optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() total_loss loss.item() preds outputs.argmax(dim1) correct (preds labels).sum().item() total labels.size(0) avg_loss total_loss / len(loader) acc correct / total return avg_loss, acc # 5. 验证 def evaluate(model, loader): model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in loader: outputs model(images) preds outputs.argmax(dim1) correct (preds labels).sum().item() total labels.size(0) return correct / total # 6. 训练 3 个 epoch for epoch in range(3): train_loss, train_acc train_one_epoch(model, train_loader, criterion, optimizer) test_acc evaluate(model, test_loader) print(fEpoch {epoch 1} | Loss: {train_loss:.4f} | Train Acc: {train_acc:.4f} | Test Acc: {test_acc:.4f})这个示例虽然简单但已经覆盖了深度学习训练的基本流程加载数据、定义模型、设置损失函数与优化器、训练循环、验证循环。后续学习 CNN、RNN、Transformer都是在替换中间的网络结构流程本身大同小异。3.3 优化器与学习率学习率是训练神经网络时最敏感的“旋钮”。学习率太大损失函数可能在最小值附近震荡甚至发散学习率太小训练速度非常慢可能长期停在较差解。建议在实际项目中先使用 Adam 优化器初始学习率设置为 0.001。然后观察训练损失曲线再决定是否调低。如果损失持续不下降不要急着调网络结构先检查学习率是否合适。4. 从经典机器学习到深度学习4.1 线性回归与逻辑回归示例深度学习之前机器学习中最基础的模型是线性回归和逻辑回归。李宏毅课程里会从这两个模型讲起因为它们能解释什么是“找函数”。线性回归用于预测连续数值比如房价、温度。逻辑回归其实不是回归而是分类模型它在线性输出的基础上加了一个 Sigmoid 函数把输出映射到 0 到 1 之间表示概率。下面用 scikit-learn 演示一个简单的逻辑回归分类任务。# 文件路径logistic_iris.py from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据 data load_iris() X data.data y data.target # 只使用前两类数据方便理解二分类 X X[y ! 2] y y[y ! 2] # 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) # 训练逻辑回归 model LogisticRegression(max_iter200) model.fit(X_train, y_train) # 预测与评估 y_pred model.predict(X_test) acc accuracy_score(y_test, y_pred) print(fTest Accuracy: {acc:.4f})很多初学者会问既然深度学习这么强为什么还要学逻辑回归原因是逻辑回归结构简单、可解释性强、训练成本低在很多中小型项目中仍然是首选的 baseline 模型。先学会它再理解神经网络的“深度”到底改进了什么。4.2 卷积神经网络与计算机视觉计算机视觉是深度学习落地最成熟的领域之一。CNN卷积神经网络之所以适合图像任务是因为它通过卷积核自动提取局部特征比如边缘、纹理、形状。相比全连接网络CNN 的参数更少并且具有平移不变性。一个典型的 CNN 结构由卷积层、池化层、全连接层组成。卷积层作用在图像局部区域上池化层用于降低特征图尺寸全连接层最后输出分类结果。下面是一个简单的 CNN 图像分类代码片段同样使用 MNIST。# 文件路径cnn_mnist.py import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self, num_classes10): super(SimpleCNN, self).__init__() self.conv1 nn.Conv2d(in_channels1, out_channels16, kernel_size3, padding1) self.conv2 nn.Conv2d(in_channels16, out_channels32, kernel_size3, padding1) self.pool nn.MaxPool2d(kernel_size2, stride2) self.fc1 nn.Linear(32 * 7 * 7, 128) self.fc2 nn.Linear(128, num_classes) self.relu nn.ReLU() def forward(self, x): x self.pool(self.relu(self.conv1(x))) # 输出尺寸 16 * 14 * 14 x self.pool(self.relu(self.conv2(x))) # 输出尺寸 32 * 7 * 7 x x.view(x.size(0), -1) x self.relu(self.fc1(x)) x self.fc2(x) return x在实际工程中直接用 ResNet、MobileNet、EfficientNet 等预训练模型做迁移学习效果通常比从零训练更好。迁移学习的关键是在一个大数据集比如 ImageNet上预训练过的模型已经学到了通用的视觉特征只需要在目标任务上微调最后的几层。4.3 RNN、Transformer 与自然语言处理自然语言处理是另一个核心方向。早期 NLP 任务主要依赖 RNN 和 LSTM它们按顺序处理句子但长距离依赖问题很难解决。后来 Transformer 提出了 Self-Attention 机制句子中每个词都能直接与所有词计算相关性彻底改变了 NLP 的格局。李宏毅课程中会重点讲 Self-Attention这是理解大模型的关键。Self-Attention 会计算 Query、Key、Value 三组向量然后根据 Query 与 Key 的相似度加权地聚合 Value。通过多层 Self-Attention模型可以捕捉句子内部的复杂关系。如果一开始不理解 QKV可以这样记忆Query 表示“我在找什么”Key 表示“我是什么”Value 表示“我携带的信息”。注意力机制就是让每个词根据相关性去提取其他词的信息。自然语言处理任务包括文本分类、命名实体识别、机器翻译、问答系统、文本生成等。今天的 GPT、BERT 等预训练语言模型本质上都是基于 Transformer 构建的。5. 强化学习核心概念与简单实现5.1 强化学习框架状态、动作、奖励强化学习是很多初学者觉得最难的部分因为它和我们平时接触的监督学习很不一样。强化学习没有现成的输入输出标签只能通过与环境交互获得奖励信号。核心要素包括状态State智能体当前观察到的环境信息。动作Action智能体基于策略做出决策。奖励Reward环境对动作的反馈。策略Policy从状态到动作的映射。价值函数Value Function评估某个状态或动作的长期收益。训练过程中智能体会不断尝试动作根据奖励调整策略。这个过程很像“放羊式学习”做得好就奖励多一点做得不好就避免这种选择。5.2 Q-Learning 表格示例Q-Learning 是强化学习最基础的算法之一。它用一个 Q 表记录“在某个状态下做某个动作”的价值训练时不断更新这个 Q 表。下面用一个极简示例演示 Q-Learning 的更新逻辑。# 文件路径q_learning_demo.py import numpy as np # 假设有 5 个状态每个状态有 2 个动作 n_states 5 n_actions 2 Q np.zeros((n_states, n_actions)) # 奖励定义进入状态 4 会得到奖励 rewards np.array([ [-1, -1], [-1, -1], [-1, -1], [-1, -1], [10, 10] ]) alpha 0.1 # 学习率 gamma 0.9 # 折扣因子 epsilon 0.1 # 探索率 def choose_action(state): if np.random.random() epsilon: return np.random.randint(n_actions) return np.argmax(Q[state]) def step(state, action): # 简单模拟动作 0 走向下一个状态动作 1 原地不动 next_state state 1 if action 0 else state next_state min(next_state, n_states - 1) reward rewards[next_state].max() return next_state, reward for episode in range(100): state 0 while state ! n_states - 1: action choose_action(state) next_state, reward step(state, action) # Q-Learning 更新公式 best_next np.max(Q[next_state]) Q[state, action] alpha * (reward gamma * best_next - Q[state, action]) state next_state print(训练后的 Q 表) print(Q)这个例子非常简略真实场景中状态空间往往巨大无法使用表格所以需要用神经网络来逼近 Q 函数也就是 DQN。再后来的 Policy Gradient、PPO、Actor-Critic 等算法则是直接优化策略本身。5.3 策略梯度与后续方向策略梯度方法的核心思想是如果某个动作带来的奖励高就增加这个动作的概率如果奖励低就降低概率。相比 Q-Learning 的“先学价值再做动作”策略梯度可以直接输出动作概率分布适合连续动作空间场景。学习强化学习时建议按照 Q-Learning - DQN - Policy Gradient - PPO 的顺序逐步推进。不要一开始就尝试复现 AlphaGo需要先在小规模环境上跑通代码理解算法每个模块的作用。6. 大模型时代需要补充的知识6.1 从 Transformer 到大模型大模型并不是一个全新算法而是 Transformer 架构、海量数据、大算力三者结合的产物。ChatGPT、GPT-4、LLaMA 等模型的核心能力都来自 Transformer 的堆叠和预训练。用通俗的话说大模型比小模型多了三个变化参数量更大、训练数据更多、训练方式更复杂。以 GPT 为例它的训练目标很简单预测下一个词。但就是这样一个简单的目标在海量文本上训练之后模型展现出了阅读理解、写作、代码生成、推理等能力。这种现象被称为“涌现能力”。学习大模型之前建议先把 Self-Attention、Transformer 的结构搞清楚这样再看指令微调、RLHF、LoRA 等概念时会轻松很多。6.2 大模型微调与部署在实际项目中直接在 GPU 上从零训练大模型并不现实。更多场景是在已有开源模型基础上做微调。常用的轻量微调方式是 LoRALow-Rank Adaptation。它通过给原始权重矩阵增加低秩分解的旁路训练时只更新旁路参数大幅降低显存需求。下面是一个概念性示例展示用 Transformers 加载预训练模型的思路实际运行时需要根据你安装的版本调整模型名称和参数。# 文件路径load_model_demo.py # 仅供参考实际运行需要安装 transformers 和对应框架 from transformers import AutoModelForCausalLM, AutoTokenizer model_name Qwen/Qwen2-0.5B-Instruct tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained(model_name) prompt 请用一句话介绍机器学习 inputs tokenizer(prompt, return_tensorspt) outputs model.generate(**inputs, max_new_tokens50) response tokenizer.decode(outputs[0], skip_special_tokensTrue) print(response)这里不详细展开训练代码是因为大模型微调与不同框架、版本绑定很深。初学者建议先跑通推理再使用 LLaMA Factory、peft 等工具做 LoRA 微调。6.3 大模型部署中的精度选择部署大模型时选对数值精度非常重要。FP32 是单精度浮点数占用 4 字节FP16 和 BF16 都是 2 字节能节省一半显存但数值范围和精度不同。BF16 保留更大的指数范围在训练中更稳定FP16 在某些 GPU 上推理速度更快。TF32 是 NVIDIA 显卡上的特殊格式用于加速矩阵计算精度介于 FP32 和 FP16 之间。选择哪种精度需要结合显卡类型、模型规模、任务精度要求综合考虑。只要 GPU 支持大部分场景会优先使用 FP16 或 BF16 减少显存占用从而提升推理吞吐量。7. 学习路线规划与避坑建议7.1 按阶段安排学习计划如果要把李宏毅课程体系完整学一遍建议按以下阶段推进第一阶段第 1 到 2 周学习机器学习基础概念包括回归、分类、损失函数、梯度下降、过拟合。目标是能看懂课程中的案例分析并用 scikit-learn 跑通一个简单分类任务。第二阶段第 3 到 4 周学习神经网络与反向传播用 PyTorch 实现全连接网络、CNN、RNN 等基础结构。不用追求结果多好关键是理解前向传播、反向传播和训练循环。第三阶段第 5 到 6 周深入计算机视觉和自然语言处理方向分别完成一个项目。CV 可以选猫狗分类、手写数字识别NLP 可以选文本情感分析、新闻标题分类。第四阶段第 7 到 8 周学习强化学习基础先跑通 Q-Learning再看 DQN 和 Policy Gradient。第五阶段第 9 周起补充大模型知识理解 Transformer、预训练、微调、部署的基本链路。7.2 学习中的常见误区第一个误区是只看视频不动手。很多同学收藏了视频看了十几遍却一行代码没写过。学机器学习代码和数学推导必须结合。看完一节就去找对应的开源示例自己跑一遍改改参数看看结果变化。第二个误区是陷入公式推导出不来。课程中有些数学细节比如反向传播的链式法则展开刚开始可以只掌握大框架。先让代码跑起来之后再回头补数学。第三个误区是频繁更换学习资料。今天看李宏毅明天看吴恩达后天又去刷西瓜书结果一直停留在“线性回归”的位置。建议选定一条主线遇到某个知识点卡住了再查其他资料补充。7.3 动手实践建议动手实践建议从“小数据集 小模型”开始。很多同学一上来就想复现 YOLO 或者 GPT结果被环境配置和显存限制劝退。更合理的方式是先在 MNIST、CIFAR-10、IMDB 等小规模数据集上做实验把模型训练流程跑通再逐步增加数据和模型复杂度。每次实验建议记录三样东西数据集、模型结构、超参数。这样在结果变差时才能定位是自己改了模型还是调整了学习率导致的。8. 常见问题与排查思路问题现象常见原因解决思路安装 PyTorch 后无法调用 GPUCUDA 版本和驱动不匹配运行nvidia-smi查看驱动支持的最高 CUDA再安装匹配的 PyTorch 版本训练 Loss 一直是 NaN学习率过大、数据未归一化调低学习率检查输入数据是否包含 NaN 或过大数值模型训练准确率很低模型结构过于简单、特征未提取充分尝试增加层数、使用预训练模型、数据增强训练集效果好但测试集效果差过拟合使用正则化、Dropout、增加数据、早停强化学习训练不收敛奖励设计不合理、探索率设置不当检查奖励范围调整 epsilon 衰减策略加载大模型时显存不足参数规模太大或精度设置过高使用 FP16/BF16 精度开启梯度检查点或使用量化加载遇到报错时先读完整报错信息再搜索关键异常类型。不要一上来就重装环境很多问题只是版本冲突或路径错误。9. 总结与下一步这篇内容从机器学习基础概念出发梳理了深度学习、神经网络、计算机视觉、自然语言处理、强化学习和大模型等核心知识点并给出了可以直接运行的代码示例。如果你顺着这篇文章的脉络去学习建议按顺序完成三件事先掌握“找函数”的机器学习世界观再用 PyTorch 跑通图像分类任务最后用强化学习或大模型项目收尾。学完这些基础后你可以继续研究 Transformer 的原始论文、PyTorch 官方教程或者尝试参加 Kaggle 比赛来检验自己的水平。遇到不懂的地方把问题拆小多跑实验慢慢就会形成自己的理解和经验。如果这篇文章对你有帮助建议收藏起来搭配课程视频和上面的代码练习边看边动手。