Quando a diferenciação automática é barata?


12

A diferenciação automática nos permite avaliar numericamente a derivada de um programa em uma entrada específica. Existe um teorema de que esse cálculo pode ser feito a um custo inferior a cinco vezes o custo para executar o programa original. Esse fator de cinco é um limite superior.

Em que situações esse custo pode ser reduzido ainda mais? Muitos códigos de derivativos em campo são executados quase à velocidade do programa original. O que é feito para obter essa aceleração?

Quais são as características do programa original que podem ser exploradas para acelerar a computação?

Quais truques de engenharia de software podem ser empregados para acelerar a computação?


1
Certamente, alguém desejaria explorar as propriedades especiais de derivadas de funções como a função exponencial e funções trigonométricas. Muitas subexpressões comuns em potencial por lá.
JM

Você está perguntando sobre o modo reverso ou avançado?
Jed Brown

Meu entendimento (limitado) é que os modos de avanço e reverso têm custos aproximadamente semelhantes.
MRocklin 01/12/11

Respostas:


6

Meu entendimento limitado do AD é paralelo ao que Matt disse. Para acelerar o cálculo das derivadas, a estrutura do gráfico de expressão deve explorar a escarsidade e a escassez no conjunto de matrizes jacobianas. (Veja este artigo de Griewank para obter mais informações.) Os truques de engenharia de software provavelmente estariam no próprio código AD para reestruturar o gráfico de expressão para tirar proveito dessas propriedades no conjunto de matrizes jacobianas. Saber como o código do AD gera um gráfico de expressão a partir do código que você está escrevendo ajudaria a entender melhor como escrever código que requer menos cálculos. Qualquer bom código AD já deve tirar proveito dos intrínsecos com subexpressões comuns, mas é difícil escrever bons códigos AD.

A referência padrão no campo é Avaliação de derivadas: princípios e técnicas de diferenciação algorítmica, segunda edição de Andreas Griewank e Andrea Walther, e deve fornecer informações mais detalhadas sobre como reduzir o número de computações necessárias para avaliar a derivada de um programa.


3

Qualquer AD ainda precisa que esses intrínsecos sejam fornecidos, então não consigo ver o que isso tem a ver com a complexidade genérica de uma expressão. Suponho que você possa classificar a complexidade pelo número de caminhos no gráfico de expressão, desde que você fraseie o AD dessa maneira. Andrew Lyons tem um bom trabalho em gráficos paralelos em série aqui.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.