web-dev-qa-db-ja.com

ニューラルネットワークのハイパーパラメーターをどの順序で調整する必要がありますか?

TensorflowとAdamOptimizerを使用して回帰問題に対処する非常に単純なANNがあり、すべてのハイパーパラメーターを調整する段階になりました。

今のところ、調整しなければならないさまざまなハイパーパラメータを確認しました。

  • 学習率:初期学習率、学習率の減衰
  • AdamOptimizerは4つの引数(学習率、ベータ1、ベータ2、イプシロン)を必要とするため、それらを調整する必要があります-少なくともイプシロン
  • バッチサイズ
  • 反復の数
  • ラムダL2正規化パラメーター
  • ニューロンの数、層の数
  • 非表示層、出力層のアクティブ化関数の種類
  • ドロップアウトパラメータ

2つの質問があります。

1)私が忘れていた可能性のある他のハイパーパラメータはありますか?

2)現時点では、私のチューニングはかなり「手動」であり、適切な方法ですべてを実行していないかどうかはわかりません。パラメータを調整するための特別な順序はありますか?たとえば、最初に学習率、次にバッチサイズ、次に...これらすべてのパラメーターが独立していることはわかりません。実際、一部のパラメーターが独立していないことは確かです。どれが明らかに独立していて、どれが明らかに独立していないのですか?それらを一緒に調整する必要がありますか?特別な順序ですべてのパラメーターを適切に調整することについて述べている論文や記事はありますか?

編集:これは、さまざまな初期学習率、バッチサイズ、正則化パラメーターについて取得したグラフです。紫の曲線は私には完全に奇妙です...コストは他の方法よりもゆっくりと低下するようですが、より低い精度で動かなくなりました。モデルが極小値でスタックしている可能性はありますか?

精度

コスト

学習率には、減衰を使用しました:LR(t)= LRI/sqrt(Epoch)

ご協力いただきありがとうございます !ポール

19
Paul Rolin

私の一般的な順序は:

  1. バッチサイズ。将来の実験のトレーニング時間に大きく影響します。
  2. ネットワークのアーキテクチャ:
    • ネットワーク内のニューロンの数
    • 層の数
  3. 休憩(ドロップアウト、L2登録など)

依存関係:

の最適値は

  • 学習率とバッチサイズ
  • 学習率とニューロン数
  • ニューロンの数と層の数

お互いに強く依存しています。私はその分野の専門家ではありません。

ハイパーパラメータについて:

  • Adamオプティマイザの場合:「このペーパーで推奨される値は、eps = 1e-8、beta1 = 0.9、beta2 = 0.999です。」 ( ソース
  • AdamとRMSPropの学習率では、ほとんどの問題に対して0.001前後の値が最適であることがわかりました。
  • Adamの代わりに、RMSPropを使用することもできます。これにより、メモリフットプリントが最大33%削減されます。詳細は this answer を参照してください。
  • また、初期の重み値を調整することもできます( 必要なものはすべて適切な初期化です)を参照 )。ただし、Xavierイニシャライザは、ウェイト初期化を調整する必要がないようにするための良い方法のようです。
  • 反復数/エポック数をハイパーパラメーターとして調整しません。検証エラーが収束するまでネットをトレーニングします。ただし、各実行に時間予算を割り当てます。
6
Kilian Batzner

Tensorboardを実行します。そこにエラーをプロットします。 TBがプロットするデータを探すパスにサブディレクトリを作成する必要があります。そのサブディレクトリの作成はスクリプトで行います。そのため、スクリプトのパラメーターを変更して、試してみますそこに名前を付けて実行し、すべての試行を同じグラフにプロットします。グラフとデータの最も効果的な設定がすぐにわかります。

4
Phillip Bock

重要性の低いパラメーターについては、おそらく妥当な値を選択してそれをそのまま使用できます。

あなたが言ったように、これらのパラメーターの最適値はすべて互いに依存しています。最も簡単なことは、各ハイパーパラメータに妥当な範囲の値を定義することです。次に、各範囲からパラメーターをランダムにサンプリングし、その設定でモデルをトレーニングします。これを何度も繰り返してから、最適なモデルを選びます。運が良ければ、どのハイパーパラメータ設定が最も効果的かを分析し、そこからいくつかの結論を出すことができます。

2
Aaron

私はテンソルフローに固有のツールを知りませんが、最良の戦略は、最初に0.01、0.001、0.005、0.005のweight_decayの学習率などの基本的なハイパーパラメーターから始めることです。そして、それらを調整します。手動で行うと時間がかかります。カフェを使用している場合は、入力値のセットからハイパーパラメーターを取得して最適なセットを取得するための最良のオプションを次に示します。

https://github.com/kuz/caffe-with-spearmint

詳細については、このチュートリアルにも従うことができます。

http://fastml.com/optimizing-hyperparams-with-hyperopt/

レイヤーの数については、まずネットワークを小さくしてデータを増やすことをお勧めします。十分なデータが揃ったら、モデルの複雑さを増やします。

0
Dharma