DML_ADAM_OPTIMIZER_OPERATOR_DESC-Struktur (directml.h)
Berechnet aktualisierte Gewichtungen (Parameter) mithilfe der bereitgestellten Farbverläufe basierend auf dem Adam-Algorithmus (ADAptive Moment estimation). Dieser Operator ist ein Optimierer und wird in der Regel im Gewichtungsaktualisierungsschritt einer Trainingsschleife verwendet, um den Gradientenabstieg durchzuführen.
Dieser Operator führt die folgenden Berechnungen aus:
X = InputParametersTensor
M = InputFirstMomentTensor
V = InputSecondMomentTensor
G = GradientTensor
T = TrainingStepTensor
// Compute updated first and second moment estimates.
M = Beta1 * M + (1.0 - Beta1) * G
V = Beta2 * V + (1.0 - Beta2) * G * G
// Compute bias correction factor for first and second moment estimates.
Alpha = sqrt(1.0 - pow(Beta2, T)) / (1.0 - pow(Beta1, T))
X -= LearningRate * Alpha * M / (sqrt(V) + Epsilon)
OutputParametersTensor = X
OutputFirstMomentTensor = M
OutputSecondMomentTensor = V
Zusätzlich zur Berechnung der aktualisierten Gewichtungsparameter (zurückgegeben in OutputParametersTensor) gibt dieser Operator auch die aktualisierten Schätzungen für das erste und zweite Moment in OutputFirstMomentTensor bzw . OutputSecondMomentTensor zurück. In der Regel sollten Sie diese Schätzungen für den ersten und zweiten Moment speichern und während des nachfolgenden Trainingsschritts als Eingaben angeben.
Syntax
struct DML_ADAM_OPTIMIZER_OPERATOR_DESC {
const DML_TENSOR_DESC *InputParametersTensor;
const DML_TENSOR_DESC *InputFirstMomentTensor;
const DML_TENSOR_DESC *InputSecondMomentTensor;
const DML_TENSOR_DESC *GradientTensor;
const DML_TENSOR_DESC *TrainingStepTensor;
const DML_TENSOR_DESC *OutputParametersTensor;
const DML_TENSOR_DESC *OutputFirstMomentTensor;
const DML_TENSOR_DESC *OutputSecondMomentTensor;
FLOAT LearningRate;
FLOAT Beta1;
FLOAT Beta2;
FLOAT Epsilon;
};
Member
InputParametersTensor
Typ: const DML_TENSOR_DESC*
Ein Tensor, der die Parameter (Gewichtungen) enthält, auf die dieser Optimierer angewendet werden soll. Der Farbverlauf, die Schätzungen des ersten und zweiten Moments, der aktuelle Trainingsschritt sowie die Hyperparameter LearningRate, Beta1 und Beta2 werden von diesem Operator verwendet, um den Gradientenabstieg auf die in diesem Tensor angegebenen Gewichtungswerte durchzuführen.
InputFirstMomentTensor
Typ: const DML_TENSOR_DESC*
Ein Tensor, der die erste Momentschätzung des Farbverlaufs für jeden Gewichtungswert enthält. Diese Werte werden in der Regel als Ergebnis einer vorherigen Ausführung dieses Operators über outputFirstMomentTensor abgerufen.
Wenn Sie diesen Optimierer zum ersten Mal auf eine Reihe von Gewichtungen anwenden (z. B. während des ersten Trainingsschritts), sollten die Werte dieses Tensors in der Regel auf Null initialisiert werden. Nachfolgende Ausführungen sollten die werte verwenden, die in OutputFirstMomentTensor zurückgegeben werden.
Die Größen und der Datentyp dieses Tensors müssen genau mit denen des InputParametersTensor übereinstimmen.
InputSecondMomentTensor
Typ: const DML_TENSOR_DESC*
Ein Tensor, der die zweite Momentschätzung des Farbverlaufs für jeden Gewichtungswert enthält. Diese Werte werden in der Regel als Ergebnis einer vorherigen Ausführung dieses Operators über den OutputSecondMomentTensor abgerufen.
Wenn Sie diesen Optimierer zum ersten Mal auf eine Reihe von Gewichtungen anwenden (z. B. während des ersten Trainingsschritts), sollten die Werte dieses Tensors in der Regel auf Null initialisiert werden. Nachfolgende Ausführungen sollten die in OutputSecondMomentTensor zurückgegebenen Werte verwenden.
Die Größen und der Datentyp dieses Tensors müssen genau mit denen des InputParametersTensor übereinstimmen.
GradientTensor
Typ: const DML_TENSOR_DESC*
Die Farbverläufe, die auf die Eingabeparameter (Gewichtungen) für den Gradientenabstieg angewendet werden sollen. Farbverläufe werden in der Regel während des Trainings in einem Rückpropagationsdurchlauf erhalten.
Die Größen und der Datentyp dieses Tensors müssen genau mit denen des InputParametersTensor übereinstimmen.
TrainingStepTensor
Typ: const DML_TENSOR_DESC*
Ein Skalar tensor, der einen einzelnen ganzzahligen Wert enthält, der die aktuelle Anzahl von Trainingsschritten darstellt. Dieser Wert wird zusammen mit Beta1 und Beta2 verwendet, um den exponentiellen Verfall der Tensoren im ersten und zweiten Moment zu berechnen.
In der Regel beginnt der Wert des Trainingsschritts bei 0 zu Beginn des Trainings und wird in jedem aufeinanderfolgenden Trainingsschritt um 1 erhöht. Dieser Operator aktualisiert den Wert des Trainingsschritts nicht. Sie sollten dies manuell tun, z. B. mit DML_OPERATOR_ELEMENT_WISE_ADD.
Dieser Tensor muss ein Skalar (d. h. alle Größen gleich 1) sein und über den Datentyp DML_TENSOR_DATA_TYPE_UINT32 verfügen.
OutputParametersTensor
Typ: const DML_TENSOR_DESC*
Ein Ausgabe tensor, der die aktualisierten Parameterwerte (Gewichtung) nach dem Abstieg des Farbverlaufs enthält.
Während der Bindung darf dieser Tensor einen geeigneten Eingabe tensor aliasen, der zum Ausführen einer direkten Aktualisierung dieses Tensors verwendet werden kann. Weitere Informationen finden Sie im Abschnitt Hinweise .
Die Größen und der Datentyp dieses Tensors müssen genau mit denen des InputParametersTensor übereinstimmen.
OutputFirstMomentTensor
Typ: const DML_TENSOR_DESC*
Ein Ausgabe tensor mit aktualisierten Schätzungen für das erste Moment. Sie sollten die Werte dieses Tensors speichern und während des nachfolgenden Trainingsschritts in InputFirstMomentTensor angeben.
Während der Bindung darf dieser Tensor einen geeigneten Eingabe tensor aliasen, der zum Ausführen einer direkten Aktualisierung dieses Tensors verwendet werden kann. Weitere Informationen finden Sie im Abschnitt Hinweise .
Die Größen und der Datentyp dieses Tensors müssen genau mit denen des InputParametersTensor übereinstimmen.
OutputSecondMomentTensor
Typ: const DML_TENSOR_DESC*
Ein Ausgabe tensor, der aktualisierte Schätzungen für das zweite Moment enthält. Sie sollten die Werte dieses Tensors speichern und während des nachfolgenden Trainingsschritts in InputSecondMomentTensor angeben.
Während der Bindung darf dieser Tensor einen geeigneten Eingabe tensor aliasen, der zum Ausführen einer direkten Aktualisierung dieses Tensors verwendet werden kann. Weitere Informationen finden Sie im Abschnitt Hinweise .
Die Größen und der Datentyp dieses Tensors müssen genau mit denen des InputParametersTensor übereinstimmen.
LearningRate
Typ: float
Die Lernrate, auch als Schrittgröße bezeichnet. Die Lernrate ist ein Hyperparameter, der die Größe der Gewichtungsaktualisierung entlang des Farbverlaufsvektors für jeden Trainingsschritt bestimmt.
Beta1
Typ: float
Ein Hyperparameter, der die exponentielle Verfallsrate der ersten Momentschätzung des Gradienten darstellt. Dieser Wert sollte zwischen 0,0 und 1,0 sein. Ein Wert von 0,9f ist typisch.
Beta2
Typ: float
Ein Hyperparameter, der die exponentielle Verfallsrate der zweiten Momentschätzung des Gradienten darstellt. Dieser Wert sollte zwischen 0,0 und 1,0 sein. Ein Wert von 0,999f ist typisch.
Epsilon
Typ: float
Ein kleiner Wert, der zur Unterstützung der numerischen Stabilität verwendet wird, indem eine Division durch Null verhindert wird. Für 32-Bit-Gleitkommaeingaben sind typische Werte 1e-8 oder FLT_EPSILON
.
Hinweise
Dieser Operator unterstützt die direkte Ausführung, d. h. jeder Ausgabe tensor darf während der Bindung einen geeigneten Eingabe tensor aliasen. Beispielsweise ist es möglich, dieselbe Ressource sowohl für InputParametersTensor als auch für OutputParametersTensor zu binden, um effektiv eine direkte Aktualisierung der Eingabeparameter zu erreichen. Alle Eingabe tensoren dieses Operators, mit Ausnahme des TrainingStepTensor, können auf diese Weise als Alias verwendet werden.
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_3_0
eingeführt.
Tensoreinschränkungen
GradientTensor, InputFirstMomentTensor, InputParametersTensor, InputSecondMomentTensor, OutputFirstMomentTensor, OutputParametersTensor und OutputSecondMomentTensor müssen denselben DataType, DimensionCount und Sizes aufweisen.
Tensorunterstützung
Tensor | Typ | Dimensionen | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|---|
InputParametersTensor | Eingabe | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
InputFirstMomentTensor | Eingabe | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
InputSecondMomentTensor | Eingabe | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
GradientTensor | Eingabe | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
TrainingStepTensor | Eingabe | { 1, 1, 1, 1 } | 4 | FLOAT32, FLOAT16 |
OutputParametersTensor | Ausgabe | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
OutputFirstMomentTensor | Ausgabe | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
OutputSecondMomentTensor | Ausgabe | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
Anforderungen
Unterstützte Mindestversion (Client) | Windows 10 Build 20348 |
Unterstützte Mindestversion (Server) | Windows 10 Build 20348 |
Kopfzeile | directml.h |