Misalkan menjadi fungsi yang cukup bagus (mis. Kontinu, dapat dibedakan, tidak terlalu banyak maxima lokal, mungkin cekung, dll.). Saya ingin mencari maksimum f : nilai x ∈ R d yang membuat f ( x ) sebesar mungkin.
Jika saya memiliki prosedur untuk mengevaluasi tepat pada input apa pun pilihan saya, saya dapat menggunakan teknik optimasi matematika standar : mendaki bukit, gradient descent (well, gradient ascent), dll. Namun, dalam aplikasi saya, saya tidak memiliki cara mengevaluasi f ( x ) dengan tepat. Sebaliknya, saya punya cara untuk memperkirakan nilai f ( x ) .
Secara khusus, mengingat setiap dan ε apa pun , saya memiliki oracle yang akan menampilkan perkiraan f ( x ) , dan yang kesalahan yang diperkirakan sekitar ε . Waktu menjalankan doa oracle ini sebanding dengan 1 / ε 2 . (Diimplementasikan oleh semacam simulasi; akurasi simulasi meningkat dengan akar kuadrat dari jumlah percobaan, dan saya dapat memilih berapa banyak percobaan untuk dijalankan, jadi saya dapat memilih akurasi yang diinginkan.) Jadi ini memberi saya cara untuk mendapatkan perkiraan akurasi yang saya inginkan, tetapi semakin akurat saya ingin estimasi itu, semakin lama waktu yang dibutuhkan.
Mengingat ramalan bising ini untuk , adakah teknik untuk menghitung maksimal f seefisien mungkin? (Atau, lebih tepatnya, menemukan perkiraan maksimal.) Apakah ada varian pendakian bukit, gradient descent, dll., Yang berfungsi dalam model ini?
Tentu saja, saya bisa memperbaiki nilai sangat kecil dan menerapkan mendaki bukit atau gradient descent dengan oracle ini, menjaga ε yang sama tetap ada . Namun, ini mungkin tidak efisien yang tidak perlu: kita mungkin tidak memerlukan perkiraan yang tepat di awal, sedangkan presisi mendekati akhir ketika Anda memusatkan perhatian pada solusi lebih penting. Jadi apakah ada cara untuk mengambil keuntungan dari kemampuan saya untuk mengontrol keakuratan estimasi saya secara dinamis, untuk membuat proses optimisasi lebih efisien? Apakah masalah seperti ini telah dipelajari sebelumnya?
Jawaban:
sumber