主要内容

trainingOptions

深度学习神经网络训练选项

描述

例子

选项= trainingOptions (solverName返回指定的优化器的训练选项solverName.要培训网络,请使用培训选项作为输入参数trainNetwork功能。

例子

选项= trainingOptions (solverName名称,值返回训练选项和由一个或多个名称-值对参数指定的附加选项。

例子

全部折叠

创建一组选项来训练网络使用随机梯度下降与动量。每5个周期将学习率降低0.2倍。将训练的最大纪元数设置为20,并在每次迭代中使用包含64个观察值的小批处理。打开训练进度图。

选择= trainingOptions (“个”...“LearnRateSchedule”“分段”...“LearnRateDropFactor”, 0.2,...“LearnRateDropPeriod”5,...“MaxEpochs”, 20岁,...“MiniBatchSize”, 64,...“阴谋”“训练进步”
选择= TrainingOptionsSGDM属性:动力:0.9000 InitialLearnRate: 0.0100 LearnRateSchedule:“分段”LearnRateDropFactor: 0.2000 LearnRateDropPeriod: 5 L2Regularization: 1.0000 e-04 GradientThresholdMethod:“l2norm”GradientThreshold:正MaxEpochs: 20 MiniBatchSize: 64详细:1 VerboseFrequency: 50 ValidationData:[] ValidationFrequency: 50 ValidationPatience:正洗牌:“一旦”CheckpointPath:“ExecutionEnvironment:‘汽车’WorkerLoad: [] OutputFcn:[]阴谋:“训练进步”SequenceLength:“最长”SequencePaddingValue: 0 SequencePaddingDirection:“对”DispatchInBackground: 0 ResetInputNormalization: 1

当您培训深度学习网络时,监控培训进度通常有用。通过在培训期间绘制各种指标,您可以了解培训是如何进展的。例如,您可以确定网络精度是否改进的速度,以及网络是否开始过度使用培训数据。

当你指定“训练进步”随着“阴谋”价值trainingOptions开始网络培训,trainNetwork创建一个数字并在每次迭代时显示培训指标。每次迭代都是对梯度的估计和网络参数的更新。中指定验证数据trainingOptions,图中显示每次验证的度量trainNetwork验证网络。图中描绘了如下内容:

  • 训练精度-每个小批量的分类精度。

  • 平滑的训练精度—平滑训练精度,将平滑算法应用到训练精度上获得。与不平滑的精度相比,它的噪声更小,因此更容易发现趋势。

  • 验证准确性-整个验证集的分类精度(指定使用trainingOptions).

  • 培训损失平滑培训损失,确认损失-每个小批量的损失,它的平滑版本,和验证集的损失,分别。如果你的网络的最后一层是classificationLayer,则损失函数为交叉熵损失。有关用于分类和回归问题的损失函数的更多信息,请参见输出层

对于回归网络,图形绘制了根均方误差(RMSE)而不是精度。

这个图形标记了每一次训练时代使用阴影背景。epoch是完整的通过整个数据集。

在培训期间,您可以通过单击右上角的停止按钮来停止培训并返回网络的当前状态。例如,当网络的准确性到达高原时,您可能希望停止培训,并且很明显,准确性不再改善。单击“停止”按钮后,可能需要一段时间才能完成培训。一旦培训完成,trainNetwork返回训练过的网络。

培训结束时,查看结果显示最终验证的准确性和培训完成的原因。最后的验证度量被标记最后的情节。如果您的网络包含批处理规范化层,那么最终的验证度量通常与训练期间评估的验证度量不同。这是因为最终网络中的批处理归一化层执行的操作与训练时不同。

在右侧可查看培训时间和设置信息。要了解更多培训选项,请参见卷积神经网络参数的建立与训练

在培训过程中策划培训进度

训练网络,并在训练过程中绘制训练进度图。

加载训练数据,其中包含5000个数字图像。预留1000个图像用于网络验证。

[XTrain, YTrain] = digitTrain4DArrayData;idx = randperm(大小(XTrain, 4), 1000);XValidation = XTrain (:,:,:, idx);XTrain (::,:, idx) = [];YValidation = YTrain (idx);YTrain (idx) = [];

构造一个网络来对数字图像数据进行分类。

layers = [imageInputLayer([28 28 1])]“填充”“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”“相同”maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”“相同”) batchNormalizationLayer relullayer fulllyconnectedlayer (10) softmaxLayer classificationLayer];

指定网络训练选项。要在训练期间定期验证网络,请指定验证数据。选择“ValidationFrequency”值,以便每个epoch大约验证一次网络。在培训过程中规划培训进度,指定“训练进步”随着“阴谋”价值。

选择= trainingOptions (“个”...“MaxEpochs”8...“ValidationData”{XValidation, YValidation},...“ValidationFrequency”30岁的...“详细”假的,...“阴谋”“训练进步”);

培训网络。

网= trainNetwork (XTrain、YTrain层,选择);

输入参数

全部折叠

训练网络求解器,指定为下列任一种:

  • “个”-使用随机梯度下降与动量(SGDM)优化器。可以使用。指定动量值“动量”名称-值对的论点。

  • “rmsprop”—使用RMSProp优化器。您可以指定衰减速率的平方梯度移动平均使用'squaredgradientdecayfactor'名称-值对的论点。

  • “亚当”-使用亚当优化器。可以指定梯度和平方梯度移动平均的衰减率'gradientdecayfactor''squaredgradientdecayfactor'名称-值对参数。

有关不同求解器的更多信息,请参见随机梯度下降法

名称-值对的观点

指定可选的逗号分离对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“InitialLearnRate”,0.03,“L2Regularization”,0.0005,“LearnRateSchedule”、“分段”指定初始学习率为0.03L.2正则化因子为0.0005,并指示软件通过与某一因子相乘来降低每一给定纪元数的学习率。
情节和显示

全部折叠

在网络训练期间要显示的图,指定为逗号分隔对,由“阴谋”和以下之一:

  • “没有”-在训练期间不要显示情节。

  • “训练进步”-规划培训进度。该图显示了小批损失和准确性,验证损失和准确性,以及培训进展的附加信息。这个情节有一个停止按钮在右上角。点击按钮停止训练,返回网络当前状态。有关培训进度图的更多信息,请参见监控深度学习训练进展

例子:“阴谋”,“训练进步”

指示符用于在命令窗口中显示训练进度信息,指定为逗号分隔的对,由“详细”,要么1真正的)或0.).

