深度学习_09_2_Regularization&动量与学习率&Early Stopping&Dropout

09_2_Regularization&动量与学习率&Early Stopping&Dropout

Regularization

如何防止或减轻Overfitting

Occam’s Razor

奥卡姆剃刀原理

在这里插入图片描述

Reduce Overfitting

  • 提供更多数据
  • 模型复杂度降低
    • 浅的模型
    • regularization
  • Dropout
  • 数据增强
  • 提前终结

在这里插入图片描述

Regularization(weigh decay-权值衰减)

公式为 左边是二分类问题的cross entropy loss。 θ \theta θ表示w1, b1…,这里取一范数,累加,再乘以因子 λ \lambda λ,权衡左右两个参数的配比。成为新的loss, J ( θ ) J(\theta) J(θ)

loss会minimize左式使得预测值与真实值分布更加接近;同时使右式 θ \theta θ的范数接近于0,即迫使参数的范数的值接近于0,减少模型的复杂度。

2种解释:

  1. 参数变小会使得函数变得平滑
  2. 参数小且表达能力足够用,出现 β 0 , β 1 . . . \beta_0, \beta_1... β0,β1...前面的参数不会很小,因为要有表达能力;但是后面的参数会变小,使范数小。

在这里插入图片描述

Intuition

左边的曲面(分割面)复杂,不光滑,网络表达能力比较强,受噪声影响大,泛化能力弱;

右边使表达能力不这么强,不会学习到噪声的样本,约束表达能力,学习到平滑的分割面。

在这里插入图片描述

How

常用的2种:加一范数;加二范数(常用)。

lambda( λ \lambda λ)为超参数,需要自己调整。

在这里插入图片描述

One-by-one regularization

kernel_regularizer=keras.regularizers.l2(0.001)

对参数添加约束(loss),0.001为上式的 λ \lambda λ(权值),修改为0.01会增大对参数的惩罚。

在这里插入图片描述

Flexible regularization
  • 图为对每一个w或b,求和
  • 也可以求前2层,也就是[:4]
  • 前3层是[:6]
  • 挑选出w,是[::2]

新的loss为regularization的loss。

在这里插入图片描述


下面是4个小技巧

动量与学习率

Tricks(技巧)

  • momentum 动量
    • 惯性
  • learning rate decay 学习率
    • 与上面的weigh decay类似,迫使lr慢慢接近为0

Momentum(动量)

图中为梯度下降公式, Δ f ( w k ) \Delta f(w^k) Δf(wk)为梯度。

在这里多了 β z k \beta z^k βzk z k z^k zk代表的是上一次梯度的方向,为 Δ w k − 1 \Delta w^{k-1} Δwk1,结果为两个梯度的向量和。

β \beta β参数决定偏向当前梯度还是历史梯度。

实际上是当前的梯度方向+历史惯性方向的结合。

在这里插入图片描述

No momentum

在这里插入图片描述

With appr. momentum
  1. 图左边的梯度方向不会非常跳动,考虑历史因素会更缓和
  2. 图右边过去的solution会停在局部的最低点,但是有了历史梯度加成,点可能在惯性的驱动下冲出去,发现更广阔的天空,滑到山底而不是山腰中间。

在这里插入图片描述

代码实现

动量一般是直接加到optimizer里(作为1个参数),会自动更新相应的梯度,如果不指定momentum则默认不使用动量,为0。使用的话建议为0.9……

  • SGD、RMSprop等优化器可以指定momentum
  • 但是对于Adam……本身已经把momentum考虑在内,内部实现,不需要指定momentum。相反有beta_1、beta_2的参数

在这里插入图片描述

Learning rate tunning

在这里插入图片描述

Learning rate decay

刚开始大一些,增加速度,后面小一些,有利于收敛

在这里插入图片描述

Drop Learning Rate

在突然设小learning rate后,有可能会出现loss快速下降。

在这里插入图片描述

Adaptive learning rate

代码实现。仅仅修改optimizer.learning_rate

可以线性减少,也可以阶梯式减小,也可以用指数e减少

在这里插入图片描述

Early Stopping&Dropout&Stochastic Gradient Descent

Tricks

  • early stopping
  • dropout
  • stochastic gradient descent

Early Stopping

利用validation set,停止。

在这里插入图片描述

How-To

在这里插入图片描述

Dropout

迫使学习的时候不全部使用w参数,要求有效的w数量( ∑ ∣ w ∣ \sum |w| w)(Connection)越小越好。

如何实现:对每个w有prop,有一定的概率会暂时地输出为0的状态(把这条连接断掉)。

这样会使得 用到的(有效的)参数量会少一些,虽然总参数量不变。

在这里插入图片描述

代码实现

layers.Dropout(0.8)表示有0.8的概率扔掉这条线。

在这里插入图片描述

Behaviour between train and test

network(x,training=False)告知是否是training,这样会关闭的dropout、batch normalization。在validation的时候也设置为False。

在这里插入图片描述

Stochastic Gradient Descent

区别:

  • Stochastic是符合某个分布的,而不是随机的
    • 例如给出x,返回f(x)~N(0,x)分布
  • Deterministic(给出x,有对应的f(x) - 一一对应)

在这里插入图片描述

Gradient Descent

Stochastic:

这里的分布是指从一个数据集上面取随机的sample到batch上来。例如从60K的数据batch 128个数据。

最开始是 δ L δ W = 1 60 K ∑ i = 0 i = 60 K δ L δ W \frac{\delta L}{\delta W}=\frac{1}{60K} \sum_{i=0}^{i=60K}\frac{\delta L}{\delta W} δWδL=60K1i=0i=60KδWδL,求出所有的梯度信息,再累加平均。这样的缺点是数据太大,GPU容量不够,不可能加载所有数据

在这里插入图片描述

为了节省显存, δ L δ W = 1 B a t c h ∑ i = 0 i = B A T C H δ L δ W \frac{\delta L}{\delta W}=\frac{1}{Batch} \sum_{i=0}^{i=BATCH}\frac{\delta L}{\delta W} δWδL=Batch1i=0i=BATCHδWδL,取一个batch,求梯度。

在这里插入图片描述

最开始的Stochastic方法是1个,后面变成Batch=16,32,64,128…

为了节省显存, δ L δ W = 1 B a t c h ∑ i = 0 i = B A T C H δ L δ W \frac{\delta L}{\delta W}=\frac{1}{Batch} \sum_{i=0}^{i=BATCH}\frac{\delta L}{\delta W} δWδL=Batch1i=0i=BATCHδWδL,取一个batch,求梯度。

[外链图片转存中…(img-Y63BS4d5-1618309031670)]

最开始的Stochastic方法是1个,后面变成Batch=16,32,64,128…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值