Làm cách nào để chạy hồi quy tuyến tính theo cách song song / phân tán cho cài đặt dữ liệu lớn?


12

Tôi đang làm việc với một vấn đề hồi quy tuyến tính rất lớn, với kích thước dữ liệu lớn đến mức chúng phải được lưu trữ trên một cụm máy. Sẽ là quá lớn để tổng hợp tất cả các mẫu vào một bộ nhớ của một máy (thậm chí cả đĩa)

Để thực hiện hồi quy các dữ liệu này, tôi đang nghĩ về một cách tiếp cận song song, nghĩa là chạy hồi quy trên mỗi hộp riêng lẻ, sau đó tính toán beta dựa trên số liệu thống kê của từng beta riêng lẻ (có thể là trung bình hoặc trung bình)

Liệu điều này có ý nghĩa gì ? nếu vậy, làm thế nào tôi có được tổng số dự kiến R2từ mỗi cá nhân R2?

Câu trả lời:


9

Câu trả lời ngắn:

Có, chạy hồi quy tuyến tính song song đã được thực hiện. Ví dụ, Xiangrui Meng et al. (2016) cho Học máy trong Apache Spark. Cách thức hoạt động của nó là sử dụng độ dốc dốc ngẫu nhiên (SGD). Trong phần 3, các tính năng cốt lõi, tác giả đã đề cập:

Các mô hình tuyến tính tổng quát được học thông qua các thuật toán tối ưu hóa song song hóa tính toán độ dốc, sử dụng các thư viện đại số tuyến tính nhanh dựa trên C ++ để tính toán công nhân.

Một ví dụ về cách hoạt động của SGD có thể được tìm thấy trong câu trả lời của tôi ở đây: Làm thế nào để giảm độ dốc ngẫu nhiên có thể tiết kiệm thời gian so với độ dốc gốc tiêu chuẩn?


Câu trả lời dài:

Lưu ý, ký hiệu không phù hợp với liên kết tôi cung cấp, tôi cảm thấy ký hiệu ma trận tốt hơn trong câu hỏi này.

Để thực hiện hồi quy tuyến tính, chúng tôi đang cố gắng thực hiện

minimize Xβy2

Đạo hàm là

2XT(Xβy)

Trong cài đặt dữ liệu nhỏ, chúng ta có thể đặt đạo hàm thành và giải trực tiếp. (ví dụ: phân tách QR trong R.) Trong cài đặt dữ liệu lớn, ma trận dữ liệu quá lớn để được lưu trữ trong bộ nhớ và có thể khó giải quyết trực tiếp. (Tôi không quen với cách thực hiện phân tách QR hoặc phân tách Cholesky cho các ma trận lớn).X0X

Một cách để song song hóa điều này là bằng cách sử dụng một phương pháp lặp: giảm độ dốc ngẫu nhiên, trong đó chúng ta có thể xấp xỉ độ dốc bằng cách sử dụng một tập hợp con của dữ liệu. (Nếu chúng tôi sử dụng , để biểu thị một tập hợp con của dữ liệu, độ dốc có thể được xấp xỉ bằng và chúng tôi có thể cập nhật với độ dốc xấp xỉ).y s 2 X T s ( X s β - y s ) βXsys2XsT(Xsβys)β

Ngoài ra, đối với thống kê , chúng ta có thể tính cho tất cả dữ liệu song song hoặc xấp xỉ nó bằng cách sử dụng tập hợp con của dữ liệu.R 2R2R2

Trực giác về cách thức hoạt động (mô hình mapreduce):

Tôi tiếp tục nói gần đúng bằng cách sử dụng tập hợp con; trực giác về lý do tại sao công việc này có thể được mô tả trong ví dụ sau: giả sử tôi có 100 tỷ điểm dữ liệu và chúng tôi muốn tính trung bình của tất cả các điểm dữ liệu. Giả sử tiến hành một hoạt động như vậy mất một thời gian rất dài và hơn nữa toàn bộ dữ liệu không thể được lưu trữ trong bộ nhớ.

Những gì chúng ta có thể làm là chỉ cần lấy một tập hợp con, nói 1 tỷ mục và tính trung bình của các mục này. Do đó, xấp xỉ được tạo ra không nên xa sự thật (nghĩa là sử dụng toàn bộ dữ liệu).

Để song song, chúng ta có thể sử dụng 100 máy tính, với mỗi máy tính lấy một tập hợp con khác nhau trong 1 tỷ điểm dữ liệu và tính trung bình của các máy tính này. (Thường được gọi là bước MAP). Cuối cùng, chạy trung bình khác trên 100 số này (còn gọi là bước GIẢM).

Lưu ý "mô hình mapreduce" sẽ hoạt động tốt trong một số trường hợp, nhưng không tốt trong những trường hợp khác. Ví dụ: thao tác "trung bình" được đề cập trước đó rất dễ dàng, bởi vì chúng tôi biết , ( giả sử độ dài của và là như nhau). Đối với một số phương pháp lặp, nghĩa là lần lặp hiện tại phụ thuộc vào kết quả lặp trước đó, thật khó để song song. Giảm dần độ dốc ngẫu nhiên giải quyết vấn đề này bằng cách xấp xỉ độ dốc bằng cách sử dụng tập hợp con của dữ liệu. Và chi tiết có thể được tìm thấy trong câu trả lời của @ user20160.x ymean(<x,y>)=mean(x)+mean(y)xy

Người giới thiệu:

