模型选择
训练误差和泛化误差
- 训练误差:模型在训练数据上的误差
- 泛化误差:模型在新数据上的误差
例子:根据摸考成绩来预测未来考试分数在过去的考试中表现很好(训练误差)不代表未来考试一定会好(泛化误差)
- 学生A通过背书在摸考中拿到很好成绩
- 学生B知道答案后面的原因
验证数据集和测试数据集
- 验证数据集:一个用来评估模型好坏的数据集
例如拿出50%的训练数据
不要跟训练数据混在一起(常犯错误) - 测试数据集:只用一次的数据集。例如
未来的考试
我出价的房子的实际成交价
用在Kaggle私有排行榜中的数据集
K则交叉验证
-
在没有足够多数据时使用(这是常态)
-
算法:
-
将训练数据分割成K块
- For i = 1,…,K
- 使用第ⅰ块作为验证数据集,其余的作为训练数据
- 报告K个验证集误差的平均
- For i = 1,…,K
-
常用:K=5或10
过拟合和欠拟合

模型容量
- 拟合各种函数的能力
- 低容量的模型难以拟合训练数据
- 高容量的模型可以记住所有的训
练数据


数据复杂度 - 多个重要因素
- 样本个数
- 每个样本的元素个数
- 时间、空间结构
- 多样性
总结
- 模型容量需要匹配数据复杂度,否则可能导致欠拟合和过拟合
- 统计机器学习提供数学工具来衡量模型复杂度
- 实际中一般靠观察训练误差和验证误差
常见的过拟合处理方法
权重衰退
使用均方范数作为硬性限制
- 通过限制参数值的选择范围来控制模型容量
minl(w,b)s.t.∣∣w∣∣2≤θ\min l(w,b)\quad s.t.||w||^2\le\thetaminl(w,b)s.t.∣∣w∣∣2≤θ - 通常不限制偏移b(限不限制都差不多)
- 小的θ\thetaθ意味着更强的正则项
使用均方范数作为柔性限制
- 对每个θ\thetaθ,都可以找到λ\lambdaλ使得之前的目标函数等价于下面:
minl(w,b)+λ2∣∣w∣∣2\min l(w,b)+\frac\lambda 2||w||^2minl(w,b)+2λ∣∣w∣∣2 - 可以通过拉格朗日乘子证明
- 超参数λ\lambdaλ控制了正则项的重要程度
- λ=0\lambda=0λ=0:无作用
- λ→∞,w∗→0\lambda \rightarrow \infty,w^*\rightarrow0λ→∞,w∗→0

