ケラス、SGD学習率の減衰はどのように機能しますか?


23

ドキュメントhttp://keras.io/optimizers/を見ると、SGDに減衰用のパラメーターがあります。私はこれが時間の経過とともに学習率を低下させることを知っています。しかし、私はそれが正確に機能する方法を理解することはできません。lr = lr * (1 - decay) それは指数関数的であるような学習率を掛けた値ですか?また、モデルが使用している学習率をどのように確認できますか?model.optimizer.lr.get_value()いくつかのエポックにわたってフィットを実行した後に印刷すると、減衰を設定しても、元の学習率が返されます。

また、運動量を使用するためにnesterov = Trueを設定する必要がありますか、または使用できる運動量の種類が2つだけありますか。たとえば、これを行うポイントがありますsgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

回答:


24

参照しているドキュメントには、Pythonソースへの参照が含まれています([Source]適切な場所のリンクをクリックするだけです)。これを使用して、質問に答えることができます。最も重要な行decayは、学習率をどのように変更するかを示しています。

lr = self.lr * (1. / (1. + self.decay * self.iterations))

nesterovオプションは、使用する勢いのためにTrueに設定する必要はありません。ソースからもわかるように、勢いが異なる方法で使用されています。

v = self.momentum * m - lr * g  # velocity

if self.nesterov:
    new_p = p + self.momentum * v - lr * g
else:
    new_p = p + v

1
またself.iterations、エポックの数ではなく、個々のSGDステップの数を指しますか?
ギルフィックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.