东阳的学习记录,坚持就是胜利
文章目录
技巧1:不要总是让过拟合背锅
下图表示了深度学习的过程:
- 经过神经网络训练出来的模型如果在训练集上表现良好,但是在测试集上表现不好,那这就是过拟合;
- 如果在训练集上都没有比较好的结果,这个时候就不是过拟合的锅,而应该考虑是其他原因
正确地处理方法
针对训练集和测试集(),我们需要做不同的处理。如下图:
- 当在训练集上效果很差时:
- 调整学习率
- 更换激活函数
- 当在测试集效果不好时:
- 提前终止训练(将测试集分出Validation Set)
- 正则化(正则化的效果并不是很好???)
- Dropout(会降低训练集的准确率,增加测试集的准确率)
技巧2:在测试集上效果不好的处理
1. 梯度消失
为什么会发生梯度消失
我们来看下面这张图:
按照极限的思想,输出结果l对权重w求导即梯度的公式:
我们可以看到,如果网络结构很复杂,输入数据多次经过激活函数(sigmoid)后,
δ
(
l
)
\delta(l)
δ(l)将会远小于
δ
(
w
)
\delta(w)
δ(w),从而造成梯度消失。
如何解决梯度消失
使用ReLU
- 更快收敛
- 生物上的理由
- 无穷多不同bias的sigmoid函数叠加的结果
- 可以解决梯度消失的问题(不会有smaller gradients)
ReLU - variant
- Leaky ReLU
- Parametric ReLU
Maxout
Maxout是ReLU的一般化,见下图:
如上图,maxout做的工作就是将上一层输出的结果进行group,并输出其中最大值(类似于最大池化)。结果如下。
分组中元素个数不同,可以得到不同形状的激活函数
注意:maxout并不会导致有很多的参数缺失,因为对于每一个输入,都会得到不同的结果,最后,每一个参数都能够被训练到。
2. 调整学习率
即优化器的选择。
Adagrad
RMSProp
每一次的学习率都除上一个
δ
0
\delta_0
δ0. 这个
δ
0
\delta_0
δ0等于参数a * 上一次的
δ
0
2
\delta_0^2
δ02 + (1-a)这一次梯度
g
2
g^2
g2
动量法(Momentum)
在实际应用中常常不能找到全局的最优点。使用动量法可以一定程度上避免定六再局部最优点或者是平台点。
**注意:**并不用过分担心这个问题,在实际问题中,模型往往十分复杂,局部最优解的条件亦十分苛刻(需要在每一个方向上的导数都为0(或小于设定值))。
![在这里插
从上图可以看到,在Momentum中,参数更新的方向等于梯度下降的方向和上一次参数更新方向的矢量和。如下图,类似于物理中的惯性概念。借助惯性可能翻过山坡!!!
Adam
即为:RMSProp + Momentum
技巧3:训练集上表现好测试集上表现不好(过拟合)
1. 提前终止训练
将训练集划出一部分做Validation Set,让训练收敛于验证集的最低点,而不是训练集的最低点。
2. 正则化
正则化的目的是使得训练出来的参数更小,函数曲线更平滑,增加模型的抗干扰能力。
L1正则化
L1的操作是,当参数大于0时减去一个正数,小于0时,减去一个负数,通过这种方法,使得系数接近于0.
L2正则化
L1正则化和L2正则化的区别
从以上分析可以看出L1正则化和L2正则化使得参数趋于0的原理是不同的,L1正则化是通过减去一个值使得参数趋于0,L2正则化是通过乘以一个小于1的数使得参数趋于0.
- 在经过L1正则化后,得到的米性参数中仍然含有比较大的值;
- L2正则化后,参数分布更均匀,总体趋于0,并没有很大的参数。
3. Dropout
每次更新参数之前,对网络中的神经元以概率p决定是否丢弃。
注意:
- 在训练集Dropout,测试集不需要Dropout
- 在训练集经过dropout后,在测试时,需要将w的值乘以(1-p),例如,若以0.5的概率dropout,训练得到的w=1, 则测试时设置w=0.5.
- dropout在线性网络中的表现更好。(可以配合ReLU和Maxout使用)
为什么Dropout有用
形象的理解
当参数变少时,单个参数被更好地训练了!!!
一个正式的理由(Ensemble集成学习的思想)
将每个minibatch使用dropout得到的不同模型(因随机丢弃神经元,可视为不同的models)的参数求平均值。这些不同网络的参数时共享的。
为什么dropout后的参数需要乘上(1-p)