Tôi sẽ bắt đầu với một nhận xét chung: thông tin thứ tự đầu tiên (nghĩa là chỉ sử dụng độ dốc, mã hóa độ dốc) chỉ có thể cung cấp cho bạn thông tin định hướng: Nó có thể cho bạn biết rằng giá trị hàm giảm theo hướng tìm kiếm, nhưng không trong bao lâu . Để quyết định đi bao xa theo hướng tìm kiếm, bạn cần thêm thông tin (độ dốc giảm dần với độ dài bước không đổi có thể thất bại ngay cả đối với các vấn đề bậc hai lồi). Đối với điều này, về cơ bản, bạn có hai lựa chọn:
- Sử dụng thông tin bậc hai (mã hóa độ cong), ví dụ bằng cách sử dụng phương pháp của Newton thay vì giảm độ dốc (mà bạn luôn có thể sử dụng bước dài đủ gần với bộ giảm thiểu).1
- Thử và sai (tất nhiên ý tôi là sử dụng tìm kiếm dòng thích hợp như Armijo).
Nếu, khi bạn viết, bạn không có quyền truy cập vào các công cụ phái sinh thứ hai và việc đánh giá hàm obejctive rất tốn kém, hy vọng duy nhất của bạn là thỏa hiệp: sử dụng đủ thông tin thứ hai gần đúng để có độ dài bước ứng cử viên tốt sao cho một dòng tìm kiếm chỉ cần các đánh giá (nghĩa là, nhiều nhất là một bội số (nhỏ) không đổi của nỗ lực bạn cần để đánh giá độ dốc của bạn).O(1)
Một khả năng là sử dụng độ dài bước Barzilai - Borwein (xem, ví dụ: Fletcher: Trên phương pháp Barzilai-Borwein . Tối ưu hóa và kiểm soát với các ứng dụng, 235 Từ256, Appl. Optim., 96, Springer, New York, 2005 ). Ý tưởng là sử dụng một xấp xỉ sai phân hữu hạn của độ cong dọc theo hướng tìm kiếm để có được ước tính kích thước bước. Cụ thể, chọn tùy ý, đặt và sau đó cho :g 0 : = ∇ f ( x 0 ) k = 0 , . . .α0>0g0:=∇f(x0)k=0,...
- Đặt vàx k + 1 = x k + s ksk=−α−1kgkxk+1=xk+sk
- Đánh giá và đặtgk+1=∇f(xk+1)yk=gk+1−gk
- Đặtαk+1=(yk)Tyk(yk)Tsk
Lựa chọn này có thể được hiển thị để hội tụ (trong thực tế rất nhanh) cho các hàm bậc hai, nhưng độ hội tụ không đơn điệu (nghĩa là giá trị hàm có thể lớn hơn , nhưng chỉ thỉnh thoảng thôi, xem cốt truyện trên trang 10 trong bài viết của Fletcher). Đối với các hàm không bậc hai, bạn cần kết hợp điều này với tìm kiếm dòng, cần phải sửa đổi để đối phó với tính không đơn điệu. Một khả năng là chọn (ví dụ: bằng cách quay lui) sao cho
trong đó là tham số Armijo điển hình vàf(xk+1)f(xk)σk∈(0,α−1k)
f(xk−σkgk)≤maxmax(k−M,1)≤j≤kf(xj)−γσk(gk)Tgk,
γ∈(0,1)Mkiểm soát mức độ đơn điệu (ví dụ: ). Ngoài ra còn có một biến thể sử dụng giá trị độ dốc thay vì giá trị hàm, nhưng trong trường hợp của bạn, độ dốc thậm chí còn đắt hơn để đánh giá so với hàm, do đó không có ý nghĩa ở đây. (Lưu ý: Tất nhiên bạn có thể cố gắng mù quáng chấp nhận độ dài bước BB và tin vào vận may của mình, nhưng nếu bạn cần bất kỳ loại mạnh mẽ nào - như bạn đã viết trong nhận xét của mình - đó sẽ là một ý tưởng thực sự tồi tệ.)
M=10
Một cách tiếp cận khác (và, theo tôi, tốt hơn nhiều) sẽ là sử dụng xấp xỉ sai phân hữu hạn này đã có trong tính toán của hướng tìm kiếm; đây được gọi là phương pháp quasi-Newton . Ý tưởng là tăng dần mức độ gần đúng của Hessian bằng cách sử dụng sự khác biệt của độ dốc. Ví dụ: bạn có thể lấy (ma trận danh tính) và với giải
và đặt
với như trên và . (Đây được gọi là cập nhật Broyden∇2f(xk)H0=Idk=0,…
Hksk=−gk,(1)
Hk+1=Hk+(yk−Hksk)T(sk)T(sk)Tsk
ykxk+1=xk+skvà hiếm khi được sử dụng trong thực tế; một bản cập nhật tốt hơn nhưng phức tạp hơn một chút là bản cập nhật
BFGS , trong đó - và nhiều thông tin hơn - tôi đề cập đến cuốn sách
Tối ưu hóa số của Nocedal và Wright .) Nhược điểm là a) điều này đòi hỏi phải giải quyết một hệ thống tuyến tính trong mỗi bước (nhưng chỉ có kích thước không xác định trong trường hợp của bạn là điều kiện ban đầu, do đó nỗ lực nên được chi phối bằng cách giải PDE để lấy gradient, ngoài ra, còn tồn tại các quy tắc cập nhật cho xấp xỉ Hessian
nghịch đảo , chỉ yêu cầu tính toán một ma trận đơn sản phẩm -vector) và b) bạn vẫn cần tìm kiếm dòng để đảm bảo hội tụ ...
May mắn thay, trong bối cảnh này tồn tại một cách tiếp cận khác sử dụng mọi đánh giá chức năng. Ý tưởng là đối với đối xứng và xác định dương (được đảm bảo cho bản cập nhật BFGS), giải quyết tương đương với việc giảm thiểu mô hình bậc hai
Trong phương thức vùng tin cậy , bạn sẽ làm như vậy với ràng buộc bổ sung rằng , trong đó là bán kính vùng tin cậy được chọn phù hợp (đóng vai trò của độ dài bước ). Ý tưởng chính bây giờ là chọn bán kính này một cách thích ứng, dựa trên bước tính toán. Cụ thể, bạn nhìn vào tỷ lệ
Hk(1)
qk(s)=12sTHks+sTgk.
∥s∥≤ΔkΔkσkρk:=f(xk)−f(xk+sk)f(xk)−qk(sk)
về việc giảm giá trị hàm thực tế và dự đoán. Nếu rất nhỏ, mô hình của bạn rất tệ và bạn loại bỏ và thử lại với . Nếu gần bằng , mô hình của bạn tốt và bạn đặt và tăng . Nếu không, bạn chỉ cần đặt và để một mình. Để tính toán bộ giảm thiểu thực tế của
ρkskΔk+1<Δkρk1xk+1=xk+skΔk+1>Δkxk+1=xk+skΔkskmin∥s∥≤Δkqk(s), tồn tại một số chiến lược để tránh phải giải quyết vấn đề tối ưu hóa bị ràng buộc đầy đủ; yêu thích của tôi là
phương pháp cắt ngắn CG của Steihaug . Để biết thêm chi tiết, tôi lại nhắc đến Nocedal và Wright.