机器学习2021-Deep-Learning
Deep Learning
1、General Guidance
总结:
1、并不是所有的在测试集上表现结果差都是overfitting,要先看在training data上的los怎么样?
- large:
- model bias(模型的限制)——>增加模型的复杂程度,function的范围
- optimize(局部最优解)——>增加找function的力度
- small:
- loss on testing data
- large: overfitting
- more train
- data augmentaion
- make model simpler
- small: 😀
- large: overfitting
- loss on testing data
- 可视化:
- 当模型的复杂度增加,training loss会越来越小,但是testing loss会先减少后又增大
- 这时候考虑overfitting或mismatch
- Optimization Issue
- 先从简单的模型开始,容易optimization
- 当deeper network不能获得smaller loss on training data⇒Optimization Issue
- large:
2、有的时候在public的测试数据上结果很好,但是在pivate的数据上测试就不行了,主要还是因为可能测试次数过多,模型就会过于依赖public的数据,在实际的情况下效果反而打折扣
solution:
N-fold cross validation
- 将training set 等价划分为三份三次,其中一份用于validation,每次的位置不同
- 不同模型对这三次操作,结果取平均值,再用结果最好的模型去测Testing data
2、When Gradient Is Small: Local Minimum and Saddle Point
Optimization fails:
分析:loss not small enough
gradient=0,所以导致了优化停止,一般有两种情况,统称为
critical point:
- local minima
saddle point
Which one would be?
- 使用Taler Series Approximation:用当前点来表示估计周围点
总之,可以根据周围点的状态来判断当前的点是local minima, local maxima还是saddle point
- 涉及到eigen value,eigen vector⇒计算量较大,实际不使用这种方法
local minima Vs saddle point
- 一维的local minima在二维来看就是saddle point
- 一般训练的参数有百万千万,那么维度也非常的高,所以大多为saddle point,local minima很不常见
3、Tips for Training: Batch and Momentum
batch:
- 定义:将所有参数进行划分为多个batch,多次update来完成所有参数的更新gradient
Small Batch | Large Batch | desc | |
---|---|---|---|
Speed for one update(no parallel) | Faster | Slower | |
Speed for one update(with parallel) | Same | Same(not too large) | |
Time for one epoch | Slower | Faster |
训练速度更快 |
Gradient | Noisy | Stable | |
Optimization(training) | Better |
Worse | |
Generalization(testing) | Better |
Small Batch更容易进入flat minima,而large Batch更容易进入有sharp minima。 | Worse
当在training上两者效果类似,但是在testing上不一样,就有overfitting的因素了。 | |
Momentum:
- 参照物理世界,一个小球从高处滚下来,很可能因为惯性逃脱critical point
- 一般的gradient descent:往Gradient的反方向移动
- 所以可以给每次movement增加一个movement of last step
- movement = movement of last step - gadient
- 或者可以理解为movement是之前所有gradient的一个加权和
总结:2和3—Optimization issue
- 训练停止处的critical points处gradient=0
- critical points有两种情况:saddle points or local minima
- 具体是哪一种可以由Hessian matrix判断
- 也可以通过Hessian matrix来逃离saddle points
- local minima is rare
- Smaller batch size and momentum help escape critical points
4、Tips for Training: Adaptive Learning Rate
首先,Training stuck 不等于Small Gadient(可能是在一个很陡峭的峡谷里来回碰撞,到不了谷底)
多数training在走到critical point之前就已经停止了
这时候考虑learning rate,即update的步长
- gradient越小,表示越平滑,lr可以大一点;
- gradient越大,表示越陡峭,lr可以小一点;
- 单纯地调小learning rate并不能解决问题,因为可能步长太小而一直无法到达
所以,需要动态地修改学习率:
增加分母:
- Root Mean Sequare:和之前所有的g都有关系,lr会随着时间的增长而变小 ,是所有之前的g的均方开根号
- 局限:就算同一个参数,它需要的lr也会发生变化
- 引出RMS Prop:σ_i^t = ρσ_i^{t-1} + (1-ρ)(g_i^t)^2
- 决定当前算出来的g有多重要
- 最常用的optimization策略:Adam:RMS Prop + Momentum
- Root Mean Sequare:和之前所有的g都有关系,lr会随着时间的增长而变小 ,是所有之前的g的均方开根号
修改分子:
使用Root Mean Sequare在一段时间后,一直往同一个方向走,它垂直方向的学习率会变大,会突然爆发,虽然最后会回归
引入learning rate scheduling, 让原先的常数随着时间变化而变化,可以解决爆发的问题
- Learning Rate Decay:从一个高值开始逐渐减少
- Warm up:先增加后减小
总结:**
learning rate improvement+ momentum
**
5、Loss Function: Classification
- 原先的regression的输出是一个数值,在此基础上进行修改,最后几个步骤也要扩展为向量操作
- 得到的y要先经过sotfmax做规范化,把数值的范围变成0-1
- 再计算e,就是y和y_hat之间的距离
- MSE
Cross-entropy
效果更好- 说明:改变loss function 也会改变optimization的难度
6、Batch Normalization (optimization tips)
https://www.youtube.com/watch?v=BABPWOkSbLE
- 背景:
- 当只有两个dimension时,loss的error surface是一个碗型(椭圆形)的,training可能还是不好做,会发生梯度爆炸的情况,体现在一个w对loss的影响大,而另一个很小。那么是否可以改变error surface的形状,变成一个很正的一个个圆形
- 分析:
- 再往里想一层,就是input的feature,每个dimension的值的scale差距比较大,导致了training的不容易
- 引出:
- 对feature进行一个normalization,把数值的范围进行一个规范化,可以使梯度下降的速度更快
- Deep Learning:除了对输入进行normalization,可以在中间层进行多次的normalization,实际操作过程中是分batch进行的所以称作batch normalization。
- testing:
- 在测试或是实际应用的不是,不能等到集齐一个batch size再进行计算,所以实际pytorch会在training的时候计算moving average of U and 6,在testing的时候可以直接使用,那么每笔新的资料进来都可以直接做一次运算。
- 效果:
- 使用了batch normalization后,可以在更短的时间内到达一样的正确率,并且,使用了normalization后,learning rate(步长)可以适当的增大
- 反思:
- how does batch normalization help optimization?
- change the landscape of error surface.
- how does batch normalization help optimization?