主要内容GydF4y2Ba

提高浅层神经网络泛化,避免过度装备GydF4y2Ba

提示GydF4y2Ba

要了解如何为深度学习网络设置参数,请参阅GydF4y2Ba设置参数和火车卷积神经网络GydF4y2Ba。GydF4y2Ba

神经网络训练过程中出现的一个问题叫做GydF4y2Ba过度装箱。训练集的错误被驱动到非常小的值,但是当新数据被呈现给网络时,错误很大。网络已经记住了训练示例,但它尚未学习到GydF4y2Ba归纳新情况。GydF4y2Ba

下图显示了经过训练以近似噪声正弦函数的1-20-1神经网络的响应。下面的正弦函数用虚线表示,噪声测量用+符号表示,神经网络响应用实线表示。很明显,这个网络对数据进行了过度拟合,不能很好地泛化。GydF4y2Ba

改进网络泛化的一种方法是使用刚好足够大的网络来提供适当的匹配。使用的网络越大,网络所能创建的功能就越复杂。如果你使用一个足够小的网络,它将没有足够的能量来过度拟合数据。运行GydF4y2Ba神经网络设计GydF4y2Ba例子GydF4y2Bannd11gn.GydF4y2Ba[GydF4y2BaHDB96.GydF4y2Ba]调查如何降低网络的大小可以防止过度拟合。GydF4y2Ba

不幸的是,事先难以知道网络应该是有多大的网络。有另外两种方法可以改善在深度学习工具箱™软件中实现的泛化:正规化和早期停止。下一节描述了实现它们的这两种技术和程序。GydF4y2Ba

请注意,如果网络中的参数数量远小于培训集中的点总数,那么很少或没有过度装备的机会。如果您可以轻松收集更多数据并增加培训集的大小,则无需担心以下技术以防止过度装备。其余部分仅适用于您希望充分利用有限的数据供应的那些情况。GydF4y2Ba

再培训神经网络GydF4y2Ba

通常,每个BackProjagation培训会话以不同的初始权重和偏置,以及与训练,验证和测试集的不同分区。这些不同的条件可能导致同样问题的解决方案。金宝搏官方网站GydF4y2Ba

培训多个网络是一个好主意,以确保找到具有良好普遍的网络。GydF4y2Ba

在这里,将数据集加载并分为两部分:设计网络的90%,10%用于测试所有。GydF4y2Ba

[x,t] = bodyfat_dataset;q =尺寸(x,2);Q1 =地板(Q * 0.90);Q2 = Q  -  Q1;IND = RANDPERM(Q);Ind1 = IND(1:Q1);IND2 = IND(Q1 +(1:Q2));x1 = x(:,IND1);t1 = t(:,IND1);x2 = x(:,Ind2); t2 = t(:, ind2);

接下来,在数据集的第一部分上选择并训练网络架构,每个网络在数据集的第二部分上的均方错误。GydF4y2Ba

net = feedforwardnet(10);numnn = 10;nn =细胞(1,numnn);perfs = zeros(1,numnn);对于i = 1:numnn fprintf('训练%d /%d \ n',i,numnn);nn {i} =火车(net,x1,t1);y2 = nn {i}(x2);perfs(i)= MSE(网,T2,Y2);结尾GydF4y2Ba

每个网络将从不同的初始权重和偏差开始训练,并将第一个数据集划分为训练集、验证集和测试集。注意,测试集是对每个网络的泛化的一个很好的度量,但不是对所有的网络,因为作为一个网络的测试集的数据可能会被其他神经网络用于训练或验证。这就是为什么原始数据集被分成两个部分,以确保保留一个完全独立的测试集。GydF4y2Ba

具有最低性能的神经网络是最适合数据集的第二部分的神经网络。GydF4y2Ba

多个神经网络GydF4y2Ba

改善泛化的另一种简单的方法,特别是在由嘈杂的数据或小型数据集引起的情况下,是培训多个神经网络和平均输出。GydF4y2Ba

例如,这里有10个神经网络在小问题上培训,并且与平均值的平均误差相比,它们的均匀误差训练。GydF4y2Ba

