胡慧华
菜单
首页人工智能机器学习深度学习智能体项目实践关于我
跳至课程正文
← 返回深度学习课程

DEEP LEARNING · COURSE 01

深度学习是什么,
什么时候适合使用?

先认一个手写数字,再理解模型怎样学习。
第一课,我们从直觉出发,不急着推导公式。

零基础约 30–40 分钟10 个学习环节
多层神经网络的概念主视觉:节点与光线逐层相连
本课你将能够
  • 说清深度学习的基本含义
  • 区分训练与预测
  • 为一个场景选择合理的起点
01

先遇见问题

这张图片,写的是哪个数字?

假设你要帮快递站录入手写单据。数字有粗有细,有的歪斜、有的连笔。人能快速辨认,但怎样把“认数字”的规则写给电脑?

一张真实的低分辨率数字图片

先用你的直觉判断

请选择最像的数字。图片来自公开教学数据集,答案在选择后揭晓。

难点不是记住这一张图

如果我们写一条“有两个圈就是 8”的规则,圈没闭合时怎么办?数字倾斜时怎么办?机器学习提供了另一条路:用很多带答案的例子,学习能用于新图片的规律。

02

基础词汇 · 像素、样本、标签

电脑接收到的,是一组数值

一张数字图片可以看作一个方格表。每个小格叫“像素”,数值表示它的明暗。本课图片只有 8 × 8 个像素,便于看清每一个数。
样本
一条记录。这里就是一张图片。
特征
输入模型的描述信息。本例直接使用 64 个像素数值。
标签
训练时提供的正确答案。本例是数字 0 到 9 中的一个。
0 · 暗16 · 亮

把 8 行依次接起来,可以得到长度为 64 的数值序列。模型接收图片数值;标签单独保存,不偷偷放进输入里。

查看完整的 8 × 8 像素数值表
挑战图片原始像素值(0–16)
行 / 列12345678
10021313100
20081614400
30051610840
400116161020
502151312000
60512315100
70014313400
80031513100
03

概念地图

深度学习,是机器学习中的一类方法

先分清三个经常一起出现的词。它们不是三个并列、互不相关的东西。
人工智能 · AI

让机器完成识别、推理、决策等任务的广泛领域。

机器学习 · ML

从数据中学习规律,用于预测、分类或其他任务。

深度学习 · DL

使用多层神经网络,逐层学习数据的表示。

“深”指的是处理层次

神经网络由许多可调整的计算单元组成。一层接一层地转换信息,叫做多层处理。“深”不是“像人一样深入思考”,层数更多也不保证更准确。深度学习并没有一个适用于所有场合的固定层数门槛。

人工写规则

把判断方法写清楚

例如:分数达到 60 就算及格。规则明确、稳定时非常合适。

机器学习的一般思路

从样本学习关系

先确定输入与目标,再用数据学习判断方法。KNN、决策树和神经网络都是例子。

深度学习的特点

连特征表示也一起学

多层网络可以学习有利于任务的中间表示,但仍需要人定义目标、准备数据和检查结果。

04

先理解层次,再学习公式

把简单线索,一层层组合起来

“表示”可以理解为模型内部描述信息的一组数值。下面用视觉识别建立直觉;具体网络学到的内容不一定能直接翻译成人类概念。
输入的是数值

像素

把图片变成明暗数值。同一张图中的像素位置很重要,位置改变可能影响结果。

上图是帮助理解层次的概念示意,不是实验模型内部的真实可视化。后面的实验使用一个小型全连接网络,不假设它的每一层真的在识别“边缘”或“圆圈”。

64像素输入图片展开为数值
32隐藏层一一组可学习的计算
16隐藏层二继续组合前层结果
10类别输出数字 0 到 9
05

训练 ≠ 预测

学习发生在参数被调整的时候

用题目和答案练习是训练;拿学到的方法回答新问题是预测。两者都需要计算,但只有训练会按照学习规则更新参数。

步骤 01

准备样本与标签

样本是一条输入记录,例如一张图片。标签是这条记录对应的答案,例如数字 8。先把一部分数据留出来,最后再考试。

训练样本:图片 + 已知数字

