Tại sao việc thêm xác suất đăng nhập nhanh hơn nhân xác suất?


21

Để đóng khung câu hỏi, trong khoa học máy tính, chúng tôi thường muốn tính toán sản phẩm của một số xác suất:

P(A,B,C) = P(A) * P(B) * P(C)

Cách tiếp cận đơn giản nhất chỉ đơn giản là nhân những con số này, và đó là điều tôi sẽ làm. Tuy nhiên, ông chủ của tôi nói rằng tốt hơn là thêm nhật ký xác suất:

log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))

Điều này đưa ra xác suất đăng nhập, nhưng chúng ta có thể có xác suất sau đó nếu cần:

P(A,B,C) = e^log(P(A,B,C))

Đăng nhập bổ sung được coi là tốt hơn vì hai lý do:

  1. Nó ngăn chặn "dòng chảy" theo đó sản phẩm của xác suất quá nhỏ đến mức nó được làm tròn thành không. Điều này thường có thể là một rủi ro vì xác suất thường rất nhỏ.
  2. Nó nhanh hơn vì nhiều kiến ​​trúc máy tính có thể thực hiện bổ sung nhanh hơn nhân.

Câu hỏi của tôi là về điểm thứ hai. Đây là cách tôi đã thấy nó được mô tả, nhưng nó không tính đến chi phí bổ sung để có được nhật ký! Chúng ta nên so sánh "chi phí log + chi phí bổ sung" với "chi phí nhân". Nó vẫn còn nhỏ hơn sau khi tính đến điều đó?

Ngoài ra, trang Wikipedia ( Xác suất đăng nhập ) gây nhầm lẫn về mặt này, trong đó nêu rõ "Việc chuyển đổi sang hình thức nhật ký rất tốn kém, nhưng chỉ phát sinh một lần." Tôi không hiểu điều này, vì tôi nghĩ rằng bạn sẽ cần phải ghi nhật ký của mọi thuật ngữ một cách độc lập trước khi thêm. Tôi đang thiếu gì?

Cuối cùng, lời biện minh rằng "máy tính thực hiện phép cộng nhanh hơn phép nhân" là một điều mơ hồ. Là cụ thể cho tập lệnh x86, hay nó là một đặc điểm cơ bản hơn của kiến ​​trúc bộ xử lý?


18
Lợi ích đầu tiên (tránh tràn) thường quan trọng hơn nhiều so với mức tăng hiệu suất, vì vậy ngay cả khi nó không nhanh hơn, chúng tôi vẫn sẽ sử dụng xác suất đăng nhập.
DW

Để mở rộng dựa trên những gì @DW đã nói, có một "thủ thuật log-sum-exp" tương tự được sử dụng cụ thể để giải quyết vấn đề, mà không liên quan đến hiệu suất. Trên thực tế, đây là lần đầu tiên tôi thấy ai đó coi logarit là một kỹ thuật cải thiện hiệu suất!
Mehrdad

Câu trả lời:


14

Ngoài ra, trang Wikipedia ( https://en.wikipedia.org/wiki/Log_probability ) gây nhầm lẫn về mặt này, trong đó nêu rõ "Việc chuyển đổi sang dạng nhật ký rất tốn kém, nhưng chỉ phát sinh một lần." Tôi không hiểu điều này, vì tôi nghĩ rằng bạn sẽ cần phải ghi nhật ký của mọi thuật ngữ một cách độc lập trước khi thêm. Tôi đang thiếu gì?

Nếu bạn chỉ muốn để tính một lần, sau đó bạn là đúng. Bạn sẽ phải tính n logarit và n - 1 phép cộng, trong khi phương thức ngây thơ đòi hỏi n - 1 phép nhân.P(A1)P(An)nn1n1

Tuy nhiên, điều rất phổ biến là bạn muốn trả lời các truy vấn có dạng:

Tính đối với một số tập hợp coniIP(Ai) của { 1 , ... n } .I{1,n}

Trong trường hợp đó, bạn có thể xử lý trước dữ liệu của mình để tính toán tất cả một lần và trả lời từng truy vấn bằng cách thực hiện | Tôi | bổ sung.logP(Ai)|I|

Cuối cùng, lời biện minh rằng "máy tính thực hiện phép cộng nhanh hơn phép nhân" là một điều mơ hồ. Là cụ thể cho tập lệnh x86, hay nó là một đặc điểm cơ bản hơn của kiến ​​trúc bộ xử lý?

Đây là một câu hỏi rộng hơn. Nói chung, khó có thể tính toán nhân hơn so với phép cộng. Tính là tuyến tính theo kích thước của aa+ba (sử dụng thuật toán tầm thường), trong khi chúng ta hiện không biết cách tính a × b với độ phức tạp cùng thời gian (kiểm tra các thuật toán tốt nhất ở đây ).ba×b

Tất nhiên, không có câu trả lời dứt khoát: ví dụ nếu bạn chỉ xử lý các số nguyên và bạn nhân với lũy thừa của , thì bạn nên so sánh sự thay đổi với các hoạt động thêm.2

Tuy nhiên, đây là một tuyên bố hợp lý trên tất cả các kiến ​​trúc máy tính phổ biến: phép nhân trên các số dấu phẩy động sẽ chậm hơn so với phép cộng.


1
Bạn cũng không cần tính đến độ phức tạp thời gian cần thiết để tính toán logarit cho tất cả các xác suất ? P(Ai)
David C

Điều gì về exp cuối cùng ()? Điều đó có chậm không?
Mehrdad

Θ(M(n)logn)M(n)Θ(nM(n)logn+nqQ|Iq|)Qlà tập hợp các truy vấn).
md5

