主要内容

ベesc escズ最適化を使用したLSTMの学習構成の選択

この例では,ベイズ最適化を使用して,長短期記憶(LSTM)ネットワーク用の最適なネットワークハイパーパラメーターと学習オプションを見つける深層学習実験の作成方法を説明します。この例では,実験マネジャを使用して,エンジンの残存耐用期間(rul)を予測するLSTMネットワ,クに学習させます。この実験では,[1]に記載のある涡扇发动机退化仿真数据集を使用します(参照を参照)。序列对序列回帰用のこのデ,タセットの処理に関する詳細に,いては,深層学習を使用した序列对序列回帰を参照してください。

プするための代替手法が得られます。各ハパパラメタの値の範囲を指定し,最適化するメトリクスを選択します。すると,選択したメトリクスを最適化するハイパーパラメーターの組み合わせを実験マネージャーが検索します。ベ▪▪ズ最適化には统计和机器学习工具箱™が必要です。詳細にいては,ベズ最適化を使用した実験ハパパラメタの調整を参照してください。

Rulは,エンジンが故障する前に行える運転サ显卡クルの回数を取得します。エンジンの故障が近づいてきたときにシーケンスデータに着目するために,指定したしきい値で応答をクリップしてデータを前処理します。この前処理の操作によって,ネットワークは荷重软化値がこれより高いインスタンスを等価として処理し,故障が近づいたときの予測子データの変動に着目できるようになります。例として,次の図は,最初の応答の観測値,およびそれに対応するしきい値150でクリップされた応答を示しています。

深層学習ネットワークに学習させる場合,データの前処理方法,層と隠れユニットの数,およびネットワークの初期学習率が,ネットワークの学習の動作と性能に影響を与える可能性があります。LSTMネットワ,クの深さを選択する際は,速度と精度のバランスを考慮します。たとえば,ネットワークを深くすると精度が高まりますが,学習と収束により多くの時間がかかります[2]。

既定では,回帰用に組み込まれている学習実験を実行すると,実験マネージャーによって,実験における各試行の損失および平方根平均二乗誤差(RMSE)が計算されます。この例では,問題に関するデータセットに特有のカスタムメトリクスを使用して,各試行のネットワーク性能を比較します。カスタムメトリクス関数の使用の詳細にいては,メトリクス関数を使用した深層学習実験の評価を参照してください。

実験を開く

まず,例を開きます。実験マネジャによって、事前構成済みの実験を含むプロジェクトが読み込まれます。実験を開くには、[実験ブラウザ]で、実験の名前(SequenceRegressionExperiment)をダブルクリックします。

組み込みの学習実験は,説明,ハイパーパラメーターのテーブル,セットアップ関数,および実験の結果を評価するためのメトリクス関数の集合で構成されます。ベesc escズ最適化を使用する実験には,実験の期間を制限する追加のオプションが含まれます。詳細にいては,組み込み学習実験の構成を参照してください。

[説明]フィ,ルドには,実験を説明するテキストが表示されます。この例の説明は次のようになります。

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

[ハパパラメタテブル]では、実験で使用する手法(贝叶斯优化)とハパパラメタ値を指定します。各ハパパラメタにいて次のオプションを指定します。

  • 範囲——実数値または整数値のハイパーパラメーターの下限と上限を示す2要素のベクトル,または直言ハイパーパラメーターが取り得る値をリストする字符串配列または细胞配列を入力します。

  • - - - - - -真正的(実数値のハパパラメタ),整数(整数値のハパパラメタ),または分类(分类ハパパラメタ)を選択します。

  • 変換- - - - - -没有一个(変換なし)または日志(対数変換)を選択します。日志の場合,ハイパーパラメーターは真正的または整数で正でなければなりません。このオプションを使用すると,ハパパラメタが検索され,対数スケルでモデル化されます。