本课是带标签的监督学习例子。深度学习也可以采用自监督等其他学习方式。

训练时

图片 + 标签 → 比较错误 → 更新参数

预测时

新图片 + 已有参数 → 输出预测

06

互动实验 · 真实小模型

改一改输入,看看模型怎么判断

你不需要写代码。选择一个样本,改变位置、遮挡或噪声,观察同一个模型的输出。
动手任务

先观察原图,再把图片向右移一格或遮住上方几行。比较预测是否改变:分数可能下降,也可能错误地升高。

同一数字的不同写法

当前输入 · 8 × 8 像素

原图标签:8 · 原始测试样本

“原图标签”说明图片的来源;严重遮挡后,画面可能已经无法辨认。

固定模型的即时计算

1

模型当前倾向于数字 1。与这张原图的标签不一致。

  1. 数字 173.8%
  2. 数字 817.8%
  3. 数字 46.5%

这里的百分比是模型输出,不是“保证正确”的概率。模型没有在你操作时重新训练。

为什么一格的移动也可能影响结果?

这个小模型直接接收固定位置的 64 个数值,没专门学会应对位置变化。移动后,笔画落在不同的输入位置,输出就可能改变。第 07 课会进一步讨论卷积网络如何利用局部结构;它也不是对所有变化都免疫。

查看实验来源、训练方式与局限

使用 scikit-learn 的 digits 数据集:1,797 张 8 × 8 灰度图片,每个像素取值 0–16。本实验不是 MNIST,也不是通用手写识别服务。

固定随机种子 42,按类别比例划分:训练池 1437 张、独立测试集 360 张。训练池内部再留出约 10% 用于提前停止判断。网络有两个隐藏层(32、16 个单元),本次训练进行了 64 轮,原始测试集准确率为 93.9%。

页面从测试集中按顺序取每类前三张,共 30 张,不按预测是否正确筛选。移动、遮挡与噪声在浏览器中计算;模型参数固定。上述准确率只针对原始测试集,不代表修改后图片或现实业务上的表现。小型全连接网络用于建立直觉,不代表深度学习的最佳实践。

数据集官方说明 ↗
07

从算法回到问题

不是所有问题,都需要深度学习

选择方法时,先看任务、数据和成本。训练一个新模型、微调已有模型、直接调用已有能力,要求和投入都不一样。
01

更值得尝试

大量图片中的外观缺陷、语音转文字、复杂文本分类

输入变化丰富,人工规则很难覆盖。可以从已有模型开始,用真实业务数据验证。

02

先比较简单模型

用客户年龄、次数、金额等表格字段预测流失

这类任务也能使用神经网络,但树模型或线性模型可能已经足够。复杂度不是效果保证。

03

优先规则或先补条件

按固定公式计算费用;没有可靠标签却要求零错误识别

前者规则清楚;后者缺少验证条件。先解决规则、数据或容错问题,再谈模型。

为一个具体任务做判断

带着你的真实场景回答。还不清楚的地方,就选“不确定”。

01这个任务是否难以用稳定、明确的规则写完整?

先想想一套可维护的规则能否满足需求。

02是否有相关、可使用的数据,或可以验证的预训练模型?

还要检查标注质量、代表性和使用权限。

03能否衡量效果,并处理模型出错的情况?

需要测试样本、错误代价与人工复核等安排。

04相对简单方法,预期收益值得承担计算和维护成本吗?

把设备、延迟、费用和后续维护一起考虑。

已回答 0 / 4 项。回答全部问题后查看建议。

回到手写单据的例子

实验能认数字,不等于单据录入已经解决:真实单据还需要定位字段、处理模糊图片、检查错误、保护数据并安排复核。模型准确率只是整个产品的一项指标。

08

可选代码实践 · 每行都有说明

用代码走一遍完整流程

前面的实验模型,就是通过下面这段代码训练的。先认出“数据、训练、测试、预测”四个动作,再逐步理解参数。
这一节可以先读懂,再动手运行

Python 是本例使用的编程语言,scikit-learn 是提供数据与训练工具的库。这里先用它观察“准备数据 → 训练 → 测试”的完整流程,不要求你现在就能写出训练算法。第 15 课再使用 PyTorch 搭建完整项目。

