21年9月6日———有关深度学习的Tips
**在训练的结果中,训练集和测试集都可能不会达到预期的结果,对于训练集结果不好的原因有:
1.模型的架构有问题
2.学习率的问题
而对于测试集可能的原因是:
1.早停
2.正则化
3.Dropout
**
首先针对训练集中模型的架构有问题进行解析:
那么首先要知道一个现象叫做Vanishing Gradient Problem
意思是说,因为sigmoid函数的存在,导致输入的变化并不会产生线性的输出变化(输出的变化率低于输入的变化率),如图所示:
因此在多层的情况下,第一层很大变化的w对输出的影响是很小的,根据这个理念,
第一层的梯度是非常小的(因为经过了很多歌sigmoid),而最后一层的梯度会是最大的(因为只经过了一个sigmoid),那么因此可见,在多层的情况下,输入对输出的影响非常小!
为了改善这个情况,因为原因就出在sigmoid函数上,所以提出改良激活函数ReLU!
ReLU全称为Rectified Linear Unit,整流线性单元。
在p14视频里有讲解有关ReLU和Maxout之间的关系(ReLU是Maxout的特殊情况),那么Maxout这个算法就是说每层中间,
一对输出里只保留最大的那一个,较小的那个被舍弃
那么综上,解决Vanishing Gradient Problem的方法就是使用ReLU,有关改善深度学习模型架构的介绍就到此为止。
接下里介绍训练集中出现的学习率的问题,提出自适应学习率
略,主要讲解Adam算法
对于测试集出现未达到预期效果的解释
对于早停和正则化的概念于书本P107页有解释,略写
着重解释Dropout
如上图,在训练的时候,按照p%的概率去舍弃一部分神经元,用这个新的神经网络去训练数据。因此用这个方法去训练的时候效果是会变差的,因为舍弃了一部分神经元,但是它能让测试结果变得更好,是一种非常之有效消除过拟合的方法。
但是注意,在测试时,是不做Dropout的!
并且如果Dropout率是p%,那么要对所有的权重乘上(1-p)%
那么对这个测试结果会变得更好的解释是:
一群学生,只有个几个再好好做项目,而剩下的并没有好好做(神经元被Dropout了),因此在做项目的几个人就会carry,但是在真正测试的时候,大家都在好好做了,因此就能得到更好的数据结果。
而为什么
Dropout率是p%,那么要对所有的权重乘上(1-p)%
这是一种解释,会显得比较牵强,网上还有其他的说法,值得一看。