Lắp mô hình hỗn hợp gaussian bằng cách sử dụng gốc dốc ngẫu nhiên


8

Tôi đang làm việc trên một mô hình học tập thể loại trực tuyến sử dụng gốc dốc ngẫu nhiên để phù hợp với mô hình hỗn hợp gaussian. Mô hình này dựa trên mô hình học tập trực tuyến được sử dụng trong Toscano & McM bồ (2010).

Mặc dù độ dốc gốc dường như hoạt động khá tốt để ước tính phương tiện và tần suất / xác suất trộn của các loại, tôi gặp vấn đề với việc ước tính hiệp phương sai của các thành phần hỗn hợp. Các dẫn xuất một phần mà tôi đã sử dụng cho bản cập nhật gốc giảm dần đến từ Petersen & Pedersen (2008) (trang 44)

Bắt đầu với

p(x)=kρkNx(μk,Σk)

Petersen & Pedersen đưa ra đạo hàm riêng đối với ma trận hiệp phương sai nhưΣ

δlnp(x)δΣj=ρjNx(μj,Σj)kρkNx(μk,Σk)12[Σj1+Σj1(xμj)(xμj)TΣj1]

Bước gradient descent cho mỗi , như tôi đã có nó được thực hiện bằng Python là (đây là một việc đơn giản hóa nhẹ và delta Σ cho tất cả các thành phần được tính toán trước khi thực hiện cập nhật):ΣjΔΣ

j.sigma += learning_rate*(G(x)/M(x))*0.5*(-inv(j.sigma) + inv(j.sigma).dot((x-j.mu).dot((x-j.mu).transpose())).dot(inv(j.sigma)))

jρjNx(μj,Σj)kρkNx(μk,Σk)

Vì vậy, tôi tự hỏi liệu có gì đó không đúng với mã của tôi (rất có thể) hoặc nếu đây chỉ là một cách thực sự tồi để phù hợp với mô hình này khi xử lý dữ liệu có nhiều hơn hai chiều (Xem Toscano & McM bồ để biết thuật toán cho đơn vị và dữ liệu bivariate chắc chắn hoạt động).

tài liệu tham khảo: Toscano, JC, & McM bồ, B. (2010). Tích hợp cue với các thể loại: Trọng số tín hiệu âm thanh trong lời nói bằng cách sử dụng học tập và thống kê phân phối không giám sát. Khoa học nhận thức, 34, 434-464.

Petersen & Pederson. The Matrix Cookbook, Phiên bản: 14 tháng 11 năm 2008

Câu trả lời:


3

mus[d]μjj.sigmaΣjG(x)/M(x)jx

p(jx)=ρjNx(μj,Σj)kρkNx(μk,Σk),
  • Tôi mong đợi quyền truy cập vào giá trị trung bình, hiệp phương sai và tính toán của hậu thế cho tất cả liên quan đến jhoặc d, bất kỳ biến nào đại diện cho thành phần mà bạn muốn tính toán độ dốc trong mã của bạn. Nếu bạn nói với chúng tôi những gì jvà đại diện dcho, chúng tôi có thể có thể nói với bạn nhiều hơn.
  • Nếu G(x)/M(x)truy cập j.Sigmađể tính toán sau, mã của bạn có thể không tính toán những gì bạn nghĩ nó làm. Đầu tiên có thể tính toán tất cả các gradient của tất cả các tham số, sau đó thực hiện cập nhật.
  • Độ dốc dốc ngẫu nhiên thường không phải là lựa chọn đầu tiên để tối ưu hóa hỗn hợp Gaussian. Thông thường, tối đa hóa kỳ vọng (EM) được sử dụng (xem, ví dụ, Giám mục, 2007). Ngay cả khi bạn không sử dụng EM, bạn có thể muốn xem xét BFGS hoặc L-BFGS (được triển khai scipy.optimize) trước khi sử dụng SGD. Và ngay cả khi bạn dính vào SGD, bạn nên xem xét sử dụng nhiều điểm dữ liệu ("lô") tại một thời điểm để ước tính độ dốc hoặc ít nhất là bao gồm cả thuật ngữ động lượng . Nhìn ngắn gọn vào bài báo của Toscano và McM bồ, tôi đoán là họ đã chọn sử dụng SGD vì họ quan tâm đến việc mô hình hóa việc thu nhận lời nói theo cách hợp lý hơn về mặt sinh học, thay vì có được sự phù hợp nhất có thể và thực hiện trực tuyến này (đó là một dữ liệu điểm tại một thời điểm). Nếu bạn không cần điều này, lời khuyên của tôi là sử dụng EM.

    (Tôi mới nhận ra bạn đặc biệt yêu cầu học trực tuyến , vì vậy lựa chọn khả thi duy nhất cho bạn có thể là thêm thuật ngữ động lượng để tăng tốc mọi thứ lên một chút.)

  • Cách bạn chọn để tính toán độ dốc khá kém hiệu quả, điều này sẽ làm chậm hơn việc học. Bạn có thể không thấy kết quả hợp lý vì phải mất mãi mãi trước khi thuật toán hội tụ thành một thứ thú vị. Đây là một cách tốt hơn để tính toán độ dốc:

    sigmaInv = inv(j.sigma)
    dSigma = G(x)/M(x) * 0.5 * (-sigmaInv + numpy.sum(sigmaInv.dot(x - mus[d]) * x))

    Σj


Cảm ơn những lời đề nghị @Lucas. Xin lỗi cho mã hơi không rõ ràng. Đó là một phần của một chức năng lớn hơn mà tôi đã viết lại để nó có ý nghĩa hơn một chút. SigmaInv chỉ được tính một lần và tất cả các gradient được tính trước khi cập nhật. Đây không cần phải là một mô hình trực tuyến cho những gì tôi đang làm, vì vậy tôi không thể sử dụng EM. Tôi đã thử một phiên bản hơi khác sử dụng yếu tố Cholesky của sigma, nhưng nó hoạt động hơi kỳ quặc.
phasing_chirp
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.