模型选择、拟合以及常见优化问题

训练误差和泛化误差

  • 训练误差(training error)是指, 模型在训练数据集上计算得到的误差。
  • 泛化误差(generalization error):模型在新数据上的误差
  • 例:根据模考成绩来预测未来考试分数
    • 在过去考试中表现很好(训练误差) 不代表未来考试一定会好(泛化误差)
    • 学生A通过背书在模考中拿到好成绩
    • 学生B知道答案后面的原因

验证数据集和测试数据集

  • 训练数据集: =》 训练模型参数

  • 验证数据集:一个用来评估模型好坏的数据集 =》选择模型超参数

    • 例如拿出50%的训练数据

    • 不要跟训练数据混在一起

  • 测试数据集:只用一次的数据集

    • 未来的考试
    • 房子的实际成交价

K-折交叉验证

  • 在没有足够多数据时使用(非大数据集)
  • 算法:
    • 将训练数据分割成k块
    • For i = 1, …, k
      • 使用第 i 块作为验证数据集,其余作为训练数据集
      • 报告K个验证集误差的平均
  • 常用:K=5或10 ,相当于将数据训练K次,然后求得K的平均误差
  • 可以用于确定超参数,取其中均值效果较好的,也可用随机森林将进行预测选择

过拟合和欠拟合

模型容量:模型的复杂度,拟合各种函数的能力

  • 低容量的模型难以拟合训练数据
  • 高容量的模型可以记住所有的训练数据

估计模型容量

  • 难以在不同的种类算法之间比较
    • 例如树模型和神经网络
  • 给定一个模型种类,将有两个主要因素
    • 参数的个数
      • (d+1:d个输入的权重,加1个偏差)
      • ( (d+1)m+(m+1)k:m层个d+1,加上(m+1)*输出k )
        在这里插入图片描述
    • 参数值的选择范围

VC维

  • 对于一个分类模型,VC等于一个最大的数据集的大小,不管如何给定标号,都存在一个模型来对它进行完美分类

  • 例:线性分类器的VC维

    • 2维输入的感知机 VC维 = 3

      • 能够分类任何三个点,但不是4个(xor)img src="img/11.4.png" alt="11.4" style="zoom:67%;" />

        这种情况是不行的:

    • 支持N为输入的感知机的VC维是N+1

    • 一些多层感知机的VC维O(N l o g 2 N log_2N log2N)

  • VC维的用处

    • 提供为什么一个模型好的理论依据
      • 他可以衡量训练误差和泛化误差之间的间隔
    • 在深度学习中很少使用
      • 衡量不是很准确
      • 计算深度学习模型的VC维很困难

数据复杂度

  • 样本个数
  • 每个样本的元素个数
  • 时间、空间结果
  • 多样性

权重衰退:处理过拟合

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

    • 通过限制参数值的选择范围来控制模型容量
      • min l(w,b) ,受限于 ∣ ∣ w ∣ ∣ 2 ≤ θ || w ||^2 ≤ θ w2θ
    • 通常不限制偏移b (限不限制都差不多)
    • 小的θ意味着更强的正则项(限制条件)
  • 使用均方范数作为柔性限制

    • 对于每个θ,都可以找到 λ 使得之前的目标函数等价于: m i n   l ( w , b ) + λ 2 ∣ ∣ w ∣ ∣ 2 min\ l(w,b)+\frac{λ}{2}||w||^2 min l(w,b)+2λw2

      • 可以通过拉格朗日乘子来证明
    • 超参数λ控制了正则项的重要程度

      • λ = 0:无作用
      • λ → ∞,最优解 w*→0
    • 对损失的影响
      • L2正则项会对大数值的权值进行乘法,估计权值分散,将所有特征运用起来

      • 惩罚项就是为了限制参数的取值范围,加入惩罚项会对最优解产生影响

      • 正则项就是防止损失函数最优导致过拟合

      • 分析如下

        • 绿色圆是l,橙色圆是惩罚项
        • l2损失在原点处的拉力会小于在曲线上方的拉力 =》也就是梯度大小
        • 因此惩罚对于 W ~ ∗ \widetilde W* W 的拉力会大于W *,而W再往橙色靠,惩罚项弥补不了损失项,因此 W * 在惩罚和损失的情况最优
  • 参数更新法则

    • 计算梯度
      • ∂ ∂ w ( l ( w , b ) + λ 2 ∣ ∣ w ∣ ∣ 2 ) = ∂ l ( w , b ) ∂ w + λ w \large \frac{∂}{∂w}(\mathcal l(w,b)+\frac{λ}{2}||w||^2) = \frac{∂l(w,b)}{∂w} + λw w(l(w,b)+2λw2)=wl(w,b)+λw
    • 时间 t 更新参数 w t + 1 = w t − η ∂ ∂ w t \large w_{t+1}= w_t-\eta\frac{∂}{∂w_t} wt+1=wtηwt
      • w t + 1 = ( 1 − η λ ) w t − η ∂ l ( w t , b t ) ∂ w t \large w_{t+1} = (1-\eta λ)w_t-\eta\frac{∂l(w_t,b_t)}{∂w_t} wt+1=(1ηλ)wtηwtl(wt,bt)
      • 通常 η λ \eta λ ηλ < 1 ,在深度学习中叫做权重衰退
      • 想要让损失函数降低就要往梯度的反方向走,因此需要减去梯度 =》梯度下降

