2

J'essaye de coder en Python plusieurs types d'algorithmes ANN afin d'obtenir une meilleure compréhension/intuition de ceux-ci. Je n'utilise pas Scikit-learn ou d'autres paquets prêts à l'emploi car mon objectif est plutôt éducatif que pratique. Par exemple, j'utilise la base de données MNIST (http://yann.lecun.com/exdb/mnist/). Bien que j'aie effectué une couche NN simple 1 et une NN convolutionnelle, j'ai réussi à éviter toutes les méthodes d'optimisation de second ordre et, par conséquent, je n'ai pas calculé la matrice de Hesse. Cependant, je suis arrivé à Bayesian NN où, pour optimiser les hyperparamètres, un calcul de Hessian est obligatoire.Réseau de neurones bayésien: Calcul de Hessian

Dans mon réseau entièrement connecté, il y a 784 entrées, 300 unités cachées et 10 unités de sortie. Tous ces résultats dans 238200 poids (+ biais). Lorsque j'essaie de calculer ou même d'approximer Hessian (par produit externe de dégradés), Python notifie sur "MemoryError". Même si je diminue le nombre de poids à ~ 40000 et qu'aucun message d'erreur n'est affiché, mon ordinateur reste bloqué après plusieurs minutes. Si je comprends bien, le problème est que la matrice souhaitable est extrêmement énorme. J'ai regardé quelques articles sur les NN bayésiens et j'ai remarqué que les auteurs utilisent généralement des architectures de réseau ne comportant pas plus de 10 ou 20 entrées et unités cachées, ce qui fait que j'ai beaucoup moins de paramètres que moi. Cependant, je n'ai vu aucune déclaration explicite de telles restrictions.

Que puis-je faire pour appliquer l'approche bayésienne à NN pour MNIST?

Plus généralement: Est-il possible d'appliquer l'approche bayésienne avec cette architecture (238200 poids) ou même plus grande? Ou peut-être ne convient-il qu'aux réseaux relativement petits?

Répondre

1

Vous pouvez essayer the BFGS algorithm pour l'ascension en pente, ce qui se rapproche de la Hesse et a tendance à économiser de la mémoire (considérable). Il y a un implementation in Scipy.

+1

Je suppose que vous pensez à L-BFGS (https://en.wikipedia.org/wiki/Limited-memory_BFGS), BFGS nécessite la même quantité de mémoire que les méthodes hessian typiques si le problème OPs réside dans la mémoire consommation - BFGS échouera aussi – lejlot

+0

Yup. Merci pour la clarification. –