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) 中傳回的更新權數參數 (之外,此運算子也會分別傳回 OutputFirstMomentTensor 和 OutputSecondMomentTensor中更新的第一和第二個時間估計值。 一般而言,您應該儲存這些第一秒的估計值,並在後續的訓練步驟期間提供它們作為輸入。
語法
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*
包含要套用此優化工具之參數 (權數) 的張量。 此運算子會使用漸層、第一個和第二刻估計、目前的定型步驟,以及超參數 LearningRate、Beta1 和 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*
純量張量,包含代表目前定型步驟計數的單一整數值。 這個值以及 Beta1 和 Beta2 是用來計算第一個和第二刻估計張量指數衰減。
一般而言,定型步驟值會在定型開始時從 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
。
備註
此運算子支援就地執行,這表示每個輸出張量都可以在系結期間將合格的輸入張量別名。 例如,可以系結 InputParametersTensor 和 OutputParametersTensor 的相同資源,以有效地達到輸入參數的就地更新。 除了 TrainingStepTensor之外,此運算子的所有輸入張量都有資格以此方式進行別名。
可用性
這個運算子是在 中 DML_FEATURE_LEVEL_3_0
引進。
Tensor 條件約束
GradientTensor、 InputFirstMomentTensor、 InputParametersTensor、 InputSecondMomentTensor、 OutputFirstMomentTensor、 OutputParametersTensor和 OutputSecondMomentTensor 必須具有相同 的 DataType、 DimensionCount和 大小。
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 |