verbose输出显示如下信息:

网络的分类

描述
时代 时代的数字。epoch对应于数据的一次完整传递。
迭代 迭代数。迭代对应于小批处理。
时间 时间以小时、分钟和秒为单位流逝。
Mini-batch准确性 在小批量上的分类精度。
验证准确性 对验证数据的分类精度。如果不指定验证数据,则该函数不会显示该字段。
Mini-batch损失 迷你批处理上的损失。如果输出层是ClassificationOutputLayer对象,则该损失为类间互斥的多类分类问题的交叉熵损失。
确认损失 验证数据的丢失。如果输出层是ClassificationOutputLayer对象,则该损失为类间互斥的多类分类问题的交叉熵损失。如果不指定验证数据,则该函数不会显示该字段。
基础学习速率 基础学习率。该软件将该值乘以图层的学习速率因子。

回归网络

描述
时代 时代的数字。epoch对应于数据的一次完整传递。
迭代 迭代数。迭代对应于小批处理。
时间 时间以小时、分钟和秒为单位流逝。
Mini-batch RMSE 迷你批处理上的根均匀误差(RMSE)。
验证RMSE. 验证数据的RMSE。如果不指定验证数据,则软件不会显示此字段。
Mini-batch损失 迷你批处理上的损失。如果输出层是RegressionOutputLayer对象,则损失为一半均方误差。
确认损失 验证数据的丢失。如果输出层是RegressionOutputLayer对象,则损失为一半均方误差。如果不指定验证数据,则软件不会显示此字段。
基础学习速率 基础学习率。该软件将该值乘以图层的学习速率因子。

