Mais faut-il approfondir la notion de réseaux de neurones ?


image-ikramIl y a quand-même quelque chose de passionnant c'est de pouvoir donner une vue simple pour de quelque chose de techniquement compliqué. C'est ce défi que relève  Ikram Chraibi Kaadoud, doctorante chez Algotech informatique et dans une équipe de neuroscience computationnelle, dans le cas des réseaux de neurones profonds. Après nous avoir présenté le fonctionnement de base d'un neurone artificiel en réseau, et montré ces limites en terme de complexité, redonnons lui la parole.

Alors est-ce que le pari est celui d'une architecture plus riche et … plus profonde. ?

Nous n'avions jusqu’à présent construit qu'un réseau dont l'architecture est triviale : avec des connexions des entrées vers les sorties et uniquement deux couches d'unités.

Que se passerait-il si nous utilisions une architecture bien plus complexe, avec des connexions récurrentes entre les unités, comme représenté à droite ?

Il y a une très bonne nouvelle, donnée par des résultats de la théorie des systèmes dynamiques [1]. Avec des architectures aussi complexes, les comportements du système sont tellement riches qu'un nombre restreint d'unités de calcul peut générer des mécanismes de grande complexité. Voilà qui est fort bien.

Un réseau avec un réservoir de calcul, c'est à dire des connexions récurrentes sans structure en couches a un comportement très riche, mais impossible d'ajuster les paramètres aux exemples fournis, sauf pour les unités reliées à la couche de sortie. D'après [2].

Mais il y a une plus mauvaise nouvelle [3] : Les mécanismes d'apprentissage, au lieu de fonctionner très simplement comme pour les réseaux à deux couches, ne marchent tout simplement pas ! Dès que l'on ajuste un des paramètres, tout le comportement peut changer de manière chaotique (au sens mathématique et usuel du terme). Il est alors impossible de développer un algorithme d'apprentissage stable, sauf dans des cas spécifiques.

 

Aurions-nous une solution qui permette d'enrichir l'architecture sans perdre la capacité d'apprentissage ?

Un cas spécifique correspond aux réseaux de neurones profond (RNP). On garde ici l'idée de se limiter à des connexions d’entrées vers des sorties, mais on se donne la peine d'empiler plusieurs couches, comme schématisé ci-contre.

Détaillons cela ensemble !

Un réseau «profond» a plusieurs couches superposées. Les entrées, en bas, passent à travers plusieurs couches de calcul avant de produire une sortie, en haut, ceci sans connexion récurrente. D'après [4].

La particularité des couches composant un RNP réside dans le fait que chacune d’entre elles est elle –même un réseau de neurones artificiels à part entière.

Le principe de fonctionnement de tels réseaux est que chaque couche - donc chaque réseau de neurones- traite l’information à son niveau. Elle prend en entrée les données de la couche précédente et sa sortie sert comme élément d’entrée de la couche suivante, à savoir le réseau de neurones suivant.

S’il s’agit de la couche d’entrée, alors les données traitées correspondent à l’entrée du RNP.

Et s’il s’agit de la couche de sortie, alors sa sortie est celle du RNP.

Les couches ne sont donc pas liées entre elles, comme dans un réseau de neurones multicouches (par exemple, le Perceptron). Il est de ce fait difficile de faire apprendre ce type de réseau.

En effet, ce n'est pas un problème simple : s’il y a plusieurs couches, seules les couches superficielles apprennent (en fait sur-apprennent), les couches profondes restant incapables de s'adapter.

En alliant apprentissage supervisé et non-supervisé, on peut réguler le fonctionnement des couches profondes et voir cet apprentissage bien propagé. On peut aussi contraindre l'architecture du réseau pour limiter le nombre de connexions à celles qui sont utiles, limitant l'apprentissage à celles-ci. En fait, le nombre de variantes possibles est colossal.

Schéma (très simplifié) de la circulation des données dans un réseau de neurones profond [4] :

Références :

[0] http://deeplearning.net Site de référence des acteurs de la recherche sur ce sujet.

