Condividi tramite


DML_ADAM_OPTIMIZER_OPERATOR_DESC struttura (directml.h)

Calcola i pesi aggiornati (parametri) usando le sfumature fornite, in base all'algoritmo Adam (stima M omentADA). Questo operatore è un ottimizzatore ed è in genere usato nel passaggio di aggiornamento del peso di un ciclo di training per eseguire la discesa sfumatura.

Questo operatore esegue il calcolo seguente:

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

Oltre a calcolare i parametri di peso aggiornati (restituiti in OutputParametersTensTensor), questo operatore restituisce rispettivamente le stime aggiornate del primo e del secondo momento in OutputFirstMomentTensor e OutputSecondMomentTensor. In genere, è consigliabile archiviare queste stime di primo e secondo momento e specificarle come input durante il passaggio di training successivo.

Sintassi

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

Members

InputParametersTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente i parametri (pesi) per applicare questo ottimizzatore a. La sfumatura, la prima e la seconda stima, il passaggio di training corrente, nonché gli iperparametri LearningRate, Beta1 e Beta2, vengono usati da questo operatore per eseguire la discesa sfumatura sui valori di peso forniti in questo tensore.

InputFirstMomentTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente la prima stima della sfumatura per ogni valore di peso. Questi valori vengono in genere ottenuti come risultato di un'esecuzione precedente di questo operatore tramite OutputFirstMomentTensor.

Quando si applica questo ottimizzatore a un set di pesi per la prima volta ,ad esempio durante il passaggio di training iniziale, i valori di questo tensore devono in genere essere inizializzati a zero. Le esecuzioni successive devono usare i valori restituiti in OutputFirstMomentTensor.

Le dimensioni e il tipo di dati di questo tensore devono corrispondere esattamente a quelli di InputParametersTensOr.

InputSecondMomentTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente la seconda stima del gradiente per ogni valore di peso. Questi valori vengono in genere ottenuti come risultato di un'esecuzione precedente di questo operatore tramite OutputSecondMomentTensor.

Quando si applica questo ottimizzatore a un set di pesi per la prima volta ,ad esempio durante il passaggio di training iniziale, i valori di questo tensore devono in genere essere inizializzati a zero. Le esecuzioni successive devono usare i valori restituiti in OutputSecondMomentTensor.

Le dimensioni e il tipo di dati di questo tensore devono corrispondere esattamente a quelli di InputParametersTensOr.

GradientTensor

Tipo: const DML_TENSOR_DESC*

Sfumature da applicare ai parametri di input (pesi) per la discesa sfumatura. Le sfumature vengono in genere ottenute in un passaggio backpropagation durante il training.

Le dimensioni e il tipo di dati di questo tensore devono corrispondere esattamente a quelli di InputParametersTensOr.

TrainingStepTensor

Tipo: const DML_TENSOR_DESC*

Tensore scalare contenente un singolo valore intero che rappresenta il conteggio dei passaggi di training corrente. Questo valore insieme a Beta1 e Beta2 viene usato per calcolare il decadimento esponenziale dei tensori di stima del primo e secondo momento.

In genere il valore del passaggio di training inizia a 0 all'inizio del training e viene incrementato da 1 in ogni passaggio di training successivo. Questo operatore non aggiorna il valore del passaggio di training; è consigliabile eseguire questa operazione manualmente, ad esempio usando DML_OPERATOR_ELEMENT_WISE_ADD.

Questo tensore deve essere un scalare (ovvero tutte le dimensioni uguali a 1) e avere il tipo di dati DML_TENSOR_DATA_TYPE_UINT32.

OutputParametersTensor

Tipo: const DML_TENSOR_DESC*

Tensore di output che contiene i valori di parametro aggiornati (peso) dopo l'applicazione della discesa sfumatura.

Durante l'associazione, questo tensore è consentito per aliasre un tensore di input idoneo, che può essere usato per eseguire un aggiornamento sul posto di questo tensore. Per altre informazioni, vedere la sezione Osservazioni .

Le dimensioni e il tipo di dati di questo tensore devono corrispondere esattamente a quelli di InputParametersTensOr.

OutputFirstMomentTensor

Tipo: const DML_TENSOR_DESC*

Tensore di output contenente le stime del primo momento aggiornate. È necessario archiviare i valori di questo tensore e specificarli in InputFirstMomentTensor durante il passaggio di training successivo.

Durante l'associazione, questo tensore è consentito per aliasre un tensore di input idoneo, che può essere usato per eseguire un aggiornamento sul posto di questo tensore. Per altre informazioni, vedere la sezione Osservazioni .

Le dimensioni e il tipo di dati di questo tensore devono corrispondere esattamente a quelli di InputParametersTensOr.

OutputSecondMomentTensor

Tipo: const DML_TENSOR_DESC*

Tensore di output contenente stime del secondo momento aggiornate. È necessario archiviare i valori di questo tensore e specificarli in InputSecondMomentTensor durante il passaggio di training successivo.

Durante l'associazione, questo tensore è consentito per aliasre un tensore di input idoneo, che può essere usato per eseguire un aggiornamento sul posto di questo tensore. Per altre informazioni, vedere la sezione Osservazioni .

Le dimensioni e il tipo di dati di questo tensore devono corrispondere esattamente a quelli di InputParametersTensOr.

LearningRate

Tipo: float

Frequenza di apprendimento, nota anche come dimensione del passaggio. La frequenza di apprendimento è un iperparametro che determina la grandezza dell'aggiornamento del peso lungo il vettore sfumatura in ogni passaggio di training.

Beta1

Tipo: float

Un iperparametro che rappresenta il tasso di decadimento esponenziale della stima del primo momento della sfumatura. Questo valore deve essere compreso tra 0,0 e 1,0. Un valore pari a 0,9f è tipico.

Beta2

Tipo: float

Un iperparametro che rappresenta la frequenza di decadimento esponenziale della stima del secondo momento della sfumatura. Questo valore deve essere compreso tra 0,0 e 1,0. Un valore pari a 0,999f è tipico.

Epsilon

Tipo: float

Valore ridotto usato per aiutare la stabilità numerica impedendo la divisione per zero. Per gli input a virgola mobile a 32 bit, i valori tipici includono 1e-8 o FLT_EPSILON.

Commenti

Questo operatore supporta l'esecuzione sul posto, ovvero ogni tensore di output è consentito per aliasre un tensore di input idoneo durante l'associazione. Ad esempio, è possibile associare la stessa risorsa per inputParametersTensor e OutputParametersTensor per ottenere in modo efficace un aggiornamento sul posto dei parametri di input. Tutti i tensori di input di questo operatore, ad eccezione di TrainingStepTensor, sono idonei a essere aliasati in questo modo.

Disponibilità

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_3_0.

Vincoli tensor

GradientTensor, InputFirstMomentTensor, InputParametersTensor, InputSecondMomentTensor, OutputFirstMomentTensor, OutputParametersTensor e OutputSecondMomentTensor devono avere lo stesso DataType, DimensionCount e Sizes.

Supporto di Tensor

Tensore Tipo Dimensioni Conteggi delle dimensioni supportate Tipi di dati supportati
InputParametersTensor Input { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
InputFirstMomentTensor Input { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
InputSecondMomentTensor Input { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
GradientTensor Input { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
TrainingStepTensor Input { 1, 1, 1, 1 } 4 FLOAT32, FLOAT16
OutputParametersTensor Output { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
OutputFirstMomentTensor Output { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
OutputSecondMomentTensor Output { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16

Requisiti

   
Client minimo supportato Windows 10 Build 20348
Server minimo supportato Windows 10 Build 20348
Intestazione directml.h