我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):
https://github.com/Sakura-gh/ML-notes
本节对应笔记:https://sakura-gh.github.io/ML-notes/ML-notes-html/13_Tips-for-Deep-Learning.html
1是
max pooling中无法为max微分,梯度下降时该怎么办;2是
正则化L1如何解释。training data
或testing data
上效果不同的问题?对于前者,是否是设计的不够好?可以考虑从new activation function
、adaptive learning rate
入手;对于后者,本节课将从early stopping
、regularization
、dropout
入手讲解。ReLU
与 ReLU - variant
,又详细讲了 Maxout
。1.
中提出的 max pooling 的问题。Adaptive learning rate
的内容。介绍了 RMSProp 、 Momentum 与 Adam ,具体可以见 【李宏毅2020 ML/DL】P8-9。Early Stopping
的现象,见[小细节](#Early Stopping);L2正则
,L1正则
,二者对比
,weight decay
等,见小细节如上,在前面的层与后面的存在梯度“不对等”的问题,不在同一数量级。
对于 sigmoid
函数,1到正无穷时,其值都是接近1的,变化不大。
这就造成第1层,或者说比较前面的层,其参数即便改变很大,到后面的影响也很小了。
因此,更改激活函数是一个好的解决方案。
选择 ReLU 的理由如下:
Maxout network 是一种 Learnable activation function(lan J. 2013)
Maxout 有办法做到与 ReLU同样效果。如下图。
因此,可以说:ReLU是Maxout的特殊形式。
Maxout 的性质?
Maxout 如何训练?
如上,再一次传播中,我们已经得到 Maxout 网络中选择哪个神经元。
接着,我们就把本次不参与计算的部分拿掉,如下。max函数无法微分,但是在具体实践中,我们可以根据数据把max函数转换成某个具体函数,再对这个转化后的 thinner linear network 进行微分
。
如上图,很有可能当 train loss 逐渐减小时,test loss 不降反升了。
考虑到bias与平滑几乎没有关系,因此正则只是对w的处理。
对于 L2 ,其效果有一种 Weight Decay
的效果。
绝对值如何微分?使用sgn
这个函数来近似。
对于 L1 ,其减去了一个固定值
,其值与
大小无关。因此,用 L1 训练完,还可能出现比较大的参数,而且其在每次下降是是一个固定的值。这就造成L1的结果中,其参数比较sparse
,有些比较大,很多事接近于0的。在CNN的任务中,使用L1比较合适。
如上图,一些权重,如果不去更新,那么其每次都会越来越小,接近0。这与人脑的运作可能相同。
如上图,对于训练,每次更新参数前,我们用一定概率扔掉一些神经元。
注意:dropout 很有可能让 training 的效果变得更差,但有可能让 testing 的效果变得更好。
是用来解决 testing 的问题的。
而对于训练时,dropout 的使用如下。
一个简单的类比是:
此外,也可以从集体的角度来理解,如上:
假设训练时,p=50%;则测试时,权重就乘上1-p=50%。这样防止得到的值成倍数增长。
对于集成学习 Ensemble
,其训练了多个模型,在使用(测试)时,则加权投票使用。
而 Dropout 则是一种“终极Ensemble”,其训练了 种可能的模型。
并且,Dropout在测试时,所使用的 这个策略,与多个模型求平均效果时相同的。原因如下例。
可见,在最简单的例子中,平均结果与 效果相同。