从感知机到多层神经网络:深度学习的起点
所有神经网络都是从一个 1958 年的简单模型扩展来的。这一篇讲清楚"神经元"到底是个啥。
L1 学完,你已经懂梯度下降和反向传播。L3 我们正式打开深度学习的世界。
第一站:神经网络到底是个什么东西。
灵感来源:人脑的神经元
人脑约有 860 亿个神经元。每个神经元接收多个信号,加权综合,超过某个阈值就”激活”,把信号传给下一个。
↘
信号1 ───→ ┌────────┐
信号2 ───→ │ 神经元 │ ──→ 输出
信号3 ───→ └────────┘
↗
1958 年,Frank Rosenblatt 用数学模拟了这件事——感知机。
第一站:感知机(Perceptron)
最简单的”人工神经元”:
- :输入信号(特征)
- :权重(学到的)
- :偏置
- 阶跃函数:超阈值输出 1,否则 0
这本质就是一个二分类器——和 L2-03 的逻辑回归非常像,只是用阶跃函数代替了 sigmoid。
它能学什么
感知机能学线性可分的问题。比如:
●●● ○○○
●●● | ○○○ ← 一条直线分开就行
●●● ○○○
但不能学非线性可分的,比如经典的 XOR 问题:
● ○
○ ● ← 一条直线分不开
历史插曲:1969 年 Minsky 在《Perceptrons》一书里证明了感知机连 XOR 都学不会,直接掐死了 15 年神经网络研究——第一次 AI 寒冬(详见 L0-02)。
第二站:多层感知机(MLP)
解决方案极其简单——多堆几层:
输入 → [神经元层 1] → [神经元层 2] → [神经元层 3] → 输出
(4 个神经元) (4 个神经元) (2 个神经元)
每一层的每个神经元都接收上一层所有神经元的输出(全连接),然后输出给下一层。
这种结构叫 MLP(Multi-Layer Perceptron),也叫 全连接网络(FCN) 或 前馈网络(Feedforward)。
它能学什么
理论上 MLP 能拟合任意连续函数(通用近似定理 / Universal Approximation Theorem)——只要参数足够多、层数足够深、训练得当。
XOR?两层 MLP 就能学。
第三站:但是有一个关键问题
如果每一层只是 (线性变换),无论多少层堆起来,整体仍然是线性的:
数学上能合并成一层!多层就失去意义了。
解决:每层后面加一个非线性激活函数。
第四站:激活函数家族
激活函数让每层的输出”非线性化”——这是深度学习的灵魂。
Sigmoid
S 形曲线,输出 0-1。
- ✅ 早期用得多(生物学动机)
- ❌ 两端饱和(梯度消失)
- ❌ 输出不是 0 中心
- 今天主要用在二分类输出层(不再用在隐藏层)
Tanh
类似 sigmoid,但输出 -1 到 1。比 sigmoid 略好(0 中心),但仍有饱和问题。
ReLU(修正线性单元)
深度学习革命的关键。简单到不像数学——负数变 0,正数保留。
- ✅ 计算极快(一次比较)
- ✅ 在正区间梯度不衰减——解决梯度消失
- ✅ 稀疏激活(很多神经元输出 0,模型像被”剪枝”)
- ❌ “死神经元”问题:如果某个神经元输出永远为负,它的梯度永远 0,永远学不到东西
ReLU 在 2010-2012 年的”重新发现”,是深度学习从可能变现实的关键。
Leaky ReLU / PReLU
为了修复”死神经元”:
负数部分不是 0,是一个小斜率。
GELU(Gaussian Error Linear Unit)
是标准正态分布的累积分布函数。ReLU 的平滑版本——更”软”。
现代 Transformer / LLM 几乎全用 GELU(GPT, BERT, Llama 都是)。 因为 GELU 在大模型上表现略好于 ReLU。
SwiGLU
更复杂的变种,Llama / PaLM 等最新 LLM 用的。比 GELU 又好一点(不多)。
怎么选
| 场景 | 推荐 |
|---|---|
| CNN 视觉 | ReLU(经典选择) |
| Transformer / LLM | GELU 或 SwiGLU |
| 二分类输出层 | Sigmoid |
| 多分类输出层 | Softmax |
| 循环网络 | Tanh(历史选择) |
实战中先用 ReLU——它快、稳、够好。除非你训 Transformer,否则不用换。
第五站:用 PyTorch 搭一个
import torch
import torch.nn as nn
class MLP(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super().__init__()
self.layers = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU(), # ← 关键的非线性
nn.Linear(hidden_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, output_dim)
)
def forward(self, x):
return self.layers(x)
model = MLP(input_dim=10, hidden_dim=64, output_dim=2)
# 看一眼
print(model)
total_params = sum(p.numel() for p in model.parameters())
print(f"参数总数: {total_params}") # ~ 5000+
这就是最基础的深度学习模型——MLP。
第六站:MLP 的局限
MLP 是基础,但它有问题:
1. 不适合图像
一张 224×224 彩色图有 15 万个像素。如果输入层 15 万 + 隐藏层 1000——参数就是 1.5 亿,还只有一层!显然不可行。
解决:CNN(L3-06 已讲)—— 用卷积共享参数。
2. 不适合序列
每个位置都和其他位置无关——MLP 看不到顺序。
解决:RNN(L3-04)→ Attention(L3-05)。
3. 不适合层次结构
像句法树、知识图谱这种结构化数据,MLP 把它们打平了。
解决:图神经网络(GNN)、Transformer。
所以”深度学习的进步” = “为不同数据找到更好的归纳偏好(inductive bias)”:
- 图像 → CNN
- 序列 → RNN → Transformer
- 图 → GNN
每种架构都是 MLP 的”特化版本”。
第七站:但是 MLP 仍然无处不在
虽然 MLP 不能独当一面,但它作为子模块遍布所有现代神经网络:
- Transformer 的 FFN 层:每个 Transformer block 的第二部分就是一个 2 层 MLP
- ResNet 的最后一层分类头:CNN 抽完特征,最后一层就是 MLP
- 嵌入投影:Q/K/V 矩阵就是用 MLP 算的
- 大部分回归 / 分类任务的尾巴:从向量到输出
现代 AI 模型 = MLP 子模块 + 特殊的”信息流动方式”(卷积、注意力、循环)。
不要孤立地学每种网络架构。把它们想成”对 MLP 加了什么特殊约束”:
- CNN:MLP + 局部连接 + 参数共享
- RNN:MLP + 时间维度上的复用
- Transformer:MLP + 灵活的位置无关的信息融合
- GNN:MLP + 节点-边的传递规则
理解这一层,所有架构都是一家人。
下一篇:《RNN / LSTM 兴衰:从序列到序列的语言模型简史》
读到这里说明你认真在学 🎯
订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。
讨论区
· 用 GitHub 账号登录评论src/components/Comments.astro 顶部填入
仓库 ID 和分类 ID(见组件注释里的配置步骤)。