# 1. 什么是 MLP

MLP(多层感知机) 本质上就是:

  • 输入是一个 向量(1D)
  • 输出也是一个 向量(1D)
  • 每一层就是 矩阵乘法 + 非线性激活

数学上,一层 MLP 可以写成:

h=Wx+bh = Wx + b

  • (x):输入向量(比如长度是 784)
  • (W):权重矩阵
  • (h):输出向量(比如长度是 256)

关键点:MLP 不关心输入有没有二维结构,它只把输入当作一堆数字(向量)


# 2. 图像输入 MLP 的问题

比如我们有一张 28×28 的图片,像素矩阵是:

X[i,j],i,j=1,...,28X[i,j], \quad i,j = 1,...,28

在 MLP 里,通常要先把它 拉平(flatten):

x=vec(X)x = \text{vec}(X)

于是它变成一个 784 维的向量
MLP 就直接做:

h=Wx+bh = Wx + b

这样一来:原本的空间结构(像素的上下左右关系)就丢了。
它只知道“这是第 123 个输入值”,而不知道这个像素在图片的哪儿。


# 3. 如果想保留二维结构

假设我们不要拉直,而是直接保持:

  • 输入是二维矩阵 (X[i,j])
  • 输出(隐藏层)也是二维矩阵 (H[a,b])

那每个输出位置 (H[a,b]) 都要从整个输入图像里“吸收信息”。
于是需要一个 四维权重张量

W[a,b,i,j]W[a,b,i,j]

公式就变成:

H[a,b]=i,jW[a,b,i,j]X[i,j]+b[a,b]H[a,b] = \sum_{i,j} W[a,b,i,j] \cdot X[i,j] + b[a,b]

# 对比:

  • 普通 MLP: 用的是矩阵(2D 权重),输入输出都是向量。
  • 二维输入+二维输出: 用的是四阶张量(4D 权重),输入输出都是矩阵。

# 4. 举个例子

假设输入图像 (X) 是 2×2

X=[x11x12 x21x22]X = \begin{bmatrix} x_{11} & x_{12} \ x_{21} & x_{22} \end{bmatrix}

# (1)普通 MLP 做法:

  • 拉平:(x=[x11,x12,x21,x22]x = [x_{11}, x_{12}, x_{21}, x_{22}]),是长度 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 出现的原因(卷积核只看局部,参数大幅减少)。
更新于

请我喝[茶]~( ̄▽ ̄)~*

koen 微信支付

微信支付

koen 支付宝

支付宝