Tại sao việc thêm hình phạt L1 vào tối ưu hóa của R lại làm mọi thứ chậm lại (so với không có hình phạt hoặc L2)?


8

Tôi đang chạy một số tối ưu hóa với việc thực hiện BFGS tối ưu. Hàm mục tiêu thực sự là một thuật toán tính toán, không chỉ là toán học. Tôi tìm thấy khi tôi thêm một hình phạt L1, mọi thứ chậm lại một chút. Tại sao điều này có thể được? Có điều gì về L1 làm mọi thứ chậm lại? Vậy thì glmnetviệc triển khai LASSO nhanh như thế nào?

Một tìm kiếm nhanh của Google đã đưa ra một cuộc gọi gói "lbfss", trong đó "tìm thấy tối ưu của một mục tiêu cộng với chỉ tiêu L1 của các tham số của vấn đề" với "việc thực hiện nhanh chóng và hiệu quả bộ nhớ của các thói quen tối ưu hóa này, đặc biệt phù hợp với mức độ cao vấn đề chiều. " Tôi có nên tìm kiếm giải pháp như thế này?


"hàm mục tiêu thực sự là một thuật toán tính toán, không chỉ là toán học" nghĩa là gì?
Vách đá AB

Cụ thể hơn, bạn đang tối ưu hóa điều gì? Bạn đang ước tính hồi quy LASSO?
Sycorax nói Phục hồi lại

@CliffAB Ý tôi là thay vì tối ưu hóa một hàm dựa trên toán học như "function (b) (Y - X * b) ^ 2", hàm này dựa trên một số quy trình lặp như (Y - X * bootstrap_estimate (b)) ^ 2. Vì vậy, tôi đoán tôi đang nói rằng tôi không thể cung cấp một hàm gradient.
Đếm số không

@ user777 Một loại mô hình đồ họa mà tôi phù hợp thông qua việc truyền bá ngược. Sự khác biệt là cấu trúc biểu đồ là bất kỳ DAG nào, không phải là biểu đồ có cấu trúc bạn nhận được trong các mạng thần kinh. Vì vậy, tôi đã phải thiết lập tối ưu hóa dưới dạng các thao tác trên biểu đồ thay vì nhân ma trận mà bạn thường làm trong quá trình truyền ngược.
Đếm số 0

1
Điều này có nghĩa là nếu bạn đánh giá hàm mục tiêu hai lần với cùng một tham số, bạn sẽ nhận được kết quả hơi khác nhau (ví dụ bootstrap_estimate (b) có thể khác nhau ở một lần lặp khác nhau ngay cả khi các tham số đầu vào của bạn giống hệt nhau)? Nếu vậy, đây sẽ là một vấn đề khó khăn hơn nhiều và việc sử dụng BFGS tối ưu, ngay cả với các hình phạt L2, có thể sẽ chấm dứt sớm vì thuật toán sẽ nhầm lẫn lỗi ngẫu nhiên với mức cao nhất. Tôi đoán là đây không phải là trường hợp, tức là bootstrap_estimate (b) là hằng số (đối với b cố định) cho mỗi lần chạy BFGS.
Vách đá AB

Câu trả lời:


8

Tôi đoán rằng lý do tại sao việc thêm hình phạt L1 làm mọi thứ chậm lại đáng kể là hình phạt L1 không khác biệt (nghĩa là giá trị tuyệt đối), trong khi hình phạt L2 là. Điều này có nghĩa là bề mặt của hàm sẽ không được trơn tru, và vì vậy các phương pháp của quasi-Newton tiêu chuẩn sẽ gặp nhiều rắc rối với vấn đề này. Hãy nhớ lại rằng một cách để nghĩ về phương pháp gần đúng của Newton là nó tạo ra một xấp xỉ bậc hai của hàm và sau đó đề xuất ban đầu sẽ tối đa hóa xấp xỉ đó. Nếu phép tính gần đúng bậc hai phù hợp khá tốt với hàm mục tiêu, chúng ta nên kỳ vọng đề xuất sẽ đóng tối đa (hoặc tối thiểu, tùy thuộc vào cách bạn nhìn thế giới). Nhưng nếu hàm mục tiêu của bạn không phân biệt được, phép tính gần đúng bậc hai này có thể rất tệ,

Nếu bạn đã tìm thấy gói R thực hiện BFGS cho các hình phạt L1, bằng mọi cách hãy thử nó. BFGS, nói chung, là một thuật toán rất chung chung để tối ưu hóa. Như trường hợp của bất kỳ thuật toán chung nào, sẽ có rất nhiều trường hợp đặc biệt mà nó không hoạt động tốt. Các thuật toán được thiết kế đặc biệt phù hợp với vấn đề của bạn rõ ràng sẽ làm tốt hơn (giả sử gói đó tốt như tác giả tuyên bố: Tôi chưa nghe nói về lbfss, nhưng có rất nhiều điều tuyệt vời tôi chưa từng nghe đến. Cập nhật : Tôi đã sử dụng gói lbfss của R và triển khai L-BFGS mà họ có khá tốt! Tôi vẫn chưa sử dụng thuật toán OWL-QN, đây là điều mà OP đang đề cập).

Nếu nó không phù hợp với bạn, bạn có thể muốn thử phương pháp "Nelder-Mead" với tối ưu của R. Nó không sử dụng các dẫn xuất để tối ưu hóa. Như vậy, nó thường sẽ chậm hơn trên một chức năng trơn tru nhưng đâm vào một chức năng không chuyên nghiệp như bạn có.


5

L1

Tôi nghĩ rằng có một "câu trả lời chưa được nói" cho câu hỏi của bạn: các giải pháp hiệu quả nhất cho các vấn đề về số thường được thiết kế riêng. Các thuật toán có mục đích chung chỉ là: mục đích chung. Các giải pháp chuyên biệt cho các vấn đề cụ thể sẽ có xu hướng hoạt động tốt hơn, bởi vì chúng ta có thể mang lại những quan sát về cách trình bày vấn đề cụ thể đó và các thuộc tính cụ thể của nó được nhà phân tích biết. Đối với câu hỏi cụ thể của bạn glmnet, nó có một số "thủ thuật" giúp nó có hiệu quả cao - cho vấn đề cụ thể mà nó đang cố gắng giải quyết! Các Tạp chí phần mềm thống kê giấy trên cung cấp chi tiết:

  1. Tối ưu hóa của nó cho tất cả các mô hình (lưới đàn hồi, hồi quy sườn và không chỉ LASSO) sử dụng gốc tọa độ theo chu kỳ, đây là một cách khá hay để giải quyết vấn đề này.
  2. λλλ

Và nó được mã hóa bằng FORTRAN.

L-BFGS là một thuật toán BFGS bộ nhớ hạn chế. Mặc dù nó có các thủ thuật có thể làm cho nó hiệu quả hơn BFGS tiêu chuẩn cho một số vấn đề, nhưng không rõ liệu các vấn đề mà nó giải quyết có liên quan đến vấn đề cụ thể nào không. L-BFGS cũng là một trong những lựa chọn optim, vì vậy tôi không chắc tại sao bạn cần một gói bổ sung.

L1

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.