Compartilhar via


estrutura DML_ADAM_OPTIMIZER_OPERATOR_DESC (directml.h)

Calcula pesos atualizados (parâmetros) usando os gradientes fornecidos, com base no algoritmo Adão(estimativa de oment doADA ptive M). Esse operador é um otimizador e normalmente é usado na etapa de atualização de peso de um loop de treinamento para executar descendente de gradiente.

Esse operador executa a seguinte computação:

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

Além de calcular os parâmetros de peso atualizados (retornados em OutputParametersTensor), esse operador também retorna as estimativas atualizadas do primeiro e do segundo momento em OutputFirstMomentTensor e OutputSecondMomentTensor, respectivamente. Normalmente, você deve armazenar essas estimativas de primeiro e segundo momento e fornecê-las como entradas durante a etapa de treinamento subsequente.

Sintaxe

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

Membros

InputParametersTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os parâmetros (pesos) aos quais aplicar esse otimizador. As estimativas de gradiente, primeiro e segundo momento, etapa de treinamento atual, bem como hiperparâmetros LearningRate, Beta1 e Beta2, são usadas por esse operador para executar descendente de gradiente nos valores de peso fornecidos neste tensor.

InputFirstMomentTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém a estimativa do primeiro momento do gradiente para cada valor de peso. Esses valores normalmente são obtidos como resultado de uma execução anterior desse operador, por meio do OutputFirstMomentTensor.

Ao aplicar esse otimizador a um conjunto de pesos pela primeira vez (por exemplo, durante a etapa de treinamento inicial), os valores desse tensor normalmente devem ser inicializados como zero. As execuções subsequentes devem usar os valores retornados em OutputFirstMomentTensor.

Os Tamanhos e DataType desse tensor devem corresponder exatamente aos do InputParametersTensor.

InputSecondMomentTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém a estimativa do segundo momento do gradiente para cada valor de peso. Esses valores normalmente são obtidos como resultado de uma execução anterior desse operador, por meio do OutputSecondMomentTensor.

Ao aplicar esse otimizador a um conjunto de pesos pela primeira vez (por exemplo, durante a etapa de treinamento inicial), os valores desse tensor normalmente devem ser inicializados como zero. As execuções subsequentes devem usar os valores retornados em OutputSecondMomentTensor.

Os Tamanhos e DataType desse tensor devem corresponder exatamente aos do InputParametersTensor.

GradientTensor

Tipo: const DML_TENSOR_DESC*

Os gradientes a serem aplicados aos parâmetros de entrada (pesos) para descendente de gradiente. Os gradientes normalmente são obtidos em uma passagem de backpropagation durante o treinamento.

Os Tamanhos e DataType desse tensor devem corresponder exatamente aos do InputParametersTensor.

TrainingStepTensor

Tipo: const DML_TENSOR_DESC*

Um tensor escalar que contém um único valor inteiro que representa a contagem de etapas de treinamento atual. Esse valor juntamente com Beta1 e Beta2 é usado para calcular a decaimento exponencial dos tensores de estimativa do primeiro e do segundo momento.

Normalmente, o valor da etapa de treinamento começa em 0 no início do treinamento e é incrementado em 1 em cada etapa de treinamento sucessiva. Esse operador não atualiza o valor da etapa de treinamento; você deve fazer isso manualmente, por exemplo, usando DML_OPERATOR_ELEMENT_WISE_ADD.

Esse tensor deve ser um escalar (ou seja, todos os Tamanhos iguais a 1) e ter o tipo de dados DML_TENSOR_DATA_TYPE_UINT32.

OutputParametersTensor

Tipo: const DML_TENSOR_DESC*

Um tensor de saída que contém os valores de parâmetro (peso) atualizados após a aplicação da descida do gradiente.

Durante a associação, esse tensor tem permissão para alias de um tensor de entrada qualificado, que pode ser usado para executar uma atualização in-loco desse tensor. Consulte a seção Comentários para obter mais detalhes.

