datawhale李宏毅机器学习——task05“网络设计技巧”

由前面的学习内容知道,建立深度学习的三个步骤是
①选择函数集②评估函数③选择最好的函数
做完三个步骤之后会得到自己的神经网络,这时候需要检查神经网络的表现,检查哪些方面呢?
1)首先是神经网络在训练集上是否得到了好的结果,如果没有,可以回顾前面的步骤进行调整和修改。
2)如果在训练集上有好的效果,再看神经网络在测试集上的表现,如果在测试集上效果不好,说明网络出现了过拟合。
(值得说明的是,只有当网络在训练集表现好而测试集表现不好时,才是出现了过拟合。不是所有测试集表现不好都是过拟合的原因。)
如果在训练集上没有好的效果,可以从改变激活函数和学习率上进行调整。
比如传统的sigmoid激活函数,会导致梯度消失的问题,梯度消失就是靠近输出层的梯度会很大,而靠近输入层的参数更新十分缓慢,这样导致前几层参数还没更新,后几层就已经收敛了。为了解决这个问题,将传统的sigmoid激活函数改为relu、maxout等非线性激活函数。
除了改变激活函数,还可以改变学习率来提高训练集的效果。adagrad用固定的学习率除以这个参数过去所有梯度值的平方和开根号,得到新的参数值。但是在做深度学习时,这个损失函数可以是任意形状的。
当参数在损失函数坡度较大的地方时,我们期望学习率小一些,而在坡度较缓的地方,我们期望学习率大一些。也就是说,我们希望学习率是能够随着损失函数不同位置做出适应性变化的。在这个需求上,adagrad做不到,但RMSProp可以。
另外,在做深度学习的时候,有时候参数会卡在局部最低点或者平坦的梯度为0的位置。要解决这个问题,可以加入参数的更新惯性,这样参数到了接近平坦的位置也会因为惯性继续往前走,到了局部最低点也会因为惯性的作用翻过山坡,继而走到全局最低点。这种在RMSPtop的基础上加入惯性的学习率更新方法叫做Adam(RMSPtop+Momentum)。
如果在训练集效果很好,但在测试集上却不尽人意,说明出现了过拟合,就可以使用专门针对过拟合的工具和方法去解决,比如正则化,正则化是在原来的损失函数基础上加一个正则项,可以将没有的神经元去除。
另一个针对过拟合的方法是dropout,dropout只是在训练的时候用,在测试的时候不用。
datawhale李宏毅机器学习——task05“网络设计技巧”_第1张图片
这张图概括了今天的内容。

你可能感兴趣的:(机器学习,网络,深度学习)