NN 中的 Bias?

偏置 (bias) 相当于给线性变换加入常数项 b,使 z = Wx + b 而非 z = Wx。它的作用是允许激活函数(进而决策边界)向左或向右平移,使模型更好地适应不经过原点的数据分布。

常见实现方式有两种:

  • 单独维护偏置向量 b
  • 在输入向量前拼接常数 1,将偏置并入权重矩阵(增广矩阵形式)

偏置与权重不同:权重控制输入特征的缩放与方向,偏置控制输出的整体偏移。即使所有输入为 0,偏置仍可使神经元激活。


反向传播是啥?

反向传播 (Back Propagation) 是训练神经网络的核心算法,本质上是链式法则的高效实现,分两个阶段:

  1. 前向传播:输入逐层计算 z^{(l)} = W^{(l)} h^{(l-1)} + b^{(l)}h^{(l)} = \phi(z^{(l)}),得到预测值和损失 L
  2. 反向传播:从输出层出发,逐层计算 \frac{\partial L}{\partial W^{(l)}}\frac{\partial L}{\partial b^{(l)}},再用梯度下降更新参数

反向传播之所以高效,是因为它复用了中间计算结果,避免了每个参数独立求导的指数级计算量。时间复杂度与前向传播同阶,均为 O(W)W 为参数总数)。


梯度消失

神经网络基于链式法则求导,第 l 层的梯度需连乘前面各层的雅可比矩阵。当因子持续小于 1 时,梯度以指数形式衰减

以 Sigmoid 为例,其导数 \sigma'(x) = \sigma(x)(1-\sigma(x)),最大值仅为 0.25。10 层网络连乘后梯度约为 0.25^{10} \approx 10^{-6},深层权重几乎收不到有效更新信号。

表现:训练 loss 下降缓慢或停滞,深层权重变化极小,模型欠拟合。

常见原因:

  • 深层网络层数过多
  • 使用 Sigmoid、Tanh 等饱和型激活函数
  • 权重初始化不当

解决梯度消失

  • ReLU 族激活函数:正区间导数为 1,不会连乘衰减(注意负区间 Dead ReLU 问题,可用 Leaky ReLU 缓解)
  • 残差网络 (ResNet):跳跃连接 y = F(x) + x 使梯度可直接回传,等价于多了一条恒等映射的梯度通路
  • Batch Normalization:归一化每层输入,稳定分布,使梯度保持在合理范围
  • LSTM / GRU 门控机制(RNN 场景):通过门控单元控制信息流,缓解长序列梯度消失

梯度爆炸

与梯度消失相反,当连乘因子持续大于 1 时,梯度指数级放大,导致权重更新幅度过大,loss 出现 NaN,模型发散。

常见场景:

  • 深层网络 + 权重初始化过大
  • RNN 处理长序列时(梯度连乘时间步)

解决梯度爆炸

  • 梯度裁剪 (Gradient Clipping):当梯度范数超过阈值时等比缩放

    g \leftarrow g \cdot \min\!\left(1, \frac{\text{threshold}}{\|g\|}\right)
  • 权重正则化 (Weight Regularization):L2 正则约束权重大小

  • 合理的权重初始化:Xavier / He 初始化,避免初始梯度过大

  • Batch Normalization:同样有助于稳定梯度尺度

  • 预训练 + 微调 (Pre-training & Fine-tuning):从已收敛的权重出发,避免随机初始化带来的不稳定


0 初始化权重可以吗?

不可以。全零初始化会导致:

  • 所有神经元输出相同,接收相同梯度
  • 对称性问题:网络中每个神经元学到完全相同的特征,等价于只有一个神经元在工作

常用初始化策略:

方法 适用场景 核心思想
Xavier (Glorot) Sigmoid / Tanh 保持前向和反向传播时方差一致
He (Kaiming) ReLU 族 考虑 ReLU 会丢弃一半激活,方差乘以 2
随机小值 通用基线 打破对称性,如 \mathcal{U}(-0.01, 0.01)

逻辑回归和 NN 之间的关系?

逻辑回归可以看作单层神经网络:输入层 → 线性变换 → Sigmoid 激活 → 输出概率,损失函数为交叉熵。

对比项 逻辑回归 神经网络
层数 1 层 多层
特征 需人工构造 隐藏层自动学习
决策边界 线性 非线性(通用近似)
优化 可解析求解 / 牛顿法 反向传播 + SGD

用牛顿法等二阶方法训练逻辑回归是可行的,但对大规模 NN 需计算 Hessian 矩阵,代价为 O(n^2) 甚至 O(n^3),因此深度学习普遍采用一阶方法。

NN 比逻辑回归强在哪

MLP 通过隐藏层逐层组合低阶特征,自动学习高阶非线性表示。例如图像分类中,浅层学边缘,深层学纹理和物体部件,而逻辑回归只能在线性空间做分类边界。

MLP (Multilayer Perceptron)

也叫人工神经网络 (ANN, Artificial Neural Network),结构为:

  • 输入层:接收原始特征
  • 隐藏层:一个或多个,进行非线性变换
  • 输出层:回归(线性输出)或分类(Softmax 输出)

各层之间通常全连接(每个神经元与下一层所有神经元相连)。根据通用近似定理,只要隐藏层足够宽,MLP 可以逼近任意连续函数。


网格搜索和随机搜索

