一、神经网络基础
-
本质
- 嵌套向量函数:y=fn(⋯f2(f1(x))y = f_n(\cdots f_2(f_1(\mathbf{x}))y=fn(⋯f2(f1(x))
- 激活函数:必须使用非线性函数(如ReLU、Sigmoid),否则多层网络退化为单层线性变换。
-
模型数学表达式
模型类型 数学表达式 关键说明 MLP y=f(Wx+b)\mathbf{y} = f(\mathbf{Wx} + \mathbf{b})y=f(Wx+b) W\mathbf{W}W为权重矩阵 卷积 y=f(k∗x+b)\mathbf{y} = f(\mathbf{k} \ast \mathbf{x} + \mathbf{b})y=f(k∗x+b) ∗\ast∗ 表示卷积运算 RNN Ht=f(XtWxh+Ht−1Whh+bh)\mathbf{H}_t = f(\mathbf{X}_t\mathbf{W}_{xh} + \mathbf{H}_{t-1}\mathbf{W}_{hh} + \mathbf{b}_h)Ht=f(XtWxh+Ht−1Whh+bh)
Yt=f(HtWhq+bq)\mathbf{Y}_t = f(\mathbf{H}_t\mathbf{W}_{hq} + \mathbf{b}_q)Yt=f(HtWhq+bq)Whh\mathbf{W}_{hh}Whh为循环权重 -
深度学习的优势
- 多层结构避免单层过宽导致的过拟合(Overfitting)
- 特征提取层级化:浅层学习简单特征 → 深层组合复杂特征
- 注:最优深度/宽度无严格证明,工程实践依赖实验调参
-
可解释性
授人与鱼不如授人与渔,深度学习的“渔”是人为给出的,是可解释的,但是具体的“鱼”是很难解释的
- 结构可解释:模型架构与计算机制明确(“渔”)
- 参数不可解释:训练所得参数的黑盒特性(“鱼”)
二、损失函数与优化
-
损失函数设计
- 核心要求:可导性、凹凸性(避免如绝对值损失)
- 交叉熵损失:专用于分类任务,仅关注正确类的概率(因one-hot编码中错误类权重为0)
-
优化算法
- 梯度下降:xt=xt−1−α∇f(xt−1)\mathbf{x}_t = \mathbf{x}_{t-1} - \alpha \nabla f(\mathbf{x}_{t-1})xt=xt−1−α∇f(xt−1)
- 随机梯度下降(SGD):小批量采样
- 动量法:引入惯性抑制震荡
- Adam:自适应学习率(推荐默认使用)
- 凸优化条件:
- 损失函数为凸函数
- 定义域为凸集
- 仅限线性回归、Softmax回归等简单模型
- 梯度下降:xt=xt−1−α∇f(xt−1)\mathbf{x}_t = \mathbf{x}_{t-1} - \alpha \nabla f(\mathbf{x}_{t-1})xt=xt−1−α∇f(xt−1)
三、训练与评估
-
数据划分
数据集 用途 占比 训练集 模型参数学习 ~70% 验证集 超参数调优(或K折交叉验证) ~15% 测试集 最终性能评估 ~15% -
模型复杂度
- 过拟合:模型复杂度过高 → 训练集好、测试集差
- 欠拟合:模型复杂度过低 → 训练/测试集均差
- 衡量指标:参数量、VC维(理论难计算)、超参数范围
四、正则化技术
-
权重衰减(L1/L2)
- L2正则化:loss′=loss+λ2∥w∥2\text{loss}' = \text{loss} + \frac{\lambda}{2} \|\mathbf{w}\|^2loss′=loss+2λ∥w∥2
- 效果:λ→∞⇒w→0\lambda \to \infty \Rightarrow \mathbf{w} \to 0λ→∞⇒w→0(压缩参数范围)
-
Dropout
- 训练时随机丢弃神经元(概率ppp为超参)
- 测试时使用完整网络(输出乘1−p1-p1−p保持期望不变)
-
数据增强
- 加噪声/变换(如旋转图像)提升鲁棒性
五、数值稳定性问题
问题 | 原因 | 解决方案 |
---|---|---|
梯度爆炸 | 深层网络梯度连乘(如ReLU) | 梯度裁剪(Clamp) |
梯度消失 | 梯度连乘值过小(如Sigmoid) | 改用LSTM/GRU/残差结构 |
六、卷积神经网络(CNN)
-
设计原则
- 小卷积核多层堆叠 > 大卷积核少层(计算高效且效果近似)
- 通道数调整:
- 增加通道:提取更多特征(通常伴随空间下采样)
- 减少通道:融合特征(如1×1卷积等效全连接层)
-
输出尺寸公式
输出宽=⌊W−K+2PS⌋+1 \text{输出宽} = \left\lfloor \frac{W - K + 2P}{S} \right\rfloor + 1 输出宽=⌊SW−K+2P⌋+1- WWW: 输入尺寸, KKK: 核大小, PPP: Padding, SSS: Stride
-
池化层作用
- 提升平移不变性(最大池化优先)
- 位置:通常置于卷积层后
七、循环神经网络(RNN)
-
序列建模基础
- 概率分解:P(x1,…,xT)=∏t=1TP(xt∣x1,…,xt−1)P(x_1,\dots,x_T) = \prod_{t=1}^T P(x_t \mid x_1,\dots,x_{t-1})P(x1,…,xT)=∏t=1TP(xt∣x1,…,xt−1)
- 马尔科夫假设:P(xt∣x1,…,xt−1)≈P(xt∣xt−τ,…,xt−1)P(x_t \mid x_1,\dots,x_{t-1}) \approx P(x_t \mid x_{t-\tau},\dots,x_{t-1})P(xt∣x1,…,xt−1)≈P(xt∣xt−τ,…,xt−1)
-
RNN变体
模型 核心机制 优势 GRU 更新门(保留历史信息) + 重置门(控制新信息组合) 双门控细粒度控制信息流 LSTM 输入门/遗忘门/输出门 + 细胞状态(长期记忆) 解决长程依赖问题 双向RNN 并行前向/反向RNN → Ht=[Ht→;Ht←]H_t = [\overrightarrow{H_t}; \overleftarrow{H_t}]Ht=[Ht;Ht] 利用未来信息(如填空任务) -
文本处理流程
八、注意力机制与Transformer
-
注意力原理
- QKV模型:
- Query:当前关注点
- Key:待匹配信息
- Value:信息内容
- 计算流程:
分数 = Softmax( Similarity(Q, K) / √d_k ) 输出 = 分数 × Value
- QKV模型:
-
自注意力(Self-Attention)
- 序列内部特征关联挖掘(Q=K=V=输入Q=K=V=\text{输入}Q=K=V=输入)
- 复杂度:O(n2⋅d)O(n^2 \cdot d)O(n2⋅d)(nnn为序列长,ddd为特征维)
-
Transformer核心
- 编码器:
- N×(多头注意力 + 前馈网络 + LayerNorm)N \times \text{(多头注意力 + 前馈网络 + LayerNorm)}N×(多头注意力 + 前馈网络 + LayerNorm)
- 解码器:
- 带掩码的多头注意力(防止未来信息泄露)
- 编码器-解码器注意力层(Q来自解码器,K/V来自编码器)
- LayerNorm vs BatchNorm:
类型 正则化维度 适用场景 LayerNorm 样本内特征 变长序列(如NLP) BatchNorm 跨样本同特征 固定长度输入(如图像)
- 编码器:
-
BERT
- 基于Transformer编码器
- 预训练任务:掩码语言模型(Masked LM)
- 迁移学习:冻结主干网络,微调输出层
九、计算图与自动微分
-
计算图本质
- 树形结构:叶节点(输入变量)→ 中间节点(运算)→ 根节点(输出)
- 反向传播(BP):沿路径链式求导
-
PyTorch控制
操作 效果 tensor.detach()
断开与计算图的关联 requires_grad=False
不跟踪梯度(视为常量)