李宏毅 机器学习与深度学习【2022版】 02

一、机器学习任务攻略

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
因为在训练集中,56层的network一定至少和20层的一样好,所以在测试集中,56层network比20层表现差,也不是过拟合。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
更多的训练数据可以限制函数的freestyle,但是往往获取训练数据并不容易,所以可以采用data augmentation,将已有训练数据变化,如翻转、旋转,来获得新的数据。但注意不要做无意义的变化,如图片识别中的倒置。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


不建议根据测试集的表现,来选择模型:
在这里插入图片描述


在这里插入图片描述


可以用交叉验证的方法,去寻找合适的模型:
在这里插入图片描述


在这里插入图片描述


mismatch 是因为训练数据和测试数据分布不一致导致的。据收集增多,也不会解决该问题。

在这里插入图片描述


二、优化失败

1、梯度很小的情况

critical point:梯度为零的点
critical point 有两种,极值点和鞍点saddle point

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


举例:有一笔训练数据 (1,1),模型为 y = w 1 w 2 x y=w_1w_2x y=w1w2x


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
由于海森矩阵计算量比较大,所以一般不用改方法。


在低纬度是局部最小值点,但是在高纬度有可能是鞍点。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


2、Batch and Momentum

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
因为每个batch算出的loss都略有不同,上一个batch算的梯度为0时,下一个batch有可能不是0,从而可以继续训练。
此外,就算在训练时,大的和小的batch都训练的性能差不多,而在测试时,小的batch也往往表现更好。


在这里插入图片描述
可能的解释是,小的batch,参数更新时,由于有噪声,梯度方向有一定的随机性,而狭窄的局部最小值点区域困不住它。


在这里插入图片描述


Momentum:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


三、自适应学习率 Adaptive Learning Rate

在这里插入图片描述


在这里插入图片描述
学习率设置较大,在梯度大的地方,参数更新步幅会较大,遇到峡谷会两边震荡。
学习率设置较小,在梯度小的地方,参数更新步幅又很小,就会训练不动。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
error surface中的同一个方向,即同一个参数,它的梯度也是有变化的,我们也希望学习率可以动态调整。


在这里插入图片描述
.


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
使用warm up效果更好的一个可能的解释是: σ \sigma σ是基于统计数据计算得到的,刚开始数据比较少,所以不精准,开始的参数更新步幅小一些,然后随着统计数据多了,再慢慢增大参数更新步幅,效果可能更好一些。


在这里插入图片描述


四、分类问题简述

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
softmax不仅可以使输出值变为0~1之间,还可以拉大输出大、小值之间的差距。


在这里插入图片描述
二分类问题往往直接套用sigmoid函数,而不是用softmax,实际上二者是等价的。


在这里插入图片描述


在这里插入图片描述

五、重温神奇宝贝和数码宝贝分类器

在这里插入图片描述
模型未知数取值的可能性数量,叫做模型的复杂度。


在这里插入图片描述


请添加图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


以下的讨论是一般化的原理,和模型没有关系,对数据的分布也没有假设,适用于任何 loss 函数。
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


往往我们不容易使N变大,即让训练数据变多,H变得太小也会使最好的h不在H中。

在这里插入图片描述

六、深度学习的优化

在这里插入图片描述
这些背景知识不会可以以后再补。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
这里我们重点关注 off-line 的情况。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


为解决训练时,SGD卡在梯度为零的地方,可以采用Adam算法。
在这里插入图片描述
m ^ t \widehat m_t m t的分母作用是去偏de-biasing,这样在开始的几个time step中,它的值也不会很小,和其他time step的大小保持差不多。
v ^ t \widehat v_t v t的分母作用同上。
ε \varepsilon ε的作用是防止分母为零。


Adagrad、RMSProp、Adam算法是自适应学习率adaptibe learning rate
在这里插入图片描述


在这里插入图片描述


请添加图片描述


请添加图片描述


在这里插入图片描述
该方法主要解决的是梯度普遍比较小的时候,学习率较大的情况。但该方法会造成学习率单调减少,可能会使训练卡住不动。


在这里插入图片描述


在这里插入图片描述
AdaBound是解决梯度太大,从而学习率太小的问题。
Clip函数为梯度裁剪函数,输入的张量x的各值如果超出上下限,则输出上下限对应的值,没超出,则输出x的原值。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
和Cyclical LR方法大同小异


在这里插入图片描述


Adam也需要warm-up,因为经验显示,前10个time step的梯度比较乱,学习率也会忽大忽小。


在这里插入图片描述


在这里插入图片描述
这里的 r t r_t rt和梯度没有关系,是因为我们假设梯度来自某个分布,所以 r t r_t rt只与 t 有关系。梯度的方差越大, v t v_t vt的方差就越大, 1 v t \frac 1 {v_t} vt1的方差也就越大,进而 r t r_t rt也就越小。梯度的方差越小,即越稳定, r t r_t rt也就越大。所以 r t r_t rt可以直接乘到学习率上面,去调整学习率。
ρ ≤ 4 \rho \le 4 ρ4,使用SGDM,当 ρ > 4 \rho \gt 4 ρ>4,可以将 r t r_t rt(warm-up learning rate)乘到学习率上。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
这张图改成从小球从右往左走,来看。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
γ θ t − 1 \gamma \theta_{t-1} γθt1项叫做weight decay 项。
在计算 m t m_t mt v t v_t vt时,有weight decay 项,叫做weight decay。
在计算 m t m_t mt v t v_t vt时,没有weight decay 项,叫做L2 regularuzation
通常使用weight decay算法,效果比较好。

本篇博文,最重要的优化算法是AdamW,做NLP时经常使用。


一些帮助优化的方法
①增加模型随机性的方法:
shuffling: 每个epoch的data打乱顺序,重新划分mini-batch,这样计算的梯度可能方向不同。

Dropout: 鼓励每个神经元都去学到有意义的信息。在训练过程中,有一些神经元会被随机丢掉,来减少网络对特定神经元的依赖。

Gradient noise: 算完梯度后,加个高斯噪声。随着t增大,噪音变小。
   g t , i = g t , i + N ( 0 , σ t 2 ) g_{t,i}=g_{t,i}+N(0,\sigma_t^2) gt,i=gt,i+N(0,σt2)
   σ t = c ( 1 + t ) γ \sigma_t=\frac c {(1+t)^{\gamma}} σt=(1+t)γc

增加随机性,可以在训练时,让模型有更多的探索,进而有可能得到更好的表现。


②和学习率调整有关的方法:
warm-up: 一开始学习率比较小,等到训练稳定再调大。

curriculem learning: 先用容易的数据,例如没有噪音的数据、或者接近均值的数据,去训练模型。再用困难的数据去训练。这样可能会提高泛化能力。因为开始的数据可能会决定整个模型大的走向,后面会在某个极值附近移动。

fine-tuning: 用一些预训练模型,站在巨人的肩膀上训练。


③其他方法:
在这里插入图片描述


总结:
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值