|
### 激活函数知识点
**作用**:在神经网络层间引入**非线性**。若没有非线性激活,无论网络多深都等价于单层线性变换 `y = Wx + b`,无法解决 XOR/XNOR 等线性不可分问题。
**线性网络为何等价于单层**(数学证明):
```
h1 = W1·x + b1
h2 = W2·h1 + b2 = W2·(W1·x + b1) + b2 = (W2·W1)·x + (W2·b1 + b2)
↑ 仍是线性变换
```
**常见激活函数对比**:
| 函数 | 公式 | 输出范围 | 均值 | 优点 | 缺点 |
|------|------|---------|------|------|------|
| Sigmoid | 1/(1+e⁻ˣ) | (0,1) | ≈0.5 | 输出概率 | 梯度消失、非零中心 |
| Tanh | (eˣ-e⁻ˣ)/(eˣ+e⁻ˣ) | (-1,1) | **0** | 零中心化 | 梯度消失 |
| ReLU | max(0,x) | [0,∞) | 0 | 计算快、缓解梯度消失、稀疏激活 | 神经元死亡 |
| Leaky ReLU | max(0.01x,x) | (-∞,∞) | - | 解决死亡 | 略复杂 |
| GELU | x·Φ(x) | (-0.17,∞) | - | 平滑、Transformer常用 | 计算略复杂 |
**为什么零中心化(Tanh)优于非零中心(Sigmoid)?**
- Sigmoid 输出恒正(0~1),下一层输入 `z=Σwᵢxᵢ+b` 所有 `xᵢ>0`
- 反向传播时 `∂L/∂wᵢ = ∂L/∂z · xᵢ`,所有梯度同号 → 权重更新只能沿象限对角 → **zigzag 震荡**,收敛慢
- Tanh 输出有正有负 → 梯度符号自由 → 收敛快
**万能逼近定理**:单隐藏层网络 + 非线性激活 + 足够多神经元 → 可逼近任意连续函数。
|
|
### 线性激活能模拟 XNOR 吗?
**[单选]** 把 ReLU 激活替换为线性激活,神经网络能模拟同或函数 XNOR 吗?
A. 可以 B. 不好说 C. 不一定 D. 不能 ✓
**答案:D**
**解析**:
- **数学上**:多层线性网络等价于单层线性变换 `y = Wx+b`
- **几何上**:XNOR 的 4 个点 (0,0)(1,1) 为一类,(0,1)(1,0) 为另一类,**线性不可分**(一条直线分不开)
- 没有非线性激活 → 网络退化为线性 → 无法模拟任何非线性函数(包括 XNOR)
**关键**:非线性激活是深度学习能力的**根本来源**。ReLU 虽分段线性,但 x=0 处的折点是非线性来源。
|
|
### Tanh 比 Sigmoid 更适合隐藏层?
**[判断]** tanh 通常比隐藏层的 sigmoid 效果更好,因为其输出均值更接近零,数据更集中在下一层。
**答案:对 ✓**
**解析**:
- Tanh 输出范围 (-1,1),**均值 ≈ 0**(零中心化)
- Sigmoid 输出范围 (0,1),均值 ≈ 0.5(恒正)
- 零中心化 → 下一层输入分布对称 → 梯度方向自由 → 收敛快
- 非零中心 → 梯度同号 → zigzag 震荡 → 收敛慢
**注意**:输出层做二分类时(需 0~1 概率),仍用 sigmoid;隐藏层推荐 tanh > sigmoid,现代更常用 ReLU。
|
|
### 优化算法知识点
**梯度下降三形式**:
| 形式 | 每次用 | 速度 | 稳定性 | 适用 |
|------|--------|------|--------|------|
| 批量 GD(Batch) | 全部数据 | 慢 | 平滑 | 小数据 |
| 随机 GD(SGD,batch=1) | 1 个样本 | 快但震荡 | 差 | 在线学习 |
| 小批量 GD(Mini-batch) | 32~512 | 快 | 较稳 | **主流** |
**mini-batch 大小权衡**:
- batch=1:失去**向量化**加速(无法用 GPU 并行),更新太频繁
- batch=m:每次须遍历全部数据才更新一次,**迭代慢**
- batch=2 的幂(64/128/256):兼顾向量化与更新频率,**最优区间**
**指数加权平均(EMA)**——Adam/Momentum 优化器的基础:
```
v_t = β·v_{t-1} + (1-β)·θ_t
v_t_corrected = v_t / (1 - β^t) ← 偏差修正(修正初期偏小)
```
- β 越大 → 平滑越强(约等于 1/(1-β) 个样本的平均)
- β=0.9 → 约 10 个样本平均;β=0.5 → 约 2 个
**梯度消失/爆炸**:深层网络中梯度经多层连乘,sigmoid 导数 ≤0.25 → 急速衰减。
**缓解方法**:
1. **ReLU 激活**(导数为 1,x>0 时不衰减)
2. **预训练 + 微调**(逐层初始化)
3. BatchNorm、残差连接(ResNet)、梯度裁剪、LSTM(门控)
|
|
### 指数加权平均计算
**[单选]** β=0.5,θ₁=θ₂=10,v₀=0,求 v₂ 和 v₂_corrected。
A. v₂=7.5, corrected=5 B. v₂=5, corrected=10 C. v₂=10, corrected=7.5 D. **v₂=7.5, corrected=10** ✓
**答案:D**
**解析**:
```
v₁ = 0.5·0 + 0.5·10 = 5
v₂ = 0.5·5 + 0.5·10 = 7.5
v₂_corrected = 7.5 / (1 - 0.5²) = 7.5 / 0.75 = 10
```
偏差修正 `1/(1-β^t)` 在初期 t 小时把偏小的 v 拉回真实水平;t 大时 β^t→0,修正趋近 1。
|
|
### mini-batch 最佳大小?
**[多选]** 为什么最佳 mini-batch 大小通常在 1 和 m 之间(而非两端)?
A. batch=1 时不收敛
B. **batch=m 时退化为批量 GD,每轮才更新一次** ✓
C. **batch=1 时失去向量化加速** ✓
D. batch=m 时显存不足
**答案:B、C**
**解析**:
- B:batch=m 须全量遍历才更新一次 → 迭代慢(批量 GD 的缺点)
- C:batch=1 时无法用矩阵/GPU 并行处理多样本 → 失去向量化带来的数十倍加速
- 折中:batch=64/128/256 等 2 的幂,兼顾向量化(快)与更新频率(迭代多)
|
|
### 如何缓解梯度消失?
**[多选]** 深度网络中,哪些方法有助于缓解梯度消失?
A. 使用 sigmoid 激活
B. 增加网络层数
C. **预训练 + 微调** ✓
D. **使用 ReLU 激活** ✓
**答案:C、D**
**解析**:
- A 错:sigmoid 导数 ≤ 0.25,连乘急速衰减,**加剧**梯度消失
- C 对:逐层预训练提供良好初始权重,缓解深层传播
- D 对:ReLU 在 x>0 时导数恒为 1,不衰减
- 其他有效方法:BatchNorm、残差连接(ResNet)、LSTM 门控、Xavier/He 初始化
|
|
### 正则化知识点
**目的**:抑制过拟合,提升泛化能力。通过约束模型复杂度实现。
**主要方法**:
| 方法 | 机制 | 关键参数 |
|------|------|---------|
| **L2 正则(权重衰减)** | 损失加 `λ·||w||²`,每次更新 `w ← w·(1-2ηλ) - η·∇L` | λ |
| **L1 正则** | 损失加 `λ·||w||₁`,产生稀疏权重(特征选择) | λ |
| **Dropout** | 训练时随机丢弃神经元(概率 p),测试时全用 | p(保留率) |
| **BatchNorm** | 归一化每层输入,副作用有轻微正则效果 | - |
| **数据增强** | 扩充训练数据 | - |
| **早停** | 监控验证集损失,上升时停止 | patience |
| **PCA 降维** | 减少特征数(k 小→强正则) | k |
**L2 权重衰减的直观理解**:
```
更新规则:w ← (1 - 2ηλ)·w - η·∂L/∂w
↑ 每次把权重乘以小于1的因子 → 逐渐衰减
```
- λ 大 → 权重衰减快 → 权重变小趋近 0 → 模型简单 → 强正则
- λ 小 → 衰减慢 → 弱正则
**Dropout 的"反转"机制**(Inverted Dropout):
- 训练时:以概率 p 保留神经元,输出 **除以 p**(补偿丢弃)
- 测试时:**不丢弃**,用全部神经元,无需调整
- 因此测试时间与有无 Dropout **无关**(重要考点)
**正则化强度 λ 与 bias-variance**:λ↑ → 方差↓(过拟合↓)但偏差↑(欠拟合↑)。
|
|
### λ 增大时权重如何变化?
**[单选]** 增大正则化超参数 λ 会发生什么?
A. **权重变小,趋近 0** ✓
B. 权重变大
C. 权重正好减半
D. 学习步长变大
**答案:A**
**解析**:L2 正则下 `w ← (1-2ηλ)·w - η·∇L`,λ 越大,权重每步乘的因子越小 → 权重持续衰减趋近 0 → 模型变简单 → 抑制过拟合。
**注意**:λ 与权重是**非线性反向关系**(不是"减半""减倍"这种线性表述)。
|
|
### 权重衰减是什么?
**[单选]** "权重衰减"(weight decay)指什么?
A. **正则化技术(如 L2),使权重每次迭代变小** ✓
B. 学习率衰减
C. 权重裁剪(gradient clipping)
D. 权重初始化方法
**答案:A**
**解析**:权重衰减 = L2 正则的同义词。机制是在损失函数加入 `λ·||w||²`,使每次更新 `w ← (1-2ηλ)·w - η·∇L`,权重逐渐衰减。
**易混淆点**:
- 学习率衰减(LR decay):调学习率,不是调权重
- 梯度裁剪(gradient clipping):限制梯度大小防爆炸,与权重衰减不同
|
|
### 过拟合应对方法?
**[多选]** 神经网络中,哪些方法可处理过拟合?
A. Dropout B. BatchNormalization C. 正则化(L1/L2) D. **以上全部** ✓
**答案:D**
**解析**:
- Dropout:随机丢弃神经元,强迫网络学到冗余鲁棒特征
- BatchNorm:归一化层输入,副作用轻微正则
- L1/L2 正则:约束权重幅度/稀疏性
- 此外:数据增强、早停、简化模型、增加数据都有效
- **全选 D**
|
|
### Dropout 对测试时间影响?
**[单选]** 5 层网络在第 2、4 层加 Dropout。原测试 2 秒,加 Dropout 后测试需多久?
A. 大于 2s B. 小于 2s C. **仍为 2s** ✓ D. 无法确定
**答案:C**
**解析**:
- Dropout(Inverted Dropout)**只在训练时激活**
- 测试时**所有神经元全保留**,不丢弃
- 因此测试前向传播的计算量与有无 Dropout **完全相同** → 时间不变(2s)
**关键区分**:Dropout 影响**训练**时间(多一次随机丢弃+缩放),不影响**测试**时间。
|
|
### 训练流程知识点
**神经网络训练 = 梯度下降 + 反向传播**:
```
1. 初始化权重(小随机数,打破对称性)
2. 前向传播:x → 各层激活 → 预测 ŷ
3. 计算损失 L(ŷ, y)
4. 反向传播:链式法则求 ∂L/∂w
5. 更新:w ← w - η·∂L/∂w
6. 重复 2-5 直到收敛
```
**深度学习记法约定**(Andrew Ng):
```
a^[l]{k}(i)
│ │ │
│ │ └─ 第 i 个样本(圆括号)
│ └──── 第 k 个 mini-batch(花括号)
└───────── 第 l 层(方括号)
```
例:`a^[3]{8}(7)` = 第 3 层、第 8 个 batch、第 7 个样本的激活。
**全连接层参数量**:
```
参数数 = 输入维度 × 输出维度 + 输出维度(偏置)
```
RGB 图像输入须展平:300×300×3 = 270000 维。
**初始化对称性问题**:
- 多层网络若权重全 0 初始化 → 同层神经元梯度相同 → 永远学到相同特征 → 失去多层意义
- 必须**随机初始化**打破对称性
- 但**单层模型**(逻辑/线性回归)无此问题:每个特征的梯度由其输入决定,天然不同
**same 卷积 padding**:输出尺寸 = 输入尺寸,`P = (F-1)/2`(F 为卷积核尺寸,奇数)。
**矩阵连乘最优顺序**:选产生最小中间矩阵的结合顺序(动态规划),与 DL 的批量矩阵运算效率相关。
|
|
### 如何确定每个神经元的权重和偏置?
**[单选]** 训练时如何确定每个神经元的权重和偏置?
A. 随机猜测后固定
B. **初始化 → 计算损失差 → 迭代调整**(梯度下降+反向传播)✓
C. 解析求解(如最小二乘)
D. 由人工设定
**答案:B**
**解析**:神经网络训练 = 初始化权重 → 前向算损失 → 反向算梯度 → 按梯度更新 → 重复。这就是梯度下降 + 反向传播。
|
|
### 第 3 层第 8 batch 第 7 样本的激活如何记?
**[单选]** 第 3 层、第 8 个 mini-batch、第 7 个样本的激活如何表示?
A. **a^[3]{8}(7)** ✓ B. a^(3)[8]{7} C. a{3}^[8](7) D. a(3)^[8]{7}
**答案:A**
**解析**:记法约定——方括号 `[l]` 表层、花括号 `{k}` 表 batch、圆括号 `(i)` 表样本。
|
|
### 感知机训练流程?
**[单选]** 感知机的训练任务顺序是?
1. 计算输出 2. 下一样本 3. 调整权重(若错误) 4. 初始化权重
A. 4,1,2,3 B. 4,1,3,2 C. 1,4,3,2 D. **4,1,3,2**(即 1,4,3,2 排序后)
**答案:D(顺序:4→1→3→2)**
**解析**:感知机在线学习流程:
```
初始化权重(4) → 对每个样本:计算输出(1) → 若错误则调整权重(3) → 处理下一样本(2)
```
即 4→1→3→2。感知机是逐样本更新(在线学习),不是批量。
|
|
### 300×300 RGB 全连接 100 神经经元的参数量?
**[单选]** 输入 300×300 RGB 图像,全连接到 100 个神经元(含偏置),参数总数?
A. 270000 B. 27000000 C. 2700010 D. **27000100** ✓
**答案:D**
**解析**:
```
输入维度 = 300 × 300 × 3 = 270000(RGB 三通道)
参数 = 270000 × 100(权重)+ 100(偏置)= 27000100
```
全连接层参数 = 输入维 × 输出维 + 输出维。RGB 图像须展平为 3 倍单通道像素数。
|
|
### 逻辑回归需随机初始化打破对称?
**[判断]** 逻辑回归权重必须随机初始化(非全零)以打破对称性。
**答案:错 ✗**
**解析**:
- 逻辑回归是**单层模型**(无隐藏层)
- 每个特征 `wᵢ` 的梯度 `∂L/∂wᵢ = (ŷ-y)·xᵢ` 由其**输入 xᵢ** 决定
- 不同特征输入不同 → 梯度天然不同 → 全零初始化也能正常学习
- **只有含隐藏层的网络**才需要随机初始化打破对称(否则同层神经元梯度相同,学到相同特征)
|
|
### 63×63×16 输入 32 个 7×7 卷积 same 卷积 padding?
**[单选]** 输入 63×63×16,32 个 7×7 卷积核,stride 1,same 卷积,padding 值?
A. 1 B. 2 C. **3** ✓ D. 7
**答案:C**
**解析**:same 卷积要求输出尺寸 = 输入尺寸:
```
输出 = (输入 - 卷积核 + 2P)/stride + 1
63 = (63 - 7 + 2P)/1 + 1 → 2P = 6 → P = 3
```
通用公式:`P = (F-1)/2`(F 为奇数核),F=7 → P=3。
|
|
### 计算效率知识点
**矩阵乘法代价**:A(m×n) · B(n×p) 代价 = m·n·p 次标量乘法。
**矩阵连乘的结合顺序影响总代价**:
```
A(m×n) · B(n×p) · C(p×q)
方案1 (AB)C:先算 AB 得 m×p 矩阵,代价 m·n·p;再 ·C 代价 m·p·q。总 = m·p·(n+q)
方案2 A(BC):先算 BC 得 n×q 矩阵,代价 n·p·q;再 A· 代价 m·n·q。总 = n·q·(p+m)
```
**选择原则**:选**中间矩阵较小**的结合顺序(动态规划求解,O(n³))。
**深度学习中的应用**:
- 全连接层、卷积层本质都是矩阵乘法
- 向量化(矩阵运算)远快于逐元素循环(GPU/SIMD 并行)
- mini-batch 把多个样本堆成矩阵 → 一次性算完 → 比逐样本快数十倍
- 这正是 batch=1(失去向量化)慢的原因
**实践建议**:用 BLAS/cuBLAS 等优化库,避免手写循环;batch size 取 2 的幂以匹配硬件。
|
|
### A(m×n)B(n×p)C(p×q) 最优乘法顺序?(m<n<p<q)
**[单选]** 稠密矩阵 A(m×n), B(n×p), C(p×q),m<n<p<q,最高效的乘法顺序?
A. **(AB)C** ✓ B. A(BC) C. 两者相同 D. 无法确定
**答案:A**
**解析**:
- (AB)C 代价 = m·p·(n+q)
- A(BC) 代价 = n·q·(p+m)
- 因 m<n 且 p<q,中间矩阵 AB 是 m×p(小),BC 是 n×q(大)
- 选中间矩阵小的顺序 → (AB)C 更优
**核心**:让"小矩阵"先参与乘法,避免产生大的中间矩阵。
|
|
### ML 策略(迭代改进)知识点
**Andrew Ng 的 ML 项目改进方法论**:
```
建立评估指标 → 分析问题 → 尝试方案 → 评估效果 → 调整目标
↑ ↓
└────────────────── 根据结果调整策略 ←─────────────────────┘
```
**核心原则**:
1. **先建立正确的评估指标,再谈改进**——指标错误则优化方向全错
2. dev/test 集必须反映**目标分布**
3. 指标应能**单一可优化**(避免多目标冲突),可用满意+优化两类指标
4. 区分**可避免偏差**(训练误差 - Bayes 误差)与**方差**(dev 误差 - 训练误差)
**常见诊断**:
| 现象 | 诊断 | 对策 |
|------|------|------|
| 训练误差高 >> Bayes | 高偏差(欠拟合) | 更大网络、更长训练、更好架构 |
| dev 误差 >> 训练误差 | 高方差(过拟合) | 更多数据、正则化、Dropout |
| dev 集精度异常高 | dev 集太小 | 增大 dev 集 |
**指标设计要点**:
- 业务场景决定指标:医疗/安防重**召回率**(怕漏报),垃圾邮件重**精确率**(怕误杀)
- 不平衡数据:准确率误导,用召回率/F1/Fβ
- 可用**代价矩阵**对不同错误加权(假阴性代价 >> 假阳性)
**迭代必然性**:DL 项目本质是迭代过程,经验能减少迭代次数但不能消除——首次成功几乎不可能。
|
|
### 损失 0.75 但精度接近 1.0 代表什么?
**[单选]** 检查数据时,损失 2 周期后稳定在 0.75,但 15 周期后精度接近 1.0。这代表什么?
A. 过拟合验证数据
B. 过拟合训练数据
C. 更大训练集提升验证精度
D. **更大验证集能提供更真实的训练准确性评估** ✓
**答案:D**
**解析**:
- 损失 0.75(一般)但精度 1.0(完美)→ **矛盾**
- 最可能原因:**验证集太小**,模型"记住"了那几个验证样本,精度虚高
- 小验证集统计不可靠(10 个样本可能碰巧全对 = 100%)
- **更大验证集** → 模型无法全记住 → 精度反映真实泛化能力
**记忆**:异常高的精度先查 dev 集大小。
|
|
### 新鸟类出现,第一步做什么?
**[单选]** 系统部署后出现新鸟类物种,性能下降。只有 1000 张新鸟图,3 个月内更新。第一步应做什么?
A. **用现有数据定义新评估指标(含新物种的 dev/test),以此推动团队** ✓
B. 把 1000 张放进训练集
C. 先做数据增强
D. 加入数据集并重新组合
**答案:A**
**解析**:
- **建立评估标准是任何改进的第一步**(Andrew Ng 核心理念)
- 新物种出现 → 数据分布改变 → 旧指标失效
- 必须先用新数据定义含新物种的 dev/test,建立基准
- 然后才能评估后续改进(B/C/D 都是后续步骤)
**顺序**:定义指标 → 评估基准 → 改进 → 评估效果。
|
|
### 准确率高但假阴性多怎么办?
**[单选]** 你的系统准确率更高,但竞争对手被选中,因为你的假阴性(漏报)更多。你该怎么办?
A. 找错误率最低的模型
B. 同时考虑准确率和假阴性率
C. **重新思考此任务的指标,要求团队调整到新指标** ✓
D. 直接选假阴性率为新指标
**答案:C**
**解析**:
- 准确率在**不平衡场景**(鸟攻击极少)下误导:99% 准确率可能漏掉所有攻击
- 客户更关心假阴性(漏报 = 人员伤亡)
- 应**系统性重新定义指标**:理解业务→选择召回率/F2/代价敏感等
- C 优于 D:D 过于片面(只看假阴性会致误报泛滥),C 灵活全面
**关键**:单一可优化指标 > 多目标冲突。
|
|
### 老手能否一次训练成功?
**[判断]** 经验丰富的 DL 工程师可以不经过反复迭代,一次训练出好模型。
**答案:错 ✗**
**解析**:
- DL 项目本质是**迭代过程**(idea→code→experiment 循环)
- 经验能**减少**迭代次数(避开已知坑),但**不能保证**一次成功
- 数据分布、超参敏感、硬件随机性等使首次成功几乎不可能
- Andrew Ng 强调:迭代能力比一次性正确更重要
|
|
### 训练误差 4%,扩大网络是好方法?
**[单选]** 训练误差 4.0%,测试误差 4.5%。扩大网络是降低 4% 训练误差的好方法吗?
A. 同意 B. 不同意,应加数据 C. 不同意,应正则化 D. **不同意,信息不足**(不知 Bayes 误差)✓
**答案:D**
**解析**:
- 是否扩大网络取决于 **4% 训练误差是否还有下降空间**
- 若 Bayes 误差 ≈ 4%(数据本身噪声)→ 扩大网络无意义(过拟合)
- 若 Bayes 误差 ≈ 0%(如人类 0.1%)→ 4% 是高偏差,扩大网络有效
- **没有 Bayes 误差基线无法判断** → 选 D
**核心**:诊断偏差需先有 Bayes error 参照。
|
|
### DL 基础概念知识点
**深度学习兴起的三要素**(Andrew Ng):
1. **数据**(Data):互联网产生海量标注数据
2. **算力**(Computation):GPU/TPU 使训练深层网络成为可能
3. **算法**(Algorithms):反向传播、ReLU、Dropout、BN、Adam 等突破
三者缺一不可:传统算法在小数据上不逊于 DL,只有数据+算力达到阈值,DL 优势才显现。
**端到端学习(End-to-End)**:
- 直接从原始输入(像素)到最终输出(标签),一个网络搞定
- 对比:模块化流水线(先检测→再识别→再分类)
- 优点:减少手工特征工程;缺点:需大量数据,可解释性差
**参数共享(CNN 核心)**:
- 同一卷积核在图像所有位置共享 → 大幅减少参数
- 好处:减参防过拟合、允许特征检测器出现在任意位置(平移不变性)、支持迁移学习
**迁移学习**:把在大型数据集(ImageNet)上预训练的模型,迁移到小数据任务上微调。开源预训练模型(含权重)是迁移学习的宝库。
**开源生态**:
- 开源 ≠ 永远开放——需良好治理(中立基金会、多元贡献者)才能长期保持开放
- 使用开源实现的好处:迁移学习预训练权重、获奖架构(ResNet/EfficientNet)、简化复杂结构搭建
**AI 作为"新电能"**:100 年前电能改造了所有行业,AI 正在做同样的事(医疗、交通、金融、教育等)。
|
|
### "AI 是新电能"什么意思?
**[单选]** "AI 是新电能"这个比喻的含义?
A. AI 像电能一样危险
B. AI 像电能一样需要基础设施
C. AI 像电能一样昂贵
D. **像 100 年前的电能一样,AI 正在改造多个行业** ✓
**答案:D**
**解析**:Andrew Ng 的比喻——电能曾改造交通、制造、通信等所有行业;AI 同样正在改造医疗、金融、交通、教育等。强调 AI 是**通用使能技术**,而非单一应用。
|
|
### 算力崛起是 DL 兴起原因?
**[判断]** 拥有更多算力是深度学习近期兴起的原因之一。
**答案:对 ✓**
**解析**:DL 兴起三要素——数据、算力(GPU/TPU)、算法。算力突破使深层网络(之前算不动)可训练。早期算法在小数据上与 DL 相当,只有算力+数据达到阈值 DL 才显现优势。
|
|
### 参数共享的好处?
**[多选]** 关于 CNN 参数共享,哪些说法正确?
A. **减少参数数量和过拟合风险** ✓
B. **允许特征检测器出现在多个位置** ✓
C. **使模型支持迁移学习** ✓
D. 产生稀疏表示(L1 效果)
**答案:A、B、C**
**解析**:
- A:同一卷积核全图共享 → 参数远少于全连接
- B:学到的"边缘检测器"可用于图像任意位置(平移等变性)
- C:预训练特征通用 → 可迁移到新任务
- D 错:参数共享 ≠ 稀疏表示。稀疏性来自 ReLU(约 50% 输出为 0)或 L1 正则
|
|
### 红绿灯两步法是端到端?
**[判断]** 红绿灯识别用"两步法"(先检测灯,再判颜色)比"直接神经网络映射"更端到端。
**答案:错 ✗**
**解析**:
- **端到端** = 从原始输入直接到最终输出,**一个网络**
- 直接 NN 映射(图像→红/绿)**才是端到端**
- 两步法(检测→分类)是**模块化流水线**,反而不是端到端
**易混点**:题目问"哪个更端到端",答案是"直接映射"。
|
|
### 大数据训练慢,认同哪些?
**[多选]** 用 1 亿张图训练猫检测器,需 2 周。你认同哪些?
A. **长训练时间限制了迭代速度** ✓
B. **购买更快的计算机/加速器有帮助** ✓
C. **用 1000 万张图先做原型,迭代更快** ✓
D. 1 亿张是必须的
**答案:A、B、C**
**解析**:
- A:训练 2 周 → 一个 idea 要等 2 周才能验证 → 迭代慢
- B:GPU/TPU 能大幅缩短训练时间
- C:先用小数据快速迭代验证想法,再放大(Andrew Ng 推荐的工程实践)
- D 错:并非必须,小数据原型常已足够验证架构
|
|
### 良好治理能保持开源长期开放?
**[判断]** 良好的治理(governance)有助于开源项目长期保持开放,而非被单一公司关闭。
**答案:对 ✓**
**解析**:
- 开源 ≠ 永远开放——许可证只是基础
- **治理结构**(中立基金会如 Apache/Linux Foundation、多元贡献者、清晰决策机制)决定项目长期独立性
- 反例:某公司主导的项目可能因公司战略变化而闭源或边缘化
- 正例:Linux、Kubernetes 由基金会治理,长期保持开放
|
|
### 为何使用开源 CNN 实现?
**[多选]** 使用开源 CNN 实现(含预训练模型/权重)的常见原因?
A. 用于数据增强
B. **迁移学习预训练参数** ✓
C. **使用竞赛获奖的网络架构** ✓
D. **简化复杂卷积结构的搭建** ✓
**答案:B、C、D**
**解析**:
- B:预训练权重是迁移学习的核心资产(ImageNet 上学到的通用特征)
- C:获奖架构(ResNet/EfficientNet/ViT)经过验证,比自己设计可靠
- D:现代 CNN 结构复杂(残差连接、Inception 块等),开源实现省去重复造轮子
- A 错:开源实现与数据增强无关(增强是数据预处理)
|
|
### 反向传播与梯度知识点
**1. 神经网络训练完整流程**
```
初始化权重偏置 → 前向传播(算输出) → 计算损失 → 反向传播(算梯度) → 更新权重 → 迭代至收敛
```
**2. 反向传播的 cache 机制**
前向传播时把各层中间量(`z[l]`、`W[l]`、`a[l-1]`)存入 cache,反向传播时取出用于算梯度(`dW = da·aᵀ`、激活导数 `g'(z)`)。**方向是前向→反向**,用内存换时间,避免重复计算。
**3. 梯度爆炸 vs 梯度消失**
| 现象 | 梯度爆炸 | 梯度消失 |
|------|---------|---------|
| 表现 | 梯度指数级增长 | 梯度趋近 0 |
| 症状 | 权重变 NaN、损失震荡/上升 | 学习停滞、损失不降 |
| 预警 | 各层梯度持续 > 1.0 | 各层梯度 ≈ 0 |
| 解决 | 梯度裁剪、降学习率 | 换 ReLU、BatchNorm、残差连接、LSTM |
**注意**:损失持续减小是**正常训练**标志,不是梯度爆炸。
**4. 收敛慢的常见对策**
- **调整学习率**(最常见原因)
- **mini-batch 梯度下降**(更新更频繁、可并行)
- **更好的随机初始化**(Xavier 适合 tanh/sigmoid;He 适合 ReLU)
- **不要全零初始化**:同层神经元对称 → 前向输出相同 → 反向梯度相同 → 退化为单神经元
**5. 一阶 vs 二阶优化**
| 类型 | 算法 | 用什么 |
|------|------|--------|
| **一阶** | SGD / AdaGrad / RMSprop / Adam | 只用梯度 |
| **二阶** | Newton / BFGS / L-BFGS | 用 Hessian(或其近似) |
AdaGrad **只用一阶梯度**(通过梯度平方累积自适应学习率),L-BFGS 用历史梯度差近似二阶 Hessian 信息。
|
|
### Q1 反向传播中的 cache 是什么?
**[单选]** 实现前向/反向传播时使用的 "cache" 是什么?
A. 缓存成本函数中间值
B. 把前向传播计算的变量传给反向传播,用于计算导数
C. 跟踪超参数以加速计算
D. 把反向传播的变量传给前向传播
**答案:B**
**解析**:cache 在前向传播时存储各层的 `z[l]`、`W[l]`、`a[l-1]` 等中间量,反向传播时取出计算梯度(如 `dW = da·aᵀ`、激活函数导数 `g'(z)`),避免重复计算。**方向是前向→反向**,D 方向反了。
**本质**:内存换时间的标准机制。
|
|
### Q2 梯度下降的正确步骤顺序?
**[单选]** 梯度下降的正确步骤顺序:a.计算误差 b.迭代至最优 c.输入传入网络得输出 d.初始化权重偏置 e.调整权重减小误差
A. abcde B. edcba C. cbaed D. dcaeb
**答案:D**
**解析**:正确流程 `dcaeb`:
1. **d** 初始化权重偏置
2. **c** 前向传播(输入→输出)
3. **a** 计算误差(损失)
4. **e** 反向传播调整权重
5. **b** 迭代直到收敛
其他选项要么跳过初始化,要么顺序错乱(如无初始化就前向传播)。
|
|
### Q3 哪些现象表明梯度爆炸?
**[多选]** 神经网络训练中哪些现象表明可能出现梯度爆炸?
A. 模型梯度快速变大
B. 模型权重变为 NaN
C. 每个节点/层的误差梯度持续超过 1.0
D. 损失函数持续减小
**答案:A、B、C**
**解析**:
- **A ✅** 梯度爆炸核心特征:梯度指数级增长
- **B ✅** 梯度过大超出浮点范围 → 权重变 NaN
- **C ✅** 各层梯度持续 > 1.0 是预警信号
- **D ❌** 损失持续减小是**正常训练**标志,爆炸时损失反而震荡或上升
**解决**:梯度裁剪、Xavier/He 初始化、BatchNorm、降学习率。
|
|
### Q4 批量梯度下降收敛慢如何找到更小损失?
**[多选]** 批量梯度下降耗时很长才能找到较小 J 值,哪些方法可帮助?
A. 所有权重初始化为 0
B. 调整学习率
C. 尝试 mini-batch 梯度下降
D. 更好的随机初始化
**答案:B、C、D**
**解析**:
- **B ✅** 学习率不当是最常见收敛问题
- **C ✅** mini-batch 比批量 GD 更新更频繁、可并行
- **D ✅** 良好初始化(Xavier/He)提供更好起点
- **A ❌** 全零初始化使同层神经元**对称**——前向输出相同、反向梯度相同,网络退化为单神经元
**初始化对照**:Xavier 适合 tanh/sigmoid;He 适合 ReLU。
|
|
### Q5 关于优化算法的描述哪个错误?
**[单选]** 下列描述错误的是?(选错误项)
A. AdaGrad 使用一阶差分
B. L-BFGS 使用二阶差分
C. AdaGrad 使用二阶差分
D. 以上都错误
**答案:C**
**解析**:
- A ✅(描述正确)AdaGrad 只用**一阶梯度**,通过累积梯度平方自适应调整学习率
- B ✅(描述正确)L-BFGS 是拟牛顿法,用历史梯度差近似二阶 Hessian
- **C ❌(描述错误,本题答案)** AdaGrad 不涉及 Hessian,不是二阶
- D ❌ A、B 描述正确,D 不成立
**分类**:一阶(SGD/AdaGrad/RMSprop/Adam);二阶(Newton/BFGS/L-BFGS)。
|
|
### 初始化与参数知识点
**1. 权重初始化的重要性**
| 初始化方式 | 问题 |
|-----------|------|
| 全零初始化 | 同层神经元对称 → 退化为单神经元 |
| 大权重(如 `randn×1000`) | 激活函数饱和 → 梯度消失 |
| 太小权重 | 梯度也小,学习缓慢 |
**标准初始化**:
- **Xavier**(Glorot):`Var(W) = 1/fan_in`,适合 tanh/sigmoid
- **He**(Kaiming):`Var(W) = 2/fan_in`,适合 ReLU
**2. 激活函数饱和问题(以 tanh 为例)**
`tanh(z)` 饱和区 `|z| > 3`:输出 ≈ ±1,导数 `tanh'(z) = 1 - tanh²(z) ≈ 0`。
大权重 → `z = Wx+b` 很大 → tanh 饱和 → 梯度接近 0 → 学习停滞。
**3. 全连接层参数量计算**
`参数数 = 输出神经元数 × (输入神经元数 + 1)`
`+1` 是每个输出神经元的偏置。
**图像输入**:输入神经元数 = H × W × C(注意 RGB 是 3 通道)。
**4. 超参数调优优先级(帕累托原则)**
20% 的关键超参数决定 80% 的效果,不必全调:
| 优先级 | 超参数 |
|--------|--------|
| **必须精调** | 学习率、网络结构 |
| 中等 | batch size、训练轮数 |
| **可用默认** | 动量系数、权重衰减、Adam 的 β₁/β₂ |
**注意**:超参数调整是**贯穿项目的持续迭代**过程,不是"开始调一次就完事"——数据量、模型架构、分布变化后需重调。
|
|
### Q1 tanh + 大权重初始化会发生什么?
**[单选]** 网络用 tanh 激活,权重用 `np.random.randn()*1000` 初始化为大值,会发生什么?
A. 无影响
B. tanh 输入变大 → 梯度变大 → 必须用极小学习率
C. 单位"高度激活"加快学习
D. 输入变大 → tanh 饱和 → 梯度接近 0 → 优化变慢
**答案:D**
**解析**:
- 大权重 → `z = Wx+b` 很大 → tanh 饱和(输出 ≈ ±1)
- tanh 导数 `tanh'(z) = 1 - tanh²(z)`,饱和区 `|z| > 3` 时 ≈ **0**
- 反向传播梯度 ≈ 0 → 权重几乎不更新 → **学习停滞**
**正确做法**:用 Xavier 初始化保持方差稳定。tanh 饱和导致梯度消失。
|
|
### Q2 全连接层处理图像输入的参数量?
**[单选]** 输入为 300×300 RGB 图像,第一隐藏层 100 个全连接神经元(含偏置),共多少参数?
A. 9,000,001 B. 9,000,100 C. 27,000,001 D. 27,000,100
**答案:D**
**解析**:
- 输入神经元 = 300 × 300 × **3**(RGB 三通道)= **270,000**
- 权重 = 270,000 × 100 = **27,000,000**
- 偏置 = 每神经元 1 个,共 **100**
- 总参数 = 27,000,000 + 100 = **27,000,100**
**易错点**:
- A/B ❌ 把 RGB 当灰度(漏 × 3)
- C ❌ 少算偏置(漏 +100)
**公式**:全连接层参数 = `输出数 × (输入数 + 1)`。
|
|
### Q3 每个超参数都要调好?
**[判断]** 每个超参数若设置不好都会对训练产生巨大负面影响,因此所有超参数都要调好。
**答案:错 ✗**
**解析**:超参数影响程度不同:
- **高影响必须精调**:学习率、网络结构
- **中等**:batch size、训练轮数
- **可用默认值**:动量系数、权重衰减、Adam 的 β₁/β₂
遵循**帕累托原则**——20% 的关键超参数决定 80% 的效果,没必要也没时间调全部。
**优先级**:学习率 > 网络结构 > batch size > 正则化系数。
|
|
### 优化器知识点
**1. 主流优化器演进**
| 优化器 | 核心思想 | 特点 |
|--------|---------|------|
| **SGD** | 沿负梯度方向更新 | 最基础,需手动调学习率 |
| **Momentum** | SGD + 动量(历史梯度累积) | 加速收敛、减少震荡 |
| **Nesterov** | "向前看"的动量(先走再算梯度) | 收敛更快 |
| **AdaGrad** | 累积梯度平方自适应学习率 | 稀疏特征友好,但学习率单调衰减过早 |
| **RMSprop** | AdaGrad + 指数衰减平均 | 解决 AdaGrad 学习率过早衰减 |
| **Adam** | Momentum + RMSprop | **主流首选**,自适应 + 动量 |
**2. Adam 的核心特性**
- 结合**动量**(一阶矩估计)与 **RMSprop**(二阶矩估计)
- 默认 `β₁=0.9, β₂=0.999, ε=1e-8`
- 能很好处理 **mini-batch** 的梯度噪声
- 内存效率高、收敛快
- ResNet、BERT、GPT 等均用 Adam + mini-batch
**3. 一阶 vs 二阶**
- **一阶**:只用梯度(SGD/AdaGrad/RMSprop/Adam)
- **二阶**:用 Hessian 或其近似(Newton/BFGS/L-BFGS)
二阶方法收敛更快但计算/存储 Hessian 代价高,深度学习中很少用。
|
|
### Q1 Adam 应用于批梯度而非 mini-batch?
**[判断]** Adam 算法应该用于批梯度计算,而不是用于 mini-batch。
**答案:错 ✗**
**解析**:完全相反——Adam 主要场景恰恰是 **mini-batch**:
- Adam 结合动量与 RMSprop,能很好处理 mini-batch 的梯度噪声
- 主流框架(ResNet、BERT、GPT 等)默认用 Adam + mini-batch
- 内存效率高、收敛快
**Adam 默认参数**:`β₁=0.9, β₂=0.999`。
|
|
### Q2 下列哪些是 Caffe 支持的优化方法?
**[多选]** 下列是 Caffe 支持的 loss 优化方法的是?
A. Adam B. SGD C. AdaDelta D. Nesterov
**答案:A、B、C、D**
**解析**:Caffe 原生/扩展版本支持:
- **SGD**(最基础)
- **Nesterov**(SGD 动量变体,"向前看")
- **AdaGrad / RMSprop**
- Caffe2 及 PyTorch 迁移版完整支持 **Adam、AdaDelta、AdamW** 等现代优化器
四者均支持。
**Nesterov 特点**:先按动量走一步,再在的新位置算梯度,收敛更快。
|
|
### 标准化(Normalization)知识点
**1. BatchNorm 公式**
```
μ = mean(x, 跨 B/H/W 维度,每通道一个) shape: (1,C,1,1)
σ² = var(x, 跨 B/H/W 维度,每通道一个) shape: (1,C,1,1)
x̂ = (x - μ) / √(σ² + ε) 归一化到均值0方差1
ỹ = γ · x̂ + β 可学习的缩放和平移
```
**关键**:
- BN 按**通道**统计,跨 B/H/W 聚合 → mean/var shape 为 **(1, C, 1, 1)**
- **γ 和 β 是每特征独立的可学习参数**(不是超参数、不是全局值)
- γ 和 β 让网络可恢复任意均值/方差(`E[ỹ]=β, Var(ỹ)=γ²`),避免强制 N(0,1) 损害表达能力
**2. 各种 Normalization 对比**
| 方法 | 统计维度 | shape | 适用 |
|------|---------|-------|------|
| **BatchNorm** | 跨 B/H/W,每通道 | (1,C,1,1) | CNN |
| **LayerNorm** | 跨 C/H/W,每样本 | (B,1,1,1) | RNN/Transformer |
| **InstanceNorm** | 跨 H/W,每样本每通道 | (B,C,1,1) | 风格迁移 |
| **GroupNorm** | 跨 H/W + 通道分组 | (B,G,1,1) | 小 batch |
**3. ε 的作用**
分母 `√(σ²+ε)` 中的 ε(约 1e-5)用于:
- **避免除零**:当方差 σ²=0(所有值相同)时分母为 0
- 保证数值稳定
- 不影响正常方差(σ²≫ε)的标准化结果
|
|
### Q1 BatchNorm 统计量的 shape?
**[单选]** BatchNorm 对 input batch (B,C,H,W) 统计的 mean/variance 的 shape 是?
A. B×1×1×1 B. 1×C×1×1 C. B×C×1×1 D. 1×1×1×1
**答案:B**
**解析**:BN 按**通道独立**归一化,跨 B/H/W 维度聚合统计:
`mean[c] = Σ x[b,c,h,w] / (B·H·W)`
每个通道得到 1 个 mean 和 1 个 var,shape 为 **(1, C, 1, 1)**,便于广播到整个 batch。
**对照**:
- LayerNorm → (B,1,1,1)(跨 C/H/W,每样本)
- InstanceNorm → (B,C,1,1)(跨 H/W,每样本每通道)
|
|
### Q2 BN 中 γ 和 β 的作用?
**[单选]** 批标准化中关于 γ 和 β 的陈述哪个正确?
A. 每层一个全局 γ 和 β
B. γ 和 β 是超参数
C. 它们确定 z^[l] 的均值和方差
D. 最佳值固定为 γ=√(σ²+ε), β=μ
**答案:C**
**解析**:归一化后 `ỹ = γ·x̂ + β`,其均值 `E[ỹ] = β`、方差 `Var(ỹ) = γ²`,故 **γ 和 β 确定输出分布**。
- A ❌ γ 和 β 是**每特征独立**的,不是全局值
- B ❌ γ 和 β 是**可学习参数**(参与梯度下降),不是超参数
- D ❌ γ 和 β 由学习得到,不固定
**为什么需要 γ/β**:强制均值 0 方差 1 会损害表达能力,γ/β 让网络可恢复任意分布。
|
|
### Q3 BN 公式中 epsilon 的作用?
**[单选]** 标准化公式中为何使用 epsilon(ε)?
A. 更准确标准化
B. 避免除零
C. 加速收敛
D. 防止 μ 太小
**答案:B**
**解析**:当方差 `σ² = 0`(所有值相同)时,分母 `√(σ²+ε)` 中的 √0 = 0,会导致**除零**。
加 ε(约 1e-5)保证数值稳定,且不影响正常方差(σ² ≫ ε)的标准化结果。
**记忆**:ε 是数值稳定用的"小常数",防除零。
|
|
### DL 基础概念知识点
**1. 激活函数的核心要求:非线性**
激活函数必须**非线性**,否则多层线性组合仍是线性,多层网络退化为单层失去意义:
`f(f(x)) = a(ax+b)+b = a²x + ab + b` 仍是线性。
| 函数 | 类型 | 可做激活? |
|------|------|----------|
| tanh | 非线性 | ✅ |
| sin | 非线性 | ✅(理论可用,实际少用) |
| ReLU `max(x,0)` | 非线性(分段) | ✅ |
| `y = 2x` | **线性** | ❌ |
**2. Dense 层(全连接层)**
Dense = Fully Connected Layer,每个神经元与**前一层所有神经元**连接,因连接密集而得名。参数量 = `输出数 × (输入数 + 1)`。
**3. Convergence(收敛)**
迭代优化过程中算法**逐渐接近最优解**、损失趋于稳定的状态。判断标准:损失变化 < 阈值、梯度 ≈ 0、参数变化很小。
收敛 ≠ 全局最优,可能停在局部最优。**发散(Divergence)**是相反——损失急剧增加。
**4. model.fit() 的作用**
Keras/TensorFlow 的训练方法:输入 x 和目标 y,通过前向传播→计算损失→反向传播更新权重,**学习从输入到输出的映射**。常用参数:epochs、batch_size、validation_split。
**5. 深度学习快速发展的三大原因**
| 驱动力 | 说明 |
|--------|------|
| **算力提升** | GPU/TPU 并行计算 |
| **数据量增加** | 大数据集如 ImageNet |
| **算法与应用突破** | 广告、语音、图像等重大进展 |
**注意**:神经网络研究始于 1940s(感知机 1957、反向传播 1986),2012 AlexNet 是爆发标志——是**复兴**而非"全新领域"。
|
|
### Q1 哪个函数不可以做激活函数?
**[单选]** 下列哪个函数不可以做激活函数?
A. y=tanh(x) B. y=sin(x) C. y=max(x,0) D. y=2x
**答案:D**
**解析**:激活函数必须**非线性**,否则多层线性组合仍是线性,多层网络退化为单层。
- A tanh ✅ 常用非线性激活
- B sin ✅ 非线性(虽不常用但理论可用)
- C `max(x,0)` = ReLU ✅ 非线性
- **D `y=2x` ❌ 线性**,不可作激活
**数学证明**:线性嵌套 `f(f(x)) = a²x + ab + b` 仍线性。
|
|
### Q2 什么是 Dense?
**[单选]** 什么是 Dense?
A. 质量除以体积
B. 单个神经元
C. 一层连接的神经元
D. 一层不连接的神经元
**答案:C**
**解析**:Dense 层即**全连接层**(Fully Connected Layer),是一层神经元且每个神经元与前一层所有神经元连接,因连接密集而得名。
- A 是物理密度(干扰项)
- B 是单个神经元,不是一层
- D 与"全连接"定义矛盾
**参数量**:`(输入维 + 1) × 输出维`。
|
|
### Q3 什么是 Convergence(收敛)?
**[单选]** 什么是 Convergence?
A. 星球大战角色
B. 损失急剧增加
C. 接近正确答案的过程
D. AI 的编程 API
**答案:C**
**解析**:收敛指迭代优化过程中算法**逐渐接近最优解**、损失趋于稳定的状态。
- B 描述的是**发散**(Divergence),与收敛相反
- A、D 是干扰项
**判断标准**:损失变化 < 阈值、梯度 ≈ 0、参数变化很小。收敛 ≠ 全局最优,可能停在局部最优。
|
|
### Q4 model.fit 是用来做什么的?
**[单选]** model.fit 是用来做什么的?
A. 训练神经网络将一组值转换为另一组
B. 使模型可以记忆
C. 优化已存在的模型
D. 确定运动是否对身体有益
**答案:A**
**解析**:`model.fit()` 是 Keras/TensorFlow 的训练方法:输入 x(一组值)和目标 y(另一组值),通过前向传播→计算损失→反向传播更新权重,**学习从输入到输出的映射**。
- B "记忆"术语不准确(是泛化不是记忆)
- C 描述不全面
- D 是字面双关干扰项(fit 的英文歧义)
**常用参数**:epochs、batch_size、validation_split。
|
|
### Q5 深度学习快速发展的原因?
**[多选]** 哪些是深度学习快速发展的原因?
A. 更好更快的计算能力
B. 神经网络是全新领域
C. 可以获得更多数据
D. 已取得重大应用进展(广告、语音、图像)
**答案:A、C、D**
**解析**:深度学习三大驱动力:
- **A ✅** 算力提升(GPU/TPU 并行)
- **C ✅** 数据量增加(大数据集如 ImageNet)
- **D ✅** 算法与应用突破(广告、语音、图像等)
- **B ❌** 神经网络研究始于 1940s(感知机 1957、反向传播 1986),是**复兴**而非全新领域
**里程碑**:2012 AlexNet 是深度学习爆发的标志性事件。
|
|
### DL 项目策略与部署知识点(Andrew Ng 方法论)
**1. 数据集划分原则**
| 数据规模 | 训练 / Dev / Test |
|---------|-------------------|
| 小数据(< 100 万) | 60 / 20 /20(或 70/30) |
| **大数据(> 100 万)** | **98 / 1 / 1**(或 95/2.5/2.5) |
大数据集应绝大部分用于训练,Dev/Test 只需足够获得可靠性能估计(25 万样本已足够,再多无显著提升)。
**分布原则**(Andrew Ng):
- **训练集可以包含多种分布**的数据(提升泛化)
- **Dev/Test 必须反映真实部署场景**的分布
- 训练分布 ≠ Dev/Test 分布是**允许且常见**的
- 添加更多样化数据通常**有帮助**而非有害
**2. 优化指标 vs 满意指标**
| 类型 | 含义 | 数量 | 示例 |
|------|------|------|------|
| **优化指标(Optimizing)** | 要最大化/最小化的主目标 | **只有 1 个** | 准确度 |
| **满意指标(Satisficing)** | 需达到阈值的约束 | 可多个 | 运行时间 < 100ms、内存 < 500MB |
实践:先用满意指标筛选候选,再用优化指标选最优。
**3. 上限分析(Ceiling Analysis)**
逐步将流水线各模块替换为**真值(Ground Truth)**,观察整体性能提升幅度:
- 找出**瓶颈模块**(提到真值后提升最大的)
- 识别**不值得优化**的模块(提到真值也无助整体)
- 是诊断方法,**不是**数据获取方法
- **不用于**诊断偏差/方差(那是另一种分析)
**4. 训练 vs 推断**
| 方面 | 训练 | 推断 |
|------|------|------|
| 硬件 | 通常 GPU | **CPU 也可**(模型保存的是权重,与硬件无关) |
| 计算 | 前向 + 反向 + 优化器 | 仅前向 |
| 显存 | 影响模型复杂度和 batch size | 影响推理 batch |
**量化压缩**:float32 → float16 参数量减半。
**5. 迁移学习**
复用从海量数据(如 ImageNet)学到的通用低中层特征(边缘、纹理、形状),这些特征小数据集无法学到。
**步骤**:移除原分类头 → 加新输出层(指定目标类数)→ 冻结特征层 → 微调。
|
|
### Q1 不应将分布不同的数据加入训练集?
**[判断]** 不应将分布不同的"公民数据"加入训练集,因为这会导致训练/Dev/Test 分布不同从而损害性能。
**答案:错 ✗**
**解析**:根据 Andrew Ng 的数据分布原则:
- **训练集可以包含多种分布**的数据以提升泛化
- 关键是 **Dev/Test 必须反映真实部署场景**的分布
- 添加更多样化的数据通常**有帮助**而非有害
- Dev/Test 本身不变,评估仍有效
**关键**:训练分布 ≠ Dev/Test 分布是**允许且常见**的。
|
|
### Q2 优化指标与满意指标如何划分?
**[单选]** 根据城市要求(准确度、运行时间、内存大小),下列哪项正确?
A. 准确度是优化指标;运行时间和内存是满意指标
B. 准确度是满意;运行时间和内存是优化
C. 三者都是优化指标
D. 三者都是满意指标
**答案:A**
**解析**:
- **优化指标**(要最大化的主目标)通常只有 **1 个**——此处为准确度
- **满意指标**(需达阈值的约束)——运行时间 < 100ms、内存 < 500MB
实践:先用满意指标筛选候选,再用优化指标选最优。多目标同时优化会冲突无法决策。
|
|
### Q3 大数据集如何划分训练/Dev/Test?
**[单选]** 1000 万样本的数据集,训练/Dev/Test 集如何划分最优?
A. 333 万 / 333 万 / 333 万
B. 950 万 / 25 万 / 25 万
C. 600 万 / 300 万 / 100 万
D. 600 万 / 100 万 / 300 万
**答案:B**
**解析**:大数据集应将**绝大部分用于训练**(95%-98%),Dev/Test 只需足够获得可靠性能估计(25 万样本已足够,再多无显著提升)。
- A ❌ 训练太少
- C ❌ Dev 集过大浪费
- D ❌ 测试集过大浪费
**经验**:小数据(< 100 万)60/20/20;大数据(> 100 万)98/1/1。
|
|
### Q4 超参数只在项目开始调一次?
**[判断]** 找超参数很耗时,应在项目开始调一次找到非常好的值,之后不必再调。
**答案:错 ✗**
**解析**:超参数调整是**贯穿项目的持续迭代**过程,不是一次性任务。
随着数据量增加、模型架构改变、对问题理解加深、数据分布漂移,最优超参数会变化(如数据增 10 倍后学习率需降低)。应**定期重新评估和微调**。
**策略**:粗到精搜索、持续监控、记录历史。
|
|
### Q5 上限分析有什么好处?
**[多选]** 进行上限分析(Ceiling Analysis)有什么好处?
A. 提供额外训练数据的方法
B. 分析流水线哪部分对整体提升最大
C. 知道某模块是否值得优化(即使提到 100% 也无助整体)
D. 不会帮分析哪部分是高偏差/高方差
**答案:B、C、D**
**解析**:上限分析通过逐步将各模块替换为**真值**,观察整体性能提升幅度:
- **B ✅** 找出瓶颈模块(对整体提升最大的)
- **C ✅** 识别不值得优化的模块(提到真值也无助整体)
- **D ✅(陈述正确)** 上限分析不用于诊断偏差/方差问题
- **A ❌** 上限分析是**诊断方法**,不是数据获取方法
**对比**:偏差-方差分析诊断单模型拟合问题,与上限分析互补。
|
|
### Q6 训练与推断的说法哪个不正确?
**[单选]** 关于深度神经网络训练和推断,下列哪项**不正确**?(选错的)
A. 数据分组部署到多 GPU 能提高训练速度
B. TensorFlow 用 GPU 训练的模型,推断时也必须在 GPU 上运行
C. 用 float16 代替 float32 可压缩模型大小
D. GPU 显存大小对模型复杂度和 batch size 有不可忽视影响
**答案:B**
**解析**:**B 错(本题答案)**:模型保存的是权重数值(与硬件无关),推理只需前向传播不需反向传播/优化器状态,**完全可在 CPU 上运行**。
- A ✅ 数据并行(多 GPU 训练)
- C ✅ 量化压缩(float32→float16 参数量减半)
- D ✅ 显存是硬约束
**实践**:训练 GPU + 推理 CPU 是边缘部署的常见组合。
|
|
### Q7 迁移学习如何改分类数 & 为何有用?
**[单选,共 2 题]**
- **Q1**:迁移学习如何更改模型可分类数量(原 1000 类 → 只处理 2 类)?
- **Q2**:为什么迁移学习有用?
**Q1 选项**:A. 忽略高于本类的类别 B. 把多余类权重设 0 C. 在网络底部加 DNN 时用目标类数指定输出层 D. 用 dropout 消除不必要类
**Q2 选项**:A. 可用原训练集所有数据 B. 可用原验证集所有数据 C. 可用从大型数据集学到的、自己无法获得的特征 D. 可用大型数据集的验证
**答案**:**Q1:C**;**Q2:C**
**解析**:
- **Q1 C ✅** 标准流程:移除原输出层(1000 类),添加新输出层 `Dense(目标类数=2)`,冻结/微调预训练层后训练新层。A/B/D 都没正确改架构
- **Q2 C ✅** 迁移学习的核心价值是**复用从海量数据(如 ImageNet)学到的通用低中层特征**(边缘、纹理、形状),这些特征小数据集无法学到。获得的是**特征**不是原始数据
**步骤**:移除分类头 → 加新头 → 冻结特征层 → 微调。
|
|
### 深度强化学习知识点
**1. RL 两大范式**
| 范式 | 定义 | 样本利用 | 代表算法 |
|------|------|---------|---------|
| **On-policy** | 学习策略 = 执行策略 | 用完即弃,效率低 | SARSA、PPO、A3C |
| **Off-policy** | 学习策略 ≠ 执行策略 | 可复用历史样本 | Q-learning、DQN、DDPG |
**本质区别**:更新目标所用的样本是否来自当前正在执行的策略。
- Off-policy 能与**经验回放**结合提高样本效率,但训练可能不稳定
- On-policy 样本匹配当前策略、更稳定,但样本效率低
- On-policy 若要复用旧样本需借助**重要性采样**(如 PPO 的比率 `r_t(θ) = π_θ/π_θ_old`)
**2. Q-learning vs SARSA**
| 算法 | 策略类型 | TD 目标 | 风格 |
|------|---------|---------|------|
| **Q-learning** | **Off-policy** | `r + γ·max Q(s',a')` | **激进**(用最优估计) |
| **SARSA** | **On-policy** | `r + γ·Q(s',a')` | **保守**(用实际执行) |
**关键差异**:Q-learning 中 `a'` **仅参与 max 计算不实际执行**;SARSA 必须先确定并执行 `a'` 再更新。
**口诀**:Q-learning 用 max、off-policy、激进,适合安全环境;SARSA 用实际、on-policy、保守,适合危险环境。
**3. DQN 三大改进**
- **Double DQN**:解耦动作选择与价值评估(当前网络选动作、目标网络估值),减小过估计偏差
- **Dueling DQN**:分离状态值 V(s) 与优势 A(s,a),网络结构改进 `Q = V + A`
- **Prioritized Experience Replay**:优先级经验回放
DQN 用 CNN 提取高维像素特征,Atari 中堆叠连续 4 帧作为 state(捕获运动方向),网络输出**Q 值向量**(不是动作)。
**4. A3C(异步优势 Actor-Critic)**
- **多线程**在各自环境独立采样、异步更新全局网络
- 不同线程采用不同探索策略,打破样本相关性
- **无需经验回放**(并行采样天然去相关)
- **On-policy**
**5. 策略梯度算法**
直接学习/优化策略 `π(a|s;θ)`,目标为最大化期望回报。
| 算法 | 核心创新 |
|------|---------|
| **REINFORCE** | 最原始的蒙特卡洛策略梯度 |
| **TRPO** | 用 KL 置信域约束保证单调改进 |
| **PPO** | 裁剪目标函数简化 TRPO,稳定高效(当前最主流) |
**策略梯度定理**:`∇θ J(θ) = E[∇θ log π(a|s;θ) · G_t]`
**注意**:DuelingDQN 是 **Value-based**(学 Q 值用 argmax 选动作),**不是**策略梯度。
|
|
### Q1 简述 on-policy 与 off-policy 的区别
**[简答]** 简述 on-policy 与 off-policy 的区别,并各举一例。
**答案**:
- **On-policy**:学习策略 = 执行策略,用当前策略自身采样更新自身,样本用完即弃,收敛到执行策略。例:**SARSA、PPO、A3C**
- **Off-policy**:学习策略 ≠ 执行策略,可用其他策略(旧策略/经验回放)的样本更新目标策略,样本可重复利用,收敛到最优策略。例:**Q-learning、DQN、DDPG**
**本质**:更新目标所用样本是否来自当前正在执行的策略。
Off-policy 可与经验回放结合提高样本效率,但训练可能不稳定;On-policy 更稳定但样本效率低。
|
|
### Q2 SARSA 与 Q-learning 的区别?
**[多选]** Sarsa 与 Q-learning 的区别是?
A. Sarsa 是 off-policy,Q-learning 是 on-policy
B. Sarsa 是 on-policy,Q-learning 是 off-policy
C. Q-learning 更新时下一个动作并未执行,Sarsa 的下一个动作在更新时已确定
D. Q-learning 保守、Sarsa 贪婪勇敢
**答案:B、C**
**解析**:
- **B ✅** Sarsa 是 on-policy、Q-learning 是 off-policy
- **C ✅** Q-learning 仅用 max 计算 `a'` 并不执行;Sarsa 必须先确定并执行 `a'` 再更新
- A、D ❌ 都把两者属性**搞反**——实际 Sarsa **保守**、Q-learning **激进**
**更新时机差异**是 off/on-policy 的本质体现。
|
|
### Q3 Q-learning 的更新机制?
**[多选]** 在 Q-learning 中,以下说法正确的是?
A. 状态 s' 处计算的 Q(s',a') 对应动作 a' 并未真正执行,只用于更新当前 Q 值
B. 状态 s' 处计算 Q(s',a') 时同时也执行了 a'
C. 更新中 Q 的真实值为 `r + γ·max Q(s',a')`
D. 更新中 Q 的真实值为 Q(s,a)
**答案:A、C**
**解析**:
- **A ✅** 体现 off-policy 特性:`a'` 仅参与 max 计算,不实际执行
- **C ✅** TD 目标 `r + γ·max Q(s',a')` 是被逼近的真实值
- B ❌ `a'` 不执行
- D ❌ `Q(s,a)` 是当前**估计值**,是被更新的对象,非目标值
**TD 误差** = 目标值 − 当前估计 = `[r + γ·max Q(s',a')] − Q(s,a)`。
|
|
### Q4 关于 DQN 与 Double DQN?
**[多选,共 2 题]**
- **Q1**:关于 Double DQN 说法正确的是?
- **Q2**:关于 DQN 说法正确的是?
**Q1 选项**:A. Q 值目标值中的 max 操作会产生过估计 B. Double DQN 可以减小偏差 C. 目标函数与 DQN 完全相同 D. 引入了优势函数
**Q2 选项**:A. 网络用 CNN 或全连接提取图像特征 B. Atari 中将连续 4 帧作为一个 state C. 网络输出是动作 D. 网络输出是 Q 值
**答案**:**Q1:A、B**;**Q2:A、B、D**
**解析**:
- **Q1**:DQN 目标值 `r + γ·max Q` 中 max 会系统性偏向正噪声导致**过估计**(A 对);Double DQN 用当前网络选动作、目标网络估值,解耦选择与评估,**减小偏差**(B 对);目标函数与 DQN 不同(C 错);优势函数是 Dueling DQN(D 错)
- **Q2**:DQN 用 CNN 提取像素特征(A 对);堆叠 4 帧捕获时序(B 对);输出是 **Q 值向量**,动作由 argmax 选出(D 对、C 错)
**DQN 另一关键**:目标网络(定期同步)+ 经验回放池。
|
|
### Q5 关于 A3C 算法哪些正确?
**[多选]** 关于 A3C 算法说法正确的是?
A. 使用了多个线程,每个线程对应不同的探索方式
B. 需要使用经验池存储样本
C. A3C 是 off-policy 算法
D. A3C 是 on-policy 算法
**答案:A、D**
**解析**:
- **A ✅** A3C 用多线程在各自环境独立采样、异步更新全局网络,不同线程采用不同探索策略打破样本相关性
- **D ✅** 各线程用当前策略收集样本更新当前策略,属于 **on-policy**
- B ❌ **无需经验回放池**(并行采样天然去相关)
- C ❌ 是 on-policy 不是 off-policy
**同步版本**为 A2C;优势函数 `A(s,a) = Q(s,a) - V(s)` 用作 baseline 降低梯度方差。
|
|
### Q6 哪些算法属于策略梯度算法?
**[多选]** 以下哪种算法属于策略梯度算法?
A. DuelingDQN B. TRPO C. REINFORCE D. PPO
**答案:B、C、D**
**解析**:策略梯度方法直接学习/优化策略 `π(a|s;θ)`:
- **B ✅ TRPO**:用 KL 置信域约束保证单调改进
- **C ✅ REINFORCE**:最原始的蒙特卡洛策略梯度
- **D ✅ PPO**:裁剪目标函数简化 TRPO,稳定高效(当前最主流)
- **A ❌ DuelingDQN**:Value-based,将 `Q(s,a) = V(s) + A(s,a)` 改进网络结构,仍学 Q 值用 argmax 选动作,**非策略梯度**
**PPO-Clip 目标**:`L = E[min(r_t·A_t, clip(r_t, 1-ε, 1+ε)·A_t)]`。
|