estructura DML_ADAM_OPTIMIZER_OPERATOR_DESC (directml.h)
Calcula ponderaciones actualizadas (parámetros) mediante los degradados proporcionados, en función del algoritmo de estimación de ADAptive M. Este operador es un optimizador y se usa normalmente en el paso de actualización de peso de un bucle de entrenamiento para realizar el descenso del degradado.
Este operador realiza el siguiente cálculo:
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
Además de calcular los parámetros de peso actualizados (devueltos en OutputParametersTensor), este operador también devuelve las estimaciones de primer y segundo momento actualizadas en OutputFirstMomentTensor y OutputSecondMomentTensor, respectivamente. Normalmente, debe almacenar estas estimaciones de primer y segundo momento y suministrarlas como entradas durante el paso de entrenamiento posterior.
Sintaxis
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;
};
Miembros
InputParametersTensor
Tipo: const DML_TENSOR_DESC*
Tensor que contiene los parámetros (pesos) a los que se va a aplicar este optimizador. Este operador usa las estimaciones de degradado, primero y segundo momento, el paso de entrenamiento actual, así como los hiperparámetros LearningRate, Beta1 y Beta2, para realizar el descenso de degradado en los valores de peso proporcionados en este tensor.
InputFirstMomentTensor
Tipo: const DML_TENSOR_DESC*
Tensor que contiene el primer momento estimado del degradado para cada valor de peso. Estos valores se obtienen normalmente como resultado de una ejecución anterior de este operador, a través de OutputFirstMomentTensor.
Al aplicar este optimizador a un conjunto de pesos por primera vez (por ejemplo, durante el paso de entrenamiento inicial), los valores de este tensor normalmente se deben inicializar en cero. Las ejecuciones posteriores deben usar los valores devueltos en OutputFirstMomentTensor.
Los valores Sizes y DataType de este tensor deben coincidir exactamente con los de InputParametersTensor.
InputSecondMomentTensor
Tipo: const DML_TENSOR_DESC*
Tensor que contiene el segundo momento estimado del degradado para cada valor de peso. Estos valores se obtienen normalmente como resultado de una ejecución anterior de este operador, a través de OutputSecondMomentTensor.
Al aplicar este optimizador a un conjunto de pesos por primera vez (por ejemplo, durante el paso de entrenamiento inicial), los valores de este tensor normalmente se deben inicializar en cero. Las ejecuciones posteriores deben usar los valores devueltos en OutputSecondMomentTensor.
Los valores Sizes y DataType de este tensor deben coincidir exactamente con los de InputParametersTensor.
GradientTensor
Tipo: const DML_TENSOR_DESC*
Degradados que se van a aplicar a los parámetros de entrada (pesos) para el descenso de degradado. Normalmente, los degradados se obtienen en un paso de propiedad inversa durante el entrenamiento.
Los valores Sizes y DataType de este tensor deben coincidir exactamente con los de InputParametersTensor.
TrainingStepTensor
Tipo: const DML_TENSOR_DESC*
Tensor escalar que contiene un único valor entero que representa el recuento de pasos de entrenamiento actuales. Este valor junto con Beta1 y Beta2 se usa para calcular la caída exponencial de los tensores de estimación del primer y segundo momento.
Normalmente, el valor del paso de entrenamiento comienza en 0 al principio del entrenamiento y se incrementa en 1 en cada paso de entrenamiento sucesivo. Este operador no actualiza el valor del paso de entrenamiento; Debe hacerlo manualmente, por ejemplo, con DML_OPERATOR_ELEMENT_WISE_ADD.
Este tensor debe ser escalar (es decir, todos los tamaños iguales a 1) y tener DML_TENSOR_DATA_TYPE_UINT32 de tipo de datos.
OutputParametersTensor
Tipo: const DML_TENSOR_DESC*
Tensor de salida que contiene los valores del parámetro actualizado (peso) después de aplicar el descenso de degradado.
Durante el enlace, este tensor tiene permiso para aplicar alias a un tensor de entrada apto, que se puede usar para realizar una actualización local de este tensor. Consulte la sección Comentarios para obtener más detalles.
Los valores Sizes y DataType de este tensor deben coincidir exactamente con los de InputParametersTensor.
OutputFirstMomentTensor
Tipo: const DML_TENSOR_DESC*
Tensor de salida que contiene las estimaciones de primer momento actualizadas. Debe almacenar los valores de este tensor y proporcionarlos en InputFirstMomentTensor durante el paso de entrenamiento posterior.
Durante el enlace, este tensor tiene permiso para aplicar alias a un tensor de entrada apto, que se puede usar para realizar una actualización local de este tensor. Consulte la sección Comentarios para obtener más detalles.
Los valores Sizes y DataType de este tensor deben coincidir exactamente con los de InputParametersTensor.
OutputSecondMomentTensor
Tipo: const DML_TENSOR_DESC*
Tensor de salida que contiene las estimaciones actualizadas del segundo momento. Debe almacenar los valores de este tensor y proporcionarlos en InputSecondMomentTensor durante el paso de entrenamiento posterior.
Durante el enlace, este tensor tiene permiso para aplicar alias a un tensor de entrada apto, que se puede usar para realizar una actualización local de este tensor. Consulte la sección Comentarios para obtener más detalles.
Los valores Sizes y DataType de este tensor deben coincidir exactamente con los de InputParametersTensor.
LearningRate
Tipo: float
La velocidad de aprendizaje, también conocida comúnmente como el tamaño del paso. La velocidad de aprendizaje es un hiperparámetros que determina la magnitud de la actualización de peso a lo largo del vector de degradado en cada paso de entrenamiento.
Beta1
Tipo: float
Un hiperparámetros que representa la tasa de descomposición exponencial del primer momento estimado del degradado. Este valor debe estar comprendido entre 0,0 y 1,0. Un valor de 0,9f es típico.
Beta2
Tipo: float
Un hiperparámetros que representa la tasa de descomposición exponencial del segundo momento estimado del degradado. Este valor debe estar comprendido entre 0,0 y 1,0. Un valor de 0,999f es típico.
Epsilon
Tipo: float
Valor pequeño utilizado para ayudar a la estabilidad numérica evitando la división por cero. Para las entradas de punto flotante de 32 bits, los valores típicos incluyen 1e-8 o FLT_EPSILON
.
Comentarios
Este operador admite la ejecución local, lo que significa que cada tensor de salida tiene permiso para dar alias a un tensor de entrada apto durante el enlace. Por ejemplo, es posible enlazar el mismo recurso para InputParametersTensor y OutputParametersTensor con el fin de lograr eficazmente una actualización local de los parámetros de entrada. Todos los tensores de entrada de este operador, a excepción de TrainingStepTensor, pueden ser alias de esta manera.
Disponibilidad
Este operador se introdujo en DML_FEATURE_LEVEL_3_0
.
Restricciones tensor
GradientTensor, InputFirstMomentTensor, InputParametersTensor, InputSecondMomentTensor, OutputFirstMomentTensor, OutputParametersTensor y OutputSecondMomentTensor deben tener los mismos DataType, DimensionCount y Sizes.
Compatibilidad con Tensor
Tensor | Kind | Dimensions | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|---|
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 | Resultados | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
OutputFirstMomentTensor | Resultados | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
OutputSecondMomentTensor | Resultados | { D0, D1, D2, D3 } | 4 | FLOAT32, FLOAT16 |
Requisitos
Cliente mínimo compatible | Compilación 20348 de Windows 10 |
Servidor mínimo compatible | Compilación 20348 de Windows 10 |
Encabezado | directml.h |