Tại sao độ dốc giảm không hiệu quả cho tập dữ liệu lớn?


12

Giả sử tập dữ liệu của chúng tôi chứa 1 triệu ví dụ, ví dụ: x1,,x106 và chúng tôi muốn sử dụng độ dốc gốc để thực hiện hồi quy logistic hoặc tuyến tính trên các tập dữ liệu này.

Điều gì với phương pháp giảm độ dốc làm cho nó không hiệu quả?

Hãy nhớ lại rằng bước gốc giảm dần tại thời điểm t được cho bởi:

wt+1=wt+ηtf(x)

Ở đâu f là hàm mất mát.

Tôi không thấy bất cứ điều gì khác thường với bước trên khiến thuật toán không hiệu quả. Có phải đó là sự tính toán của f(x) ? Không thể thao tác này được tính toán trước, tức là, mỗi thao tácfx đã được tính toán và chỉ cần đánh giá chúng tại mỗi điểm dữ liệuxi?


Không hiệu quả so với ...? Thậm chí bình phương tối thiểu không hiệu quả cho một tập dữ liệu lớn. Bạn cần ký hiệu O lớn để có những ý tưởng có ý nghĩa về những gì làm với thuật toán. Không phải tất cả các thuật toán GD đều có cùng một chữ O lớn (phải không?)n
AdamO 28/03/18

Câu trả lời:


6

Nó sẽ giúp ích nếu bạn cung cấp một bối cảnh cho tuyên bố rằng việc giảm độ dốc là không hiệu quả. Không hiệu quả so với cái gì?

Tôi đoán rằng bối cảnh còn thiếu ở đây là so sánh với độ dốc ngẫu nhiên hoặc giảm dần hàng loạt trong học máy. Đây là cách trả lời câu hỏi trong bối cảnh này. Bạn đang tối ưu hóa các tham số của mô hình, thậm chí siêu đường kính. Vì vậy, bạn có hàm chi phí , trong đó x i - dữ liệu của bạn và Θ - vectơ của tham số và hàm L ( ) - mất. Để giảm thiểu chi phí này, bạn sử dụng gradient descent so với thông số θ j : i=1nL(xi|Θ)xiΘL() θj

θji=1nL(Θ|xi)

Vì vậy, bạn thấy rằng bạn cần lấy tổng trên tất cả dữ liệu . Điều này thật đáng tiếc, vì điều đó có nghĩa là bạn tiếp tục lặp qua dữ liệu cho từng bước của độ dốc của bạn. Đó là cách mà độ dốc giảm dần theo lô và ngẫu nhiên xuất hiện: điều gì xảy ra nếu chúng ta lấy mẫu từ tập dữ liệu và tính toán độ dốc trên một mẫu chứ không phải toàn bộ? xi=1,,n Ở đây,nslà số quan sát trong mẫus. Vì vậy, nếu mẫu của bạn là 1/100 của tổng số bộ, bạn sẽ tăng tốc các phép tính của mình lên gấp 100 lần! Rõ ràng, giới thiệu này, tiếng ồn, mà kéo dài việc học tập, nhưng tiếng ồn là giảm với tốc độ của

θjk=1nsL(Θ|xk)
nss trong khi số lượng tính toán tăng ởn, vì vậy thủ thuật này có thể hoạt động.nn

Ngoài ra, insteado chờ đợi cho đến khi đầy đủ tổng được tính toán, bạn có thể chia này vào lô, và làm một bước cho từng lô Σ M s = 1 Σ n s i s = 1 . Bằng cách này, bạn sẽ thực hiện các bước M theo thời gian tính tổng trên toàn bộ tập dữ liệu. Đây sẽ là những bước ồn ào hơn, nhưng tiếng ồn sẽ biến mất theo thời gian.i=1ns=1Mis=1ns


19

Có hai cách trong đó việc giảm độ dốc có thể không hiệu quả. Thật thú vị, mỗi người đều dẫn đến phương pháp riêng để sửa chữa, đó là những giải pháp gần như trái ngược nhau. Hai vấn đề là:

(1) Quá nhiều cập nhật giảm dần độ dốc được yêu cầu.

(2) Mỗi ​​bước giảm độ dốc là quá đắt.

Liên quan đến (1), so sánh độ dốc gốc với các phương pháp có tính đến thông tin về các đạo hàm bậc hai, độ dốc có xu hướng không hiệu quả cao liên quan đến việc cải thiện tổn thất ở mỗi lần lặp. Một phương pháp rất chuẩn, Phương pháp của Newton , thường mất ít lần lặp hơn để hội tụ, tức là đối với hồi quy logistic, 10 lần lặp Phương pháp của Newton thường sẽ có tổn thất thấp hơn so với giải pháp được cung cấp bởi 5.000 lần lặp xuống dốc. Đối với hồi quy tuyến tính, điều này thậm chí còn cực đoan hơn; có một giải pháp dạng kín! Tuy nhiên, vì số lượng dự đoán trở nên rất lớn (ví dụ 500+), Phương pháp / giải trực tiếp của Newton cho hồi quy tuyến tính có thể trở nên quá đắt mỗi lần lặp do số lượng hoạt động ma trận cần thiết, trong khi độ dốc giảm dần sẽ có chi phí ít hơn đáng kể cho mỗi lần lặp.

