Warum müssen wir in pytorch explizit null Gradienten machen? Warum können Gradienten nicht auf Null gesetzt werden, wenn loss.backward()
aufgerufen wird. In welchem Szenario werden die Gradienten im Diagramm beibehalten und der Benutzer aufgefordert, die Gradienten explizit auf Null zu setzen?
Ich suche nach einer guten Erklärung.
Meine Meinung ist nach loss.backward()
, wir müssen optimizer.step()
verwenden, um mit Gradientenabstieg fortzufahren, also ist der Gradient reserviert, da die 2 Operationen getrennt sind.
Außerdem müssen wir manchmal zwischen einigen Stapeln einen Gradienten akkumulieren, wir können einfach mehrfach rückwärts gehen und einmal optimieren.
Ich habe einen Anwendungsfall für das aktuelle Setup in PyTorch. Wenn man ein rekurrentes neuronales Netzwerk verwendet, das bei jedem Schritt Vorhersagen macht, möchte man vielleicht einen Hyperparameter haben, der es erlaubt, Gradienten in der Zeit zu akkumulieren. Das Nicht-Nullstellen der Gradienten in jedem Zeitschritt ermöglicht es, die Rückwärts-Fortpflanzung durch die Zeit (bptt) auf interessante und neuartige Weise zu verwenden. Wenn Sie mehr Informationen über bptt oder wiederkehrende neuronale Netze möchten, lesen Sie Zurück prop oder RNN
Tags und Links pytorch