Programação diferenciável

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

A programação diferenciável é um paradigma de programação em que um programa de computador numérico pode ser diferenciado por meio de diferenciação automática . [1] [2] [3] [4] Isso permite a otimização baseada em gradiente de parâmetros no programa, geralmente via gradiente descendente . A programação diferenciável encontrou uso em uma ampla variedade de áreas, particularmente computação científica e inteligência artificial . [4]

Abordagens

A maioria das estruturas de programação diferenciáveis ​​funciona construindo um gráfico contendo o fluxo de controle e as estruturas de dados no programa. [5] As tentativas anteriores geralmente se dividem em dois grupos:

  • Abordagens estáticas e baseadas em gráficos compilados , como TensorFlow , [nota 1] Theano e MXNet . Eles tendem a permitir uma boa otimização do compilador e dimensionamento mais fácil para sistemas grandes, mas sua natureza estática limita a interatividade e os tipos de programas que podem ser criados facilmente (por exemplo, aqueles que envolvem loops ou recursão ), além de dificultar o raciocínio dos usuários efetivamente sobre seus programas. [5] [6] [7]
  • Sobrecarga de operadores , abordagens baseadas em gráficos dinâmicos , como PyTorch e AutoGrad . Sua natureza dinâmica e interativa permite que a maioria dos programas seja escrita e raciocinada com mais facilidade. No entanto, eles levam à sobrecarga do interpretador (particularmente ao compor muitas operações pequenas), escalabilidade menor e benefícios reduzidos da otimização do compilador. [6] [7] [4]

Ambas as abordagens iniciais só são capazes de diferenciar o código escrito de maneira adequada para a estrutura, limitando sua interoperabilidade com outros programas.

Um pacote mais recente para a linguagem de programação Julia – Zygote  – resolve os problemas que as tentativas anteriores enfrentavam ao tratar a sintaxe da linguagem como o gráfico. A representação intermediária de código arbitrário pode então ser diferenciada diretamente, otimizada e compilada. [5] [8]

Uma linguagem de programação "atualmente em desenvolvimento e ainda não está pronta para uso" chamada Myia [6] permite definir um modelo usando um subconjunto de Python , que é compilado para Myia.

Aplicativos

A programação diferenciável tem sido aplicada em áreas como a combinação de aprendizado profundo com motores físicos em robótica , resolução de problemas de estrutura eletrônica com teoria funcional de densidade diferenciável, traçado de raios diferenciável , processamento de imagens e programação probabilística . [9] [10] [11] [12] [13] [4]

Veja também

Notas

  1. ^ O TensorFlow 1 usa a abordagem de gráfico estático, enquanto o TensorFlow 2 usa a abordagem de gráfico dinâmico por padrão.

Referências

  1. ^ Baydin, Atilim Gunes; Pearlmutter, Barak; Radul, Alexey Andreyevich; Siskind, Jeffrey (2018). "Diferenciação automática em aprendizado de máquina: uma pesquisa" . Journal of Machine Learning Research . 18 : 1–43.
  2. ^ Wang, Fei; Decker, James; Wu, Xilun; Essertel, Gregório; Rompf, Tiark (2018), Bengio, S.; Wallach, H.; Larochelle, H.; Grauman, K. (eds.), "Backpropagation with Callbacks: Foundations for Efficient and Expressive Differentiable Programming" (PDF) , Advances in Neural Information Processing Systems 31 , Curran Associates, Inc., pp. 10201–10212 , recuperado 2019-02 -13
  3. ^ Innes, Mike (2018). "Sobre Aprendizado de Máquina e Linguagens de Programação" (PDF) . Conferência SysML 2018 .
  4. ^ a b c d Innes, Mike; Edelman, Alan; Fischer, Keno; Rackauckas, Chris; Saba, Elliot; Viral B Shah; Tebbutt, Will (2019), ∂P: A Differentiable Programming System to Bridge Machine Learning and Scientific Computing , arXiv : 1907.07587
  5. ^ a b c Innes, Michael; Saba, Elliot; Fischer, Keno; Gandhi, Dhairya; Rudilosso, Marco Concetto; Alegria, Neethu Mariya; Karmali, Tejan; Amigo, Avik; Shah, Viral (2018-10-31). "Modelagem elegante com fluxo". arXiv : 1811.01457 [ cs.PL ].
  6. ^ a b c "Diferenciação automática em Myia" (PDF) . Recuperado 2019-06-24 .
  7. ^ a b "TensorFlow: gráficos estáticos" . Recuperado 2019-03-04 .
  8. ^ Innes, Michael (2018-10-18). "Não desenrole Adjoint: Diferenciando programas SSA-Form" . arXiv : 1810.07951 [ cs.PL ].
  9. ^ Degrave, Jonas; Hermans, Michiel; Dambre, Joni; wyffels, Francisco (2016-11-05). "Um motor de física diferenciável para aprendizado profundo em robótica". arXiv : 1611.01652 [ cs.NE ].
  10. ^ Li, Li; Hoyer, Stephan; PEDERSON, Ryan; Sol, Ruoxi; Cubuk, Ekin D.; Riley, Patrick; Burke, Kieron (2021). "Equações de Kohn-Sham como regularizador: construindo conhecimento prévio em física aprendida por máquina" . Cartas de Revisão Física . 126 (3): 036401. arXiv : 2009.08551 . Bibcode : 2021PhRvL.126c6401L . doi : 10.1103/PhysRevLett.126.036401 . PMID 33543980 . 
  11. ^ "Rastreamento de raios Monte Carlo diferenciável através de amostragem de borda" . pessoas.csail.mit.edu . Recuperado 2019-02-13 .
  12. ^ "Roteiro científico da organização do software de código aberto do aprendizado de máquina SciML" . sciml.ai . Recuperado 2020-07-19 .
  13. ^ "Programação Diferenciável para Processamento de Imagem e Aprendizagem Profunda em Haletos" . pessoas.csail.mit.edu . Recuperado 2019-02-13 .