Các thuật toán tối ưu hóa song song cho một vấn đề với hàm mục tiêu rất tốn kém


15

Tôi đang tối ưu hóa một chức năng của 10-20 biến. Tin xấu là mỗi đánh giá chức năng là đắt tiền, khoảng 30 phút tính toán nối tiếp. Tin tốt là tôi có một cụm với vài chục nút tính toán theo ý của tôi.

Do đó, câu hỏi: có sẵn các thuật toán tối ưu hóa cho phép tôi sử dụng tất cả sức mạnh tính toán đó một cách hiệu quả không?

Một mặt của phổ sẽ là một tìm kiếm toàn diện: chia toàn bộ không gian tìm kiếm thành một lưới tốt và tính toán hàm tại mỗi điểm lưới một cách độc lập. Đây chắc chắn là một tính toán rất song song, nhưng thuật toán không hiệu quả khủng khiếp.

Ở phía bên kia của phổ sẽ là các thuật toán gần như Newton: cập nhật thông minh ước tính tiếp theo của các tham số dựa trên lịch sử trước đó. Đây là một thuật toán hiệu quả, nhưng tôi không biết làm thế nào để làm cho nó song song: khái niệm "ước tính các tham số dựa trên lịch sử trước đó" nghe có vẻ như là một tính toán nối tiếp.

Các thuật toán bậc hai dường như nằm ở đâu đó ở giữa: người ta có thể xây dựng "mô hình thay thế" ban đầu bằng cách tính song song một loạt các giá trị, nhưng tôi không biết liệu các lần lặp còn lại có song song được không.

Bất kỳ đề xuất về loại phương pháp tối ưu hóa không có độ dốc nào sẽ hoạt động tốt trên một cụm? Ngoài ra, có bất kỳ triển khai song song các thuật toán tối ưu hóa hiện có không?


1
Bạn luôn có thể tính toán độ dốc song song (đối với các phương pháp quasi-Newton bằng cách sử dụng các khác biệt hữu hạn) và có được tốc độ tăng tỷ lệ thuận với số lượng tham số tức là 10 x 20 lần.
stali

@stali: Bạn cần Hessian cho các phương pháp quasi-Newton trong tối ưu hóa. Tính toán Hessian thông qua sự khác biệt hữu hạn của các đánh giá chức năng thực sự không phải là một ý tưởng tốt. Tính toán xấp xỉ sai phân hữu hạn của độ dốc để tối ưu hóa nói chung cũng không phải là một ý tưởng hay.
Geoff Oxberry

Nhiều phương pháp gần như Newton như BFGS không yêu cầu Hessian rõ ràng. Tôi nghĩ bằng cách sử dụng độ dốc, kết hợp với L-BFGS, OP có thể nhanh chóng đạt được những gì anh ta muốn.
stali

@stali: Tôi đã chỉ ra lý do tại sao sử dụng xấp xỉ sai phân hữu hạn cho gradient sẽ là một ý tưởng tồi trong câu trả lời của tôi. Nó sẽ làm giảm sự hội tụ bằng cách đưa lỗi vào phía bên phải của phép lặp quasi-Newton. Ngoài ra, nó lãng phí các đánh giá chức năng vì không có cơ hội sử dụng lại các đánh giá cũ (không giống như các phương pháp thay thế). Sử dụng BFGS chỉ giải quyết một nửa vấn đề với phương pháp đề xuất của bạn.
Geoff Oxberry

Đây là một nhận xét thích hợp hơn không phải là một câu trả lời. Nhưng tôi không có lựa chọn nào khác, vì tôi không có đủ đại diện để đăng bình luận. Michael, tôi có loại vấn đề rất giống nhau: các đánh giá chức năng đắt tiền liên quan đến các mô phỏng phức tạp chạy trên một cụm. Bạn đã bao giờ tìm thấy một mã thích hợp để chạy tối ưu hóa khi đánh giá chức năng liên quan đến một mô phỏng trên một cụm?
Moonman

Câu trả lời:


16

Như Paul tuyên bố, không có thêm thông tin, thật khó để đưa ra lời khuyên mà không có giả định.

Với 10-20 biến và các đánh giá hàm đắt tiền, xu hướng là đề xuất các thuật toán tối ưu hóa không có đạo hàm. Tôi sẽ không đồng ý mạnh mẽ với lời khuyên của Paul: bạn thường cần một độ dốc chính xác của máy trừ khi bạn sử dụng một phương pháp đặc biệt nào đó (ví dụ, giảm độ dốc ngẫu nhiên trong học máy sẽ khai thác hình thức của mục tiêu để đưa ra hợp lý ước tính độ dốc).

Mỗi bước quasi-Newton sẽ có dạng:

H~(xk)dk= =-f(xk),

