计算机 / AI · 高中 · 神经网络 · 机器学习 · 反向传播 · 分类 · 特征工程
神经网络分类器
2D 点分两类 —— 切换数据形状,调整输入特征、隐藏层数、激活函数,亲眼看决策边界怎么从乱权重长出来。
三件事在你手上
这个演示有三个旋钮,对应深度学习里三种解决”学不会”的办法:
- 特征工程(左下的 chip 列表)—— 给网络喂更聪明的输入
- 网络容量(隐藏层数 × 每层神经元数)—— 让网络更”深”或更”宽”
- 激活函数(tanh / ReLU / sigmoid)—— 改变神经元的非线性形状
网络结构
多层感知机(MLP)的一个隐藏层做的事:
φ 是激活函数。最后一层用 sigmoid,把任意实数压到 (0, 1) 当概率,用二元交叉熵当损失:
试这几个组合
| 数据 | 推荐组合 | 为什么 |
|---|---|---|
| 同心圆 | 2 输入 + 1 层 × 6 + tanh | 加 X₁²、X₂² 直接秒杀 |
| XOR | 2 输入 + 2 层 × 4 | 单层难;加 X₁X₂ 一个特征就线性可分 |
| 螺旋 | 全部特征勾上 + 3 层 × 8 + ReLU | 几乎所有 demo 的”硬骨头” |
| 线性可分 | 2 输入 + 1 层 × 2 | 1 个神经元都够 |
试着只用 X₁、X₂ 学螺旋 —— 几千轮也学不像。勾上 X₁X₂ 和 sin X₁、sin X₂,损失立刻掉下去。
为什么”特征”能换”层数”
数学上:
一个深网络的前几层其实在做自动特征提取 —— 自己学出 X₁²、X₁X₂ 这类组合。如果你直接把这些组合喂进去,浅网络也能做得很好。
经典机器学习时代(2012 年前),人们手工设计 SIFT、HOG 这样的特征。深度学习的革命就是:把特征学习也交给网络,省去人工。但代价是要更深的网络 + 更多数据。
tanh / ReLU / sigmoid 选哪个
- tanh:输出 [-1, 1],平滑可导,老牌选手
- ReLU:x > 0 时是直线、x < 0 时 0,非平滑但算得快、不饱和,2010 年后接管深度学习
- sigmoid:输出 (0, 1),梯度容易消失,一般只用在输出层
切到螺旋数据,看 ReLU 比 tanh 学得更快、决策边界更”锐利”(直线段拼接而成)。
训练 = 梯度下降
- 前向传播:把数据点喂进去,算出预测值
- 算损失:交叉熵
- 反向传播:链式法则把误差传回每个权重
- 更新:沿损失下降方向走一小步(学习率 lr 控制步长)
重复几百到几万次,网络就”学会”了。学习率太大容易震荡发散,太小学得慢 —— 调到 0.1 上下通常稳。
一些非显然的现象
- 过参数化也能泛化:你会发现,10 个神经元和 30 个神经元,都能学到同心圆,且都不过拟合。这是深度学习理论里至今没完全解释的”双重下降”现象的前奏。
- 初始化敏感:点”重置权重”几次,看初始值如何决定最终收敛到怎样的边界 —— 有时候直接卡在局部最优。
- 容量不足:1 个隐藏神经元学螺旋,怎么调都不行 —— 网络根本表达不出这种形状。
现实的延伸
这个几百参数的玩具和真实深度学习的差异:
- 更深:几十到几千层(ResNet、Transformer)
- 更宽:每层几千到几万神经元
- 更多技巧:批归一化、Dropout、残差连接、Adam 优化器
- 更多数据:训练样本从这里的 160 个 → 互联网级别 10¹² token
但核心循环不变:前向算预测、反向算梯度、更新参数。这就是机器学习的全部。