神经网络基础
问题
神经网络的基本结构是什么?感知机、多层网络(MLP)和前向传播的原理是什么?权重初始化为什么重要?
答案
一、从感知机到多层网络
感知机(Perceptron) 是最简单的神经网络——一个线性模型加一个阈值函数:
感知机只能解决线性可分问题。1969 年 Minsky 证明它连 XOR(异或)都做不了——这直接导致了第一次 AI 寒冬。
多层感知机(MLP) 通过堆叠多个层和引入非线性激活函数来解决这个问题:
二、前向传播
前向传播就是数据从输入层逐层流向输出层的计算过程:
其中 是第 层的权重矩阵, 是偏置, 是激活函数, 是第 层的输出(激活值)。
整个前向传播就是矩阵乘法 + 激活函数的反复嵌套,这也是为什么 GPU(擅长矩阵运算)能极大加速神经网络训练。
三、权重初始化
权重初始化决定了训练能否顺利开始。错误的初始化可能导致梯度消失或爆炸。
| 初始化方法 | 公式 | 适用激活函数 |
|---|---|---|
| 零初始化 | 全部为 0 | ❌ 不可用——所有神经元输出相同,对称性无法打破 |
| 随机初始化 | 小随机数 | 可用但不够好 |
| Xavier(Glorot) | Sigmoid、Tanh | |
| He(Kaiming) | ReLU 及其变体 |
为什么不能全部初始化为 0?
如果所有权重都是 0,每个神经元的输出都相同,反向传播时梯度也相同,所有权重会同步更新——等价于只有一个神经元。这叫对称性问题(Symmetry Breaking)。随机初始化是打破对称性的最简单方式。
四、万能逼近定理
万能逼近定理(Universal Approximation Theorem) 证明:一个包含至少一个隐藏层(且隐藏层足够宽)的前馈神经网络,可以逼近任何连续函数到任意精度。
但这是存在性定理,不等于实际训练能找到这个逼近——实践中需要合适的优化算法、正则化和足够的数据。
五、现代网络的基本构建块
| 组件 | 功能 |
|---|---|
| Linear / Dense 层 | 线性变换 |
| 激活函数 | 引入非线性(ReLU、GELU 等) |
| Batch Normalization | 层间归一化,稳定训练 |
| Dropout | 正则化,随机丢弃神经元 |
| 残差连接(Residual) | ,缓解退化 |
| Layer Normalization | 在 Transformer 中替代 BN |
常见面试问题
Q1: 神经网络为什么需要非线性激活函数?
答案:如果没有非线性激活函数,多层线性变换的组合仍然是线性变换——,多层网络退化为单层。非线性激活函数让网络能学习任意复杂的非线性映射。
Q2: 深层网络比宽网络好在哪里?
答案:
- 特征层次化:浅层学习低级特征(边缘),深层学习高级特征(物体部件)
- 参数效率:深层网络用更少参数就能表达复杂函数
- 组合爆炸:每层可以组合前一层的特征,深度 n 的网络可以表达指数级的特征组合
Q3: Batch Normalization 和 Layer Normalization 的区别?
答案:
| Batch Normalization | Layer Normalization | |
|---|---|---|
| 归一化维度 | 在 batch 维度上归一化 | 在特征维度上归一化 |
| 依赖 batch 大小 | 是(小 batch 不稳定) | 否(与 batch 无关) |
| 适用场景 | CNN | Transformer、RNN |
| 推理时行为 | 使用训练时的移动平均 | 与训练完全一致 |
Transformer 使用 Layer Normalization 是因为 NLP 中 batch 内的序列长度不同,batch 统计量不够稳定。