zoukankan      html  css  js  c++  java
  • 神经网络与机器学习 笔记—泛化和交叉验证

    泛化和交叉验证

    泛化

        在反向传播学习中,一般从一个训练样本开始,而且通过网络中装载尽可能多的训练样本来使用反向传播算法计算一个多层感知器的突触权值。希望这样设计的神经网络可以很好的泛化。对于从未在生成或训练网络时使用过的测试数据,若网络计算的输入-输出映射对他们来说是正确的(或接近于正确)的,我们就认为网络的泛化是很好的。(也就是预知能力)。

        学习过程(即神经网络的训练)可以看作是一个“曲线拟合”的问题。网络本身可以被简单第认为是一个非线性输入-输出映射。这个观点允许我们不在把神经网络的泛化看作是他的一个神秘的特征,而是作为简单的关于输入输出非线性插值的结果。这种网络之所以能够完成有意义的插值过程,主要因为具有连续激活函数的多层感知器导致输出函数同样也是连续的

    良好的泛化恰当的你和非线性映射:

        一个具有良好泛化能力的神经网络,即使当输入数据与训练样本稍有不同时,也能产生正确的输入-输出映射,然而,当神经网络学习太多的输入-输出样本时,他可能会完成训练数据的记忆。这可能在一下情况中出现,找到一个存在于训练数据中的特征,但对于即将要剑魔的固有函数却为假。这种现象被称为“过拟合”或者“过训练”。当网络被过拟合的时候,他就失去了在想进输入/输出模式之间进行泛化的能力。通常这种方法把数据庄仔倒多层感知器要求使用比实际需要更多的隐藏神经元,结果导致在网络的突触权值中存储了输入空间中由于噪声引起的非期望因素。


    过拟合映射:

        为有效的泛化给出充分的训练集大小,下面三个因素对泛化产生影响:

            训练集的大小,以及他如何表示感兴趣的环境。

            神经网络的体系结构。

            当前问题的物理复杂度。

            在实践中,通常训练集大小N=O(W/e)  W是网络中自由参数总数,e是误差,O则是量的阶数。

     

    交叉验证

        反向传播学习的本质是把输入输出映射编码为一个多层感知器的突触权值和阈值。我们希望的是,网络通过良好的训练,使得它充分地学习过去的数据,从而对未来有良好的汉化能力。从这个观点上来看,学习过程意味着对给定的数据集合给出网络参数化的一个选择。具体地,我们可以把网络选择问题看作是从一组候选模型结构(参数)集合中选择符合某个标准“最好”的一个。在这用意义下,统计学中的一个名为交叉验证的标准工具提供了一个好的指导原则。已有的可用数据及首先被随机分割成一个训练集和一个测试集。这个训练集被进一步细分为连个不相交子集:

        估计子集,用来选择模型。

        验证子集,用来测试或者验证模型。

        这里的动机是用一个与参数估计数据集不同的数据集来验证模型。用这个办法可以用训练集来估计不同候选模型的性能,进而选择“最好”的一个。然而,这样选出的具有最优表现的参数值的模型,很可能会导致对验证自己的过渡拟合。为了防止这种情况出现,使用测试集来衡量被选模型的泛化性能,测试集是与验证集不同的集合。

     

    训练的早期停止方法

        通常,用反向传播算法训练的多层感知器分阶段地进行学习,随训练过程的进行实现相当简单的映射函数到更复杂的映射函数。这通过在一个典型情况下载训练中均方误差随着训练回合的增加而减小的例子来证明:均方误差从一个很大的值开始,然后迅速减小,最有随着网络在误差曲面接近局部最小值的时候缓慢地减小。目标函数的复杂度,依据输入向量x定义需要的相应d,当该复杂度小鱼样本大小N时,一号的发话能力为目标,如果通过观察自身训练得到的学习曲线,很难断定何时停止训练最好,如果训练未在合适的时间停止,那么网络可能过拟合训练数据。

        我们可以通过交叉验证来标记过拟合的发生,为此训练数据集被分成估计和验证子集。使用样本的估计子集以通常方法训练网络,但有较小的修改:训练时间被周期性的停止,并且在每个训练周期之后由验证子集测试网络。具体地讲,周期性的估计伴随确认的过程是如下进行的:

        经过一个估计(训练)周期之后,多层感知器的突触权值和偏置都已经固定,网络是在他的前向方式下运作的,从而对验证子集的每个样本测定验证误差。

    当验证阶段完成的时候,估计重新开始另一个周期,这个过程被重复。

    交叉验证的变体

        上述交叉验证的方法称为坚持到底方法(hold out method)。在实际中还有另外一些能找到他们自身应用的交叉验证的变体,特别是在缺乏标定样本的时候。在这样的情况下可以通过把N个样本的可用集合分割为K个子集来使用多重交叉验证方法,K>1;这里假设N对K是可除的。这个模型在除了一个子集之外的其他子集上进行训练,验证误差通过剩下子集上的测试来测量。这个过程总共被执行K次实验,每次使用一个不同的自己进行验证,模型性能的估计是通过求实验中所有的实验的验证平方误差的均值来进行的。多重交叉验证存在一个缺点:因为模型必须训练K次,他可能需要过多的计算量,这里1<K<=N。

        当可用的标定样本的数目N被严格限制的时候,我们可以使用被称为留一方法的多重交叉验证的极端形式。在这种方法中,N-1个样本用来训练模型,并且这个模型通过剩下的一个样本的测试来验证。这个实验总共被重复N次,每次留出一个不同的样本来进行验证。然后通过验证的平方误差在N次实验上求平均。

  • 相关阅读:
    Java反射【三、方法的反射】
    Java反射【二、Class类的使用】
    Java反射【一、概述】
    MySql学习笔记【四、数据相关操作】
    MySql学习笔记【三、表相关操作】
    MySql学习笔记【二、库相关操作】
    MySQL 表查询
    MySQL 表之间的关系
    MySQL 数据类型
    数据库概念 MySQL语法
  • 原文地址:https://www.cnblogs.com/csnd/p/12061923.html
Copyright © 2011-2022 走看看