要指定验证数据,请使用“ValidationData”名称-值对。

例子:“详细”,假的

详细打印的频率,它是在打印到命令窗口之间的迭代次数,指定为由逗号分隔的对组成“VerboseFrequency”一个正整数。此选项只有效果“详细”值=真正的

如果你在训练期间验证网络,那么trainNetwork每次验证发生时也打印到命令窗口。

例子:“VerboseFrequency”,100年

Mini-Batch选项

全部折叠

用于训练的最大纪元数,指定为逗号分隔对,由“MaxEpochs”一个正整数。

迭代是梯度下降算法中使用小批量最小化损失函数的一步。epoch是训练算法在整个训练集上的完整通过。

例子:“MaxEpochs”,20

用于每个训练迭代的小批处理的大小,指定为逗号分隔的对“MiniBatchSize”一个正整数。小批量是训练集的子集,用于评估损失函数的梯度和更新权值。看到随机梯度下降法

例子:“MiniBatchSize”,256年

用于数据变换的选项,指定为组成的逗号分隔对“洗牌”和以下之一:

  • “一次”—在训练前洗牌一次训练和验证数据。

  • “永远”- 请勿将数据换乘。

  • “every-epoch”—在每个训练阶段之前洗牌训练数据,在每个网络验证之前洗牌验证数据。如果小批量大小不能均匀地除以训练样本的数量,那么trainNetwork丢弃不适合每个纪元的最终完整小批的训练数据。为避免每个epoch都丢弃相同的数据,请设置“洗牌”价值“every-epoch”

例子:“洗牌”,“every-epoch”

验证

全部折叠

训练期间用于验证的数据,指定为图像数据存储、数据存储、表或单元阵列。验证数据的格式取决于任务的类型,并对应于有效的输入trainNetwork功能。

指定验证数据为以下数据之一:

输入 trainNetwork论点
图像数据存储 IMDS.
数据存储 ds
表格 资源描述
单元阵列{X, Y} X X
y y
单元阵列{序列,Y} 序列 序列
y y

在培训期间,trainNetwork计算验证数据的验证精度和验证损失。要指定验证频率,请使用“ValidationFrequency”名称-值对的论点。您还可以使用验证数据在验证损失停止减少时自动停止训练。要启用自动验证停止,请使用“ValidationPatience”名称-值对的论点。

如果网络的层在预测期间的行为与训练期间的行为不同(例如,退出层),那么验证的准确性可以高于训练(小批量)的准确性。

验证数据根据“洗牌”价值。如果“洗牌”值=“every-epoch”,然后在每个网络验证之前播放验证数据。

以迭代次数表示的网络验证频率,指定为逗号分隔对组成“ValidationFrequency”一个正整数。

“ValidationFrequency”值是验证度量评估之间的迭代次数。要指定验证数据,请使用“ValidationData”名称-值对的论点。

例子:“ValidationFrequency”,20

耐心验证停止网络训练,指定为逗号分隔对组成“ValidationPatience”一个正整数或

“ValidationPatience”值是在网络训练停止前,验证集上的损失可能大于或等于先前最小损失的次数。要启用自动验证停止,请指定一个正整数作为“ValidationPatience”价值。如果使用默认值,则训练在达到最大纪元数后停止。要指定验证数据,请使用“ValidationData”名称-值对的论点。

例子:“ValidationPatience”,5

解算器选项

全部折叠

用于训练的初始学习率,指定为逗号分隔对组成“InitialLearnRate”一个正标量。默认值为0.01“个”求解器和0.001为“rmsprop”“亚当”解决者。如果学习率太低,那么培训需要很长时间。如果学习率过高,那么训练可能会达到次优结果或发散。

例子:“InitialLearnRate”,0.03

数据类型:|

