Kami sedang mengerjakan model Bayesian untuk proses ruang-waktu, dan menggunakan No-U-Turn sampler (NUTS) yang membutuhkan model untuk probabilitas log dan gradiennya sehubungan dengan parameter model. Lebih ringkasnya, kami memiliki fungsi probabilitas log yang cukup rumit , yang melibatkan distribusi statistik, produk kronecker, eksponensial, rasio, pernyataan if-else, dll, dan perlu menyediakannya dan bergantung pada NUTS. Beberapa paket ( Stan dan Julia's MCMC ) menggunakan operator-overloading (sepengetahuan saya) untuk mendapatkan gradien secara otomatis.
Jika kita dapat membuat fungsi gradien kita sendiri, mungkin menggunakan alat auto-diff sumber-kode-transformasi, akankah kita mendapatkan kinerja yang lebih baik, atau apakah OO sama baiknya atau lebih baik?
sumber
Untuk perhitungan gradien, Anda menggunakan mode sebaliknya dari AD. Dalam kedua kasus ini diperlukan untuk membangun stack operan, versi OO juga perlu membangun stack operasi, yang harus ditafsirkan dalam traversal terbalik kode. Source transformed code menuliskan operasi urutan terbalik sebagai kode sumber tambahan yang dikompilasi. Overhead untuk memiliki juru operasi dalam kode dapat menjadi signifikan. Ada perbandingan kode Tapenade yang dihasilkan dan Adol-C yang mendukung Tapenade.
sumber