【模型选择 + 过拟合和欠拟合】

模型选择

训练误差和泛化误差

  • 训练误差:模型在训练数据上的误差
  • 泛化误差:模型在新数据上的误差

例子:根据摸考成绩来预测未来考试分数在过去的考试中表现很好(训练误差)不代表未来考试一定会好(泛化误差)

  • 学生A通过背书在摸考中拿到很好成绩
  • 学生B知道答案后面的原因

验证数据集和测试数据集

  • 验证数据集:一个用来评估模型好坏的数据集
    例如拿出50%的训练数据
    不要跟训练数据混在一起(常犯错误)
  • 测试数据集:只用一次的数据集。例如
    未来的考试
    我出价的房子的实际成交价
    用在Kaggle私有排行榜中的数据集

K则交叉验证

  • 在没有足够多数据时使用(这是常态)

  • 算法:

  • 将训练数据分割成K块

    • For i = 1,…,K
      • 使用第ⅰ块作为验证数据集,其余的作为训练数据
    • 报告K个验证集误差的平均
  • 常用:K=5或10

过拟合和欠拟合

在这里插入图片描述
模型容量

  • 拟合各种函数的能力
  • 低容量的模型难以拟合训练数据
  • 高容量的模型可以记住所有的训
    练数据
    在这里插入图片描述
    在这里插入图片描述
    数据复杂度
  • 多个重要因素
    • 样本个数
    • 每个样本的元素个数
    • 时间、空间结构
    • 多样性

总结

  • 模型容量需要匹配数据复杂度,否则可能导致欠拟合和过拟合
  • 统计机器学习提供数学工具来衡量模型复杂度
  • 实际中一般靠观察训练误差和验证误差

常见的过拟合处理方法

权重衰退

使用均方范数作为硬性限制

  • 通过限制参数值的选择范围来控制模型容量
    min ⁡ l ( w , b ) s . t . ∣ ∣ w ∣ ∣ 2 ≤ θ \min l(w,b)\quad s.t.||w||^2\le\theta minl(w,b)s.t.w2θ
  • 通常不限制偏移b(限不限制都差不多)
  • 小的 θ \theta θ意味着更强的正则项

使用均方范数作为柔性限制

  • 对每个 θ \theta θ,都可以找到 λ \lambda λ使得之前的目标函数等价于下面:
    min ⁡ l ( w , b ) + λ 2 ∣ ∣ w ∣ ∣ 2 \min l(w,b)+\frac\lambda 2||w||^2 minl(w,b)+2λw2
  • 可以通过拉格朗日乘子证明
  • 超参数 λ \lambda λ控制了正则项的重要程度
    • λ = 0 \lambda=0 λ=0:无作用
    • λ → ∞ , w ∗ → 0 \lambda \rightarrow \infty,w^*\rightarrow0 λ,w0

在这里插入图片描述
参数更新过程看权重衰退

  • 计算梯度
    ∂ ∂ 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λw2))=wl(w,b)+λw
  • 更新参数时使用梯度下降 w t + 1 = w t − α ∂ l ( w , b ) ∂ w t w_{t+1}=w_t-\alpha\frac{\partial l(w,b)}{\partial w_t} wt+1=wtαwtl(w,b)
    w t + 1 = ( 1 − α λ ) w t − α ∂ l ( w , b ) ∂ w t w_{t+1}=(1-\alpha\lambda)w_t-\alpha\frac{\partial l(w,b)}{\partial w_t} wt+1=(1αλ)wtαwtl(w,b)
  • 通常情况下 α ∗ λ \alpha*\lambda αλ小于1的,因此 w t w_t wt乘以一个比1小的数,又减去一个正数,被称为权重衰退。

总结

  • 权重衰退通过L2正则项使得模型参数不会过大,从而控制模型复杂度
  • 正则项权重是控制模型复杂度的超参数

丢弃法(droput)

动机

  • 一个好的模型需要对输入数据的扰动鲁棒
    • 使用有噪音的数据等价于Tikhonov正则
    • 丢弃法:在层之间加入噪音