実験を実行すると,実験マネジャはハパパラメタの最適な組み合わせを検索します。。。

  • 阈值は,しきい値を上回る応答デ,タをすべてしきい値と同じ値に設定します。応答デ,タが一定にならないように,しきい値を150以上に設定してください。この実験では,許容される一連の値の上限を150,200,および250に設定するため,阈值を分类ハ。

  • LSTMDepthは,ネットワ,クで使用されるLSTM層の数を示します。このハパパラメタを1 ~ 3の整数で指定します。

  • NumHiddenUnitsは,ネットワークで使用する隠れユニットの数(タイムステップごとに保存される情報の量)を決定します。隠れユニットの数を増やすと,デ,タの過適合が発生して学習に時間がかかる可能性があります。隠れユニットの数を減らすと,デ,タの適合不足が発生する可能性があります。このハパパラメタを50 ~ 300の整数で指定します。

  • InitialLearnRateは,学習に使用される初期学習率を指定します。学習率が小さすぎる場合,学習に時間がかかります。学習率が大きすぎる場合,学習結果が準最適になったり,発散したりすることがあります。最適な学習率は,学習させるネットワ,クにも依りますが,デ,タにも左右されます。この実験では,値が数桁の範囲にわたるため(0.001 ~ 0.1),このハイパーパラメーターを対数スケールでモデル化します。

[ベ电子邮箱ズ最適化オプション]では,実行する試行の最大時間(秒単位)と最大回数を入力することで,実験の期間を指定できます。ベesc escズ最適化の能力を最大限に活用するには,目的関数の評価を少なくとも30回行います。

[セットアップ関数]は,実験用の学習デ,タ,ネットワ,クア,キテクチャ,および学習オプションを構成します。セットアップ関数への入力は,ハパパラメタテブルのフィルドをも構造体です。このセットアップ関数は,イメージ回帰問題用のネットワークに学習させるために使用する4つの出力を返します。この例では,セットアップ関数には3のセクションがあります。

  • “デ,タの読み込みと前処理”では,涡扇发动机退化仿真数据集をhttps://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/[3]からダウンロ,ドして解凍します。また,セットアップ関数のセクションでは,一定の値の特徴をフィルターで除外し,ゼロ平均と単位分散をもつように予測子データを正規化し,ハイパーパラメーター阈值の数値を使用して応答デ,タをクリップし,検証に使用する学習サンプルをランダムに選択します。

