La diferenciación automática nos permite evaluar numéricamente la derivada de un programa en una entrada particular. Existe un teorema de que este cálculo puede realizarse a un costo inferior a cinco veces el costo para ejecutar el programa original. Este factor de cinco es un límite superior.
¿En qué situaciones se puede reducir aún más este costo? Muchos códigos derivados en el campo se ejecutan cerca de la velocidad del programa original. ¿Qué se hace para obtener esta aceleración?
¿Cuáles son los rasgos del programa original que pueden explotarse para acelerar el cálculo?
¿Qué trucos de ingeniería de software se pueden emplear para acelerar la computación?
automatic-differentiation
efficiency
MRocklin
fuente
fuente
Respuestas:
Mi comprensión limitada de AD es paralela a lo que Matt ha dicho. Para acelerar el cálculo de derivadas, la estructura del gráfico de expresión debe explotar la escasez y la escasez en el conjunto de matrices jacobianas. (Consulte este documento de Griewank para obtener más información). Los trucos de ingeniería de software probablemente estarían en el código AD para reestructurar el gráfico de expresión para aprovechar estas propiedades en el conjunto de matrices jacobianas. Saber cómo el código AD genera un gráfico de expresión a partir del código que está escribiendo le ayudará a comprender mejor cómo escribir código que requiere menos cálculos. Cualquier buen código AD ya debería aprovechar los intrínsecos con subexpresiones comunes, pero los buenos códigos AD son difíciles de escribir.
La referencia estándar en el campo es Evaluación de derivados: principios y técnicas de diferenciación algorítmica, segunda edición de Andreas Griewank y Andrea Walther, y debe proporcionar información más detallada sobre cómo reducir la cantidad de cálculos necesarios para evaluar la derivada de un programa.
fuente
Cualquier AD todavía necesita que se proporcionen estos intrínsecos, por lo que no puedo ver qué tiene que ver con la complejidad genérica de una expresión. Supongo que puede clasificar la complejidad por el número de rutas a través del gráfico de expresión, ya que expresa AD de esta manera. Andrew Lyons tiene un buen trabajo en gráficos de series paralelas aquí.
fuente