y = 阶跃(w₁x₁ + w₂x₂ + b)Rosenblatt, 1958
当果香和醋味同时飘来时,神经元以不同的强度分别接收这两个信号并相加。总和超过放电阈值,就发出“靠近”的信号。突触强度就是权重,放电阈值就是偏置。
把每个输入乘以权重后相加,再加上偏置,得到值 z;z 大于等于 0 就输出 1,否则输出 0。放到平面上看,就是 w₁x₁ + w₂x₂ + b = 0 这一条直线把“食物”和“非食物”分开。每遇到一个分错的点,就把直线朝那个点稍微移动一点,这就是感知机的学习规则。
感知机的学习规则只有一行:挑一个分错的点,w ← w + η·(正确答案 − 预测)·x。如果正确答案是 1 却预测成 0,就把直线拉向那个点;反之就推开。只要问题可以用直线划分,仅靠这条规则,迟早能把所有点都分对。
像 XOR 这样“只有其中一个存在时才是食物”的问题,任何直线都无法划分。1969 年 Minsky 和 Papert 从数学上证明了这一局限,此后神经网络研究沉寂了一段时间。解决办法是再加一层,也就是隐藏层。在此之前,我们先来看看用平滑弯折的函数代替阶跃函数。
激活函数接收加权和 z,决定神经元的输出 a。必须有弯折,堆叠多层才有意义;而梯度(导数)的形状决定了学习速度。
反向传播每往回经过一层,就要乘上激活函数的梯度。Sigmoid 的梯度最大也只有 0.25。往回经过 10 层,最多也会缩小到 0.25¹⁰ ≈ 0.00000095 倍。“请修正”的信号几乎传不到前面的层。这就是梯度消失。
ReLU 在正数区间的梯度恰好是 1,往回经过多少层信号都不会衰减;计算也只是“和 0 比较”,所以很快。不过在负数区间梯度为 0,一旦熄灭的神经元可能再也无法复活。Leaky ReLU、ELU、Swish 等变体正是为了填补这个漏洞。没有哪个函数永远最好,要根据问题和模型来选择。
点(像素)→ 方向 → 接合处 → 形状。下一层以前一层的特征为材料,构建出更高一级的特征。
用权重(0.5, 0.3, 0.2, 0.1)权衡前一层的 4 个特征(0.8, 0.1, 0.4, 0.0),再加上偏置 0.1。
上图中的方向、接合处检测器是为了讲解而由人预先设定的规则。以前的机器学习确实是这样由人来设计特征的。深度学习则从数据中自己学习这些检测器的权重,因此还能发现人没有想到的特征。
图像中每一层实际会产生什么特征,将在 3-3(图像与 CNN)中介绍。
学习就是减小损失。把什么定为损失,决定了模型“害怕什么”。
(正确答案 − 预测)²。是预测数值的回归问题的基本选择。用于预测房价、家庭支出、气温等连续值。下面的反向传播仪表盘就使用这个损失。
−log(分给正确答案的概率)。是分类问题的基本选择。如果很有把握却答错,惩罚会无限增大。输出使用 Sigmoid 或 Softmax 时与之搭配。
输出使用 Sigmoid 时,MSE 的梯度为 2(p − t)·p(1 − p)。如果正确答案是 1,模型却很有把握地给出 p = 0.01,那么 p(1 − p) 接近 0,梯度也几乎为 0。错得很离谱,“请修正”的信号却很弱。使用交叉熵时,Sigmoid 的导数被干净地消掉,梯度就是 p − t,即 −0.99。错得越多,修正得越猛。
输入 2 → 隐藏 3 → 输出 1目标 1.00 · 损失 = (目标 − 输出)² · 学习率 0.1
输入沿着连接一路计算到输出。最初的输出是 0.41。
(1.00 − 0.41)² ≈ 0.35。就是上面第 5 节的 MSE。
从输出倒着往回,为每个权重计算责任(梯度)。
新权重 = 原权重 − 学习率 × 梯度。这就是梯度下降。
点击权重格,图中会高亮对应的连接,下方的“用数字跟踪”会显示该权重的计算过程。
首先确定输出处的误差量 −2 × (目标 − 输出)。隐藏→输出权重的责任,就是用它乘以经该权重传入的信号(隐藏值)。输入→隐藏权重还要再往回走一格:乘以输出权重 v,把责任送到隐藏神经元;再乘以隐藏神经元的敏感程度 h(1 − h);最后乘以传入的输入 x。这种“相乘后往回送”就是链式法则。第 2 节的梯度消失也正是在这种乘法中产生的。
点击“仅输出侧(果蝇方式)”后,输入→隐藏权重被固定,从上方传下来的教学信号(比作果蝇的多巴胺)只修正输出侧的连接。这是对果蝇蘑菇体学习结构的大幅简化比喻;多巴胺信号是否像梯度那样被计算,目前仍在研究中。
把损失画成地形,学习就是寻找最低处、一路往下走。即使看到相同的梯度,每种优化器迈步的方式也不同。
这个山谷横向狭长、纵向陡峭。SGD 只按梯度大小移动,所以在陡峭的纵向上会大步上下乱跳(锯齿形);学习率小时,在平缓的横向上则像乌龟一样慢(在“0.1 小”中确认)。动量记住滚动的速度,在稳定的方向(横向)上加速,而锯齿形的来回则相互抵消。Adam 对每个方向分别衡量梯度大小来调整步幅,因此横向和纵向以相近的速度下降。
“小批量噪声”是像实际学习那样只看部分数据计算梯度时产生的抖动。把学习率设为“大”,SGD 会越过山谷壁被弹出去。没有哪种优化器总是获胜。Adam 在大多数问题上都是稳妥的默认选择,因此被广泛使用;但也有研究表明,在许多深度学习任务中,调好的 SGD 在没见过的数据上表现更好 [R12]。
训练点 14 个 · 验证点 80 个输入 1 → 隐藏 48 (tanh) → 输出 1,Adam
最可靠的对策是收集更多数据。数据少而模型大,就容易死记硬背。此图中的数字是本页直接计算的讲解用实验,为了每次运行结果都一样,固定了随机数。
到目前为止看到的部件都属于“训练”这一个阶段。实际工作中,它前后的环节更长。示例是工厂检测台上的“找出次品”模型。
检测的 200 件产品中,实际次品有 20 件。模型为每件产品给出“是次品的概率”。试着改变多少以上判为次品(阈值)。
两段代码都只使用 Colab 默认安装的库。点击“下载笔记本(.ipynb)”后,在 Colab 中通过文件 → 上传笔记本打开,或者复制后粘贴到新笔记本的单元格中。
不借助库,原样实现前向传播 → 损失 → 反向传播 → 更新四个步骤。用同样的螺旋数据分别训练“无激活函数”和“tanh 隐藏层”并进行比较。想换成自己的数据,只需在代码中标有 [想换成自己的数据] 的地方修改 X 和 y。
这是实际工作中使用的方式。比较无激活函数 / ReLU / ReLU + Dropout + 早停三个模型,并把最后一个模型保存为文件(第 9 节的 ⑥ 保存)。
这是粘贴到 ChatGPT、Qwen、Claude 等 AI 助手中的提示词。点击“复制”时,所选代码会一并附在提示词后面。把〔 〕里的内容换成自己的情况即可。
AI 的回答只是起点。它提出的论文·数值·库函数务必对照原文和官方文档核实。如果在竞赛·论文中借助了 AI,请按照主办方和期刊的规定说明使用的事实和范围。
与正文中黄色虚线下划线相同的词典。整个系列使用统一的写法。点击章节名可跳到首次出现的位置。
类比是理解的第一步,但也可能成为误解的种子。果蝇·大脑类比标注了强度。直接 有证据表明实际在做同样的事 · 部分 只有部分性质相似 · 无 尚未发现对应的东西
| 概念 | 日常类比 | 果蝇·大脑类比 | 类比失灵之处 |
|---|---|---|---|
| 权重 | 对每条意见给出不同的信任度 | 部分 突触强度 | 真实突触的强度会随时间和身体状态而变化,信号也不是连续的数字,而是电脉冲(尖峰) |
| 偏置·阈值 | 做出决定的基准线 | 部分 神经元的放电阈值 | 神经元的阈值不是固定值,会因疲劳、适应而不断变化 |
| 激活函数 | 怎么拧都有极限的音量旋钮 | 部分 随刺激强度变化的放电频率曲线 | 神经网络输出一个数字,而神经元随时间发出脉冲 |
| 隐藏层 | 汇总报告的中层管理者 | 部分 蘑菇体的凯尼恩细胞 | 蘑菇体输入侧的连接大多不会因学习而改变,而深度学习的隐藏层会学习所有连接 |
| 损失函数 | 考试评分表 | 部分 糖(奖励)·电击(惩罚)这样的结果 | 果蝇不会用一个数字来计算“错了多少” |
| 反向传播 | 事故之后倒推追究责任 | 无 多巴胺信号不会逆着层来计算 | 大脑是否用其他方式做着类似反向传播的事,仍在研究中 |
| 学习率 | 被指出一次后修正的幅度 | 部分 一次经历带来的突触变化量 | 大脑的变化幅度因情境、注意力、重复而不同 |
| 优化器 | 在雾气笼罩的山上下山的登山者的步法 | 无 | 实际的损失地形有数百万维,无法像图中那样一眼看清 |
| 过拟合 | 只背了往年真题答案的考生 | 无 | 人也会死记,但人的泛化方式与神经网络不同 |
| Dropout | 少了几个人也能运转的团队 | 无 有人解释说它类似突触传递偶尔失败,但依据较弱 | 测试时打开所有神经元使用。团队成员并不是一直缺席 |
E-1 作者简介 · E-2 学术参考文献 · E-3 图片参考资料
以下资料作为结构和内容的参考。
这是面向讲师、实务 OJT 负责人和辅导老师的教学指南。时间为预估值,请根据实际课堂调整。
| 对象 | 初学神经网络的大学生、职场人士。有 Python 基础可做到 Colab 实践,没有的话学到正文动画即可 |
|---|---|
| 先修知识 | 乘法和加法、读懂函数图像。导数只需理解为“梯度 = 稍作改变时会变化多少”即可 |
| 学习目标 | ① 说明感知机、激活函数、隐藏层各自的作用 ② 用数字跟踪前向传播 → 损失 → 反向传播 → 更新 ③ 识别过拟合,并用验证数据、早停、Dropout 应对 |
| 预计时间 | 阅读 40~50 分钟 · 动画演示 25 分钟 · Colab 实践 30 分钟(代码 1 10 分钟,代码 2 20 分钟) |
导入 5 分钟(第 1 节 XOR 失败演示)→ 第 2·3 节演示 15 分钟 → 第 5·6 节仪表盘 15 分钟 → 第 8 节过拟合 10 分钟 → 检测题 5 分钟。
第 6 节仪表盘 15 分钟 → 第 8·9 节 25 分钟(结合业务案例讨论准确率陷阱)→ 代码 2 实践 30 分钟 → 用提示卡片“应用到我们团队的数据”20 分钟。
入门者只学第 1·2·3·6 节;中级者先手算一遍第 6 节的“用数字跟踪”,再与代码 1 的反向传播部分对照。
| 章节 | 停下来提问的问题 | 操作提示 |
|---|---|---|
| 1 感知机 | “在 XOR 中,无论怎么移动直线,为什么总会剩下分错的点?” | 先训练简单问题看到成功,再换成 XOR |
| 2 激活函数 | “Sigmoid 梯度的最大值在哪里,是多少?” | 在 Sigmoid 处暂停,把滑块移到 0,确认 0.25 |
| 3 隐藏层 | “堆了两层,为什么左边还是直线?” | 把神经元数减到 4,展示右边也失败的样子 |
| 4 表示学习 | “□ 为什么靠 4 个角来判断?如果是人,会看什么?” | 交替点击 T 和 L,指出只有接合处层发生变化 |
| 5 损失函数 | “很有把握却答错时,哪种损失会更强烈地要求修正?” | 把 p 设为 0.01,比较两个梯度数值 |
| 6 反向传播 | “靠近输出的权重和远离输出的权重,谁的梯度更大?” | 用“下一步”慢慢走完一轮,再切换权重格来读公式 |
| 7 优化器 | “SGD 为什么走锯齿形?” | 把学习率改为“大”,展示 SGD 被弹出去的场景 |
| 8 过拟合 | “训练损失一直下降,就是好模型吗?” | 关闭所有正则化运行到底,再逐个打开进行比较 |
| 9 完整流程 | “在次品检测中,漏检和误报哪个代价更高?” | 把阈值移到 0.2 和 0.8,观察精确率和召回率反向变化 |
| 误解 | 正确解释 | 要展示的场景 |
|---|---|---|
| 层堆得越多,就一定越聪明 | 没有激活函数,多少层都等同于一条直线。即使有,数据少也会过拟合 | 第 3 节左图、第 8 节 |
| 神经网络原样照搬了大脑 | 只借用了层、连接强度、阈值这一骨架。反向传播在大脑中尚未得到证实 | 公共部分 D 的“无”标记 |
| 训练损失低就是好模型 | 标准是在没见过的数据(验证·测试)上的性能 | 第 8 节右图 |
| 准确率高就是好模型 | 在不平衡数据中,“全部正常”的准确率也很高。要同时看精确率和召回率 | 第 9 节阈值 0.95 |
| Adam 永远是最好的 | 它只是稳妥的默认选择。视问题而定,SGD + 动量有时更好 | 第 7 节学习率“小” |
只能画出一条直线(高维中为一个平面)。因为多个线性变换合在一起仍是一个线性变换(W₂W₁x = Wx)。第 3 节的左图就是例子。
Sigmoid 的梯度最大为 0.25,逐层相乘后迅速变小。ReLU 在正数区间的梯度为 1,往回传也不会衰减。但在负数区间为 0,可能出现熄灭的神经元。
L = (1 − 0.41)² = 0.3481 ≈ 0.35。∂L/∂y = −2 × (1 − 0.41) = −1.18。与第 6 节仪表盘第一轮的值相同。
是过拟合。使用验证损失最低时的模型(早停),打开 Dropout、权重衰减,或增加数据。
准确率 90%,召回率 0%。一个次品也没找到。所以在不平衡数据中不能只看准确率。
在代码 1 中把 tanh 换成 ReLU(激活函数及其导数两行)。把隐藏神经元数改为 4、16、64,将验证准确率整理成表格,并用三句话写出最佳设置及其理由。
把代码 2 的数据换成自己的业务数据(2 个以上特征,正确答案为 0/1)。按 6:2:2 划分训练/验证/测试,报告测试数据的准确率、精确率、召回率。并给出依据,判断阈值 0.5 是否适合业务。
| 入门者 | 跳过第 4·7 节也不会打断流程。第 6 节用“下一步”按钮一起只看一轮 |
|---|---|
| 进阶 | 先让学员手算第 6 节的“用数字跟踪”,再与代码 1 的 d1·d2·d3 行逐一对应。讨论在第 7 节中加入学习率衰减(调度)会怎样 |
| 延伸学习 | Sangsun Ahn,《面向商业的数据科学》讲义(数据科学总览) · STEP [K-数字] 人工智能自然语言处理(与 3-5·3-8 相关) · STEP [K-数字] 金融科技数据分析基础(与 3-6 相关) |
| 讲师用资料 | 检测题的评分标准和作业参考答案可在教师用答案页面(3-2)查看 |
「3-2 神经网络的部件」篇读完啦。实验室的成员们各说一句,帮你总结一下。