私は自分の方法を訓練しています。結果は次のようになりました。良い学習率ですか?そうでない場合、それは高いですか、それとも低いですか?これは私の結果です
lr_policy: "step"
gamma: 0.1
stepsize: 10000
power: 0.75
# lr for unnormalized softmax
base_lr: 0.001
# high momentum
momentum: 0.99
# no gradient accumulation
iter_size: 1
max_iter: 100000
weight_decay: 0.0005
snapshot: 4000
snapshot_prefix: "snapshot/train"
type:"Adam"
これは参考です
学習率が低いと、改善は直線的になります。高い学習率で、彼らはより指数関数的に見え始めます。学習率が高いほど、損失はより早く減衰しますが、損失のより悪い値で行き詰まります
学習率は少し高く見えます。曲線は私の好みにはあまりにも速く減少し、すぐに平らになります。パフォーマンスをさらに上げたい場合は、基本学習率として0.0005または0.0001を試してみます。これが機能しないことがわかった場合は、とにかくいくつかのエポック後に終了できます。
ただし、あなたが自問しなければならない問題は、どれだけのパフォーマンスが必要か、そして必要なパフォーマンスをどれだけ達成できるかということです。おそらく、特定の目的のためにニューラルネットワークをトレーニングしているということです。多くの場合、学習率を微調整する代わりに、容量を増やすことでネットワークのパフォーマンスを向上させることができます。
より高い学習率(たとえば0.1)から始めて、極小値から抜け出し、それを非常に小さな値に減らして、物事を落ち着かせます。これを行うには、ステップサイズを100反復と変更して、100反復ごとに学習率のサイズを小さくします。これらの数値は問題に固有のものであり、データスケールなどの複数の要因に依存します。
また、グラフの検証損失の振る舞いに留意して、データが過剰適合しているかどうかを確認してください。
Juanのいくつかの声明で、より具体的になりたいと思います。しかし、私の評判は十分ではないので、代わりに回答として投稿します。
ローカルの最小値を恐れてはいけません。実際には、私の理解では、それらを「良いローカルミニマム」と「悪いローカルミニマム」に分類できます。 Juanが言ったように、より高い学習率が必要な理由は、より良い「良いローカル最小値」を見つけたいからです。初期学習率を高く設定しすぎると、モデルが「悪いローカル最小」領域に陥る可能性が高いため、それは悪いことです。そして、それが起こった場合、「学習率の低下」の練習はあなたを助けることはできません。
それでは、どのようにしてあなたの体重が良い地域に収まるようにすることができますか?答えはできませんが、適切な初期重みのセットを選択することで可能性を高めることができます。繰り返しますが、初期学習率が大きすぎると、初期化が無意味になります。
第二に、オプティマイザーを理解することは常に良いことです。その実装を見るために時間をかけてください、あなたは何か面白いものを見つけるでしょう。たとえば、「学習率」は実際には「学習率」ではありません。
要するに、1 /言うまでもなく、小さな学習率は良くありませんが、大きすぎる学習率は間違いなく悪いです。 2 /重みの初期化は最初の推測であり、結果に影響します3 /コードを理解するのに時間がかかることは良い習慣です。