主要内容

使用贝叶斯优化选择LSTM的训练配置

这个例子展示了如何创建一个深度学习实验,使用贝叶斯优化方法为长短期记忆(LSTM)网络找到最优的网络超参数和训练选项。在本例中,使用实验经理培训预测发动机剩余使用寿命(RUL)的LSTM网络。该实验使用[1]中描述的TurboOman发动机劣化模拟数据集。有关处理序列到序列回归的此数据设置的更多信息,请参阅使用深度学习的序列到序列回归

贝叶斯优化在实验中提供了彻底策略的替代策略。您为每个HyperParameter指定了一系列值,并选择了优化的度量标准,并且实验经理搜索优化所选度量标准的HyperParameters的组合。贝叶斯优化需要统计和机器学习工具箱™。有关更多信息,请参见通过使用贝叶斯优化调整实验超参数

RUL捕获引擎在发生故障之前可以进行多少次操作循环。为了关注引擎接近失败时的序列数据,可以通过在指定的阈值上裁剪响应来对数据进行预处理。这种预处理操作允许网络通过同等对待具有较高RUL值的实例来关注接近失败的预测器数据行为。例如,这张图显示了第一次响应观察和相应的阈值为150的剪切响应。

当您培训深度学习网络时,您如何预处理数据,层数和隐藏单元的数量以及网络中的初始学习率可能会影响网络的培训行为和性能。选择LSTM网络的深度涉及平衡速度和准确性。例如,更深的网络可以更准确,但需要更长时间培训和汇聚[2]。

默认情况下,当您运行回归的内置培训实验时,实验管理器计算实验中每次试验的丢失和均方根上方错误(RMSE)。此示例通过使用特定于问题数据集的自定义度量,将网络的性能进行比较。有关使用自定义度量函数的更多信息,请参阅使用度量函数评价深度学习实验

开放实验

首先,打开这个例子。实验经理用预配置的实验加载项目。打开实验,在实验的浏览器,双击实验名称(SequenceRegressionExperiment).

内置的训练实验由描述、超参数表、设置函数和度量函数集合组成,用于评估实验的结果。使用贝叶斯优化的实验包括限制实验持续时间的额外选项。有关更多信息,请参见配置内建训练实验

描述字段包含实验的文本描述。对于此示例,描述是:

用序列到序列回归法预测发动机的剩余使用寿命。本实验在改变数据阈值水平、LSTM层深度、隐藏单元数量和初始学习率时,使用贝叶斯优化比较网络性能。

Hyperparameter表指定策略(贝叶斯优化)和用于实验的超参数值。对于每个超参数,指定以下选项:

  • 范围-输入一个给出实值或整值超参数下界和上界的双元素向量,或一个列出分类超参数可能值的字符串数组或单元格数组。

  • 类型- 选择真正的(实值hyperparameter),整数(整数值hyperparameter),或分类(分类hyperparameter)。

  • 变换- 选择没有一个(没有变换)日志(对数变换)。为日志,超参数必须为真正的或者整数和积极的。使用此选项,超参数将在对数尺度上搜索和建模。

运行实验时,实验管理器将搜索超参数的最佳组合。每个试验都使用基于先前试验结果的超参数值的新组合。此示例使用以下超参数:

  • 阈值将阈值以上的所有响应数据设置为与阈值相等。为了防止统一响应数据,请使用大于或等于150的阈值。将允许值限制在150、200和250,实验模型阈值作为一个绝对超参数。

  • LSTMDepth表示网络中使用的LSTM层数。将超参数指定为1到3之间的整数。

  • numhidandunits.确定网络中使用的隐藏单元数或每个时间步存储的信息量。增加隐藏单位的数量可能会导致数据拟合过度和训练时间过长。减少隐藏单位的数量可能会导致数据拟合不足。将此超参数指定为介于50和300之间的整数。

  • InitialLearnRate指定用于训练的初始学习率。如果学习率太低,那么培训需要很长时间。如果学习率过高,则训练可能会达到次优结果或发散。最佳学习率取决于你的数据以及你所训练的网络。实验在对数尺度上对这个超参数进行建模,因为值的范围(0.001到0.1)跨越了几个数量级。

在下面贝叶斯优化选项,您可以通过输入最大时间(以秒为单位)和运行的最大试验次数来指定试验的持续时间。为了最好地使用贝叶斯优化的力量,执行至少30个目标函数评估。

设置功能使用“网络设置”功能中的“网络设置”选项和“训练到设置”功能中的“训练到设置”参数,可以在“网络设置”功能的“输入到设置”字段中使用“训练到设置”选项。对于“网络设置”,可以使用“训练到设置”功能中的“训练到设置”选项返回“训练到设置”参数。

  • 加载和预处理数据从中下载并提取涡扇发动机退化模拟数据集https://ti.art.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/[3]。该部分的设置函数还滤除常值特征,对预测数据进行归一化,使其均值和单位方差均为零,并利用超参数的数值剪辑响应数据阈值,并随机选取训练示例进行验证。