准备运行环境(可选)

在已安装 Python 3.12 的电脑中,打开终端并执行下面的安装命令。终端是输入命令的窗口,此命令只安装本地学习所需的库。

python -m pip install scikit-learn==1.7.2

下载代码后,在文件所在目录运行:

python deep-learning-intro.py

不需要显卡,也不需要另外下载数据。未准备环境时,先看下面的逐行说明即可。

deep-learning-intro.py

第一步:读取图片与答案
  1. from sklearn.datasets import load_digits

    导入示例数字数据的读取工具。sklearn 是 scikit-learn 在代码中的名字。

  2. from sklearn.model_selection import train_test_split

    导入划分数据的工具,把一部分样本留到最后测试。

  3. from sklearn.neural_network import MLPClassifier

    导入多层感知机分类器:一种由多个计算层组成的神经网络。

  4. digits = load_digits()

    读取库自带的 8 × 8 数字图片及答案;不需要另外下载 MNIST。

  5. X = digits.data / 16.0

    X 保存像素特征;把原本 0–16 的值除以 16,缩放到 0–1。

  6. y = digits.target

    y 保存正确的数字标签,与 X 的每一行一一对应。

第二步:划分数据、设置模型
  1. X_train, X_test, y_train, y_test = train_test_split(

    把输入与标签一起划分,得到训练池和测试集,避免错位。

  2. X, y, test_size=0.2, random_state=42, stratify=y

    保留约 20% 用于测试;固定随机种子;尽量保持各数字的占比。

  3. )

    结束这次数据划分调用。测试集不用于调整模型参数。

  4. model = MLPClassifier(

    创建模型。此时还没有学习,只是设定结构与训练方式。

  5. hidden_layer_sizes=(32, 16), max_iter=400,

    设置两个隐藏层,分别有 32、16 个计算单元;最多训练 400 轮。

  6. early_stopping=True, random_state=42

    从训练池内部再留出验证数据,效果不再改善时提前停止;固定初始化种子。

第三步:训练、评估与预测
  1. )

    结束模型配置。隐藏层、参数与训练细节将在后续课程展开。

  2. model.fit(X_train, y_train)

    执行训练:模型反复计算预测、比较标签,并更新参数。

  3. accuracy = model.score(X_test, y_test)

    在独立测试集上计算准确率,也就是预测正确的样本比例。

  4. prediction = model.predict(X_test[:1])[0]

    用训练好的模型识别第一张测试图片;这里不更新参数。

  5. print(f"测试集准确率:{accuracy:.1%}")

    打印测试结果,保留一位小数。不同库版本或运行环境可能有细微差异。

  6. print(f"第一张测试图片:预测 {prediction},真实标签 {y_test[0]}")

    同时显示模型预测与真实标签,便于检查一次具体判断。

本次实际运行记录

独立测试集:360 张 · 准确率:93.9%

这是这次固定划分与配置的结果,不是对其他数据的承诺。测试集用于最后评估,不应反复用于调参。
09

知识检查

五个问题,检查你的理解

选择后会立即显示解释,可以重新选择。目标是理解原因,不是记住选项的位置。

已回答 0 / 5 题 · 当前答对 0 题

01深度学习、机器学习与人工智能是什么关系?
02本课中,8 × 8 的数字图片直接交给模型的是什么?
03在实验里改变图片后,模型参数会自动更新吗?
04模型给某个数字很高的输出概率,意味着什么?
05按固定公式算费用,首先应该选择什么?
10

课程总结

先记住这五件事

你不需要今天就理解所有公式。建立下面这些判断,下一课就有了起点。
  1. 深度学习属于机器学习,它用多层神经网络学习表示。
  2. 图片对电脑而言是一组数值,标签是单独提供的答案。
  3. 训练调整参数;预测使用参数,两者不能混为一谈。
  4. 模型可能自信地出错,必须用合适的新数据检验。
  5. 先定义任务、建立简单基线,再比较深度学习的收益。

下一课 · COURSE 02

从一个神经元到多层神经网络

我们会拆开一个计算单元,亲手调整权重,观察它怎样改变输出。

第一阶段 · 第 2 课
开始下一课 ↗