权重衰退知识总结

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

动机

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

无偏差的加入噪音

  • 对于x加入噪音得到x,我们希望 E[ x’ ] = x =》 E [ x ′ ] = p ⋅ 0 + ( 1 − p ) x i 1 − p = x i \large E[ x' ] = p·0+(1-p)\frac{x_i}{1-p} = x_i E[x]=p0+(1p)1pxi=xi
  • 丢弃法对每个元素进行如下扰动: x i ′ = { 0 , 给定概率p x i 1 − p , otherwise \large x'_i= \begin{cases} 0, & \text{给定概率p}\\ \frac{x_i}{1-p},& \text{otherwise} \end{cases} xi=0,1pxi,给定概率potherwise

使用Dropout

  • 通常将其作用在隐藏全连接层的输出上
  • h = σ ( W 1 x + b 1 ) h = \sigma(W_1x+b_1) h=σ(W1x+b1) h’ = dropout(h)
  • o = W 2 h ′ + b 2 o =W_2h' + b_2 o=W2h+b2
  • y = softmax(o)

推理(预测)中的Dropout

  • 正则项只在训练中使用:他们影响模型参数的更新
  • 在推理过程中,dropout直接返回输入 h = dropout( h ) ,能保证准确性的输出

Dropout总结

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

神经网络的梯度

  • 考虑一个具有L层、输入x和输出o的深层网络。 每一层l由变换fl定义, 该变换的参数为权重W(l), 其隐藏变量是h(l)(令 h(0)=x)。 我们的网络可以表示为: h t = f t ( h t − 1 ) a n d y = l ○ f d ○ . . . ○ f 1 ( x ) h^t = f_t(h^{t-1}) and y =\mathcal l ○f_d○...○f_1(x) ht=ft(ht1)andy=lfd...f1(x)
  • 计算损失 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 ⏟ d − t 次 矩 阵 乘 法 \large \frac{\partial l}{\partial W^t} = \underbrace {\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}}_{d-t次矩阵乘法} Wtl=dt hdlhd1hd...htht+1Wtht

稳定性的常见两个问题

  • 梯度下降
  • 梯度消失
  • 例子:MLP
    • f t ( h t − 1 ) = σ ( W t h t − 1 ) f_t(h^{t-1}) = \sigma(W^th^{t-1}) ft(ht1)=σ(Wtht1) σ \sigma σ 是激活函数
    • ∂ h t ∂ h t − 1 = d i a g ( σ ′ ( W t h t − 1 ) ) ( W t ) T \large \frac{\partial h^t}{\partial h^{t-1}} = diag(\sigma'(W^th^{t-1}))(W^t)^T ht1ht=diag(σ(Wtht1))(Wt)T σ ′ \sigma' σ σ \sigma σ 的导数函数
    • ∏ i = t d − 1 ∂ h i + 1 ∂ h t i = ∏ i = t d − 1 d i a g ( σ ′ ( W i h i − 1 ) ) ( W i ) \prod^{d-1}_{i = t} \frac{\partial h^{i+1}}{\partial h^{ti}} = \prod^{d-1}_{i = t} diag(\sigma'(W^ih^{i-1}))(W^i) i=td1htihi+1=i=td1diag(σ(Wihi1))(Wi)

梯度爆炸的问题

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

梯度消失的问题

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

    • ∏ i = t d − 1 ∂ h i + 1 ∂ h t i = ∏ i = t d − 1 d i a g ( σ ′ ( W i h i − 1 ) ) ( W i ) \large \prod^{d-1}_{i = t} \frac{\partial h^{i+1}}{\partial h^{ti}} = \prod^{d-1}_{i = t} diag(\sigma'(W^ih^{i-1}))(W^i) i=td1htihi+1=i=td1diag(σ(Wihi1))(Wi)的元素值是d-t个小数值的乘积

  • 梯度值变为0
    • 对16位浮点数尤为严重
  • 训练没有进展
    • 不管如何选择学习率
  • 对于底部层尤为严重
    • 仅仅顶部层训练的较好
    • 无法让神经网络更深

如何让训练更加稳定

  • 目标:让梯度值在合理的范围内,如[1e-6,1e3]
  • 将乘法变加法,如 ResNet,LSTM
  • 归一化: 梯度归一化,梯度裁剪
  • 合理的权重初始和激活函数

让每层的方差是一个常数

  • 将每层的输出和梯度看做是随机变量
  • 让他们的均值和方差都保持一致

权重初始化

  • 在合理值区间随机初始参数
  • 训练开始的时候更容易有数值不稳定
    • 原理最优解的地方损失函数表变可能很复杂
    • 最优解附近表面会比较平
  • 使用 N ( 0 , 0.01 ) \mathcal N(0,0.01) N(0,0.01) 来初始可能对小网络没问题,但不能保证深度神经网络
  • 合理的权重初始值和激活函数的选取可以提升数值稳定性
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值