选项,用于在训练期间放弃学习率,指定为逗号分隔对组成“LearnRateSchedule”和以下之一:

  • “没有”- 在整个训练中,学习率仍然不变。

  • “分段”—每隔一定的时代,软件就更新学习速率,乘以一定的倍数。使用LearnRateDropFactor参数的名称-值对指定此因子的值。使用LearnRateDropPeriod名称值对参数指定乘法之间的时期数。

例子:“LearnRateSchedule”、“分段”

丢弃学习率的纪元数,指定为逗号分隔对组成“LearnRateDropPeriod”一个正整数。此选项仅在值的值时有效LearnRateSchedule“分段”

每次指定数量的时期通过时,软件将全局学习率乘以下降因子。使用滴定因子使用LearnRateDropFactor名称-值对的论点。

例子:“LearnRateDropPeriod”,3

降低学习率的因素,指定为逗号分隔对组成“LearnRateDropFactor”和一个从0到1的标量。此选项仅在值的值时有效LearnRateSchedule“分段”

LearnRateDropFactor是每次经过一定数量的纪元时,应用于学习率的乘数因子。属性指定纪元的数目LearnRateDropPeriod名称-值对的论点。

例子:“LearnRateDropFactor”,0.1

数据类型:|

L因素2正则化(权重衰减),指定为逗号分隔对,由“L2Regularization”一个非负标量。有关更多信息,请参见L2正规化

你可以为L指定一个乘数2具有可学习参数的网络层正则化。有关更多信息,请参见在卷积和全连接层中设置参数

例子:“L2Regularization”,0.0005

数据类型:|

前一次迭代的参数更新步骤对当前带动量随机梯度下降迭代的贡献,指定为逗号分离对,由“动量”和一个从0到1的标量。0表示前一步没有贡献,1表示前一步贡献最大。

指定“动量”值,必须设置solverName“个”.默认值可以很好地解决大多数问题。有关不同求解器的更多信息,请参见随机梯度下降法

例子:“动量”,0.95

数据类型:|

亚当求解器的梯度移动平均衰减率,指定为逗号分隔对组成'gradientdecayfactor'一个小于1的非负标量。梯度衰减率表示为β1[4]

指定'gradientdecayfactor'值,必须设置solverName“亚当”.默认值可以很好地解决大多数问题。有关不同求解器的更多信息,请参见随机梯度下降法

例子:“GradientDecayFactor”,0.95

数据类型:|

为亚当和RMSProp求解器的平方梯度移动平均的衰减率,指定为逗号分隔对组成'squaredgradientdecayfactor'一个小于1的非负标量。梯度衰减率的平方表示为β2[4]

指定'squaredgradientdecayfactor'值,必须设置solverName“亚当”“rmsprop”.衰减速率的典型值分别为0.9,0.99和0.999,对应于分别为10,100和1000个参数更新的平均长度。亚当求解器的默认值为0.999。RMSPROP解算器的默认值为0.9。

有关不同求解器的更多信息,请参见随机梯度下降法

例子:“SquaredGradientDecayFactor”,0.99

数据类型:|

用于亚当和RMSPROP求解器的分母偏移,指定为逗号分隔对‘ε’一个正标量。求解器在网络参数更新中添加到分母的偏移量,以避免分割零。

指定‘ε’值,必须设置solverName“亚当”“rmsprop”.默认值可以很好地解决大多数问题。有关不同求解器的更多信息,请参见随机梯度下降法

例子:'epsilon',1e-6

数据类型:|

重置输入层归一化的选项,指定为以下之一:

  • 真正的-重置输入层归一化统计并在训练时重新计算。

  • -当训练时间为空时,计算归一化统计信息。

梯度剪裁

全部折叠

梯度阈值,指定为逗号分隔对组成“GradientThreshold”或者一个正标量。如果梯度值超过GradientThreshold,然后根据渐变进行裁剪GradientThresholdMethod

例子:“GradientThreshold”6