[1] Foundations and Trends R in Machine Learning,  Yoshua Bengio, Learning Deep Architectures for AI, Vol. 2, No. 1 (2009) 1-127 http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf a servi de base à cet article.

[2] Reservoir Computing Trends, Mantas Lukosevicius, Herbert Jaeger, Benjamin Schrauwen, (2012) KI - Künstliche Intelligenz, Vol. 26, No 4, pp 365-371 http://minds.jacobs-university.de/sites/default/files/uploads/papers/2508_Lukoseviciusetal12.pdf

[3] Deep Learning: Methods and Applications, Li Deng, Dong Yu (2014) Foundations and Trends® in Signal Processing: Vol. 7, No. 3–4, pp 197-387 http://research.microsoft.com/pubs/209355/DeepLearning-NowPublishing-Vol7-SIG-039.pdf

[4] Réseaux de Neurones, Clément Chatelain, http://clement.chatelain.free.fr/enseignements/rdn.pdf

[5] L’apprentissage automatique : le diable n’est pas dans l’algorithme, Colin de la Higuera, binaire.lemonde.fr http://binaire.blog.lemonde.fr/2015/06/29/lapprentissage-automatique-le-diable-nest-pas-dans-lalgorithme


Annexe : Mais, mathématiquement, est-ce une idée fructueuse ?

Un résultat théorique de 1991, dû à Johan Håstad et Mikaël Goldmann, nous laisse à penser que oui.

Ils ont établi très précisément qu' « une fonction qui se calculait de manière compacte avec un réseau de, disons, « k » couches et « N » unités devenait exponentiellement complexe si on retirait une couche ».

Bref : On a prouvé que retirer des couches faisait exploser la complexité.

Voilà pour le plaisir des yeux les termes mathématiques :

Leur résultat est démontré dans le cas où tous les poids W sont positifs (monotone weight) et où les valeurs de sortie sont binaires (thresholded circuit).

Avez-vous noté ce qui se passe ? Il y a certes un vrai résultat mathématique, parfaitement démontré, mais il est négatif et restrictif.

1/ Uniquement négatif. Il ne dit pas «il existe une profondeur à partir de laquelle une fonction n'est pas exponentiellement complexe». Ce serait trop beau. Il dit juste «si vous réduisez la profondeur, la complexité explose exponentiellement».

À nous de supposer le reste, et de vérifier numériquement sur un grand nombre d'exemples que cela semble tenir face à la réalité des expérimentations numériques.

2/ Dans un cas restrictif. Le résultat a pu être démontré par les mathématiques uniquement pour un type de réseau particulier.

À nous de prendre le risque de faire l'hypothèse, oser la conjecture, que c'est vrai au-delà de ce cas spécifique.

C'est un trait caractéristique des sciences du numérique : elles allient des raisonnements rigoureux en science informatique ou mathématiques appliquées, avec des hypothèses qui elles sont soumises à l'épreuve des simulations numériques pour être jugées raisonnables (ou non) dans les faits.

Au delà de ces résultats on constate numériquement qu'il semble exister une profondeur en terme de nombre de couches qui serait idéale : en-deçà, le nombre d'unités seraient exponentiellement complexe ; au-delà, le délai de calcul serait trop long et les couches supplémentaires inutiles [3].

Si on utilise des méthodes statistique, alors on peut mettre en œuvre des mécanismes d'apprentissage efficace, qui permettent de propager l'apprentissage à travers les couches du réseau. C’est ce que nous avons vu précédemment avec l’alliance d’apprentissage supervisé et non supervisé.

Le lien se fait avec ce problème avec celui de la modélisation physique des particules (par exemple de gaz) que Ludwig Boltzmann a commencé à formaliser en 1868, avant que Josiah Willard Gibbs ne développe la théorie au début du XXe siècle.

Un point clé des approches que nous discutons ici est l'utilisation de modèles probabilistes. On ne cherche plus à ajuster une valeur donnée, mais la probabilité de cette valeur. Ce changement de paradigme, conduit à pour proposer des algorithmes qui ne marchent pas exactement, mais très probablement, comme le discute bien notre Colin de la Higuera dams article qui aide à aller plus loin [5].

Publier un commentaire