Je travaille sur un modèle d'apprentissage de catégorie en ligne qui utilise la descente de gradient stochastique pour s'adapter à un modèle de mélange gaussien. Le modèle est basé sur le modèle d'apprentissage en ligne utilisé dans Toscano et McMurray (2010).
Bien que la descente de gradient semble fonctionner assez bien pour estimer les moyennes et les fréquences / probabilités de mélange des catégories, j'ai des problèmes avec l'estimation des covariances des composants du mélange. Les dérivées partielles que j'ai utilisées pour la mise à jour de la descente de gradient proviennent de Petersen & Pedersen (2008) (p. 44)
Commençant par
Petersen & Pedersen donnent la dérivée partielle par rapport à la matrice de covariance comme
L'étape de descente de gradient pour chaque , telle que je l'ai implémentée en Python, est (c'est une légère simplification et le pour tous les composants est calculé avant d'effectuer la mise à jour):
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)))
Où j est un objet représentant la ème composante du mélange et j.sigma et j.mu sont la moyenne et la variance de cette composante. G (x) / M (x) un code qui calcule
Donc, je me demande s'il y a quelque chose qui ne va pas avec mon code (très probablement) ou si c'est juste une très mauvaise façon d'adapter ce type de modèle lorsque vous traitez des données avec plus de deux dimensions (Voir Toscano & McMurray pour les algorithmes pour univariée et des données bivariées qui fonctionnent vraiment).
références: Toscano, JC et McMurray, B. (2010). Intégration d'indices avec des catégories: pondération des indices acoustiques dans la parole à l'aide d'un apprentissage non supervisé et de statistiques de distribution Sciences cognitives, 34, 434-464.
Petersen & Pederson. The Matrix Cookbook, Version: 14 novembre 2008
la source