在上一篇“深度学习 (DeepLearning) 基础 [3]---梯度降低法”中咱们介绍了梯度降低的主要思想以及优化算法。本文将继续学习深度学习的基础知识,主要涉及:html
如下均为我的学习笔记,如有错误望指出。git
要理解欠拟合和过拟合,咱们须要先清楚一对概念,即误差和方差。
误差和方差是深度学习中很是有用的一对概念,尤为是能够帮助咱们理解模型的欠拟合和过拟合。github
理解了误差和方差的概念以后,那模型欠拟合和过拟合又是什么呢?算法
过拟合:对应于高方差的状况,即模型虽然在训练集上的精度很高,可是在测试集上的表现确差强人意。这是因为模型过分拟合了训练集,将训练集特有的性质当成了全部数据集的通常性质,致使其在其余数据集上的泛化能力特别差。以下图所示(蓝色线为预测的模型,能够发现彷佛过分拟合了训练数据):网络
正确模型的拟合曲线以下图所示(与上面欠拟合和过拟合的曲线图对比,能够更好地帮助咱们理解欠拟合和过拟合):架构
在理解了模型欠拟合和过拟合的概念以后,若是咱们在训练模型的过程当中遇到了这两类问题,咱们怎么解决呢?函数
解决欠拟合:学习
(1) 使用更复杂的网络结构,如增长隐藏层数目,隐藏层结点数等。(由于神经网络若是层数和节点数足够的话,是能够模拟任何函数的)测试
(2) 训练更长时间,即增长神经网络模型的参数更新次数。(更新次数不够可能使得模型还没找到合适的参数使损失最小化,下降了模型精度)优化
(3) 使用其余更合适的神经网络架构,如前馈神经网络、卷积神经网络(CNN)、循环神经网络(RNN)、深度信念网络(DBN)等等(后续将进一步学习各类类型的神经网络);
解决过拟合:
(1) 使用更多的训练数据。(如果咱们能把当前领域内全部的训练数据都拿来学习个够,那么咱们的模型还会在这个领域的数据上表现差吗?不可能的,对吧!)
(2) 为模型添加正则化模块 (regularization)。(对于正则化概念以及为何正则化能解决过拟合问题,在本文后续进行介绍)
(3) 使用其余更合适的神经网络架构。
对于以上策略通常的思考顺序,不管是欠拟合仍是过拟合,当咱们遇到了,都是优先考虑能不能使用上述中讲到的 (1) 和 (2) 来解决。若是不行的话再考虑 (3),由于重构一个神经网络的话相对于其余解决方法开销比较大。
直观理解:正则化是用来防止模型过拟合的一种方法,其作法是经过在模型损失函数中加入一项正则项,使得其在训练数据拟合损失和模型复杂度中达到一种权衡。
一般加入正则化的损失函数为以下形式:
其中第一项为模型本来的损失函数,第二项
为正则化项,w为权值参数矩阵。若q=1,则为咱们经常使用的L1正则化;若q=2,则为咱们经常使用的L2正则化。
理解了正则化概念以及加入正则化的损失函数的形式以后,回归到一个更重要的问题,即为何正则化可以防止模型过拟合呢?如下分别从三个角度来理解正则化在模型训练中的做用。
(1) 从模型拟合曲线的函数形式来看
为了回答上述问题,咱们须要先理解过拟合状况下学习出来的拟合函数是什么样子的。能够看到上述过拟合部分的拟合曲线图(emm,就是扭来扭去的那张),图中的数据点实际上只须要一个二次函数就可以很好拟合了。可是从图中来看,过拟合状况下学习到的函数,确定是大于二次的高次函数了。 假设该过拟合获得的函数为p次函数,以下所示:
实际上正确的拟合函数为二次函数,以下所示:
咱们能够发现,要是咱们可以更新权值参数w,使得w中的w0、w1和w2非0,而其他的权值均为0的话,咱们是能够获得一个可以比较好地拟合上述曲线的模型的。而正则化就是起到上述这个做用(让一些没必要要的权值参数为0),从而来防止模型过拟合的。
(2) 从神经网络模型的复杂度来看
如今回过头来看上述对于正则化的直观理解,里面有讲到模型复杂度,那模型复杂度是什么呀?咱们能够将其通俗理解成权值参数的个数,由于网络的权值参数越多表明着神经网络更庞大(拥有更多的层和更多的节点以及更多的边),天然而然模型就更复杂了(若是网络中某条边的权重w为0的话,那这条边不就没了嘛,那模型不就更简单一些了嘛,这就是正则化要作的事吧,以上为我的理解)。
(3) 从加了正则化项的损失函数来看
如今再来看上述加入正则化的损失函数的通常形式,第一项为本来的损失函数,第二项为正则化项。如下分为两点来进行分析:
须要说明的是:虽然L1正则化和L2正则化均可以防止模型过拟合,可是L1正则化相比于L2正则化会更容易产生稀疏权值矩阵(也就是说,权值矩阵中更多的权值为0)。至于缘由,因为我的能力问题,可能解释不太清楚,能够参考知乎问题--L1 相比于 L2 为何容易得到稀疏解?