共用方式為


DML_ADAM_OPTIMIZER_OPERATOR_DESC結構 (directml.h)

根據 Adam (ADAptive Moment 估計) 演算法,使用提供的漸層) 計算更新權數 (參數。 此運算子是優化工具,通常用於定型迴圈的加權更新步驟中,以執行梯度下降。

此運算子會執行下列計算:

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

除了計算 OutputParametersTensor) 中傳回的更新權數參數 (之外,此運算子也會分別傳回 OutputFirstMomentTensorOutputSecondMomentTensor中更新的第一和第二個時間估計值。 一般而言,您應該儲存這些第一秒的估計值,並在後續的訓練步驟期間提供它們作為輸入。

語法

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;
};

成員

InputParametersTensor

類型:const DML_TENSOR_DESC*

包含要套用此優化工具之參數 (權數) 的張量。 此運算子會使用漸層、第一個和第二刻估計、目前的定型步驟,以及超參數 LearningRateBeta1 和 Beta2,針對此張量中提供的加權值執行梯度下降。

InputFirstMomentTensor

類型:const DML_TENSOR_DESC*

張量,包含每個加權值之漸層的第一刻估計值。 這些值通常是透過 OutputFirstMomentTensor,取得此運算子先前執行的結果。

例如,在第一次 (將這個優化工具套用至一組加權時,在初始定型步驟期間) 此張量的值通常應該初始化為零。 後續執行應該使用 OutputFirstMomentTensor中傳回的值。

此張量 的大小DataType 必須完全符合 InputParametersTensor的大小和資料類型。

InputSecondMomentTensor

類型:const DML_TENSOR_DESC*

包含每個加權值之漸層估計秒數的張量。 這些值通常是透過 OutputSecondMomentTensor,取得此運算子先前執行的結果。

例如,在第一次 (將這個優化工具套用至一組加權時,在初始定型步驟期間) 此張量的值通常應該初始化為零。 後續執行應該使用 OutputSecondMomentTensor中傳回的值。

此張量 的大小DataType 必須完全符合 InputParametersTensor的大小和資料類型。

GradientTensor

類型:const DML_TENSOR_DESC*

要套用至輸入參數的漸層 (權數) 梯度下降。 在定型期間,通常會在反向傳播階段中取得漸層。

此張量 的大小DataType 必須完全符合 InputParametersTensor的大小和資料類型。

TrainingStepTensor

類型:const DML_TENSOR_DESC*

純量張量,包含代表目前定型步驟計數的單一整數值。 這個值以及 Beta1Beta2 是用來計算第一個和第二刻估計張量指數衰減。

一般而言,定型步驟值會在定型開始時從 0 開始,並在每個後續的訓練步驟上遞增 1。 此運算子不會更新定型步驟值;您應該手動執行此動作,例如使用 DML_OPERATOR_ELEMENT_WISE_ADD

此張量必須是純量 (,也就是所有 大小 都等於 1) ,且資料類型 DML_TENSOR_DATA_TYPE_UINT32

OutputParametersTensor

類型:const DML_TENSOR_DESC*

輸出張量,其中包含套用梯度下降之後,更新的參數 (權數) 值。

在系結期間,此張量允許將符合資格的輸入張量別名,可用來執行此張量就地更新。 如需詳細資訊 ,請參閱 一節。

此張量 的大小DataType 必須完全符合 InputParametersTensor的大小和資料類型。

OutputFirstMomentTensor

類型:const DML_TENSOR_DESC*

輸出張量,其中包含更新的第一刻估計值。 您應該儲存此張量的值,並在後續的訓練步驟期間,將它們提供給 InputFirstMomentTensor

在系結期間,此張量允許將符合資格的輸入張量別名,可用來執行此張量就地更新。 如需詳細資訊 ,請參閱 一節。

此張量 的大小DataType 必須完全符合 InputParametersTensor的大小和資料類型。

OutputSecondMomentTensor

類型:const DML_TENSOR_DESC*

輸出張量,其中包含更新的第二個時間估計值。 您應該儲存此張量的值,並在後續的訓練步驟期間將它們提供給 InputSecondMomentTensor

在系結期間,此張量允許將符合資格的輸入張量別名,可用來執行此張量就地更新。 如需詳細資訊 ,請參閱 一節。

此張量 的大小DataType 必須完全符合 InputParametersTensor的大小和資料類型。

LearningRate

類型: float

學習率,通常也稱為 步驟大小。 學習率是超參數,可決定每個定型步驟上沿著漸層向量加權更新的大小。

Beta1

類型: float

超參數,表示漸層第一刻估計值的指數衰減率。 此值應該介於 0.0 和 1.0 之間。 一般值為 0.9f。

Beta2

類型: float

超參數,表示漸層第二刻估計的指數衰減率。 此值應該介於 0.0 和 1.0 之間。 一般值為 0.999f。

Epsilon

類型: float

用來防止除以零來協助數值穩定性的小型值。 對於 32 位浮點輸入,一般值包括 1e-8 或 FLT_EPSILON

備註

此運算子支援就地執行,這表示每個輸出張量都可以在系結期間將合格的輸入張量別名。 例如,可以系結 InputParametersTensorOutputParametersTensor 的相同資源,以有效地達到輸入參數的就地更新。 除了 TrainingStepTensor之外,此運算子的所有輸入張量都有資格以此方式進行別名。

可用性

這個運算子是在 中 DML_FEATURE_LEVEL_3_0 引進。

Tensor 條件約束

GradientTensorInputFirstMomentTensorInputParametersTensorInputSecondMomentTensorOutputFirstMomentTensorOutputParametersTensorOutputSecondMomentTensor 必須具有相同 的 DataTypeDimensionCount大小

Tensor 支援

種類 維度 支援的維度計數 支援的資料類型
InputParametersTensor 輸入 { D0, D1, D2, D3 } 4 FLOAT32、FLOAT16
InputFirstMomentTensor 輸入 { D0, D1, D2, D3 } 4 FLOAT32、FLOAT16
InputSecondMomentTensor 輸入 { D0, D1, D2, D3 } 4 FLOAT32、FLOAT16
GradientTensor 輸入 { D0, D1, D2, D3 } 4 FLOAT32、FLOAT16
TrainingStepTensor 輸入 { 1, 1, 1, 1 } 4 FLOAT32、FLOAT16
OutputParametersTensor 輸出 { D0, D1, D2, D3 } 4 FLOAT32、FLOAT16
OutputFirstMomentTensor 輸出 { D0, D1, D2, D3 } 4 FLOAT32、FLOAT16
OutputSecondMomentTensor 輸出 { D0, D1, D2, D3 } 4 FLOAT32、FLOAT16

需求

   
最低支援的用戶端 Windows 10組建 20348
最低支援的伺服器 Windows 10組建 20348
標頭 directml.h