首先,将数据集加载并分为设计和测试集。GydF4y2Ba

[x,t] = bodyfat_dataset;q =尺寸(x,2);Q1 =地板(Q * 0.90);Q2 = Q  -  Q1;IND = RANDPERM(Q);Ind1 = IND(1:Q1);IND2 = IND(Q1 +(1:Q2));x1 = x(:,IND1);t1 = t(:,IND1);x2 = x(:,Ind2); t2 = t(:, ind2);

然后,训练了十个神经网络。GydF4y2Ba

net = feedforwardnet(10);numnn = 10;nets = cell(1,numnn);对于i = 1:numnn fprintf('训练%d /%d \ n',i,numnn)nets {i} =火车(net,x1,t1);结尾GydF4y2Ba

接下来,每个网络在第二个数据集上测试,其中单独的性能和计算平均输出的性能。GydF4y2Ba

perfs = zeros(1,numnn);y2total = 0;对于i = 1:numnn neti = nets {i};y2 = neti(x2);perfs(i)= MSE(Neti,T2,Y2);Y2Total = Y2Total + Y2;结束y2averageoutput = y2total / numnn;PerfavergedOutputs = MSE(网络{1},T2,Y2VerageOutput)GydF4y2Ba

平均输出的平均平方误差可能低于大多数个人性能,也许不是全部。它可能会概括到其他新数据。GydF4y2Ba

对于一些非常困难的问题,可以训练一百个网络,并且对任何输入采取的输出的平均值。这对于一个小型嘈杂的数据集特别有用,与贝叶斯正则化培训函数一起使用GydF4y2BaTrainbr.GydF4y2Ba, 如下面所描述的。GydF4y2Ba

早期停止GydF4y2Ba

调用更改泛化的默认方法GydF4y2Ba早期停止GydF4y2Ba。自动为所有监督网络创建功能提供此技术,包括BackProjagation网络创建功能,例如GydF4y2BaFeedforwardNet.GydF4y2Ba。GydF4y2Ba

在这种技术中,可用数据被分成三个子集。第一个子集是训练集,用于计算梯度和更新网络权值和偏差。第二个子集是验证集。在训练过程中监控验证集上的错误。验证错误通常在训练的初始阶段减少,训练集错误也是如此。然而,当网络开始过度拟合数据时,验证集上的错误通常开始上升。当验证错误在指定次数的迭代中增加时(GydF4y2Banet.trainparam.max_fail.GydF4y2Ba),训练停止,返回验证错误的最小值和偏差。GydF4y2Ba

在训练期间不使用测试设置错误,但它用于比较不同的模型。在培训过程中绘制测试设置错误也很有用。如果测试集中的错误以明显不同的迭代号达到最小值,则这可能表示数据集的差分。GydF4y2Ba

提供四个函数,用于将数据分成培训,验证和测试集。他们是GydF4y2BadividerandGydF4y2Ba(默认),GydF4y2BadivideblockGydF4y2Ba那GydF4y2BadivideintGydF4y2Ba,GydF4y2BadivideindGydF4y2Ba。您可以使用此属性访问或更改网络的划分功能:GydF4y2Ba

net.dividefcn.GydF4y2Ba

这些函数中的每一个都需要自定义其行为的参数。存储这些值,可以使用以下网络属性更改:GydF4y2Ba

net.divideparam.GydF4y2Ba

索引数据分部(划分)GydF4y2Ba

创建一个简单的测试问题。对于完整的数据集,生成嘈杂的正弦波,其中201个输入点范围为-1至1,步长为0.01:GydF4y2Ba

p = [-1:0.01:1];t = sin(2 * pi * p)+ 0.1 * randn(尺寸(p));GydF4y2Ba

按索引划分数据,以便连续分配给训练集,验证集和连续测试的测试:GydF4y2Ba

trainInd = 1:3:201;testInd = 3:3:201;[trainP, valP testP] = divideind (p trainInd valInd testInd);[由于,valT testT] = divideind (t trainInd valInd testInd);GydF4y2Ba