超参数调优的两种基本策略:

  • 网格搜索 (Grid Search):在预定义的参数网格上穷举所有组合。优点是完全覆盖搜索空间;缺点是维度灾难,3 个参数各 10 个取值就需要 10^3 = 1000 次训练
  • 随机搜索 (Random Search):在参数空间中随机采样。Bergstra & Bengio (2012) 证明:高维空间中,随机搜索比网格搜索更高效,因为重要超参数往往只有少数几个,随机搜索能更充分地探索每个重要参数的取值范围

进阶方案:贝叶斯优化 (Bayesian Optimization),根据历史试验结果建立代理模型,智能选择下一组超参数,适合训练代价极高的场景。


在 NN 中避免 Overfitting

深度学习模型参数多、容量大,容易过拟合。常用手段:

  • Dropout:训练时随机丢弃神经元
  • 数据增强 (Data Augmentation):翻转、旋转、缩放、裁剪、移位、高斯噪声、Mixup、Cutout 等,人为扩充训练集多样性
  • 正则化:L1 / L2 权重惩罚,限制模型复杂度
  • Early Stop:监控验证集 loss,不再下降时停止训练
  • 微调 (Fine-tuning):加载预训练权重,只微调顶层或少量层,利用大规模数据上学到的通用特征
  • 调整学习率或 batch size:较小的学习率和适当 batch size 有助于找到泛化更好的解
  • Label Smoothing:将硬标签 (1, 0, 0) 软化为 (0.9, 0.05, 0.05),防止模型过度自信

Dropout

训练时以概率 p(通常 0.2–0.5)随机将神经元输出置零,迫使网络不依赖少数节点,等价于训练指数级数量的子网络并做模型平均。

推理时需关闭 Dropout,并对存活神经元输出乘以 (1-p) 进行缩放(或使用 inverted dropout,训练时直接除以 1-p)。

Batch Normalization

对每个 mini-batch 的每个特征维度,计算均值 \mu 和方差 \sigma^2,归一化后再用可学习参数 \gamma\beta 恢复表达能力:

\hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}, \quad y = \gamma \hat{x} + \beta

作用:

  • 缓解内部协变量偏移 (Internal Covariate Shift),使每层输入分布稳定
  • 允许使用更大的学习率,加速收敛
  • 具有一定正则化效果

注意:训练时用当前 batch 统计量,推理时用训练阶段累积的滑动平均均值和方差。与 Layer Normalization 的区别:BN 在 batch 维度归一化(适合 CNN),LN 在特征维度归一化(适合 RNN / Transformer)。


为何非线性激活函数有必要

通用近似定理:含至少一个隐藏层和非线性激活的前馈网络,在宽度足够时可以逼近任意连续函数。

若无非线性激活,h(x) = W_2(W_1 x) = (W_2 W_1)x = W'x,多层退化为单层线性变换,无法拟合 XOR 等非线性可分问题。

常见激活函数对比:

激活函数 公式 优点 缺点
Sigmoid \frac{1}{1+e^{-x}} 输出 (0,1),可解释为概率 饱和区梯度消失,非零中心
Tanh \tanh(x) 零中心,比 Sigmoid 收敛快 仍有饱和区梯度消失
ReLU \max(0, x) 计算快,缓解梯度消失 Dead ReLU(负区间梯度为 0)
Leaky ReLU \max(ax, x) 缓解 Dead ReLU 需选择斜率 a
GELU x \cdot \Phi(x) Transformer 中表现好 计算稍慢

SGD (Stochastic Gradient Descent)

三种变体:

方法 Batch Size 特点
BGD 全数据集 N 梯度精确,每 epoch 更新 1 次,慢
SGD 1 更新频繁,噪声大,难收敛
Mini-batch GD 自定义(如 32、64、128) 兼顾速度与稳定性,实际最常用

更新公式:

\theta \leftarrow \theta - \eta \nabla_\theta L(\theta)

Momentum 在 SGD 基础上引入动量,加速收敛:

v \leftarrow \gamma v + \eta \nabla_\theta L, \quad \theta \leftarrow \theta - v

Adam 结合 Momentum 和 RMSprop,为每个参数维护自适应学习率,是深度学习默认优化器之一。

RMSprop (Root Mean Square Propagation)

用梯度平方的指数移动平均 E[g^2] 归一化各参数的更新步长:

E[g^2]_t = \beta E[g^2]_{t-1} + (1-\beta) g_t^2, \quad \theta \leftarrow \theta - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_t

核心思想:为每个参数赋予独立自适应学习率,在梯度大的方向缩小步长,梯度小的方向放大步长,缓解梯度消失和爆炸。

Batch size

  • 大批量 (如 512+):梯度估计方差小,收敛快,GPU 利用率高;但可能收敛到尖锐最小值 (sharp minima),泛化较差,且受显存限制
  • 小批量 (如 32–128):引入梯度噪声,有助于逃离尖锐最小值,找到平坦最小值 (flat minima),泛化更好;但单次 epoch 更新次数多,训练时间长
  • 经验法则:在显存允许范围内尽量大,同时配合学习率线性缩放规则(batch size 增大 k 倍,学习率也增大 k 倍)

Learning Rate

学习率 \eta 控制每步更新的幅度,是最重要的超参数之一:

  • 过大:loss 震荡甚至发散(跳过最优解)
  • 过小:收敛极慢,可能困在鞍点或局部最优

常用策略:

  • 学习率衰减:Step Decay、Cosine Annealing、Exponential Decay
  • Warmup:训练初期用小学习率,稳定后再增大(Transformer 训练中常见)
  • 学习率查找 (LR Finder):从小学习率开始指数增大,观察 loss 变化,选取 loss 下降最快的区间

一般建议:先用较大学习率快速下降,接近收敛后逐步减小,精细搜索最优解。