主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

ベズ最適化を使用した実験ハパパラメタの調整

この例では,実験マネジャでベイズ最適化を適用し,畳み込みニューラルネットワークに最適なネットワークハイパーパラメーターと学習オプションを求める方法を説明します。プするための代替手法が得られます。各ハパパラメタの値の範囲を指定し,最適化するメトリクスを選択します。すると,選択したメトリクスを最適化するハイパーパラメーターの組み合わせを実験マネージャーが検索します。ベ▪▪ズ最適化には统计和机器学习工具箱™が必要です。

この例では,cifar-10デタセットのメジを分類するようネットワクに学習させます。この実験では,ベイズ最適化を使用し,カスタムメトリクス関数を最小化するハイパーパラメーターの組み合わせを見つけます。ハイパーパラメーターには,学習アルゴリズムのオプションに加え,ネットワークアーキテクチャ自体のパラメーターも含まれます。カスタムメトリクス関数は,ランダムに選択されたテストセットの分類誤差を求めます。実験マネジャでのカスタムメトリクスの定義の詳細にいては,メトリクス関数を使用した深層学習実験の評価を参照してください。

あるいは,関数bayesopt。詳細にいては,ベ@ @ズ最適化を使用した深層学習を参照してください。

実験を開く

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

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

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

寻找卷积神经网络的最优超参数和训练选项。超参数决定了网络截面深度、初始学习率、随机梯度下降动量和L2正则化强度。

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

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

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

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

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

  • SectionDepth—このパラメタはネットワクの深さを制御します。ネットワ,ク内の層の合計数は9 * SectionDepth + 7です。実験セットアップ関数において,各層の畳み込みフィルタ,の数は1 /√(SectionDepth)に比例するため,パラメーター数と各反復に必要な計算量は,セクション深さが異なる場合でもほぼ同じになります。

  • InitialLearnRate-学習率が小さすぎる場合、学習に時間がかかります。学習率が大きすぎる場合,学習結果が準最適になったり,発散したりすることがあります。最適な学習率は,学習させるネットワ,クにも依りますが,デ,タにも左右されます。

  • 动力——確率的勾配降下モーメンタムは,前の反復での更新に比例する寄与を現在の更新に含めることによって,パラメーター更新に慣性を追加します。慣性効果により,パラメーター更新がより円滑に行われるようになり,確率的勾配降下に固有のノイズが低減されます。

  • L2Regularization- l2正則化を使用して過適合を防止します。正則化強度の空間を検索して,適切な値を求めます。デ,タ拡張やバッチ正規化も,ネットワ,クの正則化に役立,ます。

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

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

  • 学習デ,タの読み込みでは,cifar-10デタセットからメジとラベルをダウンロドして抽出します。このデ,タセットは約175 MBです。。学習デタにいて,この例では,ランダムな平行移動と水平方向の反転を適用することにより,augmentedImageDatastoreを作成します。データ拡張は,ネットワークで過適合が発生したり,学習イメージの正確な詳細が記憶されたりすることを防止するのに役立ちます。ネットワ,ク検証を有効にするために,この例では5000枚の,メ,ジを拡張なしで使用します。このデタセットの詳細にいては,イメージデータセットを参照してください。

Datadir = tempdir;downloadCIFARData (datadir);
[XTrain,YTrain,XTest,YTest] = loadCIFARData(datadir);idx = randperm(数字(YTest),5000);XValidation = XTest(:,:,:,idx);YValidation = YTest(idx);
imageSize = [32 32 3];pixelRange = [-4 4];imageAugmenter = imageDataAugmenter(...RandXReflection = true,...RandXTranslation = pixelRange,...RandYTranslation = pixelRange);augimdsTrain = augmentedimagedastore (imageSize,XTrain,YTrain,...DataAugmentation = imageAugmenter);
  • ネットワ,クア,キテクチャの定義では,深層学習による分類用の畳み込みニュ,ラルネットワ,クのア,キテクチャを定義します。この例では,学習させるネットワ,クに,補助関数convBlock(この例の最後の付録 2に掲載)によって生成された3のブロックがあります。各ブロックには,SectionDepth個の同一の畳み込み層が含まれます。各畳み込み層の後に,バッチ正規化層とReLU層が続きます。空間の出力サ▪▪ズが入力サ▪▪ズと常に同じになるように,畳み込み層はパディングを追加しています。ブロック間では,最大プ,リング層は係数2で空間次元をダウンサンプリングします。各畳み込み層で必要な計算量が確実にほぼ同じとなるように,フィルターの数は1つのセクションから次のセクションに進むたびに2倍ずつ増加します。各畳み込み層のフィルタ,の数は1 /√(SectionDepth)に比例します。それにより,深さの異なるネットワークでパラメーターの数がほぼ同じになり,反復ごとに必要となる計算量もほぼ同じになります。

