差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
| 深度学习:神经网络基础 [2026/03/02 21:01] – [2.1.1 神经元与网络层] 张叶安 | 深度学习:神经网络基础 [2026/03/02 21:18] (当前版本) – [计算题答案] 张叶安 | ||
|---|---|---|---|
| 行 50: | 行 50: | ||
| 其中: | 其中: | ||
| - | - $\mathbf{a}^{(l)}$ 是第$l$层的输出向量(激活值) | + | |
| - | - $\mathbf{W}^{(l)}$ 是权重矩阵,维度为$[n_l \times n_{l-1}]$ | + | - $\mathbf{W}^{(l)}$ 是权重矩阵,维度为$[n_l \times n_{l-1}]$ |
| - | - $\mathbf{b}^{(l)}$ 是偏置向量 | + | - $\mathbf{b}^{(l)}$ 是偏置向量 |
| - | - $f$ 是激活函数(通常逐元素应用) | + | - $f$ 是激活函数(通常逐元素应用) |
| **前向传播算法** | **前向传播算法** | ||
| 行 59: | 行 59: | ||
| 前向传播(Forward Propagation)是神经网络计算输出的过程: | 前向传播(Forward Propagation)是神经网络计算输出的过程: | ||
| - | 1. 将输入数据$\mathbf{x}$赋给输入层:$\mathbf{a}^{(0)} = \mathbf{x}$ | + | - 将输入数据$\mathbf{x}$赋给输入层:$\mathbf{a}^{(0)} = \mathbf{x}$ |
| - | 2. 对于每一层$l = 1, 2, ..., L$: | + | |
| - 计算线性变换:$\mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)}$ | - 计算线性变换:$\mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)}$ | ||
| - 应用激活函数:$\mathbf{a}^{(l)} = f(\mathbf{z}^{(l)})$ | - 应用激活函数:$\mathbf{a}^{(l)} = f(\mathbf{z}^{(l)})$ | ||
| 行 68: | 行 68: | ||
| 网络的深度(层数)和宽度(每层神经元数)是重要的架构超参数: | 网络的深度(层数)和宽度(每层神经元数)是重要的架构超参数: | ||
| - | - **深度**:更多的隐藏层允许网络学习更复杂的特征层次。深度网络能够组合低层特征形成高层抽象。 | + | |
| - | - **宽度**:更多的神经元意味着更强的表达能力,但也增加了过拟合的风险和计算成本。 | + | - **宽度**:更多的神经元意味着更强的表达能力,但也增加了过拟合的风险和计算成本。 |
| ==== 2.1.3 网络的表达能力 ===== | ==== 2.1.3 网络的表达能力 ===== | ||
| 行 84: | 行 84: | ||
| 虽然浅层网络在理论上可以近似任何函数,但深层网络在实际中往往更有效: | 虽然浅层网络在理论上可以近似任何函数,但深层网络在实际中往往更有效: | ||
| - | - 深层网络可以通过组合简单函数来表示复杂函数 | + | |
| - | - 某些函数类需要指数级数量的浅层网络神经元,但只需多项式数量的深层网络神经元 | + | - 某些函数类需要指数级数量的浅层网络神经元,但只需多项式数量的深层网络神经元 |
| - | - 深层网络更好地捕获数据的层次结构 | + | - 深层网络更好地捕获数据的层次结构 |
| ===== 2.2 激活函数详解 ===== | ===== 2.2 激活函数详解 ===== | ||
| 行 100: | 行 100: | ||
| 特性: | 特性: | ||
| - | - 输出范围:(0, | + | |
| - | - 平滑可导,导数为$\sigma' | + | - 平滑可导,导数为$\sigma' |
| - | - 中心在0.5,非零中心化 | + | - 中心在0.5,非零中心化 |
| 优点: | 优点: | ||
| - | - 输出可解释为概率 | + | |
| - | - 平滑的梯度有利于优化 | + | - 平滑的梯度有利于优化 |
| 缺点: | 缺点: | ||
| - | - **梯度消失**:当$|x|$较大时,梯度趋近于0,导致深层网络训练困难 | + | |
| - | - **非零中心化**:输出恒为正,导致权重更新总是同向,收敛较慢 | + | - **非零中心化**:输出恒为正,导致权重更新总是同向,收敛较慢 |
| - | - 计算涉及指数运算,成本较高 | + | - 计算涉及指数运算,成本较高 |
| 应用场景: | 应用场景: | ||
| - | - 二分类问题的输出层 | + | |
| - | - 门控机制(如LSTM中的门控) | + | - 门控机制(如LSTM中的门控) |
| **Tanh函数** | **Tanh函数** | ||
| Tanh(双曲正切)函数定义为: | Tanh(双曲正切)函数定义为: | ||
| + | |||
| $$\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = 2\sigma(2x) - 1$$ | $$\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = 2\sigma(2x) - 1$$ | ||
| 特性: | 特性: | ||
| - | - 输出范围:(-1, | + | |
| - | - 零中心化 | + | - 零中心化 |
| - | - 导数:$\tanh' | + | - 导数:$\tanh' |
| 优点: | 优点: | ||
| - | - 零中心化输出,有利于梯度下降收敛 | + | |
| - | - 相比Sigmoid,梯度更强(最大值为1而非0.25) | + | - 相比Sigmoid,梯度更强(最大值为1而非0.25) |
| 缺点: | 缺点: | ||
| - | - 仍存在梯度消失问题 | + | |
| 应用场景: | 应用场景: | ||
| - | - 循环神经网络(RNN)的隐藏层 | + | |
| - | - 某些需要零中心化输出的场景 | + | - 某些需要零中心化输出的场景 |
| ==== 2.2.2 ReLU及其变体 ==== | ==== 2.2.2 ReLU及其变体 ==== | ||
| 行 143: | 行 144: | ||
| ReLU函数定义为: | ReLU函数定义为: | ||
| + | |||
| $$\text{ReLU}(x) = \max(0, x)$$ | $$\text{ReLU}(x) = \max(0, x)$$ | ||
| 特性: | 特性: | ||
| - | - 输出范围:$[0, | + | |
| - | - 导数:当$x > 0$时为1,当$x < 0$时为0 | + | - 导数:当$x > 0$时为1,当$x < 0$时为0 |
| - | - 在$x = 0$处不可导(实践中通常设为0或1) | + | - 在$x = 0$处不可导(实践中通常设为0或1) |
| 优点: | 优点: | ||
| - | - 计算简单高效,只需比较操作 | + | |
| - | - 缓解梯度消失问题(正区间梯度恒为1) | + | - 缓解梯度消失问题(正区间梯度恒为1) |
| - | - 具有稀疏激活性,有助于特征选择 | + | - 具有稀疏激活性,有助于特征选择 |
| 缺点: | 缺点: | ||
| - | - **神经元死亡**:负区间梯度为0,可能导致神经元永久失活 | + | |
| - | - 非零中心化 | + | - 非零中心化 |
| **Leaky ReLU** | **Leaky ReLU** | ||
| 为解决神经元死亡问题,Leaky ReLU在负区间引入小的斜率: | 为解决神经元死亡问题,Leaky ReLU在负区间引入小的斜率: | ||
| + | |||
| $$\text{LeakyReLU}(x) = \max(\alpha x, x)$$ | $$\text{LeakyReLU}(x) = \max(\alpha x, x)$$ | ||
| 行 169: | 行 172: | ||
| PReLU将Leaky ReLU中的$\alpha$设为可学习参数: | PReLU将Leaky ReLU中的$\alpha$设为可学习参数: | ||
| + | |||
| $$\text{PReLU}(x) = \max(\alpha x, x)$$ | $$\text{PReLU}(x) = \max(\alpha x, x)$$ | ||
| 行 176: | 行 180: | ||
| ELU函数定义为: | ELU函数定义为: | ||
| + | |||
| $$\text{ELU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{if } x \leq 0 \end{cases}$$ | $$\text{ELU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{if } x \leq 0 \end{cases}$$ | ||
| 优点: | 优点: | ||
| - | - 负区间平滑,均值更接近零 | + | |
| - | - 缓解了神经元死亡问题 | + | - 缓解了神经元死亡问题 |
| 缺点: | 缺点: | ||
| - | - 计算成本高于ReLU | + | |
| **GELU(Gaussian Error Linear Unit)** | **GELU(Gaussian Error Linear Unit)** | ||
| GELU是Transformer架构中常用的激活函数: | GELU是Transformer架构中常用的激活函数: | ||
| + | |||
| $$\text{GELU}(x) = x \cdot P(X \leq x) = x \cdot \Phi(x) \approx 0.5x(1 + \tanh[\sqrt{2/ | $$\text{GELU}(x) = x \cdot P(X \leq x) = x \cdot \Phi(x) \approx 0.5x(1 + \tanh[\sqrt{2/ | ||
| 行 201: | 行 207: | ||
| 特性: | 特性: | ||
| - | - 输出范围:(0, | + | |
| - | - 所有输出之和为1 | + | - 所有输出之和为1 |
| - | - 放大差异:较大的输入值获得更大的概率份额 | + | - 放大差异:较大的输入值获得更大的概率份额 |
| 数值稳定性: | 数值稳定性: | ||
| 行 225: | 行 231: | ||
| 特性: | 特性: | ||
| - | - 对大的误差给予更大的惩罚 | + | |
| - | - 处处可导 | + | - 处处可导 |
| - | - 假设误差服从高斯分布 | + | - 假设误差服从高斯分布 |
| **平均绝对误差(Mean Absolute Error, MAE)** | **平均绝对误差(Mean Absolute Error, MAE)** | ||
| MAE使用L1范数: | MAE使用L1范数: | ||
| + | |||
| $$\mathcal{L}_{\text{MAE}} = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i|$$ | $$\mathcal{L}_{\text{MAE}} = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i|$$ | ||
| 特性: | 特性: | ||
| - | - 对异常值更鲁棒 | + | |
| - | - 在零点不可导 | + | - 在零点不可导 |
| - | - 误差服从拉普拉斯分布时的最大似然估计 | + | - 误差服从拉普拉斯分布时的最大似然估计 |
| **Huber损失** | **Huber损失** | ||
| Huber损失结合了MSE和MAE的优点: | Huber损失结合了MSE和MAE的优点: | ||
| + | |||
| $$\mathcal{L}_{\text{Huber}} = \begin{cases} \frac{1}{2}(y - \hat{y})^2 & \text{if } |y - \hat{y}| \leq \delta \\ \delta(|y - \hat{y}| - \frac{1}{2}\delta) & \text{otherwise} \end{cases}$$ | $$\mathcal{L}_{\text{Huber}} = \begin{cases} \frac{1}{2}(y - \hat{y})^2 & \text{if } |y - \hat{y}| \leq \delta \\ \delta(|y - \hat{y}| - \frac{1}{2}\delta) & \text{otherwise} \end{cases}$$ | ||
| 行 290: | 行 298: | ||
| 将所有权值初始化为零看似合理,但会导致严重问题: | 将所有权值初始化为零看似合理,但会导致严重问题: | ||
| - | - 所有神经元计算相同的输出 | + | |
| - | - 反向传播时所有神经元获得相同的梯度 | + | - 反向传播时所有神经元获得相同的梯度 |
| - | - 网络无法打破对称性,相当于单个神经元 | + | - 网络无法打破对称性,相当于单个神经元 |
| ==== 2.4.2 随机初始化方法 ==== | ==== 2.4.2 随机初始化方法 ==== | ||
| 行 325: | 行 333: | ||
| 偏置通常初始化为零或小常数: | 偏置通常初始化为零或小常数: | ||
| - | - 对于ReLU,偏置初始化为小正值(如0.01)可确保初期有梯度流动 | + | |
| - | - 对于层归一化后的网络,偏置可初始化为零 | + | - 对于层归一化后的网络,偏置可初始化为零 |
| ===== 2.5 例题分析 ===== | ===== 2.5 例题分析 ===== | ||
| 行 333: | 行 341: | ||
| **题目**:考虑一个具有以下结构的神经网络: | **题目**:考虑一个具有以下结构的神经网络: | ||
| - | - 输入层:2个神经元(输入$x_1=0.5$, | + | |
| - | - 隐藏层:2个神经元,使用ReLU激活 | + | - 隐藏层:2个神经元,使用ReLU激活 |
| - | - 输出层:1个神经元,使用Sigmoid激活 | + | - 输出层:1个神经元,使用Sigmoid激活 |
| 权重矩阵: | 权重矩阵: | ||
| - | - $W^{(1)} = \begin{bmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \end{bmatrix}$(输入→隐藏) | + | |
| - | - $W^{(2)} = \begin{bmatrix} 0.5 & 0.6 \end{bmatrix}$(隐藏→输出) | + | - $W^{(2)} = \begin{bmatrix} 0.5 & 0.6 \end{bmatrix}$(隐藏→输出) |
| 偏置:$b^{(1)} = \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix}$,$b^{(2)} = 0.1$ | 偏置:$b^{(1)} = \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix}$,$b^{(2)} = 0.1$ | ||
| 行 348: | 行 356: | ||
| **隐藏层计算**: | **隐藏层计算**: | ||
| + | |||
| $$\mathbf{z}^{(1)} = W^{(1)} \mathbf{x} + \mathbf{b}^{(1)} = \begin{bmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \end{bmatrix} \begin{bmatrix} 0.5 \\ 0.3 \end{bmatrix} + \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix}$$ | $$\mathbf{z}^{(1)} = W^{(1)} \mathbf{x} + \mathbf{b}^{(1)} = \begin{bmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \end{bmatrix} \begin{bmatrix} 0.5 \\ 0.3 \end{bmatrix} + \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix}$$ | ||
| 行 353: | 行 362: | ||
| 应用ReLU: | 应用ReLU: | ||
| + | |||
| $$\mathbf{a}^{(1)} = \text{ReLU}(\mathbf{z}^{(1)}) = \begin{bmatrix} 0.21 \\ 0.47 \end{bmatrix}$$ | $$\mathbf{a}^{(1)} = \text{ReLU}(\mathbf{z}^{(1)}) = \begin{bmatrix} 0.21 \\ 0.47 \end{bmatrix}$$ | ||
| **输出层计算**: | **输出层计算**: | ||
| $$z^{(2)} = W^{(2)} \mathbf{a}^{(1)} + b^{(2)} = \begin{bmatrix} 0.5 & 0.6 \end{bmatrix} \begin{bmatrix} 0.21 \\ 0.47 \end{bmatrix} + 0.1$$ | $$z^{(2)} = W^{(2)} \mathbf{a}^{(1)} + b^{(2)} = \begin{bmatrix} 0.5 & 0.6 \end{bmatrix} \begin{bmatrix} 0.21 \\ 0.47 \end{bmatrix} + 0.1$$ | ||
| + | |||
| $$= 0.5 \times 0.21 + 0.6 \times 0.47 + 0.1 = 0.105 + 0.282 + 0.1 = 0.487$$ | $$= 0.5 \times 0.21 + 0.6 \times 0.47 + 0.1 = 0.105 + 0.282 + 0.1 = 0.487$$ | ||
| 行 394: | 行 405: | ||
| 优点: | 优点: | ||
| - | - 输出范围(0, | + | |
| - | - 平滑可导,数学性质良好 | + | - 平滑可导,数学性质良好 |
| - | - 可用于门控机制 | + | - 可用于门控机制 |
| 缺点: | 缺点: | ||
| - | - **梯度消失**:当输入远离0时,导数趋近于0。在深层网络中,多次连乘导致梯度迅速衰减,使深层参数难以更新 | + | |
| - | - **非零中心化**:输出恒为正,导致权重更新总是同向,收敛速度较慢 | + | - **非零中心化**:输出恒为正,导致权重更新总是同向,收敛速度较慢 |
| - | - 指数计算成本高 | + | - 指数计算成本高 |
| **ReLU激活函数**: | **ReLU激活函数**: | ||
| 优点: | 优点: | ||
| - | - **缓解梯度消失**:正区间梯度恒为1,梯度可以直接反向传播到浅层 | + | |
| - | - **计算高效**:只需简单的阈值比较,无复杂运算 | + | - **计算高效**:只需简单的阈值比较,无复杂运算 |
| - | - **稀疏激活**:约一半的神经元输出为零,提高计算效率和特征选择性 | + | - **稀疏激活**:约一半的神经元输出为零,提高计算效率和特征选择性 |
| 缺点: | 缺点: | ||
| - | - **神经元死亡**:负区间梯度为0,如果神经元始终接收负输入,将无法更新(永久性失活) | + | |
| - | - 非零中心化 | + | - 非零中心化 |
| **深层网络中使用ReLU的原因**: | **深层网络中使用ReLU的原因**: | ||
| 行 459: | 行 470: | ||
| ==== 填空题 ==== | ==== 填空题 ==== | ||
| + | < | ||
| 6. 前馈神经网络中,信息从输入层流向输出层,这种计算过程称为______传播。 | 6. 前馈神经网络中,信息从输入层流向输出层,这种计算过程称为______传播。 | ||
| 行 470: | 行 481: | ||
| 10. 在多分类问题中,交叉熵损失通常与______激活函数配合使用。 | 10. 在多分类问题中,交叉熵损失通常与______激活函数配合使用。 | ||
| + | </ | ||
| ==== 计算题 ==== | ==== 计算题 ==== | ||
| 11. 给定一个单层神经网络(无隐藏层),输入$\mathbf{x} = [2, -1, 3]$,权重$\mathbf{w} = [0.5, 0.3, -0.2]$,偏置$b = 0.1$。请计算: | 11. 给定一个单层神经网络(无隐藏层),输入$\mathbf{x} = [2, -1, 3]$,权重$\mathbf{w} = [0.5, 0.3, -0.2]$,偏置$b = 0.1$。请计算: | ||
| - | | + | |
| - | (2) 若真实标签$y=1$,计算二分类交叉熵损失 | + | (1) 使用Sigmoid激活的输出 |
| + | |||
| + | (2) 若真实标签$y=1$,计算二分类交叉熵损失 | ||
| 12. 一个两层神经网络,结构如下: | 12. 一个两层神经网络,结构如下: | ||
| - | | + | |
| - | - 隐藏层:2个神经元,ReLU激活 | + | - 隐藏层:2个神经元,ReLU激活 |
| - | - 输出层:1个神经元,Sigmoid激活 | + | - 输出层:1个神经元,Sigmoid激活 |
| | | ||
| - | | + | 给定输入$\mathbf{x} = [1, 0, -1]$,权重: |
| - | $$W^{(1)} = \begin{bmatrix} 0.2 & 0.1 & 0.3 \\ -0.1 & 0.2 & 0.1 \end{bmatrix}, | + | |
| - | $$W^{(2)} = \begin{bmatrix} 0.3 & 0.4 \end{bmatrix}, | + | $$W^{(1)} = \begin{bmatrix} 0.2 & 0.1 & 0.3 \\ -0.1 & 0.2 & 0.1 \end{bmatrix}, |
| + | |||
| + | $$W^{(2)} = \begin{bmatrix} 0.3 & 0.4 \end{bmatrix}, | ||
| | | ||
| - | | + | 请计算网络输出$\hat{y}$。 |
| ===== 2.7 答案与解析 ===== | ===== 2.7 答案与解析 ===== | ||
| 行 522: | 行 538: | ||
| 11. **解答**: | 11. **解答**: | ||
| | | ||
| - | | + | (1) 线性变换: |
| - | $$z = \mathbf{w}^T \mathbf{x} + b = 0.5 \times 2 + 0.3 \times (-1) + (-0.2) \times 3 + 0.1$$ | + | |
| - | $$= 1.0 - 0.3 - 0.6 + 0.1 = 0.2$$ | + | $$z = \mathbf{w}^T \mathbf{x} + b = 0.5 \times 2 + 0.3 \times (-1) + (-0.2) \times 3 + 0.1$$ |
| + | |||
| + | $$= 1.0 - 0.3 - 0.6 + 0.1 = 0.2$$ | ||
| | | ||
| - | | + | Sigmoid输出: |
| - | $$\hat{y} = \sigma(0.2) = \frac{1}{1 + e^{-0.2}} = \frac{1}{1 + 0.819} \approx 0.550$$ | + | |
| + | $$\hat{y} = \sigma(0.2) = \frac{1}{1 + e^{-0.2}} = \frac{1}{1 + 0.819} \approx 0.550$$ | ||
| | | ||
| - | | + | (2) 二分类交叉熵损失: |
| - | $$\mathcal{L} = -[y \log(\hat{y}) + (1-y)\log(1-\hat{y})]$$ | + | |
| - | $$= -[1 \times \log(0.550) + 0 \times \log(0.450)]$$ | + | $$\mathcal{L} = -[y \log(\hat{y}) + (1-y)\log(1-\hat{y})]$$ |
| - | $$= -\log(0.550) \approx 0.598$$ | + | |
| + | $$= -[1 \times \log(0.550) + 0 \times \log(0.450)]$$ | ||
| + | |||
| + | $$= -\log(0.550) \approx 0.598$$ | ||
| 12. **解答**: | 12. **解答**: | ||
| | | ||
| - | | + | **隐藏层**: |
| - | $$\mathbf{z}^{(1)} = W^{(1)} \mathbf{x} + \mathbf{b}^{(1)}$$ | + | |
| - | $$= \begin{bmatrix} 0.2 \times 1 + 0.1 \times 0 + 0.3 \times (-1) + 0.1 \\ -0.1 \times 1 + 0.2 \times 0 + 0.1 \times (-1) + 0.2 \end{bmatrix}$$ | + | $$\mathbf{z}^{(1)} = W^{(1)} \mathbf{x} + \mathbf{b}^{(1)}$$ |
| - | $$= \begin{bmatrix} 0.2 - 0.3 + 0.1 \\ -0.1 - 0.1 + 0.2 \end{bmatrix} = \begin{bmatrix} 0.0 \\ 0.0 \end{bmatrix}$$ | + | |
| + | $$= \begin{bmatrix} 0.2 \times 1 + 0.1 \times 0 + 0.3 \times (-1) + 0.1 \\ -0.1 \times 1 + 0.2 \times 0 + 0.1 \times (-1) + 0.2 \end{bmatrix}$$ | ||
| + | |||
| + | $$= \begin{bmatrix} 0.2 - 0.3 + 0.1 \\ -0.1 - 0.1 + 0.2 \end{bmatrix} = \begin{bmatrix} 0.0 \\ 0.0 \end{bmatrix}$$ | ||
| | | ||
| - | | + | 应用ReLU: |
| - | $$\mathbf{a}^{(1)} = \text{ReLU}([0.0, | + | |
| + | $$\mathbf{a}^{(1)} = \text{ReLU}([0.0, | ||
| | | ||
| - | | + | **输出层**: |
| - | $$z^{(2)} = W^{(2)} \mathbf{a}^{(1)} + b^{(2)} = 0.3 \times 0 + 0.4 \times 0 + 0.1 = 0.1$$ | + | |
| + | $$z^{(2)} = W^{(2)} \mathbf{a}^{(1)} + b^{(2)} = 0.3 \times 0 + 0.4 \times 0 + 0.1 = 0.1$$ | ||
| | | ||
| - | | + | 应用Sigmoid: |
| - | $$\hat{y} = \sigma(0.1) = \frac{1}{1 + e^{-0.1}} \approx \frac{1}{1 + 0.905} \approx 0.525$$ | + | |
| + | $$\hat{y} = \sigma(0.1) = \frac{1}{1 + e^{-0.1}} \approx \frac{1}{1 + 0.905} \approx 0.525$$ | ||
| - | --- | ||
| - | **本章完** | ||