Liên quan đến (2), có thể có một bộ dữ liệu lớn đến mức mỗi lần lặp của độ dốc gốc là quá đắt để tính toán. Việc tính toán độ dốc sẽ yêu cầu các thao tác ( n = cỡ mẫu, k = số hiệp phương sai). Mặc dù n = 10 6 hoàn toàn không phải là vấn đề đối với các máy tính hiện đại với giá trị k < 100 , nhưng chắc chắn có thứ gì đó như n = 10 12 , k = 10 3O(nk)nkn=106k<100n=1012k=103sẽ là. Trong trường hợp này, các phương pháp xấp xỉ đạo hàm dựa trên các tập hợp con nhỏ hơn của dữ liệu sẽ hấp dẫn hơn, chẳng hạn như giảm độ dốc ngẫu nhiên .

Tôi nói rằng các bản sửa lỗi này gần như ngược lại, trong đó một cái gì đó giống như phương pháp của Newton tốn kém hơn nhưng hiệu quả hơn (về thay đổi tổn thất) trên mỗi bản cập nhật, trong khi việc giảm độ dốc ngẫu nhiên thực sự kém hiệu quả hơn nhưng rẻ hơn về mặt tính toán cho mỗi bản cập nhật.


Cảm ơn bạn đã trả lời tuyệt vời. Bạn có ý nghĩa gì bởi = số lượng đồng biến? Tôi không quen thuộc với thuật ngữ nàyk
Carlos - Mongoose - Nguy hiểm

2
@Learningonepageatatime: covariates = biến dự đoán.
Vách đá AB

9

Đầu tiên hãy để tôi đề nghị một cải tiến cho ký hiệu của bạn. Cụ thể, hãy biểu thị hàm mất theo thay vì f ( x ) . Sử dụng chữ L đơn giản là một sở thích cá nhân của tôi vì nó nhắc nhở tôi rằng chúng ta đang đối phó với L oss. Sự thay đổi thực chất hơn đang làm rõ rằng tổn thất là một hàm của trọng số w chứ không phải là dữ liệu x . Điều quan trọng, độ dốc liên quan đến w không x . Vì vậy, L ( w ) = ( LL(w)f(x)Lwxwx trong đóD

L(w)=(Lw1,,LwD),
D là chiều của dữ liệu của bạn.

Mặc dù thực tế là chúng ta nên coi tổn thất là một hàm của trọng số , bất kỳ hàm mất hợp lý nào vẫn sẽ phụ thuộc vào toàn bộ tập dữ liệu x (nếu không, sẽ không thể học được gì từ dữ liệu! ). Trong hồi quy tuyến tính, ví dụ, chúng ta thường sử dụng tổng bình phương hàm mất L ( w ) = N Σ i = 1 ( y i - w T x i ) 2 . Vì vậy, đánh giá độ dốc L ( w ) cho một tập các trọng số cụ thể wwx

L(w)=i=1N(yiwTxi)2.
L(w)wNxN=106

3

Câu trả lời ngắn: Tính toán độ dốc cần tổng hợp trên tất cả các điểm dữ liệu. Nếu chúng ta có lượng dữ liệu lớn, thì sẽ mất nhiều thời gian.

Tôi có một câu trả lời chi tiết ở đâ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?


Mặt khác, luôn luôn ghi nhớ có các phương pháp trực tiếp bên cạnh các phương pháp lặp (gradient khá). Nếu chúng ta muốn giải quyết một vấn đề bình phương tối thiểu, phương pháp trực tiếp có thể siêu hiệu quả. Ví dụ: phân tách QR. Nếu chúng ta không có quá nhiều tính năng, nó sẽ rất nhanh.

Khi bạn xác minh nó, nó có thể làm bạn ngạc nhiên: 5 triệu điểm dữ liệu với 2 tính năng, Giải quyết hồi quy tuyến tính / bình phương tối thiểu mất vài giây!

x=matrix(runif(1e7),ncol=2)
y=runif(5e6)
start_time <- Sys.time()
lm(y~x)
end_time <- Sys.time()
end_time - start_time
# Time difference of 4.299081 secs

1

Mặc dù hai ví dụ bạn đề cập thường là lồi, tôi sẽ thêm một điểm về các vấn đề không lồi. Theo tôi có hai lý do chính tại sao (lô) giảm dần độ dốc có thể được coi là "không hiệu quả". Điểm đầu tiên về nỗ lực tính toán tính toán độ dốc của tổng số hàm "lớn" đã được nêu rất rõ ràng trong các câu trả lời khác. Tuy nhiên, đối với các vấn đề không lồi, GD có vấn đề là thường bị kẹt trong mức tối thiểu cục bộ "gần". Mức tối thiểu này có thể rất tệ so với mức tối thiểu toàn cầu. SGD hoặc GD lô nhỏ có "lợi thế" là đi lang thang (ít nhất là một phần) một cách ngẫu nhiên và do đó có thể có cơ hội tìm thấy mức tối thiểu địa phương tốt hơn. Xem câu trả lời CV này tại đây . bài CV khác này phác thảo làm thế nào ngẫu nhiên có thể có lợi.

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.