梯度阈值方法用于剪辑超过梯度阈值的梯度值,指定为逗号分隔对组成“GradientThresholdMethod”和以下之一:

  • “l2norm”-如果L2可学习参数的梯度范数大于GradientThreshold,然后缩放梯度,使L2规范=GradientThreshold

  • “global-l2norm”—全局L2规范,L.,比GradientThreshold,然后将所有梯度按……的倍数缩放毕业分子/L..全球L2Norm考虑了所有可学习的参数。

  • “绝对值”—可学习参数梯度中单个偏导数的绝对值大于GradientThreshold,然后缩放偏导数,使其大小等于GradientThreshold保留偏导数的符号。

有关更多信息,请参见梯度剪裁

例子:“GradientThresholdMethod”、“global-l2norm”

序列的选择

全部折叠

填充、截断或拆分输入序列的选项,指定为以下之一:

  • “最长”—在每个小批量中填充序列,使其与最长序列具有相同的长度。这个选项不会丢弃任何数据,尽管填充会给网络带来噪声。

  • “最短”- 截断每个小批处理中的序列与最短序列具有相同的长度。此选项可确保在丢弃数据的成本下添加填充。

  • 正整数—对于每个小批量,将序列填充到指定长度的最近倍数,该倍数大于最小批量中序列的最长长度,然后将序列分割成指定长度的更小的序列。如果发生分裂,则软件创建额外的小批量。如果完整序列无法装入内存,则使用此选项。或者,尝试通过设置来减少每个小批量的序列数量“MiniBatchSize”选择较低的值。

要了解有关填充,截断和拆分输入序列的影响,请参阅序列填充、截断和分割

例子:“SequenceLength”、“最短的

填充或截断的方向,指定为下列任一种:

  • “对”—在右侧填充或截断序列。序列在同一时间步开始,软件截断或添加填充到序列的结束。

  • “左”-在左侧填充或截断序列。该软件截断或添加填充到序列的开始,以便序列在同一时间步结束。

因为LSTM层处理序列数据的时间一步一次,当层OutputMode.属性是'最后的',最后时间步骤中的任何填充都会对层输出产生负面影响。要在左侧填充或截断序列数据,请设置“SequencePaddingDirection”选项“左”

用于序列到序列网络(当OutputMode.属性是“序列”对于每个LSTM层),在第一次步骤中的任何填充都可以对较早时间步长的预测产生负面影响。键入或截断右侧序列数据,请设置“SequencePaddingDirection”选项“对”

要了解有关填充,截断和拆分输入序列的影响,请参阅序列填充、截断和分割

填充输入序列的值,指定为标量。该选项仅在何时有效SequenceLength“最长”或者一个正整数。不要用,因为这样做会在整个网络中传播错误。

例子:'sequencdpaddingsvalue', - 1

硬件选项

全部折叠

培训网络的硬件资源,指定为以下之一:

  • '汽车'—如果有图形处理器,请使用图形处理器。否则,请使用CPU。

  • “cpu”-使用CPU。

  • “图形”—使用GPU。

  • “multi-gpu”-在一台机器上使用多个gpu,基于默认集群配置文件使用本地并行池。如果当前没有并行池,软件会启动一个并行池,池的大小等于可用gpu的数量。

  • “平行”-根据默认集群配置文件使用本地或远程并行池。如果当前没有并行池,软件将使用默认的集群配置文件启动一个并行池。如果池可以访问GPU,那么只有拥有唯一GPU的工作者才能进行训练计算。如果池没有gpu,则在所有可用的CPU worker上进行培训。

有关何时使用不同执行环境的更多信息,请参见并行和在云中扩展深度学习

GPU、多GPU和并行选项需要并行计算工具箱™。要使用GPU进行深度学习,还必须有CUDA®使英伟达®GPU,计算能力3.0或更高。如果选择其中一个选项和并行计算工具箱或合适的GPU不可用,则软件返回错误。

