Kapan diferensiasi otomatis murah?

12

Diferensiasi otomatis memungkinkan kita untuk mengevaluasi turunan dari suatu program berdasarkan input tertentu. Ada teorema bahwa perhitungan ini dapat dilakukan dengan biaya kurang dari lima kali biaya untuk menjalankan program asli. Faktor lima ini adalah batas atas.

Dalam situasi apa biaya ini dapat dikurangi lebih lanjut? Banyak kode turunan di lapangan berjalan mendekati kecepatan program aslinya. Apa yang dilakukan untuk mendapatkan kecepatan ini?

Apa ciri-ciri program asli yang dapat dieksploitasi untuk mempercepat perhitungan?

Trik rekayasa perangkat lunak apa yang dapat digunakan untuk mempercepat perhitungan?

MRocklin
sumber
1
Tentu saja, seseorang ingin mengeksploitasi sifat khusus turunan dari fungsi seperti fungsi eksponensial dan fungsi trigonometri. Banyak subekspresi umum yang potensial di sana.
JM
Apakah Anda bertanya tentang mode mundur atau mode maju?
Jed Brown
Pemahaman saya (terbatas) adalah bahwa mode maju dan mundur memiliki biaya yang hampir sama.
MRocklin

Jawaban:

6

Pemahaman saya yang terbatas tentang AD sejajar dengan apa yang dikatakan Matt. Untuk mempercepat perhitungan derivatif, struktur grafik ekspresi harus mengeksploitasi sparsity dan kelangkaan dalam himpunan matriks Jacobian. (Lihat makalah ini oleh Griewank untuk wawasan lebih lanjut.) Trik rekayasa perangkat lunak kemungkinan akan ada dalam kode AD itu sendiri untuk merestrukturisasi grafik ekspresi untuk mengambil keuntungan dari properti ini di set matriks Jacobian. Mengetahui bagaimana kode AD menghasilkan grafik ekspresi dari kode yang Anda tulis pada gilirannya akan membantu Anda lebih memahami cara menulis kode yang membutuhkan lebih sedikit perhitungan. Setiap kode AD yang baik harus sudah memanfaatkan intrinsik dengan subekspresi umum, tetapi kode AD yang baik sulit untuk ditulis.

Referensi standar di lapangan adalah Mengevaluasi Derivatif: Prinsip dan Teknik Diferensiasi Algoritmik, Edisi Kedua oleh Andreas Griewank dan Andrea Walther, dan harus memberikan informasi yang lebih terperinci tentang cara mengurangi jumlah perhitungan yang diperlukan untuk mengevaluasi turunan dari suatu program.

Geoff Oxberry
sumber
3

AD apa pun masih membutuhkan intrinsik ini untuk disediakan, jadi saya tidak bisa melihat apa yang harus dilakukan dengan kompleksitas umum ekspresi. Saya menduga Anda dapat mengklasifikasikan kerumitan berdasarkan jumlah jalur melalui grafik ekspresi sejak Anda menggunakan AD dengan cara ini. Andrew Lyons memiliki karya bagus pada grafik seri-paralel di sini.

Matt Knepley
sumber