随机数据划分(DiverDand)GydF4y2Ba

可以对输入数据进行随机划分,将60%的样本分配到训练集,20%分配到验证集,20%分配到测试集,如下所示:GydF4y2Ba

[训练,valp,testp,训练,valind,testind] = divierand(p);GydF4y2Ba

此功能不仅划分输入数据,还返回指数,以便您可以使用相应的划分目标数据GydF4y2BadivideindGydF4y2Ba:GydF4y2Ba

[由于,valT testT] = divideind (t trainInd valInd testInd);GydF4y2Ba

阻止数据分部(DivideBlock)GydF4y2Ba

您还可以随机划分输入数据,使得第一个60%的样本被分配给训练集,接下来的20%到验证集,并且最后20%到测试集,如下所示:GydF4y2Ba

[训练,valp,testp,训练,valind,testind] = divideblock(p);GydF4y2Ba

相应地除以目标数据GydF4y2BadivideindGydF4y2Ba:GydF4y2Ba

[由于,valT testT] = divideind (t trainInd valInd testInd);GydF4y2Ba

交错数据划分(decideint)GydF4y2Ba

另一种划分输入数据的方法是根据百分比在训练集、验证集和测试集之间循环样本。您可以将60%的样本交叉到训练集,20%到验证集,20%到测试集,如下所示:GydF4y2Ba

[TRUSTP,VALP,TESTP,训练,VALIND,TESTIND] = DIVIDEINT(P);GydF4y2Ba

相应地除以目标数据GydF4y2BadivideindGydF4y2Ba。GydF4y2Ba

[由于,valT testT] = divideind (t trainInd valInd testInd);GydF4y2Ba

正则化GydF4y2Ba

调用另一种改善泛化的方法GydF4y2Ba正规化。这涉及修改性能函数,该性能函数通常选择是训练集上网络错误的平方和。下一节解释了如何修改性能函数,以下部分介绍了自动设置最佳性能功能以实现最佳概率的例程。GydF4y2Ba

修改性能功能GydF4y2Ba

典型的GydF4y2Ba用于训练前馈神经网络的性能函数是网络错误的平均平方和。GydF4y2Ba

FGydF4y2Ba =GydF4y2Ba mGydF4y2Ba S.GydF4y2Ba E.GydF4y2Ba =GydF4y2Ba 1GydF4y2Ba NGydF4y2Ba σ.GydF4y2Ba 一世GydF4y2Ba =GydF4y2Ba 1GydF4y2Ba NGydF4y2Ba (GydF4y2Ba E.GydF4y2Ba 一世GydF4y2Ba )GydF4y2Ba 2GydF4y2Ba =GydF4y2Ba 1GydF4y2Ba NGydF4y2Ba σ.GydF4y2Ba 一世GydF4y2Ba =GydF4y2Ba 1GydF4y2Ba NGydF4y2Ba (GydF4y2Ba T.GydF4y2Ba 一世GydF4y2Ba -GydF4y2Ba α.GydF4y2Ba 一世GydF4y2Ba )GydF4y2Ba 2GydF4y2Ba

如果您通过添加一个由网络权重和偏差平方和的平均值组成的术语来修改性能函数,那么就有可能改进泛化GydF4y2Ba mGydF4y2Ba S.GydF4y2Ba E.GydF4y2Ba R.GydF4y2Ba E.GydF4y2Ba GGydF4y2Ba =GydF4y2Ba γ.GydF4y2Ba *GydF4y2Ba mGydF4y2Ba S.GydF4y2Ba W.GydF4y2Ba +GydF4y2Ba (GydF4y2Ba 1GydF4y2Ba -GydF4y2Ba γ.GydF4y2Ba )GydF4y2Ba *GydF4y2Ba mGydF4y2Ba S.GydF4y2Ba E.GydF4y2Ba , 在哪里GydF4y2Ba γ.GydF4y2Ba 是绩效比率,和GydF4y2Ba

