数据
数据复杂度
- 样本个数
- 特征维度
- 时间、空间结构
- 多样性
- 噪声水平
数据划分
- 训练集: 用于训练模型
- 验证集: 用于模型选择、调参和早停
- 测试集: 用于评估模型的泛化能力
K-折交叉验证
将训练集划分为 K 个子集
- for i = 1, 2, …, K:
- 将第 i 个子集作为验证集,其余 K-1 个子集作为训练集
- 训练模型并评估性能
常用 k = 5 或 10
拟合效果
数据与模型
| 简单数据 | 复杂数据 |
|---|
| 简单模型 | 正常 | 欠拟合 |
| 复杂模型 | 过拟合 | 正常 |
VC 维数
对于一个分类模型,其 VC 维数等于一个最大数据集的大小,使得该数据集可以被模型完全拟合。
评估指标
- 训练误差: 模型在训练集上的误差
- 泛化误差: 模型在训练集以外数据上的误差
良好的模型应当满足
权重衰退
概念
在损失函数中加入L2范数惩罚项,在训练过程中让模型偏好较小的权重值。抑制模型过拟合、提高泛化能力
L2范数惩罚项
也称均方范数
Ω(θ)=21i=1∑nθi2
记为 Ω(θ)=21∣∣θ∣∣22
损失函数
l(w)=l0(w)+2η∣∣w∣∣22
其中 η 为正则化系数,控制惩罚项的权重
计算梯度
δwδl(w)=δwδl0(w)+2ηδwδ∣∣w∣∣22=δwδl0(w)+ηw
梯度下降更新后的参数
wt+1=wt−α(δwδl(w))=wt−α(δwδl0(w)+ηw)=(1−αη)wt−αδwδl0(w)
其中通常 αη<1,因此 (1−αη)<1,即每次迭代后权重都会衰减。
几何理解
在两个曲面(损失函数曲面、惩罚项曲面)的合成曲面上梯度下降,最终找到损失和惩罚项的平衡点

丢弃法
概念
在训练过程中随机丢弃一部分神经元,使得模型不依赖于某些特定的神经元,从而提高模型的泛化能力。
丢弃
对每个元素进行如下扰动
xi′=⎩⎨⎧0,1−pxi,以概率 p以概率 1−p
[!NOTE]
让一部分权重退出,另一部分权重放大,训练“子神经网络”,避免模型依赖某一两个突出神经元。
不改变期望
E[xi′]=p⋅0+(1−p)⋅1−pxi=xi
数值稳定性
梯度问题
损失 l 对权重 Wt 的梯度为
δWtδl=δhdδl⋅δhd−1δhd⋯δhtδht+1⋅δWtδht
hi 为向量,故 δhiδhi+1 为矩阵,则计算梯度时做了 d−t 次矩阵乘法
- 梯度爆炸: 1.5100≈4.0×1017,梯度过大,权重更新过大,模型不收敛
- 梯度消失: 0.5100≈7.9×10−31,梯度过小,权重更新过小,模型无法学习
MLP 为例
省略偏置,每一层与上一层的关系为
ht=σ(Wtht−1)
计算对上一层的梯度
δht−1δht=δht−1δσ(Wtht−1)=diag(σ′(Wtht−1))⋅(Wt)T
- diag: σ 激活函数按元素,求导是对角阵(跨元素偏导为 0)
- (Wt)T: Wtht−1 对 ht−1 逐项偏导的结果
梯度逐层累乘
gradt=∏i=t+1dδhi−1δhi=∏i=t+1ddiag(σ′(Wihi−1))⋅(Wi)T
ReLU 激活
σ(x)=max(x,0)
{1,0,x>0x≤0
diag(σ′(Wihi−1)) 是只含 0、1 的对角阵
若 d−t 很大,且 Wi 的元素 >1,则 gradt 很大,梯度爆炸
Sigmoid 激活
σ(x)=1+e−x1
σ′(x)=σ(x)(1−σ(x))
x 较大或较小时,都会导致 σ′(x) 接近 0
若 d−t 很大,则 gradt 很小,梯度消失
权重初始化
让初始权重的数值在一个合理范围中
- 将每层的输入、输出和梯度看作随机变量
- 让它们的均值、方差保持一致
MLP 为例
做如下假设
- wi,jt 是独立同分布,则 E[wi,jt]=0,D[wi,jt]=γt(常数)
- hit−1 独立于 wi,jt
- 暂不考虑激活函数,ht=Wtht−1,则
E[hit]=E[j=1∑nt−1wi,jthjt−1]=j=1∑nt−1E[wi,jt]E[hjt−1]=0
正向方差
D[hit]=E[(hit)2]−(E[hit])2=E[(j=1∑nt−1wi,jthjt−1)2]=Ej=1∑nt−1(wi,jt)2(hjt−1)2+j1=j2∑wi,j1thj1t−1wi,j2thj2t−1=j=1∑nt−1E[(wi,jt)2]E[(hjt−1)2]=j=1∑nt−1D[wi,jt]D[hjt−1]=nt−1γtD[hjt−1]
二者不能同时满足,Xavier 初始化取平均值,使 γt=nt−1+nt2
- 正态分布 N(0,γt)=N0,nt−1+nt2
- 均匀分布 U(−3γt,3γt)=U−nt−1+nt6,nt−1+nt6
激活函数
稳定性条件
假设线性的激活函数 σ(x)=αx+β,
并且有 h′=Wtht−1,ht=σ(h′),则
E[hit]=αE[hi′]+β=β
D[hit]=E[(hit)2]−(E[hit])2=E[(αhi′+β)2]−β2=α2E[(hi′)2]+2αβE[hi′]+β2−β2=α2D[hi′]
希望激活前后均值为0、方差相等,需要 β=0,α=1,即 σ(x)=x。
非线性激活函数
常用的激活函数泰勒展开
relu(x)=0+x,for x≥0tanh(x)=0+x−3x3+O(x5)sigmoid(x)=21+4x−48x3+O(x5)
-
relu 和 tanh 在原点附近近似 σ(x)=x,满足稳定性条件
-
sigmoid 在原点附近近似 σ(x)=21+4x,需要调整为 4×sigmoid(x)−2 才能满足稳定性条件