Xiangrui Mạnh và cộng sự. (2016) . MLlib: Học máy trong Apache Spark


7

Như @ hxd1011 đã đề cập, một cách tiếp cận là xây dựng hồi quy tuyến tính như là một vấn đề tối ưu hóa, sau đó giải quyết nó bằng thuật toán lặp (ví dụ: giảm độ dốc ngẫu nhiên). Cách tiếp cận này có thể được song song nhưng có một vài câu hỏi quan trọng: 1) Làm thế nào để vấn đề được chia thành các bài toán con? 2) Cho rằng các thuật toán tối ưu hóa như SGD vốn đã có tính tuần tự, nên kết hợp các giải pháp cho các bài toán con như thế nào để có được một giải pháp toàn cầu?

Zinkevich và cộng sự. (2010) mô tả một số cách tiếp cận trước đây để song song hóa trên nhiều máy:

  • 1) Song song hóa SGD như sau: Chia dữ liệu trên nhiều máy. Ở mỗi bước, mỗi máy cục bộ ước tính độ dốc bằng cách sử dụng tập hợp con của dữ liệu. Tất cả các ước tính độ dốc được truyền đến một máy trung tâm, tổng hợp chúng để thực hiện cập nhật tham số toàn cầu. Nhược điểm của phương pháp này là nó đòi hỏi giao tiếp mạng nặng, làm giảm hiệu quả.

  • 2) Phân vùng dữ liệu đồng đều trên các máy cục bộ. Mỗi máy giải quyết vấn đề chính xác cho tập hợp con dữ liệu của riêng nó, sử dụng bộ giải theo lô. Ước tính tham số cuối cùng từ các máy cục bộ được tính trung bình để tạo ra một giải pháp toàn cầu. Lợi ích của phương pháp này là nó đòi hỏi rất ít giao tiếp mạng, nhưng nhược điểm là các ước tính tham số có thể không tối ưu.

Họ đề xuất một cách tiếp cận mới:

  • 3) Cho phép mỗi máy cục bộ rút ngẫu nhiên các điểm dữ liệu. Chạy SGD trên mỗi máy. Cuối cùng, trung bình các tham số trên các máy để có được một giải pháp toàn cầu. Giống như (2), phương pháp này đòi hỏi ít giao tiếp mạng. Nhưng, ước tính tham số tốt hơn vì mỗi máy được phép truy cập vào một phần dữ liệu lớn hơn.

Phương pháp tối ưu hóa song song rất chung chung và áp dụng cho nhiều thuật toán học máy (không chỉ hồi quy tuyến tính).

Một cách khác là sử dụng thuật toán phân rã ma trận song song / phân tán hoặc bộ giải tuyến tính. Hồi quy tuyến tính nhỏ nhất có cấu trúc đặc biệt cho phép giải quyết nó bằng các phương pháp phân rã ma trận. Đây là cách bạn thường giải quyết nó trong trường hợp tập dữ liệu nhỏ hơn phù hợp với bộ nhớ. Điều này có thể được song song bằng cách phân phối các khối của ma trận trên nhiều máy, sau đó giải quyết vấn đề bằng cách sử dụng các tính toán ma trận song song / phân tán. Cho rằng phương pháp này chuyên sâu hơn để giải quyết các hệ thống tuyến tính, sẽ rất thú vị khi xem hiệu suất của nó so với phương pháp tối ưu hóa phân tán tổng quát hơn như thế nào. Nếu bất cứ ai có thể cung cấp thêm thông tin về điều này, tôi rất vui được nghe.

Người giới thiệu:

Zinkevich và cộng sự. (2010) . Song song Stochastic Gradient Descent.


+1 câu trả lời tuyệt vời để giải quyết vấn đề mà tôi chưa thảo luận chi tiết, đó là, sau khi có độ dốc xấp xỉ phải làm gì.
Haitao Du

@ hxd1011 +1 cho bạn cũng để mô tả hay về SGD và cách kết nối nó với vấn đề của OP
user20160

2

Lâu, rất lâu, trước khi giảm bản đồ tôi đã giải quyết điều này. Dưới đây là tài liệu tham khảo của một bài báo cũ của tôi trong Tạp chí Kinh tế lượng 1980. Nó dành cho khả năng tối đa phi tuyến song song và sẽ hoạt động cho ước lượng M.

Phương pháp này là chính xác cho hồi quy. Phân chia dữ liệu thành k tập hợp con trên k bộ xử lý / đơn vị (cũng có thể được thực hiện tuần tự.) Do hồi quy k giữ các hệ số hồi quy một ma trận X'X cho mỗi bộ. Gọi các b1, ..., bk và W1, ..., Wk tương ứng sau đó các hệ số hồi quy tổng thể được đưa ra bởi b = nghịch đảo (W1 + .. + Wk) * (W1 * b1 + ... + Wk * bk) một cần một thông qua dữ liệu khác để tính toán phần dư bằng cách sử dụng b cho các tham số để có sigma ^ 2 phương sai lỗi ước tính, R ^ 2 tổng thể F và tương tự. Sau đó, ma trận hiệp phương sai của b được đưa ra chính xác bởi sigma ^ 2 (nghịch đảo (W1 + .. + Wk)). Trên * chỉ ra phép nhân ma trận.

https://www.scTHERirect.com/science/article/pii/0304407680900950


Ước gì tôi biết công việc của bạn khi tôi làm việc của riêng tôi! academic.oup.com/imaiai/article-abstract/5/4/379/...
JohnRos
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.