mGydF4y2Ba S.GydF4y2Ba W.GydF4y2Ba =GydF4y2Ba 1GydF4y2Ba NGydF4y2Ba σ.GydF4y2Ba jGydF4y2Ba =GydF4y2Ba 1GydF4y2Ba NGydF4y2Ba W.GydF4y2Ba jGydF4y2Ba 2GydF4y2Ba

使用这种性能函数使网络具有较小的权重和偏差,这迫使网络响应更光滑,不太可能过度装备。GydF4y2Ba

下面的代码重新初始化之前的网络,并使用带有正则化性能函数的BFGS算法对其进行重新训练。这里性能比率被设置为0.5,这给予均方误差和均方权重相等。GydF4y2Ba

[x,t] = simplefit_dataset;net = feedforwardnet(10,'trainbfg');net.dividefcn ='';net.trainparam.echs = 300;net.trainparam.goal = 1E-5;net.performparam.regularization = 0.5;净=火车(网,x,t);GydF4y2Ba

正规化的问题是难以确定性能比参数的最佳值。如果您使此参数太大,您可能会过度装备。如果该比率太小,网络没有充分适合训练数据。下一节描述了一个自动设置正则化参数的例程。GydF4y2Ba

自动规则化(TrainBR)GydF4y2Ba

希望确定最佳状态GydF4y2Ba以自动时尚的正则化参数。这个过程的一种方法是GydF4y2BaDavid Mackay的贝叶斯框架[GydF4y2BaMack92.GydF4y2Ba]。在该框架中,假设网络的权重和偏差是具有指定分布的随机变量。正则化参数与与这些分布相关联的未知差异有关。然后,您可以使用统计技术估算这些参数。GydF4y2Ba

关于贝叶斯正则化的详细讨论超出了本用户指南的范围。结合Levenberg-Marquardt训练使用贝叶斯正则化的详细讨论可以在[GydF4y2BaFoha97.GydF4y2Ba]。GydF4y2Ba

贝叶斯正则化已在功能中实施GydF4y2BaTrainbr.GydF4y2Ba。以下代码显示了如何使用此功能培训1-20-1网络,以近似数字中显示的嘈杂正弦波GydF4y2Ba提高浅层神经网络泛化,避免过度装备GydF4y2Ba。(数据部门通过设置取消GydF4y2Banet.dividefcn.GydF4y2Ba这样的效果GydF4y2BaTrainbr.GydF4y2Ba从早期停止孤立。)GydF4y2Ba

x = -1:0.05:1;t = sin(2 * pi * x)+ 0.1 * randn(尺寸(x));net = feedforwardnet(20,'trainbr');净=火车(网,x,t);GydF4y2Ba

