从神经元到多层感知机
本节定位
深度学习的一切都从人工神经元开始。本节从最简单的感知机出发,认识各种激活函数,再组装成多层感知机(MLP)——这是所有神经网络的基础。
学习目标
- 理解从生物神经元到人工神经元的映射
- 掌握感知机模型
- 掌握常用激活函数:ReLU、Sigmoid、Tanh 等
- 理解多层感知机(MLP)的结构
历史背景:神经网络这条线最早是怎么长出来的?
这一节最关键的几个历史节点是:
| 年份 | 节点 | 关键作者 | 它最重要地解决了什么 |
|---|---|---|---|
| 1943 | McCulloch-Pitts Neuron | McCulloch, Pitts | 给出了人工神经元的最早计算抽象 |
| 1958 | Perceptron | Frank Rosenblatt | 提出了最早可训练的单层神经网络分类器之一 |
| 1969 | Perceptrons | Minsky, Papert | 系统揭示了单层感知器对 XOR 等非线性可分问题的局限 |
| 1980 | Neocognitron | Fukushima | 提前给出了卷积、局部感受野、层级特征的核心思路 |
对新人来说,这里最值得先记的是:
感知器不是“落后模型”,而是神经网络历史上第一次非常清楚地让人看到:单层模型能做什么、又做不到什么。
所以你这一节看到的 XOR,不只是一个玩具例子,
而是神经网络历史上非常关键的分水岭问题之一。
为什么 XOR 这个只有 4 个点的小问题会这么出名?
因为它特别“打脸式”地暴露了单层感知器的边界。
表面上看,XOR 非常小:
- 只有 4 个输入点
但它的意义恰恰在于:
- 如果一个模型连这么小的非线性模式都搞不定
- 那就说明它的表达能力不是“差一点”,而是结构上就有边界
所以 XOR 之所以会反复出现在教材里,
不是因为它本身复杂,
而是因为它像一个非常锋利的测试题:
用极小的例子,把“单层不够”这件事讲得无可回避。
为什么感知器会先让人兴奋,后来又让人失望?
因为感知器刚出现时,很多人第一次看见:
- 机器好像真的可以“学”
- 而不是所有规则都靠人手写
这件事在当时非常抓人。
它像是在告诉大家:
也许智能不只是编码出来的,也可以训练出来。
但后来 XOR 这类问题又像一盆冷水。
因为它提醒整个领域:
- 单层模型的表达能力其实很有限
- “会学”不代表“什么都能学”
所以这段历史特别有故事感的地方在于:
- 它先点燃了一次巨大期待
- 然后又迫使大家重新面对模型能力的边界
先建立一张地图
这一节更适合新人的理解顺序不是“背神经网络名词”,而是先看这条线:
所以你真正要先看懂的是:
- 神经元先做了什么线性计算
- 激活函数为什么必须存在
- 一层和多层到底是怎么长出来的
这节和第 5 站最直接的连续性是什么
如果你刚学完第 5 站,可以先把一个神经元理解成:
- 线性回归 / 逻辑回归那种“加权求和”的升级版
也就是说,神经元并不是凭空出现的新对象,它其实是在第 5 站熟悉的线性模型骨架上,多加了一步:
所以这一节真正新增的核心,其实只有两件事:
- 激活函数
- 多层堆叠
一、从生物到人工
核心对应关系:
| 生物 | 人工 |
|---|---|
| 树突(接收信号) | 输入 x |
| 突触强度 | 权重 w |
| 细胞体(汇总) | 加权求和 z = Σ(wi·xi) + b |
| 激活/抑制 | 激活函数 f(z) |
| 轴突(输出) | 输出 a = f(z) |
1.1 一个最小“人工神经元”计算例子
新人最容易发虚的地方是:知道公式,但脑子里没有“这一步到底算出了什么”。
先看一个最小例子:
import numpy as np
# 一个样本的 3 个特征
x = np.array([0.8, 0.3, 0.5])
# 一个神经元的 3 个权重
w = np.array([0.2, -0.4, 0.6])
b = 0.1
# 第一步:线性组合
z = np.dot(x, w) + b
print("z =", round(z, 4))
# 第二步:过激活函数
relu_out = max(0, z)
print("ReLU(z) =", round(relu_out, 4))
你可以把这一步理解成:
- 权重在表达“每个输入有多重要”
- 偏置在表达“整体阈值往哪边推一点”
- 激活函数决定“这个神经元到底要不要被激活”
1.1.1 如果先不谈深度学习,可以把神经元想成什么?
一个很适合新人的理解方式是:
- 把神经元先看成“带一个门”的线性模型
先算:
z = x·w + b
再决定:
- 这个结果要原样通过、压到
0~1、还是小于 0 直接截掉
这个“门”就是激活函数。
所以神经元并不是神秘新物种,而是在“线性打分”外面再加一层非线性选择。