Share via


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_0eingefü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