BFGS vs L-BFGS - chúng thực sự khác nhau như thế nào?


7

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

L-BFGS hoàn toàn đúng theo nghĩa đen của BFGS sử dụng ít bộ nhớ hơn, do đó bạn có thể mong đợi rằng nó hội tụ chậm hơn. Tuy nhiên, vì cả hai đều gần đúng theo một nghĩa nào đó, có thể L-BFGS là 'may mắn' cho đầu vào cụ thể của bạn. Một tùy chọn khác là máy của bạn bị tắc nghẽn bộ nhớ nghiêm trọng khi chạy BFGS, nhưng không phải cho L-BFGS. Vì vậy, nếu không có thuật toán nào có bất kỳ hành vi lạ nào độc lập với nhau, bạn chỉ cần thiếu dữ liệu để đưa ra tuyên bố rằng một triển khai cụ thể thực hiện kém hơn các thuật toán khác.
Thằn lằn rời rạc

@Discretelizard, tôi đã chia sẻ một số dữ liệu cho thấy tiến trình BFGS và LBFGS cho chức năng của tôi bắt đầu từ một số điều kiện ban đầu. Lưu ý cách giá trị hàm giảm theo thứ tự cường độ cho LBFGS trong một vài lần lặp, nhưng chỉ giảm một chút cho BFGS. Câu hỏi của tôi về cơ bản là tại sao có thể / nên có sự khác biệt lớn như vậy trong hành vi tìm kiếm?
ap21

Chà, cả hai đều xấp xỉ 'đường dẫn tốt nhất' để tìm ra mức tối ưu, do đó hiệu suất của chúng có thể khác nhau trong một lượng lớn các tập dữ liệu. Để có câu trả lời chính xác, bạn có thể kiểm tra xem / tại sao phương thức từ L-BFGS mang lại bước giảm độ dốc tốt hơn nhiều cho chức năng cụ thể này. Tôi nghĩ rằng một hình ảnh trực quan của không gian giải pháp hiển thị 'đường dẫn' từ cả hai phương pháp sẽ hữu ích để có ý tưởng về những gì đang diễn ra.
Thằn lằn rời rạc

1
Xem xét sử dụng một không gian giải pháp chiều thấp hơn. Nếu bạn thực sự quan tâm đến hành vi của các thuật toán này trong hàm cụ thể của mình, bạn thực sự phải sử dụng các chi tiết của hàm (ví dụ: hàm lồi, đa thức, tuyến tính, không liên tục, v.v.) và không gian giải pháp (Có phải , một tập hợp lồi, đa diện, v.v.), vì tôi nghi ngờ một điều kiện chung về chất lượng tương đối của các phương thức này trên các hàm tùy ý tồn tại. Rn
Thằn lằn rời rạc

2
Không, đó là điều ngược lại với những gì tôi đang nói. Về mặt lý thuyết, BFGS và LBFGS có thể hội tụ thành các giải pháp hoàn toàn khác nhau (nếu có nhiều cực tiểu cục bộ) với tốc độ hội tụ khác nhau, tùy thuộc vào cách bạn chọn chức năng và không gian giải pháp. Vì vậy, nếu bạn muốn đưa ra tuyên bố rằng việc triển khai có những hạn chế, bạn nên kiểm tra một lượng lớn các chức năng và không gian giải pháp khác nhau.
Thằn lằn rời rạc

Câu trả lời:


2

Không, chúng không giống nhau. Ở một khía cạnh nào đó, L-BFGS là một xấp xỉ với BFGS, một yêu cầu bộ nhớ ít hơn rất nhiều. BFGS và L-BFGS được giải thích rất chi tiết trong nhiều tài nguyên tiêu chuẩn.

Rất thô sơ, bạn có thể nghĩ về sự khác biệt như thế này. BFGS tính toán và lưu trữ Hessian đầy đủ ở mỗi bước; điều này đòi hỏi không gian , trong đó đếm số lượng biến (kích thước) mà bạn đang tối ưu hóa. L-BFGS tính toán và lưu trữ một xấp xỉ với Hessian, được chọn sao cho xấp xỉ có thể được lưu trữ trong không gian . Thực tế, L-BFGS sử dụng xấp xỉ cho một số ma trận (tôi nghĩ).HΘ(n2)nΘ(n)HMMk×nM

Mỗi bước của L-BFGS là một nỗ lực gần đúng / đoán xem bước tương ứng của BFGS sẽ làm gì. Tuy nhiên, một bước duy nhất của L-BFGS tốn ít không gian và thời gian hơn nhiều so với một bước BFGS. Do đó, bạn có thể thực hiện nhiều bước L-BFGS hơn trong một thời gian cụ thể bị ràng buộc so với BFGS. Do đó, bạn có thể thấy rằng L-BFGS hội tụ nhanh hơn, bởi vì nó có thể thực hiện nhiều lần lặp hơn trong một khoảng thời gian nhất định so với BFGS có thể.

Tôi không biết ý nghĩa tối thiểu vô nghĩa là gì, hoặc tại sao BFGS sẽ hội tụ đến một thứ tồi tệ hơn L-BFGS nếu cả hai được phép chạy trong một khoảng thời gian không giới hạn.


Xin vui lòng nhìn vào các liên kết sau đây. Mức tối thiểu vô nghĩa được đưa ra bởi BFGS - plot.ly/~apal90/162 - và mức tối thiểu tốt (một hình trụ) được đưa ra bởi LBFGS - plot.ly/~apal90/160 .
ap21

Những gì bạn đang nói là BFGS và LBFGS về mặt lý thuyết nên hội tụ cùng một giải pháp, thời gian không có rào cản, phải không? Sau đó, chúng tôi đang thực sự xem xét các hạn chế của việc triển khai thuật toán trong SciPy, phải không?
ap21

L-BFGS hoạt động tốt hơn trong trường hợp này, ngay cả với cùng số lần lặp. Vì vậy, L-BFGS có số lần lặp nhanh hơn không giải thích được sự khác biệt ở đây.
Thằn lằn rời rạc

1
@Discretelizard, bạn hoàn toàn đúng. Thông tin chi tiết về hai lần chạy không có sẵn khi tôi viết câu trả lời của mình, vì vậy tôi đã đoán - và có vẻ như suy đoán của tôi không đúng. Tôi không biết tại sao ap21 lại thấy hành vi được liệt kê trong câu hỏi. Hy vọng rằng người khác sẽ có thể cung cấp một câu trả lời tốt hơn.
DW
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.