# 1. 什么是 MLP
MLP(多层感知机) 本质上就是:
- 输入是一个 向量(1D)
- 输出也是一个 向量(1D)
- 每一层就是 矩阵乘法 + 非线性激活
数学上,一层 MLP 可以写成:
- (x):输入向量(比如长度是 784)
- (W):权重矩阵
- (h):输出向量(比如长度是 256)
关键点:MLP 不关心输入有没有二维结构,它只把输入当作一堆数字(向量)。
# 2. 图像输入 MLP 的问题
比如我们有一张 28×28 的图片,像素矩阵是:
在 MLP 里,通常要先把它 拉平(flatten):
于是它变成一个 784 维的向量。
MLP 就直接做:
这样一来:原本的空间结构(像素的上下左右关系)就丢了。
它只知道“这是第 123 个输入值”,而不知道这个像素在图片的哪儿。
# 3. 如果想保留二维结构
假设我们不要拉直,而是直接保持:
- 输入是二维矩阵 (X[i,j])
- 输出(隐藏层)也是二维矩阵 (H[a,b])
那每个输出位置 (H[a,b]) 都要从整个输入图像里“吸收信息”。
于是需要一个 四维权重张量:
公式就变成:
# 对比:
- 普通 MLP: 用的是矩阵(2D 权重),输入输出都是向量。
- 二维输入+二维输出: 用的是四阶张量(4D 权重),输入输出都是矩阵。
# 4. 举个例子
假设输入图像 (X) 是 2×2:
# (1)普通 MLP 做法:
-
拉平:(),是长度 4 的向量。
-
设隐藏层也是 4 个神经元:
- 权重矩阵 (W) 就是 4×4(16 个参数)。
- 输出是向量 (h)。
# (2)二维保留做法:
- 输入还是 2×2,输出也想要 2×2。
- 每个输出位置 (H[a,b]) 都要看输入所有 4 个像素。
- 权重变成 (W[a,b,i,j]),一共 (2×2×2×2 = 16) 个参数。
- 输出是矩阵 (H)。
# 5. 总结
- MLP 的本质: 向量输入 → 矩阵乘法 → 向量输出。
- 为什么会出现“四维权重”:
因为我们把输入/输出都看作二维矩阵,而不是向量。数学上需要一个四维权重张量来描述“矩阵到矩阵”的映射。 - 核心问题: MLP 不利用图像的空间结构 → 参数多、效率低。
这正是 CNN 出现的原因(卷积核只看局部,参数大幅减少)。
