Keras, como funciona o decaimento da taxa de aprendizado SGD?

23

Se você consultar a documentação http://keras.io/optimizers/, há um parâmetro no SGD para deterioração. Eu sei que isso reduz a taxa de aprendizado ao longo do tempo. No entanto, não consigo descobrir como funciona exatamente. É um valor multiplicado pela taxa de aprendizado, como lr = lr * (1 - decay) é exponencial? Além disso, como posso ver qual taxa de aprendizado meu modelo está usando? Quando imprimo model.optimizer.lr.get_value()após executar um ajuste por algumas épocas, ele devolve a taxa de aprendizado original, mesmo que eu tenha definido a deterioração.

Também tenho que definir nesterov = True para usar momento ou existem apenas dois tipos diferentes de momento que posso usar. Por exemplo, há um ponto para fazer issosgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

chasep255
fonte

Respostas:

24

A documentação a que você está se referindo inclui uma referência à fonte Python (basta clicar no [Source]link no local apropriado), que pode ser usada para responder às suas perguntas. Aqui está a linha mais relevante, mostrando como decaymodifica a taxa de aprendizado:

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

A nesterovopção não precisa ser definida como True para que o momento seja usado; resulta em momentum sendo usado de uma maneira diferente, como novamente pode ser visto a partir da fonte:

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

if self.nesterov:
    new_p = p + self.momentum * v - lr * g
else:
    new_p = p + v
Brent Kerby
fonte
1
e self.iterationsrefere-se ao número de etapas individuais do SGD, não ao número de épocas, rígido?
precisa saber é