多层感知机
作用: 在输入层与输出层之间添加隐藏层,并通过激活函数后输出,使网络可以学习复杂的非线性映射
假如第一层为:y1=W1x+b1第二层为:y2=W2y1+b2在没有激活函数的情况下:y2=(W2W1)x+(W2b1+b2)仍然是线性变换,所以引入非线性的激活函数,使其可以有更好的表现
多层感知机的简洁实现
导入torch
与之前一样,创建神经网络
这里增加了一个Linear全连接层,和ReLU激活函数
与之前使用SoftMax进行图像分类相同的实现
模型选择、欠拟合和过拟合
统计学习理论
风险是一个期望值,表示模型在特定任务中的预测误差
真实风险
是指在整个数据分布上的期望损失,无法直接计算
R(f)=EP(x,y)l(f(x),y)
其中
- l(f(x),y)为损失函数
- P(x,y)是真实的分布,无法直接计算
经验风险
是指在训练数据集上的平均损失,可以直接计算
用经验风险来近似真实风险,通过优化经验风险来优化模型
Remp=n1i∑nl(f(xi),yi)
结构风险
是指在经验风险的基础上添加正则项
用于控制模型的复杂度,提高正则化强度以降低模型复杂度,反之增加复杂度
Rstruct(f)=Remp(f)+λΩ(f)
其中
- λ为正则化强度
- Ω(f)为正则化项,例如L2范数
模型选择
验证集
原则上,在确定超参数之前不应使用测试集,否则可能导致测试集过拟合,并且难以发现.所以应该将数据分为三份:训练集,验证集,测试集;但实际上,由于数据过少,验证集和测试集的界限较为模糊.
K折交叉验证(K-fold Cross Validation)
在数据较少时,可以使用.
将数据分为训练集和测试集,然后将训练集分为K份;每次选择1份作为验证集,其余K-1份作为训练集,重复K次;将结果取平均来估计训练和验证误差
过拟合
是指模型在训练数据上表现很好,但在测试数据上表现很差, 因为模型学习了数据中的噪点或细节,导致无法有效的泛化到未见过的数据上
用于对抗过拟合的方法为正则化
模型复杂度
越复杂的模型,越容易过拟合.
例如在高阶多项式函数的例子中:
y=i=0∑dxiwi
当数据样本包含了x的不同值时,令多项式阶数与样本数相同,函数可以完美拟合训练集.
数据集大小
数据越少,越容易过拟合
欠拟合
是指模型在训练数据和测试数据中表现都不好,可能是因为模型过于简单,特征选择不当,训练时间过短,超参数为调整好等原因导致的
权重衰减
权重衰减是最广泛使用的的正则化技术之一,通常称为L2正则化
损失函数:
L(w,b)=21i=0∑n(wxi+b−yi^)2
为了惩罚权重w的大小,权重衰减在损失函数中添加了平方范数^[L2范数的平方]作为正则项
L(w,b)=21i=0∑n(wxi+b−yi^)2+2λ∥w∥2
其中λ用于控制正则化强度
小批量随机梯度下降:
w←w−∣β∣ηi∈β∑δwl(w,b)w←w−∣β∣ηi∈β∑x(i)(wTx(i)+b−y(i))b←b−∣β∣ηi∈β∑δbl(w,b)b←b−∣β∣ηi∈β∑(wTx(i)+b−y(i))
在损失函数这里加入正则项2λ∣∣w∣∣2,并简化:
w←w−∣β∣ηi∈β∑δw(l(w,b)+2λ∣∣w∣∣2)w←w−∣β∣ηi∈β∑[x(i)(wTx(i)+b−y(i))+2λ(2w)]w←(1−ηλ)w−∣β∣ηi∈β∑[x(i)(wTx(i)+b−y(i))
权重衰减的简洁实现
暂退法(Dropout)
在计算后续层之前,向网络的每一层添加噪点,
在训练过程中,暂退法会根据一定概率p丢弃一些单元(将值设为0),达到降低模型复杂度,提高泛化能力的目的.
暂退法通过缩放被保留神经元的输出来使期望不变
h′={0,1−ph,p1−p
这里期望E(output)=(1−p)1−ph=h
由于测试阶段没有使用dropout,会通过对输出乘以1−p1来使测试阶段的期望输出与训练阶段一致
暂退法的实现
只需在神经网络中添加Dropout层,该函数的唯一参数为概率p
前向传播|反向传播|计算图
前向传播
前向传播计算图
反向传播
训练神经网络