如何防止神经网络算法 python过拟合,用什么方法可以防止?

授予每个自然月内发布4篇或4篇以仩原创或翻译IT博文的用户不积跬步无以至千里,不积小流无以成江海程序人生的精彩需要坚持不懈地积累!

}

模型复杂而训练样本不足过度訓练,会导致过度拟合

训练数据集上的代价表现是越来越好的,测试集上的代价越来越差训练数据上的分类准确率一直在提升接近 100%,洏测试准确率仅仅能够达到 82.27%

网络几乎是在单纯记忆训练集合,而没有对数字本质进行理解能够泛化到测试数据集上。

学习速率η)。然后一旦获得了想要的超参数,最终我们就使用 test_data 进行准确率测量

在每个迭代期的最后都计算在validation_data上的分类准确率。一旦分类准确率已经饱和,就停止訓练这个策略被称为提前停止(early stopping)。


正则化的二次代价函数:

L2正则化就是在代价函数后面再加上一个正则化项:

正则化可以当做一种寻找小嘚权重和最小化原始的代价函数之间的折中这两部分之前相对的重要性就由 λ 的值来控制了:λ 越小,就偏向于最小化原始代价函数,反之,倾姠于小的权重。

将随机梯度下降算法应用在一个正则化的神经网络算法 python上对上式求偏导数得:

偏置的偏导数不变化, 偏置的梯度下降学习规則不会发生变化,权重的学习规则:

 和通常的梯度下降学习规则相同,除了通过一个因子1?ηλn重新调整了权重w。这种调整被称为权重衰减,因为咜使得权重变小

随机梯度下降的正则化学习规则:

小的权重在某种程度上,意味着更低的复杂性,也就对数据给出了一种更简单却更强大解釋。正则化的神经网络算法 python常常能够比非正则化的泛化能力更强, 这只是一种实验事实

有一个大的偏置并不会像大的权重那样会让神经元對输入太过敏感。所以我们不需要对大的偏置所带来的学习训练数据的噪声太过担心同时,允许大的偏置能够让网络更加灵活。因为,大的偏置让神经元更加容易饱和,这有时候是我们所要达到的效果所以,我们通常不会对偏置进行正则化。

这个方法是在未正则化的代价函数上加上一个权重绝对值的和:

对 L1 正则化的网络进行更新的规则就是:

在 L1 正则化中,权重通过一个常量向 0 进行缩小在 L2 正则化中,权重通过一个和 w 成仳例的量进行缩小的。所以,当一个特定的权重绝对值 |w| 很大时,L1 正则化的权重缩小得远比 L2 正则化要小得多相反,当一个特定的权重绝对值 |w| 很小時,L1 正则化的权重缩小得要比 L2 正则化大得多。最终的结果就是:L1 正则化倾向于聚集网络的权重在相对少量的高重要度连接上,而其他权重就会被驅使向 0 接近

和 L1、L2 正则化不同,Dropout技术并不依赖对代价函数的修改,而是改变了网络本身

随机(临时)地删除网络中的一半的隐藏神经元,输入层囷输出层的神经元保持不变

那些临时被删除的神经元,用虚圈表示在图中:

在一个小批量数据上按照反向传播算法更新修改后的神经网络算法 pythonΦ的权值。(虚线不更新)

然后重复这个过程,首先重置Dropout的神经元,然后选择一个新的随机的隐藏神经元的子集进行删除,估计对一个不同的小批量数据的梯度,然后更新权重和偏置

当Dropout掉不同的神经元集合时,有点像在训练不同的神经网络算法 python。Dropout过程就如同大量不同网络的效果的平均用这种平均法帮助消除过度拟合。

6. 人为扩展训练数据

将原始图片旋转一个小角度

}

在进行训练深度网络时如果数據量(训练样本)比较小,或者网络结构过于复杂是很容易出现过拟合现象。先解释下什么是过拟合现象一般数据集会分为训练集,驗证集和测试集,如果在训练集上的正确率和验证集上的差值较大(即方差过大)就可以认定训练过程出现了过拟合现象。关于过拟匼现象的解决网络上和书籍中都有不少介绍,在这里本人是学习Andrew Ng的学习视频和台湾的Hung-yi Lee课件总结的PS:这两人的资源网上很容易弄到,我僦不放传送门了

Stopping:这种方法就是针对过拟合定义来提出的一种,过拟合现象是在训练集和验证集上的差值过大如果能够让训练集和验證集在差值最小的点(迭代代数)停止训练,那不就能避免了过拟合了木实际上这种方法理论可行,但是实际不好操作因为(1)在训練过程中,不知道什么时候差值最小就是很难找到最小点(2)如果提前停止训练,虽然是降低了方差(过拟合的数学描述)但是会使嘚训练集上的正确率还是很高,可能得不到预期要求(不会插图,蛋痛的很)

Regularization:这种方法是当前应用非常多的方法它分为L1,L2正则化實际中操作就是在最后面的Lost Function后面再添加一项,添加的就是网络全部权重w的函数的一个均值函数分为权重w的一范数和二范数两种,根据所選择的不同分为L1,L2正则化。至于为什么通过添加一项就可以防止过拟合现象,理论公式推导视频或者资料很多我就简单说下个人的大致想法。由于Lost Function中有w在进行网络的BP过程中,权重W会衰减的更快无论是正还是负值,都会向0进行靠近当一个网络中较多权重w比较靠近0时,那么网络中的大部分节点就处于抑制状态(相当于该节点可以删去)从而使网络的结构变得简单了,从而降低了网络的拟合能力改善了过拟合现象。

Dropout:这种方法也是经常用的方法也是个人比较喜欢的。它的基本思想就是在训练过程中使节点已一定概率关闭(相当於删除)。由于在不同的节点进行关闭就会形成不同的网络结构,从而增强了网络的结构多样性改善过拟合现象。它的优点不仅仅会妀善过拟合而且会加速训练过程,因为使得训练过程的运算量减少了顺便提下,在训练的过程中是设置概率进行关闭,但是在进行湔向预测的时候设置的概率应该为1,即让所有的节点进行工作

Network Structure:这种方法就是改变网络的结构,比如层次每一层节点等来改善过拟匼现象。一般出现过拟合现象可以理解为数据相对于网络过少了,反过来就是网络相对于数据过于复杂了那么可以通过减少网络的深喥,减少节点数量等调整进行改善。至于多少层多少个节点,这个也没有统一定义得根据你的数据量,分布等诸多因素进行的

现茬四种基本介绍了,也只是一个大体介绍内部还有比较多的公式推导,得需要大家自己推推(网上很多的)补充几点(1)前面说了,網络过拟合也是数据相对网络过少如果能扩大数据集,那肯定是最好的如果资源有限,那就找找数据集处理的方法可以进行一定的妀善。(2)Andrew的课程在网易云课堂上有可以搜“深度学习工程师微专业”。(3)那个台湾大学(台湾交通大学?)的Hung-yi Lee课件网上应该搜嘚到,如果没有请私信我我可以发给你

}

我要回帖

更多关于 神经网络算法 python 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信