无偏差的加入噪音

  • 第对 x x x加入噪音 x ′ x^{'} x,我们期望:
    E ( x ′ ) = x E(x^{'})=x E(x)=x
  • 丢弃法对于每个元素进行如下搅动:
    x i ′ = { 0 w i t h p r o b a b l i t y p x i 1 − p o t h e r w i s e x_i^{'}=\left\{ \begin{array}{rcl} 0 & & {with \quad probablity\quad p}\\ \frac{x_i}{1-p} & & {otherwise} \end{array} \right. xi={01pxiwithprobablitypotherwise
    其中 E ( x i ′ ) = p ∗ 0 + ( 1 − p ) ∗ x i 1 − p = x i E(x_i^{'})=p*0+(1-p)*\frac{x_i}{1-p}=x_i E(xi)=p0+(1p)1pxi=xi

丢弃法的使用

  • 通常将丢弃法作用在隐藏全连接层的输出上
    在这里插入图片描述

h = σ ( W 1 x + b 1 ) h=\sigma(W_1x+b_1) h=σ(W1x+b1) h ′ = d r o p o u t ( h ) h^{'}=dropout(h) h=dropout(h) o = W 2 h ′ + b 2 o=W_2h^{'}+b_2 o=W2h+b2 y = s o f t m a x ( o ) y=softmax(o) y=softmax(o)
在这里插入图片描述

  • 丢弃法只在训练过程中使用,验证、推理过程不使用

总结

  • 丢弃法将一些输出项随机置0来控制模型复杂度
  • 常作用在多层感知机的隐藏层输出上
  • 丢弃概率是控制模型复杂度的超参数

数值的稳定性

  当神经网络深度较深时,极容易出现数值不稳定的情况。

神经网络的梯度

  • 考虑如下有 d d d层的神经网络
    h t = f t ( h t − 2 ) a n d y = l ⋅ f d ⋅ . . . ⋅ f 1 ( x ) h^t=f_t(h^{t-2})\quad and\quad y=l\cdot f_d\cdot ...\cdot f_1(x) ht=ft(ht2)andy=lfd...f1(x)
  • 计算损失 l l l关于参数 W t W_t Wt的梯度
    ∂ l ∂ W t = ∂ l ∂ h d ∂ h d ∂ h d − 1 . . . ∂ h t + 1 ∂ h t ∂ h t ∂ W t \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} Wtl=hdlhd1hd...htht+1Wtht
    这里面都是矩阵的乘法,计算量非常大

数值稳定性常见的两个问题

  • 梯度消失: 1. 5 100 ≈ 4 × 1 0 17 1.5^{100}\approx4\times10^{17} 1.51004×1017
  • 梯度爆炸: 0. 8 100 ≈ 2 × 1 0 − 10 0.8^{100}\approx2\times10^{-10} 0.81002×1010

举例说明

  • 假设有以下MLP(为了简单省略偏置项)
    f t ( h t − 1 ) = σ ( W t h t − 1 ) 其 中 σ 是 激 活 函 数 f_t(h^{t-1})=\sigma(W^th^{t-1})\quad其中\sigma是激活函数 ft(ht1)=σ(Wtht1)σ ∂ h t ∂ h t − 1 = d i a g ( σ ′ ( W t h t − 1 ) ) ( W t ) T \frac{\partial h^t}{\partial h^{t-1}}=diag(\sigma^{'}(W^th^{t-1}))(W^t)^T ht1ht=diag(σ(Wtht1))(Wt)T ∏ i = t d − 1 ∂ h i + 1 ∂ h i = ∏ i = t d − 1 d i a g ( σ ′ ( W i h i − 1 ) ) ( W i ) 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)^T i=td1hihi+1=i=td1diag(σ(Wihi1))(Wi)T

①梯度爆炸

  • 使用Relu作为激活函数
    σ ( x ) = max ⁡ ( 0 , x ) a n d σ ′ ( x ) = { 1 x > 0 0 o t h e r w i s e \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 = t d − 1 ∂ h i + 1 ∂ h i = ∏ i = t d − 1 d i a g ( σ ′ ( W i h i − 1 ) ) ( W i ) 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)^T i=td1hihi+1=i=td1diag(σ(Wihi1))(Wi)T的元素主要来自于 ∏ i = t d − 1 ( W i ) T \prod\limits_{i=t}^{d-1}(W^i)^T i=td1(Wi)T
  • 如果 d − t d-t dt很大,同时不对参数 W I W^I WI的值进行限制,那么最后结果将会很大,造成梯度爆炸

梯度爆炸的问题

  • 值超出值域(infinity)
    • 对于16位浮点数尤为严重(数值区间 6 e − 5 − 6 e 4 6e^{-5}-6e^4 6e56e4)
  • 对学习率敏感
    • 如果学习率太大>大参数值->更大的梯度
    • 如果学习率太小->训练无进展
    • 我们可能需要在训练过程不断调整学习率

②梯度消失

  • 使用Sigmoid作为激活函数
    σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma^{'}(x)=\sigma(x)(1-\sigma(x)) σ(x)=σ(x)(1σ(x))

  • 其中 0 < σ ( x ) < 1 0<\sigma(x)<1 0<σ(x)<1,因此连乘会使得数值越来越小,最后导致梯度消失

梯度消失的问题

  • 梯度值变成0
    • 对16位浮点数尤为严重
  • 训练没有进展
    • 不管如何选择学习率
  • 对于底部层尤为严重
    • 仅仅顶部层训练的较好
    • 无法让神经网络更深
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟炼丹师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值