numClasses = numel(唯一的(YTrain));numF = round(16/sqrt(params.SectionDepth));layers = [imageInputLayer(imageSize) convBlock(3,numF,params.SectionDepth) maxPooling2dLayer(3,Stride=2,Padding=“相同”) convBlock(3,2*numF,params.SectionDepth) maxPooling2dLayer(3,Stride=2,Padding=“相同”) convBlock(3,4*numF,param . sectiondepth) averagePooling2dLayer(8) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
  • “学習オプションの指定”では,ベ“InitialLearnRate”“动量”“L2Regularization”の値を使用し,実験用のtrainingOptionsオブジェクトを定義します。この例では,ネットワークの学習を一定のエポック数行い、最後の方のエポックでは、エポックごとに検証を行い、学習率を 10 分の 1 に下げます。これにより、パラメーター更新のノイズが減少し、ネットワーク パラメーターが安定して損失関数が最小値に近づくようになります。

miniBatchSize = 256;validationFrequency = floor(编号(YTrain)/miniBatchSize);选项= trainingOptions(“个”...InitialLearnRate =参数。InitialLearnRate,...动量=参数。动力,...MaxEpochs = 60,...LearnRateSchedule =“分段”...LearnRateDropPeriod = 40,...LearnRateDropFactor = 0.1,...MiniBatchSize = MiniBatchSize,...L2Regularization =参数。L2Regularization,...洗牌=“every-epoch”...Verbose = false,...ValidationData = {XValidation, YValidation},...ValidationFrequency = ValidationFrequency);

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

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

この例には,カスタムメトリクス関数ErrorRateが含まれています。この関数は,5000 枚のテスト イメージとラベルをランダムに選択し、学習したネットワークをそれらのイメージで評価し、ネットワークが誤分類するイメージの比率を計算します。この関数のコードは、この例の最後の付録 3にあります。

[最適化]フィ,ルドと[方向]フィルドは,ベズ最適化アルゴリズムが目的関数として使用するメトリクスを示します。この実験の場合,実験マネ,ジャ,は,ErrorRateメトリクスの値を最小化しようとします。

実験の実行

実験を実行すると,実験マネージャーは,選択されたメトリクスについて,ハイパーパラメーターの最適な組み合わせを検索します。。既定では、実験マネ、ジャ、は一度に1の試行を実行します。并行计算工具箱™がある場合は,複数の試行を同時に実行できます。最良の結果を得るには,実験を実行する前に,gpuと同じ数のワ,カ,で並列プ,ルを起動します。詳細にいては,実験マネ,ジャ,を使用したネットワ,クの並列学習リリス別のgpuサポト(并行计算工具箱)を参照してください。

  • 一度に1の実験の試行を実行するには,[実験マネジャ]ルストリップで[実行]をクリックします。

  • 複数の試行を同時に実行するには,[並列の使用][実行]の順にクリックします。現在の並列プールがない場合,実験マネージャーは既定のクラスタープロファイルを使用して並列プールを起動します。次に,実験マネ,ジャ,は,使用可能な並列ワ,カ,の数に応じて,複数の同時試行を実行します。

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

実験マネ,ジャ,は,選択されたメトリクスが最適となる試行を決定するために,最良点の基準“min-observed”を使用します。詳細にいては,ベ@ @ズ最適化のアルゴリズム(统计和机器学习工具箱)bestPoint(统计和机器学习工具箱)を参照してください。

結果の評価

実験内で最適な試行をテストするには,まず,結果テ,ブル内で誤差率が最も低い行を選択します。

選択した試行の混同行列を表示するには,[混同行列]をクリックします。

追加の計算を実行するには,学習済みのネットワ,クをワ,クスペ,スにエクスポ,トします。

  1. [実験マネ,ジャ,]ルストリップで,[エクスポ,ト]をクリックします。

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

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

testSummary (trainedNetwork)

この関数は,いくかの方法でネットワクを評価します。

  • テストセット全体のラベルを予測し,テスト誤差を計算します。実験マネジャはネットワークにテスト セット全体を当てることなく最適なネットワークを判断するため、テスト誤差はカスタム メトリクスErrorRateの値よりも高くなる可能性があります。

  • 標準誤差 (testErrorSE)と,汎化誤差率の近似した95%信頼区間(testError95CI)を計算します。この計算では,テストセットの各独立事象として扱います。この仮定を使用することで,誤って分類される。この方法は通常,“Wald法”と呼ばれます。

  • この方法では,いくつかのテストイメージを,予測されたクラスおよびそのクラスである確率と共に表示します。

この関数は,matlabコマンドウィンドウに,これらの統計量の概要を表示します。

******************************************
试验错误率:0.1776标准误差:0.0038 95%置信区间:[0.1701,0.1851]
******************************************

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

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

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

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

詳細にいては,実験結果の並べ替え,フィルタ,処理,および注釈追加を参照してください。

実験を閉じる

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

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

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

入力

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

出力

  • augimdsTrainは,学習デタ用の拡張メジデタストアです。

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

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

函数[augimdsTrain,layers,options] = BayesOptExperiment_setup1(params) datadir = tempdir;downloadCIFARData (datadir);[XTrain,YTrain,XTest,YTest] = loadCIFARData(datadir);idx = randperm(数字(YTest),5000);XValidation = XTest(:,:,:,idx);YValidation = YTest(idx);imageSize = [32 32 3];pixelRange = [-4 4];imageAugmenter = imageDataAugmenter(...RandXReflection = true,...RandXTranslation = pixelRange,...RandYTranslation = pixelRange);augimdsTrain = augmentedimagedastore (imageSize,XTrain,YTrain,...DataAugmentation = imageAugmenter);numClasses = numel(唯一的(YTrain));numF = round(16/sqrt(params.SectionDepth));layers = [imageInputLayer(imageSize) convBlock(3,numF,params.SectionDepth) maxPooling2dLayer(3,Stride=2,Padding=“相同”) convBlock(3,2*numF,params.SectionDepth) maxPooling2dLayer(3,Stride=2,Padding=“相同”) convBlock(3,4*numF,param . sectiondepth) averagePooling2dLayer(8) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];miniBatchSize = 256;validationFrequency = floor(编号(YTrain)/miniBatchSize);选项= trainingOptions(“个”...InitialLearnRate =参数。InitialLearnRate,...动量=参数。动力,...MaxEpochs = 60,...LearnRateSchedule =“分段”...LearnRateDropPeriod = 40,...LearnRateDropFactor = 0.1,...MiniBatchSize = MiniBatchSize,...L2Regularization =参数。L2Regularization,...洗牌=“every-epoch”...Verbose = false,...ValidationData = {XValidation, YValidation},...ValidationFrequency = ValidationFrequency);结束

付録2:畳み込み層のブロックの作成

この関数は,numConvLayers個の畳み込み層のブロックを作成します。各層にはfilterSizenumFilters個のフィルタ,を指定し,それぞれの後にバッチ正規化層と,ReLU層を配置します。

函数layers = convBlock(filterSize,numFilters,numConvLayers) layers =[卷积2dlayer (filterSize,numFilters,Padding= .“相同”) batchNormalizationLayer reluLayer;layers = repmat(layers,numConvLayers,1);结束

付録3:誤り率の計算

このメトリクス関数は,trainedNetworktrainingInfo,および参数のフィ,ルドを含む構造体を入力として受け取ります。

  • trainedNetworkは,関数trainNetworkによって返されるSeriesNetworkオブジェクトまたはDAGNetworkオブジェクトです。

  • trainingInfoは,関数trainNetworkによって返される学習情報を含む構造体です。

  • 参数は,ハパパラメタテブルのフィルドをも構造体です。

5000年この関数は個のテストイメージとラベルを選択し,テストセットで学習させたネットワークを評価し,予測イメージラベルを計算し,テストデータの誤差率を計算します。

函数metricOutput = error (trialInfo) datadir = tempdir;[~,~,XTest,YTest] = loadCIFARData(datadir);idx = randperm(数字(YTest),5000);XTest = XTest(:,:,:,idx);YTest = YTest(idx);ypredict = category (trialInfo.trainedNetwork,XTest);metricOutput = 1 - mean(ypredict == YTest);结束

付録4:テスト統計量の要約

この関数は,テストの誤差率,標準誤差,および近似した95%信頼区間を計算し,MATLABコマンドウィンドウに,これらの統計量の概要を表示します。この関数は,予測されたクラスおよびそのクラスである確率と共に,いくつかのテストイメージも表示します。

函数testSummary(net) datadir = tempdir;[~,~,XTest,YTest] = loadCIFARData(datadir);[ypredict,probs] = category (net,XTest);testError = 1 - mean(ypredict == YTest);NTest =数值(YTest);testError =√(testError*(1-testError)/NTest);testError95CI = [testError - 1.96*testErrorSE, testError + 1.96*testErrorSE];流(' \ n ******************************************\ n \ n’);流('测试错误率:%.4f\n', testError);流('标准错误:%.4f\n', testErrorSE);流('95%%置信区间:[%。4 f % .4f] \ n 'testError95CI (1) testError95CI (2));流(' \ n ******************************************\ n \ n’);图idx = randperm(数字(YTest),9);i = 1:元素个数(idx)次要情节(3 3 i) imshow (XTest (:,:,:, idx(我)));Prob = num2str(100*max(probs(idx(i),:)),3);predClass = char(ypredict (idx(i)));label = [predClass,”、“概率,“%”];标题(标签)结束结束

参考

アプリ

関数

関連するトピック