想要看到并行训练时的表现改善,试着扩大MiniBatchSizeInitialLearnRate培训选项的图形处理器的数量。

训练长短期记忆网络仅支持单CPU或单GPU训练。金宝app

用于多gpu训练或并行训练的数据存储必须是可分区的。有关更多信息,请参见使用数据存储进行并行培训和背景调度

如果你使用“multi-gpu”选项具有可分区的输入数据存储和“DispatchInBackground”选项,然后软件启动一个大小等于默认池大小的并行池。工人与独特的图形处理器执行训练计算。其余工人用于后台调度。

例子:“ExecutionEnvironment”、“cpu的

在gpu或cpu之间进行并行工作负载划分,指定为逗号分隔的对“WorkerLoad”和以下之一:

  • 从0到1的标量-每台机器上用于网络训练计算的工人的比例。如果您使用启用后台分派的迷你批处理数据存储中的数据来训练网络,那么其余的工作人员将在后台获取和预处理数据。

  • 正整数-用于网络训练计算的每台机器上的工人数量。如果您使用启用后台分派的迷你批处理数据存储中的数据来训练网络,那么其余的工作人员将在后台获取和预处理数据。

  • 数字向量-网络训练负荷为并行池中的每个工作者。为一个向量W.、工人一世获得分数W(我)/ (W)和工作的数量(每个小批量的示例数量)。如果您使用启用了后台调度的迷你批处理数据存储中的数据来训练网络,那么您可以将一个worker负载分配为0,以便使用该worker在后台获取数据。指定的向量必须为并行池中的每个工作者包含一个值。

如果并行池可以访问GPU,那么没有唯一GPU的工人永远不会用于训练计算。对于具有GPU的池,默认情况下使用具有唯一GPU的所有工作线程进行培训计算,剩余工作线程进行后台调度。如果池没有访问GPU的权限,并且CPU用于培训,则默认情况下,每台机器使用一个工作线程进行后台数据调度。

使用后台调度(异步预取队列)从指定为的数据存储中读取训练数据真正的.后台调度需要并行计算工具箱。

DispatchInBackground仅支持可分区的数金宝app据存储。有关更多信息,请参见使用数据存储进行并行培训和背景调度

检查点

全部折叠

保存检查点网络的路径,指定为由逗号分隔的对组成“CheckpointPath”一个字符向量。

  • 如果不指定路径(即使用默认路径)''),则该软件不保存任何检查点网络。

  • 如果指定路径,那么trainNetwork在每个epoch之后将检查点网络保存到此路径,并为每个网络分配一个唯一的名称。然后,您可以加载任何检查点网络,并从该网络恢复训练。

    如果文件夹不存在,则必须首先创建它,然后再指定保存检查点网络的路径。如果指定的路径不存在,则trainingOptions返回一个错误。

有关保存网络检查点的详细信息,请参见保存检查点网络和恢复培训

例子:“CheckpointPath”、“C: \ Temp \检查点”

数据类型:字符

训练期间要调用的输出函数,指定为逗号分隔的对“OutputFcn”以及函数句柄或函数句柄的单元数组。trainNetwork在训练开始之前、每次迭代之后以及训练结束之后调用指定的函数一次。trainNetwork传递一个包含以下字段信息的结构:

描述
时代 当前时代数量
迭代 当前迭代次数
TimeSinceStart 训练开始后的时间,以秒为单位
TrainingLoss 当前mini-batch损失
验证录 验证数据的丢失
BaseLearnRate 当前基础学习率
TrainingAccuracy 当前小批量的准确性(分类网络)
TrainingRMSE 当前小批处理(回归网络)上的RMSE
ValidationAccuracy 验证数据的准确性(分类网络)
ValidationRMSE 验证数据的RMSE(回归网络)
状态 当前训练状态,可能值为“开始”“迭代”,或“完成”

如果某个字段对输出函数的某个调用不计算或不相关,则该字段包含一个空数组。

