roadmap of improving model
机器学习任务攻略roadmap of improving model
hessian? NO!>>> Batch and Momentum
参数不够多,function set里面没有任何一个function可以使得loss变低
model的弹性不够大
增加输入的feature,(把前56天的资讯纳入考虑model)
用deep learning增加模型的弹性(多层)
假问题的前提是,数据足够多,解空间比较小,从而局部极值点比较少
optimization gradient decent,陷入 局部最优
比较不同的模型,来判断model够不够大
residual network
56层不work,
并不是所有的结果不好都叫over fitting
检查训练资料上的performance(training data loss小,test大就是overfitting
train一个简单点的,浅的model,看看简单的modle可以得到怎样的loss
再尝试提高模型复杂度,如果效果不如简单的model,那就不是model bias,可能就是优化做的不好
没有训练资料作为限制的地方会出现freestyle,产生各式各样奇怪的结果
1、最简单解决overfitting的方法就是增加训练资料
data augmentation,数据强化,运用自己拥有的知识对这个问题的理解,自己创造出合理的数据,资料的特性对这个问题的理解,例如将图片左右翻转
2、给模型一些限制,不要让他有这么大的弹性(限制他为一个二次曲线,给他比较少的参数,比较少的feature,deep learning比较少的神经元数目,让model共用参数,不同的层share parameters?
fully-connected nextwork比价有弹性的架构,CNN 比较没有弹性比较有限制,根据影像的特性来限制模型的弹性对影像的限制,找出来的model形成的集合比较小,包含在fully-connected nextwork里面)
不能给模型太多的限制,会变成model bias
如何真正衡量模型的弹性,复杂的程度
直观来看,参数比较多
testing set,分为public 和private
public可以理解为就是训练集,固定的某一部分语音,而private是你自己的语音拿去辩识
在那些benchmark corpora上面,机器都超越人类语音辨识的正确率了,并不代表在日常生活中是这样
模型出来之前,永远不要用测试集
选择在validation集上loss最小的模型就好,尽量不要去参考public test set的结果再去调整,就可以避免在test set上overfitting
mismatch 训练集和测试集的分布不一样,如2019年和2020年疫情感染人数
analyze critical point
optimization fails
loss 掉不下去
gradient is close to zero
1、local minimal
2、saddle point:gradient是0,不是local minimal
鞍点是奇点 两边偏导都是0
当卡在critical point : 临界点,究竟卡在local minimal还是 saddle point
后者还有路可以走可以使得loss下降
观察loss function的形状,不太简单诺
多元函数的泰勒展开式
Taylor Seies Appoximation
1、这里是向量函数的泰勒级数近似,二次方要用内积表示
2、g是梯度,弥补θ’ 和θ之间的差距
3、Hessian矩阵 (矩阵论 看看)
error surface 在θ附件
critical point,梯度g为0
就相当于一元微积分求二阶导数判断是不是极值点
思想应该是,在一阶条件满足时,通过验证二阶和稳定条件来判断最优是哪种,numerically。
怎么看所有的v的正负值呢?直接利用线性代数的结论,
算出Hessian矩阵 ,eigenvalue都是正的or负的
其实就是高数里的二阶导大于零,为极小值点
这个neural 没有vectorization function
右上和左下方向都是先小后大,所以零点是saddle poing
左上和右下两参数乘积为负,是负相关,错误率就最大。零点不相关。右上和左下正相关 错误率就更小。
根据hessian 矩阵,其实就是多元函数极值问题
eigen value(特征值)
H不仅可以判断是否是saddle point,还指出参数可以update的方向
对角化
沿着u,也就是eigen vector的方向,去更新参数,就可以使得loss变小
按照海塞矩阵特征值为负的对应特征向量的方向走
eigen value(特征值)有很多对应的eigen vector
特征值 特征向量!!!线代
一般不会把hessian 矩阵算出来,二次微分,,一般不会用这个方法来逃离saddle point
哪一个比较常见呢?
在纸上画个正方形,可以想象对于二维来讲正方形是进不去的,三维可以进去
三维空间中封闭的石棺看似无路可走,但在四维中,更高维中会不会可以进去呢
surface error也一样,在一维是local minimal,但在二维就变成了saddle point
local minimal并没有那么常见!
以下一节,讲 如何逃离鞍点
Batch and Momentum(Tips for training)
实际上算微分,不会对所有data对应的的L做微分的,而是分成若干batch,
每个epoch 重新分一次batch,叫做shuffle
shuffle在机器学习与深度学习中代表的意思是,将训练模型的数据集进行打乱的操作。
Shuffle 有很多不同的做法,一个常见的做法就是在每个 Epoch 开始之前会重新分一次 Batch,从而每一个 Epoch 的 Batch 都不一样。
为什么要用batch?
large batch(full batch here):model必须把20笔训练资料看完才能计算loss,从而update参数
要把所有的资料都看过一遍才能够 Update 一次参数。,蓄力时间比较长,技能冷却的时间比较长,这一步走得很稳
small batch:
当Batch Size =1的时候,蓄力的时间比较短,每看到一笔资料,就会更新一次参数。假设有20笔资料,所有资料看过一遍,就已经更新了20次的参数。
根据每一笔资料分别计算loss,update参数,根据所有数据可以update参数20次,用一笔资料算出的loss显然比较noisy,update的方向比较曲折
考虑平行运算,每次update的耗时,左边时间不一定比较长
MNIST (Mixed National Institute of Standards and Technology database)手写数字的辨识
GPU做平行运算,1000笔资料并不是处理一笔资料的100倍
但GPU做平行运算能力有极限,batch size(一个batch中资料的数量)过大,根据这个batch更新一次参数的时间自然会暴增
一个batch里面的一个数据,就能算出一组参数,那batch里面好多数据,不是可以算出好多组参数,我们要怎么选
lb的一个epoch时间小于sb的epoch时间
因为有了GPU的并行运算能力的加持,每个batch处理的时间几乎相同,除非batch真的大到一定程度
Noisy Gradient Descent 有益于 Training 可得到更高准确率
实际上有一个比较神奇的事情: Noisy 的 Gradient反而可以帮助 Training。
假设在Full Batch的情况下,在 Update 参数的时候,你就是沿著一个 Loss Function 来 Update 参数,Update 到一个 驻点的时候就停下来了,此时Gradient =0。如果你不特别去看Hession,只用 Gradient Descent 的方法,你就没有办法再更新参数了。
相比较在Full Batch的情况下,Small Batch不会因为驻点的存在就早早的结束训练,你还是有办法 Training 你的 Model,还是有办法让你的 Loss 变小。所以今天这种 Noisy 的 Update 的方式结果反而对 Training,其实是有帮助的。
博主写得详尽!(此块及以下部分属于转载了)
Noisy Update 有更高泛化能力?- Large Batch易Sharp Minima & Small Batch易 Flat Minima
还有另外一个更神奇的事情,其实小的 Batch 也对 Testing 有帮助。
Training 的时候两者表现都很好,Testing 的时候大的 Batch 表现的不好,准确率低,这代表了Overfitting(过拟合)。产生这个现象的原因在上面这篇文章里给出来了。
Sharp minima在Training Set 上算出来的 Loss 很低,但是Training与Testing 之间有差别,所以在测试的时候,这个误差曲面的移动让Sharp minima算出来的 Loss就变得很大。
很多人相信这个大的 Batch Size会让我们倾向于走到峡谷里面,而小的 Batch Size倾向于让我们走到盆地裡面
直觉上的想法是这样的,小的 Batch有很多的 Loss,它每次 Update 的方向都不太一样。如果今天这个峡谷非常地窄,它可能在某次Update的过程中就跳出去了,因为每次 Update 的方向都不太一样,它的 Update 的方向也就随机性。所以很小的峡谷没有办法困住小的 Batch。
如果峡谷很小,它可能Update一次就跳出去,如果有一个非常宽的盆地它才会停下来;那对于大的 Batch Size,它就是顺著规定的Update的方向移动,它就很有可能走到一个比较小的峡谷裡面
但这只是一个解释,学术界有争论,这个其实还是一个尚待研究的问题。
各占优势,Batch Size也属于需要人工调整的 Hyperparameter
momentum动量
把梯度下降对应的loss surface抽象为现实生活中的秉持着物理特性的小球滚山丘,借助前一步的动量,maybe可以越过临界点的山峰或者山谷