机器学习笔记—2(李宏毅版)

如何找到更好的 function

先分析 training data 上的训练结果 loss
1.1.1.
在训练结果上loss很大时,有可能出现了model bias,原因是model过于简单,最好的function不在function set中。
解决办法:让model更具弹性1.设定更多的feature。2.进行深度学习deep learning。
1.1.2.
可能有optimization issue,通过gradient descent找出的是极小的function,但不是最小的function。
1.1.
如何区别以上两个问题,判断方法是,在训练资料training data上,层数更高的的loss比层数更低的loss更差,说明出现了optimization issue。
先尝试较浅的或者较简单的model,然后尝试更深的或者更难得model,如果发现层数增加loss更差,则说明是optimization而不是model bias。
1.2.1
loss足够小了,结束
1.2
training data的loss好但是testing data的loss更差,则说明有两种可能
1.2.2.
出现了overfitting,因为training data是离散的,在定义域内很严格没问题,但是在定义域外就放飞自我了, 导致function没什么作用。
解决方案 1.增加training data。2.data augmentation,如通过图像水平反转、截取增加资料。或者,constrained model ,理解问题并且设计出合适的模型,如 cnn 模型针对影像的特性限制model,或者用更少的 feature,或者 drop out。
对于模型的限制(复杂程度)需要适当,太大时会有model bias,太小会有 overfitting。
不推荐根据testing的结果修改model。
mismatch,与model关系不大,而属于一些特殊情况。

2.1.
gradient为0的点,local minima,saddle point
local minima 周围无路可走了,但是 saddle point 可以继续走下去
如何判断gradient为0出的情况?在某点附近的 loss 可以通过泰勒公式写出,f(x)的一阶导数为0,根据 f(x) 的二阶导数判断gradient为0处的情况(x是一组参数)
大于0 hessian恒为正 local minima
小于0 hessian恒为负 local maxima
有时大于0有时小于0 hessian不确定 saddle point
对应的就是特征值为正为负,gradient为0时,在saddle point时,需要向特征向量方向更新参数
2.2.
saddle point 和 local minima 哪个更常见?
saddle point 更加常见,而 local minima 相对很少见

2.3.
batch 大概就是将训练资料进行分块,然后按块进行训练,最后再将结果合并考虑。
在考虑平行运算的情况下,大的 batch size 可能更有优势,而小的 batch size 需要进行的 update 的次数更多
而大的 batch size 可能走到 local minima 就走不动了,但是小的 batch size 进行的训练次数多,用不同的 function ,就导致出现 local minima 的可能性较小。
好的 minima 是盆地,而坏的 minima 是峡谷。
因为对于坏的 minima,training 和 testing 的结果可能天差地别,而大的 batch size 倾向于走到峡谷中,而小的 batch size 更可能走到盆地中,因为小的 batch size 会进行多次 update,盆地更可能困住所有的 loss function。
为什么要用 batch 进行微分?
大的 batch 更快,小的 batch 更容易找到更好的 function。
2.3.1
解决方案:momentum 技术,gradient + momentum,不是往 gradient decent 反方向移动参数,而是这一次的移动方向和前一次的移动方向做向量的加法,获得本次需要移动的方向,有可能走到了 local minima 或者 saddle point 时,会继续向前走一小步。

2.4.
Adaptive Learning Rate 技术,给每个参数不同的 learning rate。
training stuck 不一定 gradient decent 就很小(走到了 critical point),有可能,在峡谷的两侧山顶反复横跳,出现震荡的情况。learning rate 太大大则震荡,learning rate 太小则走不到最小点,对于 convex 举例很清楚。为了解决这个问题,需要为每个参数定制 learning rate,在陡峭方向上 learning rate要小,而在平坦方向上 learning rate 要大。
计算方法,某个参数新的 learning rate 等于旧的 (上一个 learning rate) ÷ 旧的 (所有gradient的平方平均),用在 adagrad,显而易见的,过去的 gradient 都很大的话,会使新的 learning rate 很小,而过去的 gradient 都很小的话,会使新的 learning rate 很大。
RMSProp方法,如下图:
其中的 阿尔法 是自己进行设定的参数,即超参数
调整最近一次gradient的重要性
使用 Adam :RMSProp + Momentum。
用 learning rate scheduling 解决新出现的问题,即使得 learning rate 与时间有关,让 learning rate 随时间增长而变小
结果如下(左侧原图,右侧添加 learning rate decay 的结果):
加上 learning rate decay 可以解决左图的问题
warm up,在训练 Bert 时常用,让 learning rate 先变大后变小
在这里插入图片描述
最终以上几项相互作用之下,形成的结果如下:
在这里插入图片描述
3.
分类
通过 input 和 model 获得 output,使 output 和真实的 label 越接近越好。
将 class 用 one-hot vector 进行表示,class1=[1,0,0] class2=[0,1,0] class3=[0,0,1]
对 y 进行 softmax(y) 计算,将一个连续的值化为离散的 0,1 ,和 sigmoid 做的是同一件事。
Feature Normalization,对每一个 dimension 进行规范化 normalize,使得 loss 不要过于陡峭,更加方便 optimization。
在这里插入图片描述
可以得到一个比较好的 error surface,让训练变得更加顺利。
在进行normalization时也要分批次进行,对 batch 做 feature normalization.
做 batch normalization 能使的训练曲线更加平滑,所以可以适当增加 learning rate

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值