Pertanyaan dasar tentang penyesuaian formula dengan penurunan gradien atau algoritma genetika

Saya telah mencoba membuat kode masalah berikut. Saya telah mendefinisikan suatu fungsi tergantung pada sejumlah parameter (dalam kasus saya, parameter cermin Bragg dan sinar x-ray). Sekarang saya mencoba membandingkan hasilnya dengan yang dimodelkan oleh program lain dengan menggunakan rumus yang sama, tetapi sepertinya beberapa parameter saya salah, jadi hasilnya tidaklah sama.

Apa yang harus saya lakukan jika saya ingin mengetahui parameter yang benar? Satu-satunya yang saya miliki hanyalah rumus f (x1, x2,..), kurva eksperimental tempat saya membandingkan hasil saya dan beberapa gambaran tentang seperti apa parameternya (x1 +- dx1, x2 +- dx2,.. ).

Apa yang saya gunakan untuk meminimalkan sisa? Saya tahu bahwa Multifitting menggunakan algoritma genetika atau penurunan gradien stokastik (meskipun menurut pemahaman saya, algoritma tersebut lebih sering digunakan untuk tugas-tugas dengan jaringan saraf). Saya mengalami kesulitan mencari tahu apa dan bagaimana saya harus membuat kode: fungsi ini memerlukan waktu beberapa menit untuk dihitung, sehingga algoritme genetika mungkin tidak ideal, dan saya akui saya agak gagal memahaminya SCG yang saya tahu akan diimplementasikan dengan Python.

Apa yang Anda sarankan untuk saya gunakan dalam kasus saya yang lebih sederhana? Jika ada algoritma lain yang akan diimplementasikan di sini selain yang menggunakan modul GA, apakah ada penjelasan masis yang jelas? Apakah saya menanyakan pertanyaan ini di tempat yang tepat? Terima kasih sebelumnya.


person user55702    schedule 25.04.2020    source sumber


Jawaban (2)


Saya tidak terbiasa dengan GA atau menggunakan SGD selain jaringan saraf. Namun, sepertinya ketika nilai reflected energy pada sumbu y berada di bawah 10^-4, fitting akan kesulitan melakukan tugasnya. Hanya beberapa ide:

  1. Melihat apa yang terjadi pada gradien pada nilai y < 10^-4. Apakah itu hilang ketika fungsinya turun? Apakah itu mengembalikan nilai yang aneh?
  2. Lihat lmfit dan pengoptimal dan pembuat scipy jika Anda belum melakukannya.
  3. Memeriksa apakah fungsi Anda mengembalikan nilai NaN ketika fungsi tersebut turun atau turun ke nilai y yang kecil.
person sbjartmar    schedule 02.05.2020

Saya setuju dengan poin yang dibuat oleh sbjartmar, tapi saya kira ada penjelasan yang lebih sederhana tentang perbedaan dan cara memperbaiki kecocokan yang Anda dapatkan. Saya harus mengatakan bahwa saya tidak akrab dengan perangkat lunak Multifitting tetapi saya curiga perangkat lunak tersebut melakukan sesuatu yang tidak Anda lakukan dan harus Anda coba juga:

Karena Anda membuat plot pada skala log, Anda menekankan nilai intensitas yang sangat rendah. Faktanya, kecocokannya cukup baik pada nilai intensitas tinggi dan semakin buruk pada nilai intensitas rendah. Hal ini dapat dimengerti - ketidaksesuaian kecil dengan intensitas tinggi memberikan kontribusi yang lebih besar terhadap ketidaksesuaian total dibandingkan ketidaksesuaian besar dengan intensitas sangat rendah.

Salah satu cara yang baik untuk mengatasi hal ini adalah dengan menyesuaikan diri dengan ruang log. Artinya, minta model Anda menghitung log(Intensity) dan meneruskan data untuk log(Intensity).

Hal ini tidak bergantung pada metode yang digunakan untuk menyelesaikan masalah - metode ini menyusun kembali masalah yang ingin dipecahkan. Algoritma Genetika mungkin berguna di sini, tetapi jika Levenberg-Marquardt (yang akan jauh lebih cepat) bekerja sebaik yang Anda tunjukkan, mungkin itu cukup baik, atau setidaknya layak untuk terus dikerjakan. GA biasanya lebih baik dalam memastikan solusi tidak terjebak dalam "minimum lokal". Sejauh ini, tidak ada bukti hal itu terjadi (tetapi hal ini selalu perlu diingat). Saya pikir metode SGD yang Anda tunjukkan ditujukan untuk memecahkan kelas masalah yang berbeda.

person M Newville    schedule 02.05.2020