dataFolder = fullfile(tempdir,“涡扇”);
如果~存在(dataFolder“dir”mkdir (dataFolder);oldDir = cd(dataFolder);文件名=“CMAPSSData.zip”;websave(文件名,“https://ti.arc.nasa.gov/c/6/”...weboptions (“超时”正);解压缩(文件名,dataFolder);cd (oldDir);结束
fileametrainpredictors = fullfile(数据文件夹,“train_FD001.txt”);[XTrain,YTrain] = processTurboFanDataTrain(filenameTrainPredictors);
XTrain = helpfilter (XTrain);XTrain = helpnormalize (XTrain);
thr = str2double(params.Threshold);i = 1:数字(YTrain) YTrain{i}(YTrain{i} > thr) = thr;结束
i=1:数字(XTrain)序列= XTrain{i};sequenceLengths(i) = size(sequence,2);结束
[~,idx] = sort(sequenceLengths,“下”);XTrain = XTrain(idx);YTrain = YTrain(idx);
idx = randperm(数字(XTrain),10);XValidation = XTrain(idx);XTrain(idx) = [];YValidation = YTrain(idx);YTrain(idx) = [];
  • “ネットワ,クア,キテクチャの定義”では,sequence-to-sequence回帰用のLSTMネットワークのアーキテクチャを定義します。このネットワークは,まずLSTM層があり,サイズが100の全結合層がそれに続き,ドロップアウトの確率0.5がのドロップアウト層がそれに続きます。ハパパラメタLSTMDepthおよびNumHiddenUnitsは,lstm層の数,および各層に含まれる隠れユニットの数を指定します。

numResponses = size(YTrain{1},1);featureDimension = size(XTrain{1},1);LSTMDepth = params.LSTMDepth;numHiddenUnits = params.NumHiddenUnits;
layers = sequenceInputLayer(featureDimension);
i = 1:LSTMDepth layers = [layers;lstmLayer(numHiddenUnits,OutputMode=“序列”));结束
layers = [layers fullyConnectedLayer(100) reluLayer() dropoutLayer(0.5) fullyConnectedLayer(numResponses) regressionLayer];
  • “学習オプションの指定”では,実験の学習オプションを定義します。ネットワークが深いほど収束に時間がかかるため,あらゆる深さのネットワークが確実に収束できるように,エポック数を300に設定します。この例では,30回反復するごとにネットワ,クを検証します。初期学習率はハパパラメタテブルから取得したInitialLearnRateの値と等しく,15エポックごとに0.2の係数で減少します。学習オプションExecutionEnvironment“汽车”に設定されていて,gpuが利用できる場合,実験はgpuで実行されます。そうでない場合、実験マネ、ジャ、はCPUを使用します。この例では,ネットワークの深さを比較し、多くのエポックで学習を行うため、GPU を使用すると学習時間を大幅に短縮できます。GPU を使用するには、Parallel Computing Toolbox™ とサポートされている GPU デバイスが必要です。詳細については、Gpu計算の要件(并行计算工具箱)を参照してください。

maxEpochs = 300;miniBatchSize = 20;
选项= trainingOptions(“亚当”...ExecutionEnvironment =“汽车”...MaxEpochs = MaxEpochs,...MiniBatchSize = MiniBatchSize,...ValidationData = {XValidation, YValidation},...ValidationFrequency = 30,...InitialLearnRate =参数。InitialLearnRate,...LearnRateDropFactor = 0.2,...LearnRateDropPeriod = 15,...GradientThreshold = 1,...洗牌=“从不”...Verbose = false);

セットアップ関数を検査するには,[セットアップ関数][編集]をクリックします。MATLABエディターでセットアップ関数が開きます。また、セットアップ関数のコードは、この例の最後の付録 1にあります。

[メトリクス]セクションは,実験結果を評価するオプションの関数を指定します。ネットワ,クの学習が完了するたびに,実験マネ,ジャ,によってこれらの関数が評価されます。メトリクス関数を検査するには,メトリクス関数の名前を選択して[編集]をクリックします。MATLABエディターでメトリクス関数が開きます。

エンジンのrulの予測は,注意深く検討する必要があります。予測によって荷重软化が過少に見積もられると,エンジンのメンテナンスが必要よりも早い時期にスケジュールされる可能性があります。予測によって荷重软化が過大に見積もられると,運転中にエンジンが故障する可能性があり,その結果,高額なコストや安全性の懸念が生じる可能性があります。この例では,そのようなシナリオが発生する可能性を低減させるために,メトリクス関数MeanMaxAbsoluteErrorを使用し,rulを過小予測または過大予測するネットワ,クを特定します。

MeanMaxAbsoluteErrorメトリクスでは,最大絶対誤差を計算し,学習セット全体で平均化します。このメトリクスは,関数预测を呼び出し,学習セットからrul予測のシ,ケンスを作成します。その後,この関数は,学習用の各応答シーケンスと予測された各応答シーケンスとの間の最大絶対誤差を計算し,すべての最大絶対誤差の平均値を計算します。このメトリクスは,実際の応答と予測された応答との間の最大偏差を特定します。メトリクス関数のコ,ドは,この例の最後の付録 3にあります。

実験の実行

実験を実行すると,実験マネージャーは,選択されたメトリクスについて,ハイパーパラメーターの最適な組み合わせを検索します。。

学習に時間がかかる場合があります。実験の期間を制限するには,[ベ电子邮箱ズ最適化オプション]で試行の最大時間または最大回数を減らします。ただし,試行回数が30回未満の場合,ベイズ最適化アルゴリズムが最適なハイパーパラメーターのセットに収束しない可能性があることに注意してください。

既定では、実験マネ、ジャ、は一度に1の試行を実行します。并行计算工具箱™を使用している場合は,複数の試行を同時に実行したり,クラスター内のバッチジョブとして実験をオフロードしたりできます。

  • 一度に1の実験を実行するには,“実験マネ,ジャ,”ルストリップの[モ,ド](顺序)を選択し,[実行]をクリックします。

  • 複数の試行を同時に実行するには,[モ,ド](同时)を選択し,[実行]をクリックします。現在の並列プールがない場合,実験マネージャーは既定のクラスタープロファイルを使用して並列プールを起動します。その後,実験マネ,ジャ,は,並列プ,ルにあるワ,カ,と同じ数の同時試行を実行します。最良の結果を得るには,実験を実行する前に,gpuと同じ数のワ,カ,で並列プ,ルを起動します。詳細にいては,実験マネ,ジャ,を使用したネットワ,クの並列学習Gpu計算の要件(并行计算工具箱)を参照してください。

  • 実験をバッチジョブとしてオフロ,ドするには,[モ,ド](批处理顺序)または(批量同步)を選択し,[クラスタ](池大小)を指定して,[実行]をクリックします。詳細にいては,将实验作为批处理作业卸载到集群を参照してください。

結果テ,ブルに,各試行のメトリクス関数の値が表示されます。実験マネジャは、選択されたメトリクスが最適値である試行を強調表示します。たとえば、この実験では、23 番目の試行で最大絶対誤差が最小になっています。

実験の実行中に学習プロットを表示して各試行の進行状況を追跡するには,[結果の確認][学習プロット]をクリックします。ネットワクが深くなるにれて,学習完了までに要する試行時間が長くなります。

結果の評価

結果テ,ブルに記載されている(MeanMaxAbsoluteError)の値は,ネットワ,クがrulをどの程度,過小予測または過大予測したかを定量的に示しています。[検証rmse]の値は,未知のデ,タに対してネットワ,クがどの程度適切に汎化を行ったかを定量的に示しています。実験で得られた最良の結果を見けるには,結果テブルを並べ替え,(MeanMaxAbsoluteError)[検証rmse]の値が最も小さい試行を選択します。

  1. (MeanMaxAbsoluteError)列を選択します。

  2. 三角形のア@ @コンをクリックします。

  3. [昇順に並べ替え]を選択します。

同様に,検証rmseが最も小さい試行を見けるには,[検証rmse]列のドロップダウンメニュ,を開いて[昇順に並べ替え]を選択します。

両方の値が最小となる試行が1つもない場合は,両方のメトリクスに対する順位が良い試行を選択してください。たとえば,この結果を見ると,23番目の試行は,平均最大絶対誤差が最小で,検証RMSEは7番目に小さい値になっています。検証RMSEがそれより低い試行を見ると,29日番目の試行のみが,同程度の平均最大絶対誤差になっています。どちらの試行が望ましいかは,平均最大絶対誤差と検証RMSEのどちらの小さい値を重視するかによって決まります。

実験結果に関する観測結果を記録するには,注釈を追加します。

  1. 結果テ,ブルで,最適な結果が得られた試行の(MeanMaxAbsoluteError)セルを右クリックします。

  2. [注釈の追加]を選択します。

  3. [注釈]ペesc escンで,テキストボックスに観測結果を入力します。

  4. [検証rmse]セルにいても上記の手順を繰り返します。

実験の最適な試行をテストするには,学習済みのネットワークをエクスポートし,ランダムに選択した各テストシーケンスについて,予測された応答シーケンスを表示します。

  1. 実験の最適な試行を選択します。

  2. [実験マネ,ジャ,]ルストリップで,[エクスポ,ト][学習済みネットワ,ク]をクリックします。

  3. ダアログウィンドウで,エクスポトしたネットワクのワクスペス変数の名前を入力します。既定の名前はtrainedNetworkです。

  4. エクスポ,トしたネットワ,ク,およびネットワ,クの阈值の値を,補助関数plotSequences(この例の最後の付録 4に掲載)への入力として使用します。たとえば,matlabコマンドウィンドウで次のように入力します。

plotSequences (trainedNetwork, 200)

この関数は,未知のテストデータに対する実際の応答および予測された応答のシーケンスをプロットします。

実験を閉じる

[実験ブラウザ]でプロジェクトの名前を右クリックし,[プロジェクトを閉じる]を選択します。実験マネ,ジャ,によって,プロジェクトに含まれるすべての実験と結果が閉じられます。

付録1:セットアップ関数

この関数は,実験用の学習デ,タ,ネットワ,クア,キテクチャ,および学習オプションを構成します。

入力

  • 参数个数は,実験マネージャーのハイパーパラメーターテーブルのフィールドをもつ構造体です。

出力

  • XTrainは,学習デ,タを含むcell配列です。

  • YTrainは,学習の回帰値を含む单元格配列です。

  • は,ニュ,ラルネットワ,クア,キテクチャを定義する層グラフです。

  • 选项trainingOptionsオブジェクトです。

函数[XTrain,YTrain,layers,options] = SequenceRegressionExperiment_setup1(params) dataFolder = fullfile(tempdir,“涡扇”);如果~存在(dataFolder“dir”mkdir (dataFolder);oldDir = cd(dataFolder);文件名=“CMAPSSData.zip”;websave(文件名,“https://ti.arc.nasa.gov/c/6/”...weboptions (“超时”正);解压缩(文件名,dataFolder);cd (oldDir);结束fileametrainpredictors = fullfile(数据文件夹,“train_FD001.txt”);[XTrain,YTrain] = processTurboFanDataTrain(filenameTrainPredictors);XTrain = helpfilter (XTrain);XTrain = helpnormalize (XTrain);thr = str2double(params.Threshold);i = 1:数字(YTrain) YTrain{i}(YTrain{i} > thr) = thr;结束i=1:数字(XTrain)序列= XTrain{i};sequenceLengths(i) = size(sequence,2);结束[~,idx] = sort(sequenceLengths,“下”);XTrain = XTrain(idx);YTrain = YTrain(idx);idx = randperm(数字(XTrain),10);XValidation = XTrain(idx);XTrain(idx) = [];YValidation = YTrain(idx);YTrain(idx) = [];numResponses = size(YTrain{1},1);featureDimension = size(XTrain{1},1); LSTMDepth = params.LSTMDepth; numHiddenUnits = params.NumHiddenUnits; layers = sequenceInputLayer(featureDimension);i = 1:LSTMDepth layers = [layers;lstmLayer(numHiddenUnits,OutputMode=“序列”));结束layers = [layers fullyConnectedLayer(100) reluLayer() dropoutLayer(0.5) fullyConnectedLayer(numResponses) regressionLayer];maxEpochs = 300;miniBatchSize = 20;选项= trainingOptions(“亚当”...ExecutionEnvironment =“汽车”...MaxEpochs = MaxEpochs,...MiniBatchSize = MiniBatchSize,...ValidationData = {XValidation, YValidation},...ValidationFrequency = 30,...InitialLearnRate =参数。InitialLearnRate,...LearnRateDropFactor = 0.2,...LearnRateDropPeriod = 15,...GradientThreshold = 1,...洗牌=“从不”...Verbose = false);结束

付録2:予知保全デ,タのフィルタ,と正規化

補助関数helperFilterは,定数値をも特徴を除去してデタをフィルタします。すべてのタesc escムステップで一定のままである特徴は,学習に悪影響を与える可能性があります。

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

補助関数helperNormalizeは,ゼロ平均と単位分散をもように,学習用およびテスト用の予測子を正規化します。

函数[XTrain,XTest] = helperNormalize(XTrain,XTest) mu = mean([XTrain{:}],2);sig = std([XTrain{:}],0,2);
i = 1: number (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);fileamepredictors = fullfile(tempdir,“涡扇”“train_FD001.txt”);[XTrain,YTrain] = processTurboFanDataTrain(filenamePredictors);XTrain = helpfilter (XTrain);XTrain = helpnormalize (XTrain);i = 1:数字(YTrain) YTrain{i}(YTrain{i} > thr) = thr;结束YPred = predict(net,XTrain,MiniBatchSize=1);maxAbsErrors = 0(1,数字(YTrain));i=1:numel(YTrain) absError = abs(YTrain{i}-YPred{i});maxAbsErrors(i) = max(absError);结束metricOutput = mean(maxAbsErrors);结束

付録4:予知保全シ,ケンスのプロット

この関数は,実際の応答および予測された応答のシ,ケンスをプロットします。これにより,学習済みネットワ,クの性能を評価できます。この関数は,補助関数helperFilterhelperNormalize付録 2に掲載)を使用します。

函数plotSequences(net,threshold) filenameTrainPredictors = fullfile(tempdir,“涡扇”“train_FD001.txt”);fileametestpredictors = fullfile(tempdir,“涡扇”“test_FD001.txt”);fileametestresponses = fullfile(tempdir,“涡扇”“RUL_FD001.txt”);[XTrain,YTrain] = processTurboFanDataTrain(filenameTrainPredictors);[XTest,YTest] = processTurboFanDataTest(filenameTestPredictors,filenameTestResponses);[XTrain,XTest] = helperFilter(XTrain,XTest);[~,XTest] = helperNormalize(XTrain,XTest);i = 1: number (YTrain) YTrain{i}(YTrain{i} > threshold) = threshold;YTest{i}(YTest{i} > threshold) = threshold;结束YPred = predict(net,XTest,MiniBatchSize=1);Idx = randperm(100,4);数字i = 1:数字(idx) subplot(2,2,i) plot(YTest{idx(i)},”——“)举行情节(YPred {idx (i)},“。”)举行Ylim([0阈值+25])“试验观察”+ idx(i)) xlabel(“时间步”) ylabel (“原则”结束传奇([“测试数据”“预测”),位置=“西南”结束

参照

Saxena, Abhinav, Kai Goebel, Don Simon和Neil Eklund。飞机发动机运行故障仿真的损伤传播模型。2008年国际预测与健康管理会议(2008年):1-9。

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

Saxena, Abhinav, Kai Goebel。涡扇发动机退化仿真数据集美国宇航局艾姆斯预测数据库,https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/美国宇航局艾姆斯研究中心,莫菲特场,加利福尼亚州。

参考

アプリ

関数

関連するトピック