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 |