Os Tamanhos e DataType desse tensor devem corresponder exatamente aos do InputParametersTensor.

OutputFirstMomentTensor

Tipo: const DML_TENSOR_DESC*

Um tensor de saída que contém estimativas atualizadas do primeiro momento. Você deve armazenar os valores desse tensor e fornecê-los em InputFirstMomentTensor durante a etapa de treinamento subsequente.

Durante a associação, esse tensor tem permissão para alias de um tensor de entrada qualificado, que pode ser usado para executar uma atualização in-loco desse tensor. Consulte a seção Comentários para obter mais detalhes.

Os Tamanhos e DataType desse tensor devem corresponder exatamente aos do InputParametersTensor.

OutputSecondMomentTensor

Tipo: const DML_TENSOR_DESC*

Um tensor de saída que contém estimativas atualizadas do segundo momento. Você deve armazenar os valores desse tensor e fornecê-los em InputSecondMomentTensor durante a etapa de treinamento subsequente.

Durante a associação, esse tensor tem permissão para alias de um tensor de entrada qualificado, que pode ser usado para executar uma atualização in-loco desse tensor. Consulte a seção Comentários para obter mais detalhes.

Os Tamanhos e DataType desse tensor devem corresponder exatamente aos do InputParametersTensor.

LearningRate

Tipo: float

A taxa de aprendizado, também conhecida como tamanho da etapa. A taxa de aprendizado é um hiperparâmetro que determina a magnitude da atualização de peso ao longo do vetor de gradiente em cada etapa de treinamento.

Beta1

Tipo: float

Um hiperparâmetro que representa a taxa de decaimento exponencial da estimativa de primeiro momento do gradiente. Esse valor deve estar entre 0,0 e 1,0. Um valor de 0,9f é típico.

Beta2

Tipo: float

Um hiperparâmetro que representa a taxa de decaimento exponencial da estimativa do segundo momento do gradiente. Esse valor deve estar entre 0,0 e 1,0. Um valor de 0,999f é típico.

Epsilon

Tipo: float

Um valor pequeno usado para ajudar a estabilidade numérica, impedindo a divisão por zero. Para entradas de ponto flutuante de 32 bits, os valores típicos incluem 1e-8 ou FLT_EPSILON.

Comentários

Esse operador dá suporte à execução in-loco, o que significa que cada tensor de saída tem permissão para alias de um tensor de entrada qualificado durante a associação. Por exemplo, é possível associar o mesmo recurso para InputParametersTensor e OutputParametersTensor para obter efetivamente uma atualização in-loco dos parâmetros de entrada. Todos os tensores de entrada desse operador, com exceção do TrainingStepTensor, são qualificados para serem aliases dessa maneira.

Disponibilidade

Esse operador foi introduzido no DML_FEATURE_LEVEL_3_0.

Restrições do Tensor

GradientTensor, InputFirstMomentTensor, InputParametersTensor, InputSecondMomentTensor, OutputFirstMomentTensor, OutputParametersTensor e OutputSecondMomentTensor devem ter os mesmos DataType, DimensionCount e Sizes.

Suporte ao Tensor

Tensor Tipo Dimensões Contagens de dimensões com suporte Tipos de dados com suporte
InputParametersTensor Entrada { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
InputFirstMomentTensor Entrada { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
InputSecondMomentTensor Entrada { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
GradientTensor Entrada { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
TrainingStepTensor Entrada { 1, 1, 1, 1 } 4 FLOAT32, FLOAT16
OutputParametersTensor Saída { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
OutputFirstMomentTensor Saída { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16
OutputSecondMomentTensor Saída { D0, D1, D2, D3 } 4 FLOAT32, FLOAT16

Requisitos

   
Cliente mínimo com suporte Windows 10 Build 20348
Servidor mínimo com suporte Windows 10 Build 20348
Cabeçalho directml.h