Ketika Jacobian analitik tersedia, apakah lebih baik untuk memperkirakan Hessian dengan , atau dengan perbedaan terbatas dari Jacobian?

19

Katakanlah saya menghitung beberapa parameter model, meminimalkan jumlah kuadrat residu, dan saya berasumsi kesalahan saya adalah Gaussian. Model saya menghasilkan turunan analitik, sehingga pengoptimal tidak perlu menggunakan perbedaan hingga. Setelah fit selesai, saya ingin menghitung kesalahan standar dari parameter yang dipasang.

Secara umum, dalam situasi ini, Hessian dari fungsi kesalahan dianggap terkait dengan matriks kovarians dengan: mana adalah varian dari residual.σ 2

σ2H1=C
σ2

Ketika tidak ada turunan analitik dari kesalahan yang tersedia, biasanya tidak praktis untuk menghitung Hessian, jadi diambil sebagai perkiraan yang baik.JTJ

Namun, dalam kasus saya, saya punya analitik J, jadi relatif murah bagi saya untuk menghitung H dengan finite J. yang berbeda.

Jadi, pertanyaan saya adalah ini: Apakah akan lebih akurat untuk memperkirakan H menggunakan J tepat saya dan menerapkan perkiraan di atas, atau untuk memperkirakan H dengan J berbeda hingga?

Colin K
sumber

Jawaban:

12

Pertanyaan bagus. Pertama, mengingat di mana ini pendekatan berasal dari. Biarkan menjadi titik data Anda, menjadi model Anda dan menjadi parameter model Anda. Maka fungsi objektif dari masalah kuadrat terkecil non-linear adalah mana adalah vektor dari residual, . Goni yang tepat dari fungsi tujuan adalah . Jadi kesalahan dalam perkiraan ini adalah( x i , y i ) f ( ) β 1HJTJ(xi,yi)f()βrri=yi-f(xi,β)H=JTJ+ri2riH-JTJ=ri2ri12rTrrri=yif(xi,β)H=JTJ+ri2riHJTJ=ri2ri. Ini adalah perkiraan yang baik ketika residu, sendiri, kecil; atau ketika turunan kedua residu kecil. Kuadrat terkecil linier dapat dianggap sebagai kasus khusus di mana turunan ke-2 dari residual adalah nol.

Adapun perkiraan perbedaan hingga, itu relatif murah. Untuk menghitung perbedaan pusat, Anda perlu mengevaluasi Jacobian kali tambahan (perbedaan maju akan dikenakan biaya evaluasi tambahan, jadi saya tidak akan repot-repot). Kesalahan dari perkiraan perbedaan pusat sebanding dengan dan , di mana adalah ukuran langkah. Ukuran langkah optimal adalah , di manan 4 r h 2 h h ϵ 12nn4rh2h ϵhϵ13ϵadalah presisi mesin. Jadi kecuali jika turunan dari residu meledak, cukup jelas bahwa perkiraan perbedaan hingga harus BANYAK lebih baik. Saya harus menunjukkan bahwa, meskipun perhitungannya minimal, pembukuannya tidak trivial. Setiap perbedaan hingga pada Jacobian akan memberi Anda satu baris Hessian untuk setiap residu. Anda kemudian harus memasang kembali Hessian menggunakan rumus di atas.

Namun, ada opsi ke-3. Jika pemecah Anda menggunakan metode Quasi-Newton (DFP, BFGS, Bryoden, dll.), Ia sudah mendekati Hessian pada setiap iterasi. Perkiraan bisa sangat baik, karena menggunakan fungsi objektif dan nilai gradien dari setiap iterasi. Sebagian besar pemecah akan memberi Anda akses ke perkiraan Goni akhir (atau kebalikannya). Jika itu pilihan bagi Anda, saya akan menggunakannya sebagai perkiraan Goni. Ini sudah dihitung dan mungkin akan menjadi perkiraan yang cukup bagus.

Bill Woessner
sumber
Respons yang luar biasa, terima kasih. Membenarkannya dengan perbandingan kesalahan estimasi dalam setiap kasus sangat mencerahkan. Bisakah saya bertanya bagaimana Anda tahu bahwa adalah langkah optimal untuk perbedaan hingga? Saya belum pernah melihat itu sebelumnya. ϵ1/3
Colin K
5
Itu trik lama untuk menyeimbangkan kesalahan pemotongan vs kesalahan pembulatan. Jelas, untuk meminimalkan kesalahan pemotongan, Anda ingin membuat sekecil mungkin. Tetapi begitu menjadi terlalu kecil, Anda mulai mengalami kesalahan pembulatan yang signifikan. Derivasinya relatif mudah. Dengan asumsi perbedaan pusat, kesalahan pemotongan sebanding dengan . Kesalahan pembulatan selalu proporsional dengan . Tambahkan keduanya dan kecilkan . Anda mendapatkan . h h 2 f ( x )hhh2f(x) hhϵ1ϵf(x)hhhϵ13
Bill Woessner
3
Ini hanya berlaku untuk perbedaan pusat. Untuk perbedaan penerusan, ukuran langkah optimal adalah . Ada trik lain juga. Misalnya, pastikan Anda benar-benar tahu apa itu . Saya tahu ini kedengarannya konyol, tetapi hal-hal aneh dapat terjadi dalam aritmatika floating point. Berikut adalah cara sederhana untuk memastikan bahwa Anda memiliki nilai yang benar dari : . Secara matematis, tentu saja, . Tetapi jika Anda menggunakan nilai-nilai yang tidak dapat secara tepat direpresentasikan dalam floating point (seperti ), Anda akan melihat bahwa bukan itu masalahnya. hhhactual=hdesiredh=0,0001hϵ12hhh_actual = (x + h_desired) - xhactual=hdesiredh=0.0001
Bill Woessner
Mungkin konten ini dapat ditambahkan ke jawaban Anda, daripada komentar. Dengan begitu, pengguna di masa depan tidak perlu mengarungi bagian komentar panjang untuk menemukan materi yang secara langsung mendukung klaim yang dibuat dalam jawaban.
Sycorax berkata Reinstate Monica
2
Ya Tuhan. Perkiraan Quasi-Newton tentang Hessian dapat menjadi perkiraan yang mengerikan dari Hessian, dan karenanya menghasilkan estimasi yang sangat buruk dari matriks kovarians. Ini mungkin berfungsi dengan baik untuk memfasilitasi perkembangan algoritma ke optimal, tetapi bisa sangat buruk sebagai perkiraan Hessian.
Mark L. Stone