机器学习七阶段学习路径:从神经网络到大模型实践

发布时间:2026/8/31 2:52:27
机器学习七阶段学习路径:从神经网络到大模型实践 很多人学机器学习时第一步是去收藏一份课程清单。李宏毅老师的《机器学习》系列课程是这类清单里经常出现的名字它覆盖了机器学习、深度学习、神经网络算法、强化学习、计算机视觉、自然语言处理、大模型等七个核心方向。真正拉开学习效果的往往不是课程有没有被收藏而是你有没有围绕课程建立一条可执行的学习主线。如果只是按顺序看视频很容易出现“看懂了但不会写代码跑通了但不敢说理解”的尴尬状态。这篇文章会拿课程当知识地图而不是视频清单。先讲清楚七个核心知识点的依赖关系再给出一套可复现的环境准备方案然后按七阶段安排学习路径每一阶段都会写出学习目标、产出物和验证方式。中间会穿插一个从线性回归到神经网络的最小实验再给强化学习、NLP、CV、大模型四个方向的实践设计。最后是训练过程中最常见的五类问题和一张可复用的学习清单。整个思路可以概括成一句话收藏是起点闭环才是目的。1. 先搞清楚七个核心知识点之间的关系学习顺序才不会乱1.1 七个关键词不是一个并列清单而是一条依赖链先看一个简化依赖图机器学习 ├── 监督学习回归、分类 │ ├── 神经网络算法 │ │ ├── 深度学习 │ │ │ ├── 卷积神经网络 CNN - 计算机视觉 │ │ │ ├── 循环神经网络 / Transformer - 自然语言处理 │ │ │ └── 预训练与缩放法则 - 大模型 │ │ └── 深度强化学习 └── 强化学习经典算法不依赖深度学习但现代强化学习常与深度网络结合这个图不是课程目录而是学习时的依赖关系。机器学习是总纲神经网络是深度学习的基石深度学习又是计算机视觉、自然语言处理和大模型的共同底座。强化学习在经典算法里可以独立于深度学习存在但现代强化学习几乎都用深度网络做策略函数和价值函数。理解这条依赖链才能决定先学什么、后学什么遇到瓶颈时也知道应该回补哪一层。很多人把机器学习、深度学习、大模型当作三个互相竞争的方向实际并不是这样。更准确的说法是机器学习是学科深度学习是机器学习里的一个技术分支大模型是深度学习在超大参数和超大数据条件下的产物。计算机视觉和自然语言处理则是深度学习的两类典型应用场强化学习提供了另一套训练范式。把这层关系想清楚后面学任何新模型都不会觉得割裂。1.2 建议按“先监督学习再深度表征再前沿方向”推进比较稳的学习顺序是先学机器学习基础回归、分类、梯度下降、过拟合、评估指标。这一层不需要神经网络直接拿线性模型和树模型理解“训练”这件事。再学神经网络和反向传播理解参数如何逐层更新激活函数和损失函数为什么存在。然后进入深度学习的两个应用域CNN 处理图像类数据RNN 和 Transformer 处理序列类数据。之后再看自监督学习与大模型因为大模型本质上是在超大语料上做自监督预训练再通过指令微调去适配具体任务。强化学习放在大模型之前或之后都可以它和前面内容共享梯度、策略、价值函数等概念但训练信号来源和标准监督学习不一样。这样安排的收益是每一个新概念都能挂到旧概念上。比如学到 Transformer 的自注意力机制时可以从“加权求和”这个旧概念推出来而不需要把它当成一个全新架构去死记。1.3 用“模型、数据、损失、优化”四个词串起所有内容任何机器学习任务都可以用四个要素描述模型、数据、损失函数、优化算法。监督学习给数据配标签希望模型输出靠近标签强化学习没有标签只有奖励信号希望策略的累积回报最大大模型通过自监督任务从无标签文本里自己构造标签。理解这一点之后七个关键词就不再是七个孤立名词而是一个框架的不同实例。后面每一阶段的学习都建议先用这四个要素拆一下“这个算法在做什么”再去看公式和代码学习效率会高很多。2. 学习环境准备先把 Python、PyTorch 和实验目录搭好2.1 最小环境清单版本、工具和检查命令学习这套课程体系不需要一开始就上很重的环境。课程前半段用 Python 加 numpy 理解算法中后段用 PyTorch 做深度学习实验。下面是一份最小清单角色工具用途建议解释器Python 3.9 以上运行所有代码不要用系统自带的 Python使用独立虚拟环境包管理pip venv或 uv隔离项目依赖每个项目建一个虚拟环境数值计算numpy、pandas、matplotlib数据生成、处理和可视化画损失曲线一定需要 matplotlib深度学习框架PyTorch 2.x神经网络训练和推理安装前先确认 CUDA 版本交互环境Jupyter Lab 或 VS Code边写代码边看结果适合做课程笔记大型脚本建议用 .py硬件CPU 可以先学GPU 用于训练快速迭代没有 GPU 也能跑通入门实验操作上推荐先建一个独立目录比如ml-course-lab里面再分notes/、experiments/、projects/、data/。不要把所有代码和笔记混在一个文件夹里后面回头翻看时目录结构就是最好的记忆线索。2.2 环境检查命令装完不等于能用新建虚拟环境后按顺序执行下面几条命令python --version pip --version python -m venv .venv source .venv/bin/activate # Windows 下为 .venv\Scripts\activate pip install numpy pandas matplotlib torch安装完成后需要检查 PyTorch 能否识别 GPU。如果机器没有独立显卡或者 CUDA 驱动没装好torch.cuda.is_available()输出False是正常的CPU 完全可以做入门实验python -c import torch; print(torch.__version__, torch.cuda.is_available())如果输出类似2.3.0 False说明框架已装好但 GPU 不可用。如果输出2.3.0 True说明 CUDA 环境正常。这里要特别注意True不代表训练一定快还要看显存大小和驱动版本。很多新人装完看到 GPU 可用就以为万事大吉结果一训练发现显存只有 2G一个稍大的模型都放不进去。2.3 学习环境、实验环境和生产环境要分开在课程学习阶段不需要折腾 Docker但要养成一个习惯不要在一台机器上只装一个全局 Python。把所有项目都装进全局环境用不了几个月就会出现“这个项目要 numpy 1.26那个项目要 numpy 1.21”的冲突。推荐的做法是学习环境以 Jupyter Notebook 为主按课程阶段建虚拟环境方便记录推导过程。实验环境以.py脚本或小工程为主跑可复现实验完整保存依赖列表。生产环境等真正部署模型时再考虑 Docker、模型服务框架、监控和回滚不要在学习阶段被容器和云原生工具拖住。实验脚本的依赖要用文件记录不要靠记忆pip freeze requirements.txt这个文件应该随项目提交保证别人克隆下来后可以恢复同样的环境。2.4 环境搭建最常见的坑依赖冲突、CUDA 版本错位、目录混乱问题现象常见原因检查方式处理建议ModuleNotFoundError依赖装到了别的环境运行which pip和python -m pip list激活正确的虚拟环境后重装PyTorch 装了但torch.cuda.is_available()返回FalseCUDA、驱动、PyTorch 版本不匹配运行nvidia-smi查看驱动支持的 CUDA 版本按 PyTorch 官网给出的对应版本安装命令重装代码在 Jupyter 里能跑命令行里报错Jupyter 使用了另一个 kernel在 Notebook 里运行sys.executable查看路径为虚拟环境安装新的 Jupyter kernel数据集下载慢或失败网络或镜像地址问题查看下载日志使用国内镜像或先下载到本地再读取环境问题占初学者排错时间的大头。一个判断标准是如果新代码今天能跑、明天不能跑先怀疑是不是环境换掉了再去怀疑代码本身。3. 用课程体系组织七阶段学习路径每阶段都要有产出李宏毅老师的课程通常会从最基础的回归讲起然后逐步进入神经网络、CNN、RNN、Transformer、强化学习、自监督学习和大模型机制。这里把它拆成七个阶段每阶段都设置明确的学习目标和产出物。注意这七个阶段不是“看完视频单元”而是“完成一个可验证的实验”。阶段核心主题最小产出验证标准一机器学习基础与回归numpy 手写线性回归训练集和测试集 RMSE 都下降二神经网络与反向传播numpy 实现两层网络再用 PyTorch 重写同一随机种子下两者准确率接近三CNN 与计算机视觉一个 PyTorch 两层 CNN 分类器测试集准确率达到目标阈值四RNN、Transformer 与自然语言处理一个小型文本分类脚本在测试集输出准确率五强化学习CartPole 或 CliffWalking 训练脚本平均奖励达到环境目标六自监督学习与大模型机制一篇“预训练/微调”笔记和一次模型推理记录能用自己的话解释两个阶段各解决什么问题七生成式 AI 与多模态应用一个带命令行入口的小工具定义两条验收标准并跑通3.1 一阶段机器学习基础与回归学习目标搞清楚“训练”是什么意思。关键概念包括监督学习、标签、特征、损失函数、梯度下降、过拟合、训练集和测试集。这一阶段不要急着上神经网络。先用线性回归把“预测—算损失—更新参数”的循环跑通理解模型是如何通过数据不断调整参数的。常见错误是只看公式推导不动手实现。哪怕只是用 numpy 写一个最简单的y wx b也比看十遍梯度下降推导更有用。产出物就是一份手写线性回归代码和一张损失曲线图。不建议在这一阶段马上学 SVM、决策树、随机森林等一大堆模型。先掌握回归和分类的通用流程再在需要时扩展。3.2 二阶段神经网络与反向传播学习目标理解神经网络为什么能拟合复杂函数参数是如何通过反向传播更新的。关键概念包括神经元、激活函数、损失函数、学习率、反向传播。这一阶段要重点推导一个两层网络的梯度而不只是调用model.forward()。可以先在合成数据上用 numpy 实现两层网络再用 PyTorch 重写一遍做结果对比。产出物是两份等价代码。验证方式是设置相同随机种子比较测试集准确率或损失曲线。如果两个结果差异很大说明对网络结构或参数初始化的理解还有偏差。这里最常见的坑是把深度学习框架当成黑盒出了问题只能靠猜。建议至少手推一次 2 层网络的反向传播不要求会背公式但要能在小例子上手动算出第一层的梯度。3.3 三阶段CNN 与计算机视觉学习目标理解卷积、池化、特征图、感受野这些概念。关键概念包括卷积核、padding、stride、Flatten、全连接层。这个阶段可以从灰度手写数字识别开始。一张 28x28 的图像经过多层卷积后变成特征向量再通过全连接层做分类。产出物是一个基于 PyTorch 的两层 CNN 分类器。验证方式可以设一个不高但明确的阈值例如测试集准确率达到 98% 以上。这个数字不需要调参就能做到适合作为初学检查点。学习 CNN 时要多关注卷积输出尺寸的计算而不是只跑通代码。输出尺寸算错后面全连接层的输入维度就很容易取错。常见现象是shape不匹配报错解决方式是把每层输出都打印出来或者使用torchsummary一类的工具。3.4 四阶段RNN、Transformer 与自然语言处理学习目标理解序列数据如何处理注意力机制为什么有效。关键概念包括词嵌入、循环神经网络、长短期记忆网络 LSTM、自注意力、Transformer。这一阶段最容易踩的坑是一上来就学大模型结果卡在注意力公式里。建议先做一个小型文本分类任务例如用 PyTorch 实现一个简单 RNN 对句子做情感判断再对照 Transformer 结构理解 QKV。产出物是一个可以运行的文本分类脚本。验证方式是在测试集输出准确率如果自己实现了注意力还可以尝试可视化注意力权重。自然语言处理和图像处理最大的区别是输入长度不固定。图像可以统一缩放到固定尺寸文本则要处理变长序列。理解 padding、mask、token 这些机制比背模型代码更重要。3.5 五阶段强化学习学习目标理解 agent、环境、状态、动作、奖励、策略、价值函数这些概念。关键概念包括马尔可夫决策过程、策略梯度、DQN、reward hacking。强化学习和监督学习的最大区别是没有固定标签。典型课程里会从经典算法讲到深度强化学习。建议第一阶段不要直接读论文先跑通一个 CartPole 环境观察 agent 如何从随机动作开始通过试错慢慢提高奖励。产出物是一个能完成简单任务的智能体训练脚本。验证方式是平均奖励达到环境目标例如 CartPole 连续 100 局平均超过 195。这个阶段要特别注意“奖励信号”和“学习目标”之间的延迟关系。监督学习里每个输入都有一个即时标签强化学习里当前动作的后果可能要几十步之后才体现在奖励里。理解这种延迟会把很多算法逻辑解释清楚。3.6 六阶段自监督学习与大模型机制学习目标理解大模型为什么“什么都会一点”。关键概念包括预训练、微调、上下文学习、指令微调、RLHF、参数量。这个阶段通常会把大模型拆成“预训练”和“对齐”两段这是理解大模型的关键。预训练解决的是“从海量文本中学到语言规律”对齐解决的是“让模型能按用户的指令回答问题”。产出物是一篇解释大模型训练过程的笔记外加一次开源小模型的本地推理记录。验证方式不是看模型答得好不好而是能用自己的话说明预训练和微调各解决什么问题。不要在这个阶段尝试自己从头训练一个大模型算力和数据都不现实。更有效的做法是把一个已经存在的开源小模型下载到本地观察它的输入输出、显存占用和推理延迟。用这种方式理解“模型推理”比读十篇综述都有用。3.7 七阶段生成式 AI 与多模态应用学习目标理解生成模型和多模态发展的整体图景。关键概念包括 VAE、GAN、扩散模型、多模态对齐、Agent。这个阶段适合做应用型实验调用合规的大模型 API或者本地部署一个开源模型完成文本摘要、图片描述或对话机器人。产出物是一个带命令行入口的小工具。验证方式要提前定义清楚例如“输入一段故障日志能被总结成三个要点”“输入一张图片能输出一段准确描述”。生产环境还要额外考虑权限、日志、限流和内容安全过滤。生成式 AI 的迭代速度很快不建议死盯某一种模型架构。重点要训练的是“如何给模型设定合理输入、如何设计 eval 集、如何评估输出质量”。这组能力可以迁移到很多新产品和新技术上。4. 最小实验从线性回归到神经网络跑通一个完整训练闭环为了不依赖外部数据集下载这里用一个合成回归数据来演示完整训练闭环。整个流程包含数据生成、模型定义、训练、验证四个步骤。4.1 用合成数据搭建一个回归任务import numpy as np import matplotlib.pyplot as plt np.random.seed(42) x np.linspace(-2, 2, 200).reshape(-1, 1) # 真实关系是 y 2x 1加入噪声模拟现实数据 y 2 * x 1 0.15 * np.random.randn(200, 1) plt.scatter(x, y, s8, alpha0.5) plt.xlabel(x) plt.ylabel(y) plt.show()这里生成 200 个样本。加入噪声非常重要如果完全没有噪声模型会得到一个过于理想的拟合结果无法体会“泛化”的意义。真实数据几乎都有噪声训练目标不是让模型在训练集上完美还原每个点而是在未见过的新数据上也能保持较小的误差。4.2 手工实现梯度下降理解参数更新线性模型的预测公式是y_pred w * x b损失函数使用均方误差 MSEloss mean((y_pred - y) ^ 2)对w和b的梯度可以手动计算出来然后用梯度下降更新w np.random.randn() b np.random.randn() lr 0.1 for epoch in range(50): y_pred w * x b loss np.mean((y_pred - y) ** 2) dw np.mean(2 * (y_pred - y) * x) db np.mean(2 * (y_pred - y)) w - lr * dw b - lr * db if epoch % 10 0: print(fepoch {epoch}, loss {loss:.4f}, w {w:.4f}, b {b:.4f})梯度下降的每一步都做同一件事算出损失函数对参数的偏导数然后朝损失下降的方向移动一点点。lr控制移动步长太大容易在最低点附近震荡太小收敛很慢。运行这段代码后可以看到 loss 逐步下降w接近 2b接近 1。如果loss飙升通常是学习率过大。4.3 用 PyTorch 改成两层神经网络手工写了梯度下降后再看深度学习框架会轻松很多。下面是一个包含一个隐藏层的两层网络隐藏层有 16 个神经元激活函数用 ReLUimport torch import torch.nn as nn import torch.optim as optim x_t torch.tensor(x, dtypetorch.float32) y_t torch.tensor(y, dtypetorch.float32) model nn.Sequential( nn.Linear(1, 16), nn.ReLU(), nn.Linear(16, 1) ) loss_fn nn.MSELoss() optimizer optim.Adam(model.parameters(), lr0.02) for epoch in range(500): optimizer.zero_grad() pred model(x_t) loss loss_fn(pred, y_t) loss.backward() optimizer.step() if epoch % 50 0: print(fepoch {epoch}, loss {loss.item():.4f})这段代码里有几个关键点optimizer.zero_grad()必须在每次更新前清空梯度否则梯度会累加。loss.backward()自动计算所有参数梯度这就是框架对“反向传播”的封装。optimizer.step()执行参数更新。ReLU 激活函数让网络有能力拟合非线性关系。不要因为框架自动计算梯度就跳过手工梯度下降。手工推导能帮你判断梯度是否有问题框架自动求导能帮你快速迭代模型。两者结合才是最合理的分工。4.4 验证指标和输出训练完成后在相同数据上计算 RMSE并画出模型拟合曲线import numpy as np model.eval() with torch.no_grad(): pred model(x_t) rmse np.sqrt(loss_fn(pred, y_t).item()) print(fRMSE: {rmse:.4f}) plt.scatter(x, y, s8, alpha0.5) plt.plot(x, pred.numpy(), colorred, linewidth2) plt.xlabel(x) plt.ylabel(y) plt.show()RMSE 比 MSE 更容易解释因为它和原始y的量纲一致。这里真实噪声标准差是 0.15所以 RMSE 在 0.15 左右就说明模型已经把主要规律学出来了。如果两层网络在该任务上的 RMSE 明显高于线性回归说明网络结构或训练过程有问题。这个最小实验虽然题目简单但包含了所有必要环节构造数据、前向传播、计算损失、反向传播、更新参数、验证指标。把这套闭环肌肉记忆形成后后面无论换什么模型都只是替换其中一部分。5. 四个方向的小实验设计课程覆盖多个方向这里不建议每个方向都做成完整生产项目。每个方向跑通一个最小实验理解原理就够了。5.1 强化学习先跑随机策略再训练策略网络用新版 Gymnasium 库跑 CartPole先观察随机策略的效果import gymnasium as gym env gym.make(CartPole-v1) for episode in range(5): obs, info env.reset() total_reward 0 done False while not done: action env.action_space.sample() # 随机策略 obs, reward, terminated, truncated, info env.step(action) done terminated or truncated total_reward reward print(fepisode {episode}, reward {total_reward})随机策略在 CartPole 上的平均奖励通常很低可能只有二三十。强化学习的目标就是训练一个策略网络让智能体学会保持杆子平衡最终获得尽量接近 500 的奖励。对比随机策略和训练后策略的奖励曲线能直观感受到“学习”发生了什么。5.2 NLP用 TF-IDF 加逻辑回归跑通文本分类很多入门 NLP 教程一上来就用 Transformer但先用传统方法跑通流程是更稳的选择。下面是一个不需要 GPU 的文本分类示例from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline texts [ 这个产品很好用, 下次不会再买了, 物流很快, 客服态度很差 ] labels [1, 0, 1, 0] model make_pipeline(TfidfVectorizer(), LogisticRegression()) model.fit(texts, labels) print(model.predict([质量不错]))这个例子数据集很小只用于跑通流程实际项目中至少需要几千条标注数据。用传统方法跑通后再切换成 RNN 或 Transformer就能理解“深度学习相对传统方法到底改进了什么”。5.3 CV用 PyTorch 定义一个简单 CNN一个适合初学者复现的模型结构是 LeNet 风格。下面是一个面向 MNIST 灰度图的 CNN 分类器import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self, num_classes10): super().__init__() self.features nn.Sequential( nn.Conv2d(1, 16, 3, padding1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(16, 32, 3, padding1), nn.ReLU(), nn.MaxPool2d(2), ) self.classifier nn.Sequential( nn.Flatten(), nn.Linear(32 * 7 * 7, 128), nn.ReLU(), nn.Linear(128, num_classes) ) def forward(self, x): return self.classifier(self.features(x))输入是形状为(batch, 1, 28, 28)的灰度图片。经过两次卷积和池化后空间尺寸从 28x28 变成 7x7通道数从 1 变成 32因此全连接层输入维度是32 * 7 * 7。如果不计算这个尺寸模型定义完成后很容易在 forward 时报矩阵维度不匹配。训练循环和前面线性模型类似核心区别是数据要组织成四维张量输入x的形状是(batch_size, channel, height, width)。图像分类的验证指标除了准确率还要关注每个类别的精确率和召回率尤其是类别不均衡时。5.4 大模型本地部署或 API 调用的部署验证大模型实验可以分成两层一是推理层观察模型对输入的响应二是部署层记录显存、延迟、吞吐量。以本地部署一个开源模型为例部署完成后可以通过 HTTP 接口发送 JSON{ prompt: 请用三句话总结下面的故障日志\n服务在12:01出现连接超时持续约3分钟后恢复。期间监控平台报警负载均衡器健康检查失败。, max_tokens: 200, temperature: 0.3 }返回结果可能是{ choices: [ { text: 1. 服务在12:01出现连接超时持续约3分钟。\n2. 监控平台报警负载均衡器健康检查失败。\n3. 建议检查后端服务健康状态和网络链路。 } ] }部署时的一个重要知识点是浮点数格式。模型权重和中间激活可以用不同精度存储常见格式如下格式位数特点适用场景FP3232 位精度高显存占用大训练早期、调试FP1616 位显存减半可能出现精度溢出推理加速BF1616 位动态范围接近 FP32大模型训练和推理TF32约 19 位NVIDIA Ampere 架构支持的精度模式精度和速度折中实际选哪个格式取决于硬件和任务对精度的要求没有绝对最优。部署时要记录模型参数量、加载后显存占用、首个 token 延迟和整体吞吐量。这里更推荐用表格维护多组实验数据而不是只看单次输出。6. 训练过程中的常见问题和排查链路6.1 损失不下降现象是 loss 一直维持在初始值附近波动甚至越来越大。可能原因有很多学习率太大导致发散或太小导致收敛极慢。输入数据没有归一化梯度方向不稳定。模型表达能力不足过于简单。优化器参数配置错误例如梯度不更新。数据标签和模型输出不一致常见于分类层维度写错。排查顺序建议是先打印前几步的 loss 和梯度确认参数是否在更新再检查数据范围看是否要做标准化然后尝试把学习率调小一个量级最后用一个更小的模型先跑通再逐步加大。6.2 梯度爆炸或梯度消失梯度爆炸的标准现象是 loss 变成 NaN或者参数更新后直接跳出合理范围。梯度消失则表现为深层网络前面的层参数几乎不变模型能力提升缓慢。处理