Neural Network 神经网络¶
概念¶
- 层结构 Layer:神经网络的基本组成单元,包括输入层、隐藏层、输出层
- 神经元 Neuron:神经网络的基本单元,接收输入,输出结果
- 权重 Weight:神经元接收到的输入的权重
- 偏置 Bias:神经元的偏置项
- 激活函数 Activation Function:神经元的非线性变换函数,使得神经网络可以拟合非线性函数
- 前向传播 Forward Propagation:输入数据经过神经网络,得到输出,预测结果
- 反向传播 Backward Propagation:通过梯度下降算法,更新权重,使得损失函数最小化
- 损失函数 Loss Function:衡量预测值与真实值之间的差异
- 优化器 Optimizer:梯度下降算法的变种,用于更新权重
- 正则化 Regularization:防止过拟合
- 批量 Batch:每次迭代的样本数
- 学习率 Learning Rate:梯度下降算法的步长
- 过拟合 Overfitting:模型在训练集上表现很好,但在测试集上表现很差
- 欠拟合 Underfitting:模型无法在训练集上表现很好
- Dropout:随机关闭一些神经元,防止过拟合
- Batch Normalization:对每个 batch 进行标准化,加速训练
激活函数 Activation Function¶
-
Sigmoid (1)
\[ f(x) = \frac{1}{1 + e^{-x}} \]- 输出范围:\((0, 1)\)
- 用于二分类问题的输出层
-
当 \(\lvert x \rvert\) 较大时,梯度接近于 \(0\),导致梯度消失1
-
Tanh (1)
\[ f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \]- 输出范围:\((-1, 1)\)
-
作为 Sigmoid 的替代,效果更好 2
- \(E[f(x)] = 0\), 收敛速度更快 (存疑)
- 多数情况下给出的梯度更大,收敛速度更快
-
ReLU (1)
\[ f(x) = \max(0, x) \]- Rectified Linear Unit
- 输出范围:\([0, +\infty)\)
- 计算简单
-
死亡 ReLU 问题:当输入值为负时,梯度为 \(0\),导致权重无法更新,一些神经元永远不会被激活 3
-
Leaky ReLU (1)
\[ f(x) = \max(\alpha x, x) \]- 输出范围:\((-\infty, +\infty)\)
- 修正了 ReLU 的死亡问题 3
-
Softmax
\[ \mathbf{f}_i(\mathbf{x}) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}} \]-
用于多分类问题的输出层 4
-
输出范围:\((0, 1)\)
- 所有输出的和为 \(1\)
-
前向传播 Forward Propagation¶
神经元的输出
\[
y=f\left(\sum\limits_{i=1}^{n} w_i x_i + b\right)
\]
其中:
- \(y\):神经元的输出
- \(f\):激活函数
- \(w_i\):权重
- \(x_i\):输入
- \(b\):偏置
损失函数 Loss Function¶
Note
下面的 \(y\) 为真实值,\(\hat{y}\) 为预测值(计算得到的值)
-
均方误差 Mean Squared Error
\[ L(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \]- 用于回归问题
-
交叉熵 Cross Entropy
\[ L(y, \hat{y}) = -\sum_{i=1}^{n} y_i \log(\hat{y}_i) \]- 用于分类问题
交叉熵的定义
一般而言,衡量两个分布 \(p,q\) 之间的交叉熵按如下定义:
\[ H(p,q) = -E_p[\log q] \]写成 R-S notation:
\[ H(p,q) = - \int_\mathcal{X} \log q(x) dP(x) = - \int_\mathcal{X} p(x) \log q(x) dx \]对应的离散形式也就是上面的公式。
独热编码
注意到真实分布 \(y\) 一般都是独热编码 One-Hot Encoding (1) 的形式,考虑 \(n\) 个标签的情况:
-
独热编码
\[ y = [0, 0, \ldots, 1, \ldots, 0] \]
不妨设 \(k\) 是真实标签的索引,那么交叉熵可以写成:
\[ L(y, \hat{y}) = -\log(\hat{y}_k) \geq 0 \]交叉熵最小的情况,即预测值 \(\hat{y}\) 与真实值 \(y\) 完全一致时,(1):
-
最小交叉熵
\[ \hat{y}_k = 1, \quad \hat{y}_i = 0, \forall i \neq k \]
\[ L(y, \hat{y}) = -\log(1) = 0 \]tl;dr: 使用独热编码时,上面的写法只是 \(-log(\hat{y}_k)\) 的另一种写法,也就是只有真实标签的预测值参与计算损失。
反向传播 Backward Propagation¶
-
梯度下降算法 Gradient Descent
\[ w \leftarrow w - \alpha \frac{\partial L}{\partial w} \]- \(\alpha\):学习率
- \(\displaystyle\frac{\partial L}{\partial w}\):损失函数对权重的偏导数
- 通过链式法则,计算每个参数的梯度,更新参数
-
随机梯度下降 Stochastic Gradient Descent
- 每次迭代只使用一个样本更新参数
- 速度快,但不稳定
正则化 Regularization¶
与传统机器学习中惩罚项(正则项)的思路类似, 在损失函数 Loss Function 中额外添加关于参数的惩罚项, 以防止过拟合(1)。
- 通过将模型的参数变得较小,正则化可以防止模型在训练数据上过度拟合。较小的权重意味着模型对每个特征的依赖度较低,更加平滑和简单,从而增强其在未见数据上的泛化能力。
-
\(L_1\) 正则化
\[ L(w) = L_0(w) + \lambda \sum_{i=1}^{n} \lvert w_i \rvert \]- 使得权重稀疏,适用于特征选择
-
\(L_2\) 正则化
\[ L(w) = L_0(w) + \lambda \sum_{i=1}^{n} w_i^2 \]- 使得权重较小,防止过拟合
Dropout¶
- 随机关闭一些神经元,防止过拟合
Batch Normalization¶
- 对每个 batch 进行标准化,加速训练
关于 Softmax
与其说 Softmax 是激活函数,不如说是一种归一化方法,将输出转换为概率分布。
上面的激活函数都是 \(\mathbb{R}^n \to \mathbb{R}\) 的映射,而 Softmax 是 \(\mathbb{R}^n \to \mathbb{R}^n\) 的映射。
选用 \(e^{x_i}\) 的原因有几个:
例如这里的 Overflow 问题 可以通过减去最大 (小) 值解决,这是由于:
梯度计算: \((i\neq j)\)
也就是:\(\nabla_{x_j} \mathbf{f}_i(\mathbf{x}) = \mathbf{f}_i(\mathbf{x})(\delta_{ij} - \mathbf{f}_j(\mathbf{x}))\)