Trong đó là một số xấp xỉ của ma trận Hessian, d k là hướng tìm kiếm, x k là giá trị của các biến quyết định tại lần lặp hiện tại, f là hàm mục tiêu của bạn và f là độ dốc của mục tiêu của bạn và các biến quyết định được cập nhật như x k + 1 = x k + α k d k , trong đó α kH~dkxkffxk+1= =xk+αkdkαklà một kích thước bước được xác định trong một số thời trang (như tìm kiếm dòng). Bạn có thể thoát khỏi việc xấp xỉ Hessian theo một số cách nhất định và các lần lặp của bạn sẽ hội tụ, mặc dù nếu bạn sử dụng một cái gì đó như xấp xỉ sai phân hữu hạn của Hessian thông qua độ dốc chính xác, bạn có thể gặp phải các vấn đề do điều hòa không tốt. Thông thường, Hessian được xấp xỉ bằng cách sử dụng gradient (ví dụ: các phương thức loại BFGS với các cập nhật xếp hạng 1 cho Hessian).

Xấp xỉ Hessian và gradient cả hai thông qua sự khác biệt hữu hạn là một ý tưởng tồi vì một số lý do:

  • bạn sẽ gặp lỗi trong gradient, vì vậy phương pháp quasi-Newton mà bạn đang áp dụng gần giống với việc tìm ra gốc của hàm gây nhiễu
  • nếu các đánh giá chức năng là tốn kém và bạn đang cố gắng đánh giá một độ dốc liên quan đến các biến , thì nó sẽ khiến bạn phải trả giá cho các đánh giá hàm N trên mỗi lần lặpNN
  • nếu bạn có lỗi trong gradient, bạn sẽ gặp nhiều lỗi hơn trong Hessian, đây là một vấn đề lớn về mặt điều hòa của hệ thống tuyến tính
  • ... và nó sẽ cho bạn chi phí đánh giá chức năng mỗi lần lặpN2

Vì vậy, để có được một lần lặp lại tồi tệ của Newton, bạn đang thực hiện một số thứ như lên tới 420 đánh giá chức năng trong 30 phút cho mỗi lần đánh giá, điều đó có nghĩa là bạn sẽ chờ đợi một lần cho mỗi lần lặp hoặc bạn sẽ cần một cụm lớn chỉ để đánh giá chức năng. Các giải tuyến tính thực tế sẽ có 20 đến 20 ma trận (nhiều nhất là!), Vì vậy không có lý do gì để song song hóa chúng. Ví dụ, nếu bạn có thể nhận được thông tin về độ dốc, giải quyết vấn đề liên kết, thì có thể đáng giá hơn, trong trường hợp đó, có thể đáng để xem một cuốn sách như Nocedal & Wright.

Nếu bạn sẽ thực hiện nhiều đánh giá chức năng song song, thay vào đó bạn nên xem xét các phương pháp mô hình hóa thay thế hoặc tạo ra các phương pháp tìm kiếm tập hợp trước khi xem xét các phương pháp gần đúng của Newton. Các bài viết đánh giá cổ điển là của Rios và Sahinidis về các phương pháp không có nguồn gốc , được xuất bản năm 2012 và cung cấp một so sánh thực sự tốt, rộng; bài viết điểm chuẩn của More and Wild từ năm 2009; sách giáo khoa năm 2009 "Giới thiệu về tối ưu hóa miễn phí phái sinh" của Conn, Scheinberg và Vicente; và bài viết đánh giá về việc tạo các phương pháp tìm kiếm tập hợp của Kolda, Lewis và Torczon từ năm 2003.

Như đã liên kết ở trên, gói phần mềm DAKOTA sẽ triển khai một số phương thức đó và NLOPT cũng sẽ thực hiện TRỰC TIẾP và một vài phương pháp mô hình thay thế của Powell. Bạn cũng có thể xem MCS ; nó được viết bằng MATLAB, nhưng có lẽ bạn có thể chuyển việc triển khai MATLAB sang ngôn ngữ bạn chọn. Về cơ bản, DAKOTA là tập hợp các tập lệnh mà bạn có thể sử dụng để chạy mô phỏng đắt tiền và thu thập dữ liệu cho các thuật toán tối ưu hóa và NLOPT có giao diện với số lượng lớn ngôn ngữ, vì vậy lựa chọn ngôn ngữ lập trình không phải là vấn đề lớn trong việc sử dụng gói phần mềm; DAKOTA tuy nhiên phải mất một thời gian để tìm hiểu và có một lượng lớn tài liệu để sàng lọc.


2
Thật là một niềm vui cho tôi khi tôi hoàn toàn sai lầm và học được điều gì đó mới mẻ và hữu ích trong quá trình :).
Paul

Cảm ơn! Chỉ cần làm rõ thêm một lần nữa: thuật toán nào trong số các thuật toán đó có khả năng thực hiện các đánh giá chức năng song song? Ví dụ: trên lưới k-way thực hiện các lần lặp n + 1, ..., n + k chỉ dựa trên thông tin thu được từ các lần lặp 1, ..., n?
Michael

k

3