2
@Mehrdad: Khó như tính toán một logarit. Tuy nhiên tôi không chắc bạn sẽ cần phải làm điều đó. Chẳng hạn, nếu bạn chỉ so sánh xác suất bạn không muốn tính cuối cùng . Phép nhân của n số trong ( 0 , 1 ) có thể nhanh chóng trở nên rất nhỏ, vì vậy, vì lý do tương tự, chúng tôi cố gắng tránh dòng chảy bằng cách sử dụng xác suất đăng nhập, chúng ta nên ở dạng logarit ở cuối (ví dụ: bằng cách tính toán nhật ký trong cơ sở 10 , do đó, nó thậm chí còn "dễ đọc hơn con người"). expn(0,1)log10
md5

1
Sự bổ sung vẫn còn nhanh hơn phép nhân nếu bạn sử dụng phao IEEE - điều mà bạn chắc chắn sẽ làm trong trường hợp này? Các cpus hiện đại khá giỏi trong việc nhân số trong khi phép cộng float có một vài bước không thể thực hiện đồng thời - căn chỉnh mantissas (dịch chuyển sang trái dựa trên kết quả của phép trừ), sau đó thực sự thêm chúng, sau đó bình thường hóa (có thể kích hoạt cả dòng chảy và tràn, yay). Trong mạch, nó có khá nhiều điểm chết, trong vi mã, mỗi bước sẽ tốn một vài chu kỳ.
John Dvorak

4

Bởi "phát sinh một lần" có lẽ có nghĩa là nếu bạn có xác suất p 1 , . . . p N sau đó bạn chuyển sang không gian nhật ký chỉ một lần bằng cách lấy nhật ký của từng p i , thực hiện phép nhân xác suất trong không gian nhật ký bằng cách thêm chúng (ít tốn thời gian hơn), sau đó chuyển trở lại không gian ban đầu của bạn bằng cách sử dụng lũy ​​thừa.Np1,...pNpi

N

O(n)nO(n2)

Nhân tiện, ý tưởng này tương tự như phép nhân mô-đun Montgomery, trong đó phép nhân được thực hiện ở dạng Montgomery khá nhanh hơn phép nhân thông thường và sau đó giảm.



1
@Mehrdad, tôi hy vọng bạn đã học phép nhân của hai số. Rằng algoritnm vẫn được sử dụng rộng rãi trên chip máy tính, vui lòng xem tại đây Điều bạn muốn nói là thuật toán cấp phần mềm vẫn còn tệ hơn thời gian tuyến tính. Các thuật toán nhân này có được sử dụng rộng rãi như trên mạch nhân không?
fade2black


1
Tinh thần của câu trả lời vẫn đúng, phải không? Nếu không có thuật toán nhân nào sẽ phù hợp với thời gian tuyến tính của phép cộng?
Stephen

1
@Stephen, trong thực tế, câu hỏi không phải là về độ phức tạp chính xác nhất của thuật toán nhân là gì. Tôi có thể cung cấp thêm thông tin về chủ đề này nếu cần bình luận viên. Tôi nghĩ rằng một cuộc thảo luận dài về điều đó sẽ lạc đề ở đây. )))
fade2black
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.