Ich arbeite an einem Online-Lernmodell für Kategorien, das einen stochastischen Gradientenabstieg verwendet, um ein Gaußsches Mischungsmodell anzupassen. Das Modell basiert auf dem Online-Lernmodell von Toscano & McMurray (2010).
Während der Gradientenabstieg ziemlich gut zu funktionieren scheint, um die Mittelwerte und Häufigkeiten / Mischungswahrscheinlichkeiten der Kategorien abzuschätzen, habe ich Probleme mit der Schätzung der Kovarianzen von Mischungskomponenten. Die partiellen Ableitungen, die ich für das Gradientenabstiegs-Update verwendet habe, stammen von Petersen & Pedersen (2008) (S. 44).
Beginnen mit
Petersen & Pedersen geben die partielle Ableitung bezüglich der Kovarianzmatrix as an
Der Gradientenabstiegsschritt für jedes , wie ich es in Python implementiert habe, ist (dies ist eine leichte Vereinfachung und das für alle Komponenten wird berechnet, bevor das Update durchgeführt wird): Δ Σ
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)))
Wobei j ein Objekt ist, das die te Komponente der Mischung darstellt, und j.sigma und j.mu der Mittelwert und die Varianz dieser Komponente sind. G (x) / M (x) steht für einen Code, derρ j N x ( μ j , Σ j )
Ich frage mich also, ob mit meinem Code etwas nicht stimmt (höchstwahrscheinlich) oder ob dies nur ein wirklich schlechter Weg ist, um diese Art von Modell anzupassen, wenn Daten mit mehr als zwei Dimensionen verarbeitet werden (siehe Toscano & McMurray für Algorithmen für univariate und bivariate Daten, die definitiv funktionieren).
Referenzen: Toscano, JC & McMurray, B. (2010). Cue-Integration in Kategorien: Gewichtung akustischer Cues in der Sprache mithilfe unbeaufsichtigter Lern- und Verteilungsstatistiken. Cognitive Science, 34, 434 & ndash; 464.
Petersen & Pederson. Das Matrix-Kochbuch, Version: 14. November 2008