es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Diferenciación automática con respecto a cálculos basados en clasificación.

Soy nuevo en la programación de diferenciación automática, así que esta puede ser una pregunta ingenua. A continuación se muestra una versión simplificada de lo que estoy intentando resolver.

Tengo dos arreglos de entrada: un vector A de tamaño N y una matriz B de forma (N, M), así como un vector de parámetros theta de tamaño M. Defino un nuevo arreglo C(theta) = B * theta para obtener un nuevo vector de tamaño N. Luego obtengo los índices de los elementos que caen en el cuartil superior e inferior de C, y los uso para crear un nuevo arreglo A_low(theta) = A[índices del cuartil inferior de C] y A_high(theta) = A[índices del cuartil superior de C]. Claramente, estos dos dependen de theta, pero ¿es posible diferenciar A_low y A_high con respecto a theta?

Mis intentos hasta ahora parecen sugerir que no es posible: he utilizado las bibliotecas de Python de autograd, JAX y TensorFlow, pero todas devuelven un gradiente cero. (Los enfoques que he intentado hasta ahora involucran el uso de argsort o la extracción de los subarreglos relevantes utilizando tf.top_k).

Lo que estoy buscando es una prueba de que la derivada no está definida (o no se puede calcular analíticamente) o, si existe, una sugerencia sobre cómo estimarla. Mi objetivo final es minimizar alguna función f(A_low, A_high) con respecto a theta.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es posible diferenciar A_low y A_high con respecto a theta utilizando técnicas de diferenciación automática. Sin embargo, el método específico utilizado para la diferenciación dependerá de la biblioteca utilizada y los detalles de implementación.

    Una posible razón para obtener un gradiente cero es que el proceso de diferenciación puede quedarse atascado en las partes no diferenciables del algoritmo, como la ordenación o indexación. En estos casos, puede ser necesario utilizar una función de gradiente personalizada o implementar una operación de ordenación diferenciable para asegurar que el gradiente se propague correctamente.

    Alternativamente, puede que el derivado no esté definido o no pueda ser calculado analíticamente. En este caso, se pueden utilizar métodos numéricos como diferencias finitas o métodos Monte Carlo para estimar el gradiente.

    Para determinar si el derivado existe y encontrar el mejor método para calcularlo, puede ser útil analizar el algoritmo y sus dependencias de manera más detallada.

Comments are closed.