Có lẽ các thuật toán tối ưu hóa dựa trên thay thế là những gì bạn đang tìm kiếm. Các thuật toán này sử dụng các mô hình thay thế để thay thế các mô hình tính toán thực sự đắt tiền trong quá trình tối ưu hóa và cố gắng có được một giải pháp phù hợp bằng cách sử dụng một vài đánh giá về các mô hình tính toán đắt tiền có thể có.

Tôi nghĩ rằng phương pháp Lấy mẫu theo đuổi Chế độ có thể được sử dụng để giải quyết vấn đề của bạn. Thuật toán này sử dụng mô hình thay thế RBF để xấp xỉ hàm mục tiêu đắt tiền và có thể xử lý các ràng buộc phi tuyến. Quan trọng hơn, nó chọn nhiều ứng cử viên để thực hiện các đánh giá chức năng đắt tiền để bạn có thể phân phối các ứng viên này cho tính toán song song để tăng tốc quá trình tìm kiếm. Mã này là mã nguồn mở và được viết bằng MATLAB.

Tài liệu tham khảo

Wang, L., Shan, S., & Wang, GG (2004). Phương pháp lấy mẫu theo chế độ để tối ưu hóa toàn cầu trên các chức năng hộp đen đắt tiền. Tối ưu hóa kỹ thuật, 36 (4), 419-438.


2

Tôi không chắc chắn một thuật toán song song thực sự là những gì bạn đang tìm kiếm. Đó là đánh giá chức năng của bạn rất tốn kém. Những gì bạn muốn làm là song song hóa chính chức năng, không nhất thiết phải là thuật toán tối ưu hóa.

Nếu bạn không thể làm điều đó, thì có một nền tảng trung gian giữa tìm kiếm toàn diện và thuật toán Newton, đó là phương pháp Monte Carlo. Bạn có thể, trên một loạt các lõi / nút khác nhau, bắt đầu cùng một thuật toán có xu hướng rơi vào tối ưu cục bộ (thuật toán quasi-Newton), nhưng tất cả đều có điều kiện ban đầu ngẫu nhiên. Dự đoán tốt nhất của bạn sau đó cho tối ưu thực sự là tối thiểu của mức tối thiểu. Điều này là không quan trọng để song song và có thể được sử dụng để mở rộng bất kỳ phương pháp nào. Mặc dù không hoàn toàn hiệu quả, nhưng nếu bạn có đủ sức mạnh tính toán, bạn có thể thắng chắc chắn năng suất lập trình so với trận chiến hiệu năng thuật toán (nếu bạn có nhiều sức mạnh tính toán, điều này có thể kết thúc trước khi bạn hoàn thành một thuật toán fancier).


0

Sự lựa chọn của thuật toán tối ưu hóa (và do đó song song hóa nó) phụ thuộc nhiều vào các thuộc tính của hàm mục tiêu và các ràng buộc. Không biết thêm về vấn đề, thật khó để đưa ra bất kỳ lời khuyên có ý nghĩa nào.

Nhưng từ những cân nhắc của bạn về các phương pháp newton, tôi suy luận rằng chức năng mục tiêu của bạn là khác biệt. Nếu có thể, vấn đề của bạn sẽ được hưởng lợi rất nhiều từ việc song song đánh giá chức năng. Nếu không thể, thì bạn cũng có thể xem xét một phương pháp newton không chính xác, thay thế độ dốc / hessian chính xác bằng các xấp xỉ sai phân hữu hạn. Sau đó, bạn có thể sử dụng tất cả các bộ xử lý đó theo ý của bạn để tính toán từng phần tử khác không của jacobian, như @stali gợi ý.

Để biết thêm thông tin, hãy đọc Tối ưu hóa số của Nocedal & Wright, Chương 7 . Có nhiều gói phần mềm tối ưu hóa thực hiện điều này song song. Trong số các phần mềm miễn phí được sử dụng rộng rãi nhất là gói phần mềm DAKOTA (Phòng thí nghiệm quốc gia Sandia) .


5
N

-2

Đây là một giải pháp cho vấn đề của bạn.

Mô tả về một phương pháp toán học được cung cấp trong bài báo này .


3
Chào mừng đến với SciComp.SE. Bạn có thể cung cấp chi tiết về cách tiếp cận được mô tả trong bài báo và thực hiện trong phần mềm không? Phương pháp được sử dụng là gì? Tại sao nó lại tốt? Điều gì được cung cấp trong phương pháp này mà các câu trả lời khác không bao gồm?
nicoguaro

2
Ngoài ra, có vẻ như đây là công việc của riêng bạn. Nếu đó là sự thật, xin vui lòng nêu rõ điều đó trong câu trả lời của bạn.
nicoguaro

@nicoguaro: cảm ơn bạn, nhưng tôi biết cách nhấp vào liên kết.
Michael

2
@Michael, nó không dành cho bạn. Triết lý của trang web này là tập hợp các câu trả lời. Bạn đang có được câu trả lời của mình ngày hôm nay, nhưng trong tương lai ai đó có thể cần sự giúp đỡ tương tự. Đó là lý do tại sao có những tiêu chuẩn thực tế về câu trả lời tốt là gì.
nicoguaro
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.