该算法的一个特征是它提供了一种测量网络有效地使用了网络参数(权重和偏差)的量度。在这种情况下,最终训练的网络使用大约12个参数(指示GydF4y2Ba#一样GydF4y2Ba在打印输出中)在1-20-1网络中的61个总重量和偏差中。无论网络中的参数数量有多大,这个有效的参数都应保持大致相同。(这假设网络已经过足够数量的迭代培训以确保收敛。)GydF4y2Ba

这GydF4y2BaTrainbr.GydF4y2Ba算法通常在缩放网络输入和目标时最佳地工作,使得它们大致落在范围内[-1,1]。这是测试问题的情况。如果您的输入和目标不在此范围内,则可以使用该功能GydF4y2Bamapminmax.GydF4y2Ba或者GydF4y2BaMapstd.GydF4y2Ba执行缩放,如上所述GydF4y2Ba选择神经网络输入 - 输出处理功能GydF4y2Ba。网络创建的网络GydF4y2BaFeedforwardNet.GydF4y2Ba包括GydF4y2Bamapminmax.GydF4y2Ba作为输入和输出处理函数默认情况下。GydF4y2Ba

下图显示了训练网络的响应。与前图相比,其中1-20-1网络过度使用数据,在此处您看到网络响应非常接近底层正弦函数(虚线),因此,网络将概括为新输入。您可以尝试过较大的网络,但网络响应永远不会过度使用数据。这消除了确定最佳网络大小所需的猜测。GydF4y2Ba

使用时GydF4y2BaTrainbr.GydF4y2Ba,重要的是让算法运行,直到有效的参数融合。培训可能会停止通过消息“最大笨拙”。这是典型的,并且是算法真正融合的良好指示。您还可以告诉算法,如果SUM平方误差(SSE)和SWAR平方权重(SSW)在几个迭代中相对恒定,则算法会聚。当发生这种情况时,您可能希望单击GydF4y2Ba停止培训GydF4y2Ba培训窗口中的按钮。GydF4y2Ba

早期停止和正规化的摘要和讨论GydF4y2Ba

早期停止和正常化可以确保当您正确应用时的网络泛化。GydF4y2Ba

对于早期停止,您必须小心不要使用收敛过快的算法。如果你正在使用一个快速的算法(比如GydF4y2BaTrainlm.GydF4y2Ba),设置训练参数,使收敛相对较慢。例如,设置GydF4y2BaμGydF4y2Ba设置为一个相对较大的值,例如1,并设置GydF4y2Bamu_dec.GydF4y2Ba和GydF4y2Bamu_inc.GydF4y2Ba靠近1的值,分别为0.8和1.5。培训职能GydF4y2BatrainscgGydF4y2Ba和GydF4y2BaTrainbr.GydF4y2Ba通常在早期停止工作。GydF4y2Ba

随着早期停止,验证集的选择也很重要。验证集应该代表培训集中的所有点。GydF4y2Ba

当您使用贝叶斯正常化时,在达到收敛之前,培训网络非常重要。SUM平方误差,SUM方针和有效数量的参数应在网络融合时达到恒定值。GydF4y2Ba

对于早期停止和正则化,从几个不同的初始条件开始训练网络是一个好主意。在某些情况下,这两种方法都有可能失败。通过测试几个不同的初始条件,可以验证强大的网络性能。GydF4y2Ba

当数据集很小并且您是训练函数近似网络时,贝叶斯正则化提供比早期停止更好的泛化性能。这是因为贝叶斯正则化不要求验证数据集与训练数据集分开;它使用所有数据。GydF4y2Ba

要提供一些深入了解算法的性能,早期停止和贝叶斯正则化在几个时都会测试GydF4y2Ba基准数据集,列于下表中。GydF4y2Ba

数据集标题GydF4y2Ba

数量的点GydF4y2Ba 网络GydF4y2Ba 描述GydF4y2Ba

球GydF4y2Ba

67.GydF4y2Ba 2-10-1GydF4y2Ba 用于球位置测量的双传感器校准GydF4y2Ba

sin (5% N)GydF4y2Ba

41.GydF4y2Ba 1-15-1GydF4y2Ba 5%水平高斯噪声的单周期正弦波GydF4y2Ba

正弦(2%n)GydF4y2Ba

41.GydF4y2Ba 1-15-1GydF4y2Ba 单周期正弦波,高斯噪声达到2%水平GydF4y2Ba

引擎(全部)GydF4y2Ba

1199GydF4y2Ba 2-30-2GydF4y2Ba 发动机传感器完整数据集GydF4y2Ba

发动机(1/4)GydF4y2Ba

300GydF4y2Ba 2-30-2GydF4y2Ba 发动机传感器-1 / 4数据集GydF4y2Ba

雪橇(全部)GydF4y2Ba

264.GydF4y2Ba 5-15-3GydF4y2Ba 胆固醇测量完整数据集GydF4y2Ba

霍尔斯特(1/2)GydF4y2Ba

132.GydF4y2Ba 5-15-3GydF4y2Ba 胆固醇测量-1 / 2数据集GydF4y2Ba

这些数据集具有各种尺寸,具有不同数量的输入和目标。使用两个数据集,网络训练一次使用所有数据,然后仅使用数据的一小部分培训。这说明了贝叶斯正则化的优势在数据集较小时如何变得更加明显。除了正弦数据集之外,可以从物理系统获得所有数据集。通过将各种噪声水平添加到正弦波的单个循环来实现这两者。这两个数据集上的算法的性能说明了噪声的效果。GydF4y2Ba

下表总结了七个测试集上提前停止(ES)和贝叶斯正则化(BR)的性能。(这GydF4y2BatrainscgGydF4y2Ba算法用于早期停止测试。其他算法也提供类似的性能。)GydF4y2Ba

均方检验集误差GydF4y2Ba

方法GydF4y2Ba 球GydF4y2Ba 发动机(全部)GydF4y2Ba 发动机(1/4)GydF4y2Ba 克洛伊(所有)GydF4y2Ba 辣味(1/2)GydF4y2Ba 正弦(5%n)GydF4y2Ba sin (2% N)GydF4y2Ba
es.GydF4y2Ba 1.2E-1GydF4y2Ba 1.3依照GydF4y2Ba 1.9E-2GydF4y2Ba 1.2E-1GydF4y2Ba 1.4 e 1GydF4y2Ba 1.7E-1GydF4y2Ba 1.3 e 1GydF4y2Ba
布尔GydF4y2Ba 1.3 e - 3GydF4y2Ba 2.6E-3GydF4y2Ba 4.7E-3GydF4y2Ba 1.2E-1GydF4y2Ba 9.3E-2GydF4y2Ba 3.0E-2GydF4y2Ba 6.3E-3GydF4y2Ba
ES / B.GydF4y2Ba 92.GydF4y2Ba 5.GydF4y2Ba 4.GydF4y2Ba 1GydF4y2Ba 1.5GydF4y2Ba 5.7GydF4y2Ba 21.GydF4y2Ba

在大多数情况下,您可以看到贝叶斯正则化比早期停止更好。当数据集很小时,性能改进是最引人注目的,或者数据集中几乎没有噪声。例如,球数据集从具有很少噪声的传感器获得。GydF4y2Ba

虽然贝叶斯正规化的泛化表现通常比早期停止更好,但情况并非总是如此。此外,在工具箱中实现的贝叶斯正则化的形式也不会在功能近似问题上表现出模式识别问题。这是因为在Levenberg-Marquardt算法中使用的Hessian的近似值在网络输出饱和时不准确,就像模式识别问题中的情况一样。贝叶斯正则化方法的另一个缺点是它通常比早期停止收敛更长时间。GydF4y2Ba

发布分析(回归)GydF4y2Ba

表现的GydF4y2Ba培训的网络可以在某种程度上通过训练,验证和测试集的错误来衡量,但更详细地调查网络响应通常是有用的。一个选项是在网络响应和相应的目标之间执行回归分析。常规GydF4y2Ba回归GydF4y2Ba用于执行此分析。GydF4y2Ba

以下命令说明了如何在培训的网络上执行回归分析。GydF4y2Ba

x = [-1:.05:1];t = sin(2 * pi * x)+ 0.1 * randn(尺寸(x));net = feedforwardnet(10);净=火车(网,x,t);y = net(x);[r,m,b] =回归(t,y)GydF4y2Ba
r = 0.9935 m = 0.9874 b = -0.0067GydF4y2Ba

网络输出和相应的目标被传递到GydF4y2Ba回归GydF4y2Ba。它返回三个参数。前两个,GydF4y2BamGydF4y2Ba和GydF4y2BaB.GydF4y2Ba,对应于斜坡和GydF4y2BayGydF4y2Ba-将目标与网络输出关联的最佳线性回归的截距。如果有一个完美的拟合(输出正好等于目标),斜率将是1,而GydF4y2BayGydF4y2Ba-Intercept是0.在这个例子中,您可以看到数字非常贴近。第三个变量返回GydF4y2Ba回归GydF4y2Ba是输出和目标之间的相关系数(R值)。它是目标解释输出的变化的衡量标准。如果此数字等于1,则目标和输出之间存在完美相关性。在该示例中,数字非常接近1,表示良好的合适。GydF4y2Ba

下面的图展示了由GydF4y2Ba回归GydF4y2Ba。将网络输出与目标绘制为开放圆圈。最好的线性配合由虚线表示。完美拟合(等于目标的输出)由实线表示。在该示例中,难以将最佳线性配合线与完美的合适线区分开,因为合身非常好。GydF4y2Ba