您可以使用输出函数来显示或绘制进度信息,或停止培训。尽早停止训练,让你的输出功能回归真正的.如果有输出函数返回真正的,然后训练结束trainNetwork返回最新的网络。有关如何使用输出函数的示例,请参见自定义深度学习网络训练输出

数据类型:function_handle.|细胞

输出参数

全部折叠

培训选择,作为TrainingOptionsSGDMTrainingOptionsRMSProp,或TrainingOptionsADAM对象。要训练神经网络,使用训练选项作为输入参数trainNetwork功能。

如果solverName=“个”“rmsprop”,或“亚当”,则训练选项将作为TrainingOptionsSGDMTrainingOptionsRMSProp,或TrainingOptionsADAM对象,分别。

的训练选项属性TrainingOptionsSGDMTrainingOptionsADAM,TrainingOptionsRMSProp直接对象。例如,在使用trainingOptions功能,可以编辑MiniBatchSize房地产直接:

选择= trainingOptions(个);选项。MiniBatchSize = 64;

提示

算法

全部折叠

初始权重和偏差

对于卷积层和全连通层,权值和偏差的初始化由WeightsInitializerBiasInitializer属性的层,分别。有关如何更改权重和偏差的初始化的示例,请参见在卷积层中指定初始权重和偏差在完全连接层中指定初始权重和偏差

随机梯度下降法

标准梯度下降算法更新网络参数(权值和偏差),使损失函数最小化,方法是在每次迭代时,在损失的负梯度方向上采取小步骤,

θ + 1 = θ α E. θ

在哪里 为迭代数, α > 0. 为学习速率, θ 是参数矢量,还有 E. θ 为损失函数。在标准梯度下降算法中,损失函数的梯度, E. θ ,使用整个训练集进行评估,而标准梯度下降算法一次使用整个数据集。

相反,在每次迭代中随机梯度下降算法评估梯度,并使用训练数据的子集更新参数。在每次迭代中使用一个称为迷你批处理的不同子集。使用小批量的训练算法在整个训练集上的完整通过为1时代.随机梯度下降是随机的,因为使用小批量计算的参数更新是使用完整数据集的参数更新的噪声估计。参数可以指定小批量大小和最大纪元数“MiniBatchSize”“MaxEpochs”名称-值对参数。

有动量的随机梯度下降

随机梯度下降算法可以沿最陡下降路径向最优方向振荡。在参数更新中添加动量项是减少这种振荡的一种方法[2].随机梯度动量下降(SGDM)更新为

θ + 1 = θ α E. θ + γ θ θ 1

在哪里 γ 确定上一个梯度步骤对当前迭代的贡献。属性指定此值“动量”名称-值对的论点。使用随机梯度下降与动量算法训练神经网络,指定solverName作为“个”.要指定学习率α的初始值,使用“InitialLearnRate”名称-值对的论点。您还可以为不同的层和参数指定不同的学习速率。有关更多信息,请参见在卷积和全连接层中设置参数

RMSProp

动量随机梯度下降法对所有参数采用单一的学习速率。其他优化算法通过使用不同参数的学习速率来改进网络训练,并能自动适应被优化的损失函数。RMSProp(均方根传播)就是这样一种算法。它保持了参数梯度的各元素平方的移动平均值,

V. = β 2 V. 1 + 1 β 2 [ E. θ ] 2