参数更新过程看权重衰退
- 计算梯度
∂∂w(l(w,b)+λ2∣∣w∣∣2))=∂l(w,b)∂w+λw\frac{\partial}{\partial w}(l(w,b)+\frac\lambda2||w||^2))=\frac{\partial l(w,b)}{\partial w}+\lambda w∂w∂(l(w,b)+2λ∣∣w∣∣2))=∂w∂l(w,b)+λw - 更新参数时使用梯度下降wt+1=wt−α∂l(w,b)∂wtw_{t+1}=w_t-\alpha\frac{\partial l(w,b)}{\partial w_t}wt+1=wt−α∂wt∂l(w,b):
wt+1=(1−αλ)wt−α∂l(w,b)∂wtw_{t+1}=(1-\alpha\lambda)w_t-\alpha\frac{\partial l(w,b)}{\partial w_t}wt+1=(1−αλ)wt−α∂wt∂l(w,b) - 通常情况下α∗λ\alpha*\lambdaα∗λ小于1的,因此wtw_twt乘以一个比1小的数,又减去一个正数,被称为权重衰退。
总结
- 权重衰退通过L2正则项使得模型参数不会过大,从而控制模型复杂度
- 正则项权重是控制模型复杂度的超参数
丢弃法(droput)
动机
- 一个好的模型需要对输入数据的扰动鲁棒
- 使用有噪音的数据等价于Tikhonov正则
- 丢弃法:在层之间加入噪音
无偏差的加入噪音
- 第对xxx加入噪音x′x^{'}x′,我们期望:
E(x′)=xE(x^{'})=xE(x′)=x - 丢弃法对于每个元素进行如下搅动:
xi′={0withprobablitypxi1−potherwisex_i^{'}=\left\{ \begin{array}{rcl} 0 & & {with \quad probablity\quad p}\\ \frac{x_i}{1-p} & & {otherwise} \end{array} \right.xi′={01−pxiwithprobablitypotherwise
其中E(xi′)=p∗0+(1−p)∗xi1−p=xiE(x_i^{'})=p*0+(1-p)*\frac{x_i}{1-p}=x_iE(xi′)=p∗0+(1−p)∗1−pxi=xi
丢弃法的使用
- 通常将丢弃法作用在隐藏全连接层的输出上

h=σ(W1x+b1)h=\sigma(W_1x+b_1)h=σ(W1x+b1)h′=dropout(h)h^{'}=dropout(h)h′=dropout(h)o=W2h′+b2o=W_2h^{'}+b_2o=W2h′+b2y=softmax(o)y=softmax(o)y=softmax(o)

- 丢弃法只在训练过程中使用,验证、推理过程不使用
总结
- 丢弃法将一些输出项随机置0来控制模型复杂度
- 常作用在多层感知机的隐藏层输出上
- 丢弃概率是控制模型复杂度的超参数
数值的稳定性
当神经网络深度较深时,极容易出现数值不稳定的情况。
神经网络的梯度
- 考虑如下有ddd层的神经网络
ht=ft(ht−2)andy=l⋅fd⋅...⋅f1(x)h^t=f_t(h^{t-2})\quad and\quad y=l\cdot f_d\cdot ...\cdot f_1(x)ht=ft(ht−2)andy=l⋅fd⋅...⋅f1(x) - 计算损失lll关于参数WtW_tWt的梯度
∂l∂Wt=∂l∂hd∂hd∂hd−1...∂ht+1∂ht∂ht∂Wt\frac{\partial l}{\partial W^t}=\frac{\partial l}{\partial h^d}\frac{\partial h^d}{\partial h^{d-1}}...\frac{\partial h^{t+1}}{\partial h^t}\frac{\partial h^t}{\partial W^t}∂Wt∂l=∂hd∂l∂hd−1∂hd...∂ht∂ht+1∂Wt∂ht
这里面都是矩阵的乘法,计算量非常大
数值稳定性常见的两个问题
- 梯度消失:1.5100≈4×10171.5^{100}\approx4\times10^{17}1.5100≈4×1017
- 梯度爆炸:0.8100≈2×10−100.8^{100}\approx2\times10^{-10}0.8100≈2×10−10
举例说明
- 假设有以下MLP(为了简单省略偏置项)
ft(ht−1)=σ(Wtht−1)其中σ是激活函数f_t(h^{t-1})=\sigma(W^th^{t-1})\quad其中\sigma是激活函数ft(ht−1)=σ(Wtht−1)其中σ是激活函数∂ht∂ht−1=diag(σ′(Wtht−1))(Wt)T\frac{\partial h^t}{\partial h^{t-1}}=diag(\sigma^{'}(W^th^{t-1}))(W^t)^T∂ht−1∂ht=diag(σ′(Wtht−1))(Wt)T∏i=td−1∂hi+1∂hi=∏i=td−1diag(σ′(Wihi−1))(Wi)T\prod\limits_{i=t}^{d-1}\frac{\partial h^{i+1}}{\partial h^i}=\prod\limits_{i=t}^{d-1}diag(\sigma^{'}(W^ih^{i-1}))(W^i)^Ti=t∏d−1∂hi∂hi+1=i=t∏d−1diag(σ′(Wihi−1))(Wi)T
①梯度爆炸
- 使用Relu作为激活函数
σ(x)=max(0,x)andσ′(x)={1x>00otherwise\sigma(x)=\max(0,x)\quad and\quad\sigma^{'}(x)=\left\{ \begin{array}{rcl} 1 & & {x>0}\\ 0 & & {otherwise} \end{array} \right.σ(x)=max(0,x)andσ′(x)={10x>0otherwise - ∏i=td−1∂hi+1∂hi=∏i=td−1diag(σ′(Wihi−1))(Wi)T\prod\limits_{i=t}^{d-1}\frac{\partial h^{i+1}}{\partial h^i}=\prod\limits_{i=t}^{d-1}diag(\sigma^{'}(W^ih^{i-1}))(W^i)^Ti=t∏d−1∂hi∂hi+1=i=t∏d−1diag(σ′(Wihi−1))(Wi)T的元素主要来自于∏i=td−1(Wi)T\prod\limits_{i=t}^{d-1}(W^i)^Ti=t∏d−1(Wi)T
- 如果d−td-td−t很大,同时不对参数WIW^IWI的值进行限制,那么最后结果将会很大,造成梯度爆炸
梯度爆炸的问题
- 值超出值域(infinity)
- 对于16位浮点数尤为严重(数值区间6e−5−6e46e^{-5}-6e^46e−5−6e4)
- 对学习率敏感
- 如果学习率太大>大参数值->更大的梯度
- 如果学习率太小->训练无进展
- 我们可能需要在训练过程不断调整学习率
②梯度消失
-
使用Sigmoid作为激活函数
σ′(x)=σ(x)(1−σ(x))\sigma^{'}(x)=\sigma(x)(1-\sigma(x))σ′(x)=σ(x)(1−σ(x)) -
其中0<σ(x)<10<\sigma(x)<10<σ(x)<1,因此连乘会使得数值越来越小,最后导致梯度消失
梯度消失的问题
- 梯度值变成0
- 对16位浮点数尤为严重
- 训练没有进展
- 不管如何选择学习率
- 对于底部层尤为严重
- 仅仅顶部层训练的较好
- 无法让神经网络更深

本文探讨了训练误差和泛化误差的概念,强调了模型选择的重要性。介绍了验证数据集和测试数据集的使用,以及K折交叉验证的方法。针对过拟合和欠拟合,解释了模型容量与数据复杂度的关系,并提出了权重衰退和丢弃法作为正则化手段。权重衰退通过L2正则项限制参数大小,丢弃法则通过随机丢弃神经元来控制复杂度。最后,讨论了数值稳定性问题,特别是深度学习中梯度消失和梯度爆炸的现象及其影响。
2577

被折叠的 条评论
为什么被折叠?