dataFolder=fullfile(tempdir,“TurboOman”);
如果~exist(数据文件夹,“dir”)mkdir(数据文件夹);oldDir=cd(数据文件夹);文件名=“CMAPSSData.zip”;websave(文件名,“https://ti.arc.nasa.gov/c/6/”......weboptions (“超时”正);解压缩(文件名,dataFolder);cd (oldDir);结束
filenameTrainPredictors = fullfile (dataFolder,“train_FD001.txt”); [XTrain,YTrain]=processTurboFanDataTrain(文件名列车预测器);
XTrain = helperFilter (XTrain);XTrain = Helpernormalize(XTrain);
用力推= str2double (params.Threshold);i = 1:numel(YTrain) YTrain{i}(YTrain{i} > thr) = thr;结束
i=1:numel(XTrain)序列= XTrain{i};sequenceLengths (i) =(序列,2)大小;结束
[〜,idx] = sort(Sequencelength,“下”);XTrain = XTrain (idx);YTrain = YTrain (idx);
idx = randperm(元素个数(XTrain), 10);XValidation = XTrain (idx);XTrain (idx) = [];YValidation = YTrain (idx);Ytrain(IDX)= [];
  • 定义网络体系结构定义序列到序列回归的LSTM网络的体系结构。该网络由LSTM层组成,其次是尺寸为100的全连接层和丢失概率为0.5的丢失层。的hyperparametersLSTMDepthnumhidandunits.指定LSTM图层的数量和每个图层的隐藏单位数量。

numResponses =大小(YTrain {1}, 1);featureDimension =大小(XTrain {1}, 1);LSTMDepth = params.LSTMDepth;numHiddenUnits = params.NumHiddenUnits;
层= sequenceInputLayer (featureDimension);
i = 1:lstmdepth tayers = [图层; lstmlayer(numhidentunits,outputmode =“序列”));结束
layers = [layers fullconnectedlayer (100) reluLayer() dropoutLayer(0.5) fulllyconnectedlayer (numResponses) regressionLayer];
  • 指定培训选项定义实验的培训选项。由于更深的网络需要更长的时间来收敛,因此EPOCH的数量设置为300,以确保所有网络深度都会收敛。此示例每30次迭代验证网络。初始学习率等于InitialLearnRate值,每15个纪元下降0.2倍。通过培训选择执行环境设置为“汽车”,实验在GPU(如果有的话)上运行。否则,实验管理器将使用CPU。因为这个例子比较了网络深度和许多时代的训练,使用GPU大大加快了训练时间。使用GPU需要并行计算工具箱™和支持的GPU设备。金宝app有关更多信息,请参见GPU支金宝app持情况(并行计算工具箱)

maxEpochs = 300;miniBatchSize = 20;
选择= trainingOptions (“亚当”......ExecutionEnvironment =“汽车”......MaxEpochs = MaxEpochs,......MiniBatchSize = MiniBatchSize,......ValidationData = {XValidation, YValidation},......ValidationFrequency = 30,......initiallearnrate = params.initiallearnrate,......LearnRateDropFactor=0.2,......学习ropperiod = 15,......GradientThreshold = 1,......洗牌=“绝不”......verbose = false);

检查设置功能,在设置功能,点击编辑.setup函数在MATLAB编辑器中打开。此外,设置函数的代码显示在附录1在这个例子的最后。

指标节指定对实验结果进行评估的可选函数。实验管理器每次完成网络训练后都会评估这些功能。如果需要查看度量函数,请选择度量函数的名称,单击编辑。度量函数将在MATLAB编辑器中打开。

预测发动机的规则线需要仔细考虑。如果预测低估了RUL,可能会提前安排发动机维修。如果预测高估了RUL,发动机可能会在运行中出现故障,导致高成本或安全问题。为了帮助减轻这些场景,本示例包含一个度量函数MeanMaxAbsoluteError识别那些低估或高估rull的网络。

MeanMaxAbsoluteError度量计算整个训练集的最大绝对误差。这个度量称为预测函数对训练集进行一系列的RUL预测。然后,在计算每个训练响应与预测响应序列之间的最大绝对误差后,该函数计算所有最大绝对误差的平均值。这个指标确定了实际响应和预测响应之间的最大偏差。度量函数的代码出现在附录3在这个例子的最后。

运行实验

当您运行这个实验时,experiment Manager会根据所选的指标搜索超参数的最佳组合。本实验中的每个试验都使用基于前一个试验结果的超参数值的新组合。默认情况下,实验管理器每次运行一个试验。如果您有并行计算工具箱™,您可以同时运行多个试验。为了获得最好的结果,在您运行您的实验之前,启动一个与gpu一样多的worker的并行池。有关更多信息,请参见使用实验经理并行培训网络GPU支金宝app持情况(并行计算工具箱)

  • 要一次运行一次试验,请在“试验管理器”工具栏上单击

  • 要同时进行多个试验,请单击使用并行然后.如果当前没有并行池,实验管理器将使用默认的集群配置文件启动一个。然后,根据可用的并行工作人员的数量,实验管理器执行多个同时的试验。

结果表显示了每次试验的度量函数值。实验管理器表示所选度量的最优值的试验。例如,在这个实验中,第17次试验产生了最小的最大绝对误差。

当实验正在进行时,单击培训情节显示培训情节并跟踪每次试验的进度。审判完成培训的经过时间随网络深度而增加。

评估结果

在结果表中,MeanMaxAbsoluteError值量化网络低估或高估RUL的程度验证RMSE值量化了网络对看不见的数据的概括程度。要为您的实验找到最佳结果,请对结果表进行排序,并选择最低的试验MeanMaxAbsoluteError验证RMSE价值观。

  1. 指出MeanMaxAbsoluteError列。

  2. 点击三角形图标。

  3. 选择升序排序

类似地,通过打开下拉菜单找到具有最小验证RMSE的试验验证RMSE列和选择升序排序

如果没有一次试验使两个值都最小化,考虑优先选择对每个值排名都好的试验。例如,在这些结果中,第17次试验的结果最小MeanMaxAbsoluteError值和第12小的验证RMSE价值。试验3、11和22的数值较小验证RMSE值,但大MeanMaxAbsoluteError价值观。

要记录对实验结果的观察,请添加注释。

  1. 在结果表中,右键单击MeanMaxAbsoluteError最好的审判单元。

  2. 选择添加注释

  3. 注释窗格,在文本框中输入您的观察结果。

  4. 重复前面的步骤验证RMSE细胞。

为了测试您的最佳试验的性能,导出训练过的网络并显示几个随机选择的测试序列的预测响应序列。

  1. 在你的实验中选择最好的试验。

  2. 在这一点实验经理ToolStrip,点击出口

  3. 在对话框窗口中,为导出的网络输入工作区变量的名称。默认名称为trainedNetwork

  4. 使用导出的网络和阈值将网络的值作为helper函数的输入plotSequences,列于附录4在这个例子的最后。例如,在MATLAB命令窗口中,输入:

plotSequences (trainedNetwork, 250)

该函数绘制未见测试数据的真实和预测响应序列。

关闭实验

实验的浏览器,右键单击项目的名称并选择关闭项目.实验管理器关闭项目中包含的所有实验和结果。

附录1:设置功能

配置实验的训练数据、网络架构和训练选项。

输入

  • 参数个数是一个包含来自实验管理器超参数表字段的结构。

输出

  • XTrain.是包含训练数据的单元阵列。

  • YTrain是包含培训的回归值的单元格数组,

  • 是定义神经网络架构的层图。

  • 选项是一个trainingOptions目的。

函数[XTrain,YTrain,layers,options] = SequenceRegressionExperiment_setup1(params) dataFolder = fullfile(tempdir,“TurboOman”);如果~exist(数据文件夹,“dir”)mkdir(数据文件夹);oldDir=cd(数据文件夹);文件名=“CMAPSSData.zip”;websave(文件名,“https://ti.arc.nasa.gov/c/6/”......weboptions (“超时”正);解压缩(文件名,dataFolder);cd (oldDir);结束filenameTrainPredictors = fullfile (dataFolder,“train_FD001.txt”); [XTrain,YTrain]=processTurboFanDataTrain(文件名列车预测器);XTrain = helperFilter (XTrain);XTrain = helperNormalize (XTrain);用力推= str2double (params.Threshold);i = 1:numel(YTrain) YTrain{i}(YTrain{i} > thr) = thr;结束i=1:numel(XTrain)序列= XTrain{i};sequenceLengths (i) =(序列,2)大小;结束[〜,idx] = sort(Sequencelength,“下”);XTrain = XTrain (idx);YTrain = YTrain (idx);idx = randperm(元素个数(XTrain), 10);XValidation = XTrain (idx);XTrain (idx) = [];YValidation = YTrain (idx);YTrain (idx) = [];numResponses =大小(YTrain {1}, 1);featureDimension =大小(XTrain {1}, 1); LSTMDepth = params.LSTMDepth; numHiddenUnits = params.NumHiddenUnits; layers = sequenceInputLayer(featureDimension);i = 1:lstmdepth tayers = [图层; lstmlayer(numhidentunits,outputmode =“序列”));结束layers = [layers fullconnectedlayer (100) reluLayer() dropoutLayer(0.5) fulllyconnectedlayer (numResponses) regressionLayer];maxEpochs = 300;miniBatchSize = 20;选择= trainingOptions (“亚当”......ExecutionEnvironment =“汽车”......MaxEpochs = MaxEpochs,......MiniBatchSize = MiniBatchSize,......ValidationData = {XValidation, YValidation},......ValidationFrequency = 30,......initiallearnrate = params.initiallearnrate,......LearnRateDropFactor=0.2,......学习ropperiod = 15,......GradientThreshold = 1,......洗牌=“绝不”......verbose = false);结束

附录2:过滤和标准化预测性维护数据

辅助函数助手过滤器通过删除具有常量值的特性来过滤数据。在所有时间步骤中保持不变的特征会对训练产生负面影响。

函数[XTrain,XTest] = helperFilter(XTrain,XTest) m = min([XTrain{:}],[],2);M = max ([XTrain {:}], [], 2);idxConstant = M == M;
i = 1:numel(XTrain) XTrain{i}(idxConstant,:) = [];如果nargin>1 XTest{i}(idxConstant,:) = [];结束结束结束

辅助函数扶手将训练和测试预测器归一化,使其均值和单位方差均为零。

函数[XTrain,XTest] = helperNormalize(XTrain,XTest) mu = mean([XTrain{:}],2);sig =性病([XTrain {}):, 0, 2);
i = 1:numel(XTrain) XTrain{i} = (XTrain{i} - mu) ./ sig;如果nargin>1 XTest{i} = (XTest{i} - mu) ./ sig;结束结束结束

附录3:计算最大绝对误差的平均值

这个度量函数计算训练网络的最大绝对误差,并在训练集上取平均值。

函数metricOutput=MeanMaxAbsoluteError(trialInfo)net=trialInfo.trainedNetwork;thr=str2double(trialInfo.parameters.Threshold);FileNamePredictor=fullfile(tempdir,“TurboOman”“train_FD001.txt”);[xtrain,ytrain] = processturbofandataTrain(filenamepredictors);XTrain = helperFilter (XTrain);XTrain = Helpernormalize(XTrain);i = 1:numel(YTrain) YTrain{i}(YTrain{i} > thr) = thr;结束YPred =预测(净、XTrain MiniBatchSize = 1);maxAbsErrors = 0(1,元素个数(YTrain));i=1:numel(YTrain) absError = abs(YTrain{i}-YPred{i});maxAbsErrors (i) = max (absError);结束metricutput =均值(maxabserrors);结束

附录4:绘制预测性维护顺序

这个函数绘制真实的和预测的响应序列,使您能够评估经过训练的网络的性能。这个函数使用helper函数助手过滤器扶手,列于附录2

函数plotSequences(net,threshold) filenameTrainPredictors = fullfile(tempdir,“TurboOman”“train_FD001.txt”); filenameTestPredictors=fullfile(tempdir,“TurboOman”“test_FD001.txt”);filenametestresponses = fullfile(tempdir,“TurboOman”“RUL_FD001.txt”); [XTrain,YTrain]=processTurboFanDataTrain(文件名列车预测器);[xtest,ytest] = processturbofandataTest(filenametestpredictors,filenametestresseses);[XTrain,XTEST] = Helperfilter(XTrain,XTest);[〜,xtest] = Helpernormalize(XTrain,XTest);i = 1:numel(YTrain) YTrain{i}(YTrain{i} > threshold) = threshold;YTest{i}(YTest{i} > threshold) = threshold;结束ypred =预测(net,xtest,minibatchsize = 1);Idx = Randperm(100,4);数字i = 1:numel(idx) subplot(2,2,i) plot(YTest{idx(i)},“——”) 抓住情节(YPred {idx (i)},“。”) 抓住ylim([0阈值+ 25)标题(“测试观察”+ idx (i))包含(“时间步”)ylabel(“卢比”结束传奇([“测试数据”“预测”],'地点''西南'结束

工具书类

  1. 萨克斯纳,阿比纳夫,凯·戈贝尔,唐·西蒙,尼尔·埃克隆德。“飞机发动机从运行到故障的损伤传播建模”。2008年预后和健康管理国际会议(2008): 1 - 9。

  2. 约泽弗维茨,拉法尔,沃伊切赫·扎伦巴,伊利亚·萨茨基弗。“循环网络架构的实证探索”。第32届国际机器学习会议论文集(2015):2342-2350。

  3. 萨克森,阿比纳夫,凯·戈贝尔。涡扇发动机退化模拟数据集NASA Ames预诊数据仓库https://ti.art.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/NASA艾姆斯研究中心,加州莫菲特菲尔德

另请参阅

应用

功能

相关话题