β2为移动平均线的衰减率。常见的衰减率值为0.9、0.99和0.999。相应的平方梯度的平均长度相等1 /(1 -β2,分别为10、100和1000次参数更新。您可以指定β2通过使用'squaredgradientdecayfactor'名称-值对的论点。RMSProp算法使用这个移动平均来对每个参数的更新进行归一化,

θ + 1 = θ α E. θ V. + ϵ

该部门的元素明智的地方。使用RMSPROP有效地降低了大梯度的参数的学习率,并增加了小梯度的参数的学习率。ɛ是为了避免被零除而加上的一个小常数。您可以指定ɛ通过使用‘ε’名称值对参数,但默认值通常很好。使用RMSPROP培训神经网络,指定solverName作为“rmsprop”

亚当

亚当(来自自适应估计时刻[4]使用类似于RMSProp的参数更新,但是增加了动量项。它保持了参数梯度及其平方值的元素移动平均,

m = β 1 m 1 + 1 β 1 E. θ

V. = β 2 V. 1 + 1 β 2 [ E. θ ] 2

您可以指定β1β2使用'gradientdecayfactor''squaredgradientdecayfactor'名称-值对参数。亚当用移动平均线来更新网络参数

θ + 1 = θ α m L. V. L. + ϵ

如果许多迭代中的梯度是相似的,那么使用梯度的移动平均值可以使参数更新在某个方向上获得动量。如果梯度包含大部分的噪声,那么梯度的移动平均会变得更小,因此参数更新也会变得更小。您可以指定ɛ通过使用‘ε’名称-值对的论点。默认值通常效果很好,但对于某些问题,一个大约1的值更好。要使用亚当培训神经网络,请指定solverName作为“亚当”.完整的亚当更新还包括一个机制,以纠正在训练开始时出现的偏差。有关更多信息,请参见[4]

指定学习速率α为所有优化算法使用“InitialLearnRate”名称-值对的论点。对于不同的优化算法,学习率的效果是不同的,所以最优学习率一般也是不同的。您还可以指定不同层次和参数的学习速率。有关更多信息,请参见在卷积和全连接层中设置参数

梯度剪裁

如果梯度呈指数级增长,那么训练是不稳定的,可能在几次迭代中发散。这种“梯度爆炸”是由训练损失来表示的. 梯度剪裁通过在较高学习率和存在异常值的情况下稳定训练,有助于防止梯度爆炸[3].梯度裁剪可以更快地训练网络,而且通常不会影响学习任务的准确性。

有两种类型的渐变剪辑。

  • 基于norm的梯度裁剪基于阈值缩放梯度,而不改变梯度的方向。这“l2norm”“global-l2norm”价值观GradientThresholdMethod是基于范数的梯度裁剪方法。

  • 基于值的梯度裁剪裁剪任何大于阈值的偏导数,这会导致梯度任意改变方向。基于值的梯度裁剪可能具有不可预测的行为,但足够小的变化不会导致网络发散。这“绝对值”的价值GradientThresholdMethod是一种基于值的梯度裁剪方法。

有关示例,请参见基于深度学习的时间序列预测基于深度学习的序列到序列分类

L.2正则化

向损失函数中添加权重的正则化项 E. θ 是否有一种方法可以减少过度拟合[1][2].正则化项也称为体重衰变.具有正则化术语的损失函数采用表格

E. R. θ = E. θ + λ Ω W.

在哪里 W. 是体重矢量, λ 是正则化因子(系数)和正则化函数 Ω W.

Ω W. = 1 2 W. T. W.

注意,这些偏见并不是规格化的[2].您可以指定正则化因子 λ 通过使用“L2Regularization”名称-值对的论点。您还可以为不同的层和参数指定不同的正则化因子。有关更多信息,请参见在卷积和全连接层中设置参数

该软件用于网络训练的损失函数包含正则化项。但是,在训练过程中,命令窗口和训练进度图中显示的损失值仅为数据上的损失,不包括正则项。

兼容性的考虑

全部展开

R2018b中行为改变

R2018b中行为改变

工具书类

[1]毕晓普模式识别和机器学习.施普林格,纽约,纽约,2006。

K. P.墨菲机器学习:概率视角.麻省理工学院出版社,剑桥,马萨诸塞州,2012年。

帕斯卡努,R., T. Mikolov, Y. Bengio。“关于训练递归神经网络的困难”。第30届国际机器学习会议论文集.[j] .岩石力学与工程学报,2013,34(3):341 - 346。

[4]金玛,迪德里克和吉米·巴。"亚当:随机优化的方法"arXiv预印本arXiv: 1412.6980(2014).

在R2016A介绍