JM nói đúng về lưu trữ. BFGS yêu cầu một Hessian gần đúng, nhưng bạn có thể khởi tạo nó bằng ma trận danh tính và sau đó chỉ cần tính toán các cập nhật cấp hai cho Hessian gần đúng khi bạn đi, miễn là bạn có thông tin về độ dốc, tốt nhất là phân tích thay vì thông qua các khác biệt hữu hạn. BFGS là một phương pháp gần như Newton, và sẽ hội tụ ít bước hơn so với CG, và có một chút ít xu hướng bị "mắc kẹt" và yêu cầu các điều chỉnh thuật toán nhẹ để đạt được mức giảm đáng kể cho mỗi lần lặp.
Ngược lại, CG yêu cầu các sản phẩm vector ma trận, có thể hữu ích cho bạn nếu bạn có thể tính toán các đạo hàm định hướng (một lần nữa, phân tích hoặc sử dụng các khác biệt hữu hạn). Một phép tính sai phân hữu hạn của đạo hàm định hướng sẽ rẻ hơn nhiều so với phép tính sai phân hữu hạn của Hessian, vì vậy nếu bạn chọn xây dựng thuật toán của mình bằng cách sử dụng các đạo hàm hữu hạn, chỉ cần tính trực tiếp đạo hàm. Tuy nhiên, quan sát này không thực sự áp dụng cho BFGS, sẽ tính toán người Hessian gần đúng bằng cách sử dụng các sản phẩm bên trong của thông tin độ dốc.
nn
Tôi sẽ so sánh hai thuật toán về một vấn đề thử nghiệm nhỏ cho ứng dụng của bạn nếu bạn biết rằng việc lưu trữ sẽ không phải là vấn đề. Không biết cụ thể cụ thể về vấn đề của bạn, tôi đoán là BFGS sẽ nhanh hơn, nhưng bạn thực sự nên thử nghiệm hai thuật toán để có ý tưởng tốt hơn về việc nó sẽ hoạt động tốt hơn.
Cuối cùng, một từ về sự khác biệt tự động: có một số kinh nghiệm với một cơ sở phân biệt tự động (AD) trong nhà cho Fortran ( DAEPACK ), tôi có thể nói với bạn rằng các công cụ AD thường rất khó. Họ có thể không nhất thiết có thể phân biệt mã mà họ tự tạo. Có hai loại công cụ AD:
- công cụ AD nguồn-to-source
- toán tử quá tải công cụ AD
Các công cụ nguồn-nguồn là về cơ bản các trình biên dịch được sửa đổi lấy mã nguồn bạn đã viết, phân tích cú pháp và tự động tạo mã nguồn mới để tính toán độ dốc của các hàm trong mã nguồn của bạn. Các công cụ AD quá tải toán tử yêu cầu bạn sử dụng các toán tử AD quá tải trong mã nguồn của bạn để các đạo hàm có thể được tính toán, điều này đòi hỏi nỗ lực bổ sung từ phía bạn để tính toán các dẫn xuất phân tích với AD.