Tôi đang cố gắng thực hiện một quy trình tối ưu hóa trong Python bằng BFGS và L-BFGS trong Python và tôi nhận được kết quả khác nhau đáng ngạc nhiên trong hai trường hợp. L-BFGS hội tụ đến mức tối thiểu siêu nhanh thích hợp, trong khi BFGS hội tụ rất chậm và cũng ở mức tối thiểu vô nghĩa.
CÂU HỎI: Từ các bài đọc của tôi, dường như với tôi rằng BFGS và L-BFGS về cơ bản là thuật toán (phương pháp quasi-Newton), ngoại trừ cái sau sử dụng ít bộ nhớ hơn và do đó nhanh hơn. Điều đó có đúng không? Nếu không, nếu chúng khác nhau hơn, thì làm sao vậy?
Cuối cùng, tôi muốn tìm hiểu xem sự khác biệt về hiệu suất là do một số khác biệt trong các thuật toán thực tế hay do việc triển khai chúng trong các mô-đun SciPy python.
EDIT: Tôi đang thêm một số dữ liệu để hỗ trợ cho tuyên bố của tôi về hành vi khác nhau từ hai thuật toán.
RUNNING THE L-BFGS-B CODE
* * *
Machine precision = 2.220D-16
N = 147 M = 10
This problem is unconstrained.
At X0 0 variables are exactly at the bounds
At iterate 0 f= 2.56421D+04 |proj g|= 1.19078D+03
At iterate 1 f= 2.12904D+04 |proj g|= 1.04402D+03
At iterate 2 f= 1.49651D+03 |proj g|= 2.13394D+02
At iterate 3 f= 6.08288D+02 |proj g|= 9.85720D+01
At iterate 4 f= 2.91810D+02 |proj g|= 6.23062D+01
...
At iterate 142 f= 3.27609D+00 |proj g|= 8.80170D-04
Time taken for minimisation: 36.3749790192
*** BFGS code ***
At iterate 1, f= 21249.561722
At iterate 2, f= 15710.435098
At iterate 3, f= 15443.836262
At iterate 4, f= 15386.035398
At iterate 5, f= 15311.242917
At iterate 6, f= 15211.986938
At iterate 7, f= 15022.632266
...
At iterate 524, f= 67.898495
...
Warning: Desired error not necessarily achieved due to precision loss.
Iterations: 1239
Time taken: 340.728140116