01 核心原理(大白话版)

你看一张照片,认出里面是猫。这件事你的大脑怎么做的?视网膜感知光线 → 初级视觉皮层识别边缘 → 更高层识别耳朵、胡须 → 最终得出"是猫"的结论。

MLP 模仿的正是这个过程:一层神经元负责一个抽象层次,信号从低级特征流向高级判断。每一层都在上一层的结果上再做一次"加工",层数越多,能学习的规律越复杂。

信号是怎么流过网络的

1
输入层:接收数据

把原始数据(图片像素、传感器读数、文字编码……)喂进来,每个输入特征对应一个神经元。

2
隐藏层:加权求和 + 激活

每个神经元把上一层所有输出乘以权重后加总,再套一个激活函数(如 ReLU)引入非线性。这一步可以重复多层。

3
输出层:得出结论

最后一层输出预测结果。分类任务用 Softmax 输出各类概率,回归任务直接输出数值。

4
反向传播:更新权重

计算预测结果与真实答案的差距(损失),用链式法则从后往前算每个权重对误差的贡献,然后用梯度下降微调——不断重复,网络越来越准。

激活函数是灵魂所在。没有激活函数,无论叠多少层,整个网络等价于一个线性模型,只能画直线。ReLU(负数归零,正数保留)打破线性,让网络有能力拟合任意曲线。

层数越多越好吗?

太浅(1-2 层)

只能学简单规律,对于复杂任务(图像识别、自然语言)能力不够,欠拟合。

太深(不加技巧)

梯度在反向传播时越来越小(梯度消失),靠近输入的层几乎学不到东西。需要残差连接、批归一化等技术来解决。

一步步构建 MLP

从数据到网络训练,逐步搭建。

第一步 生成训练数据

用两组高斯分布的点代表两个类别,看看数据长什么样。

第二步 搭建神经网络

用 TensorFlow.js 搭两层隐藏层(ReLU)+ Softmax 输出层。

第三步 训练并可视化决策边界

每 3 个 epoch 更新一次决策边界,观察网络如何从"乱猜"到"精准划分"。

02 代码

03 学术性讲解

MLP(多层感知机)是深度学习的基础模型。它由多层神经元组成,每层的神经元与下一层全连接,能够学习非线性关系。

网络结构

MLP 通常包含三类层,本演示模型结构为 2 → 16 → 8 → 2

  • 输入层(2个神经元):对应两个输入特征 x、y,形状 (batch, 2)
  • 隐藏层1(16个神经元):权重矩阵 W¹ 形状 (2, 16),偏置 b¹ 形状 (16,),使用 ReLU 激活,输出 (batch, 16)
  • 隐藏层2(8个神经元):权重矩阵 W² 形状 (16, 8),偏置 b² 形状 (8,),使用 ReLU 激活,输出 (batch, 8)
  • 输出层(2个神经元):权重矩阵 W³ 形状 (8, 2),偏置 b³ 形状 (2,),经 Softmax 输出两类的概率,形状 (batch, 2)
x y 输入层 2 隐藏层1 16 隐藏层2 8 类0 类1 输出层 2 权重 W¹ 权重 W² 权重 W³

前向传播

数据从输入层流向输出层,每层进行计算:

z = W × x + b
a = activation(z)

常用的激活函数有 ReLU、Sigmoid、Tanh。

反向传播

通过链式法则,把损失对每个权重的梯度从输出层向输入层逐层传递:

∂L/∂W = ∂L/∂a × ∂a/∂z × ∂z/∂W
  • ∂L/∂a:损失对激活值的梯度,告诉我们激活值偏高还是偏低
  • ∂a/∂z:激活函数的导数(ReLU 的导数:正数为1,负数为0)
  • ∂z/∂W:加权求和对权重的导数,就是上一层的激活值

每层算完梯度后,用梯度下降更新权重:W ← W - η × ∂L/∂W,其中 η 是学习率。

神经元激活动画

点击「前向传播」观察信号逐层流动的过程。训练完成后图中权重会自动更新为模型真实学到的值。

如何读这张图: 连线绿色表示正权重,红色表示负权重,线越粗绝对值越大; 节点颜色越亮表示激活值越高(越接近1),越暗表示接近0(ReLU 截断)。

总结

结构

输入+隐藏+输出层

激活

ReLU/Sigmoid/Tanh

训练

反向传播+梯度下降

能力

学习非线性关系