Về phân biệt tự động, chuyển đổi mã nguồn (STC) có hiệu quả hơn so với quá tải toán tử (OO) không?


12

Chúng tôi đang nghiên cứu mô hình Bayes cho quy trình không gian thời gian và đang sử dụng bộ lấy mẫu No-U-Turn (NUTS) yêu cầu một mô hình cho xác suất log và độ dốc của nó đối với các tham số mô hình. Ngắn gọn hơn, chúng ta có hàm xác suất log khá phức tạp , liên quan đến phân phối thống kê, sản phẩm kronecker, hàm mũ, tỷ lệ, câu lệnh if, v.v. và cần cung cấp nó và nó chuyển sang NUTS. Một số gói ( MCMC của StanJulia sử dụng quá tải toán tử (theo hiểu biết tốt nhất của tôi) để có được độ dốc tự động.f:RnR

Nếu chúng ta có thể tạo chức năng gradient của riêng mình, có lẽ bằng cách sử dụng công cụ tự động chuyển đổi mã nguồn, chúng ta sẽ có hiệu suất tốt hơn hay OO tốt như vậy hay tốt hơn?

Câu trả lời:


9

Chuyển đổi nguồn-nguồn được coi là tiêu chuẩn vàng về hiệu suất. Các cách tiếp cận OO dường như gần như tốt, trong đó có nhiều gói OO hơn và hiệu suất không được đề cập đến như một nhược điểm đáng kể. Nếu bạn tìm thấy thư viện OO mà bạn thích cho ngôn ngữ bạn đang làm việc, tôi sẽ sử dụng nó trước, sau đó tìm hiểu xem bạn có thực sự cần chuyển đổi nguồn thành nguồn không và liệu công cụ đó có đáp ứng nhu cầu của bạn không. Chi phí điển hình của một công cụ phái sinh được tạo khác biệt tự động là khoảng ba đến năm lần so với đánh giá chức năng, để đặt mọi thứ vào bối cảnh.

Có nhiều gói OO ngoài kia vì việc triển khai các công cụ phân biệt tự động sử dụng quá tải toán tử dễ dàng hơn so với sử dụng dịch thuật nguồn-nguồn. Việc triển khai một trình dịch mã nguồn thành tương đương với việc viết một trình biên dịch: mã nguồn phải được phân tích cú pháp và mã hóa, sau đó các quy tắc chuyển đổi phải được áp dụng cho cây biểu thức kết quả. Cuốn sách của Andreas Griewank, Đánh giá các công cụ phái sinh: Nguyên tắc và Kỹ thuật phân biệt thuật toán, Ấn bản thứ hai, đi sâu vào chi tiết hơn về sự đánh đổi.


Cảm ơn Geoff, điều này giúp ích rất nhiều, đặc biệt là ước tính của bạn về các chi phí điển hình.
Matthew Emmett

1

Để tính toán độ dốc, bạn sử dụng chế độ đảo ngược của AD. Điều này đòi hỏi trong cả hai trường hợp để xây dựng một ngăn xếp toán hạng, phiên bản OO cũng cần xây dựng một ngăn xếp hoạt động, phải được giải thích theo chiều ngược lại của mã. Mã biến đổi nguồn ghi ra các hoạt động được sắp xếp ngược lại dưới dạng mã nguồn bổ sung được biên dịch. Chi phí hoạt động để có trình thông dịch hoạt động trong mã có thể là đáng kể. Có những so sánh về mã được tạo ra của Tapenade và Adol-C được đưa ra để ủng hộ Tapenade.

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.