{"id":10707,"date":"2016-06-14T17:19:33","date_gmt":"2016-06-14T15:19:33","guid":{"rendered":"https:\/\/www.etalab.gouv.fr\/?p=10707"},"modified":"2019-06-18T10:34:22","modified_gmt":"2019-06-18T08:34:22","slug":"un-reseau-de-neurones-pour-opensolarmap-23","status":"publish","type":"post","link":"https:\/\/preprod.etalab.gouv.fr\/un-reseau-de-neurones-pour-opensolarmap-23","title":{"rendered":"Un r\u00e9seau de neurones pour OpenSolarMap (2\/3)"},"content":{"rendered":"\n

Apr\u00e8s avoir essay\u00e9 un algorithme tr\u00e8s simple, puis un ou plusieurs\nalgorithmes classiques, il est parfois (mais pas toujours) n\u00e9cessaire\nde mettre en place un algorithme sp\u00e9cialis\u00e9 dans le probl\u00e8me \u00e0\nr\u00e9soudre. Les r\u00e9seaux de neurones sont une cat\u00e9gorie\u00e9d\u2019algorithmes qui\nont fait leurs preuves de mani\u00e8re spectaculaire dans le domaine du\ntraitement d\u2019images.<\/strong><\/p>\n\n\n\n

Introduction<\/h1>\n\n\n\n

Au del\u00e0 de l\u2019effet de mode dont ils b\u00e9n\u00e9ficient, les r\u00e9seaux de\nneurones constituent bel et bien une avanc\u00e9e majeure en traitement\nd\u2019images et dans bien d\u2019autres domaines. Ce champ de recherche\nrepr\u00e9sente une proportion importante des articles parues dans les\nrevues de r\u00e9f\u00e9rence en machine learning : NIPS<\/a> et ICML<\/a>. Le domaine\njouit \u00e9galement d\u2019une pleine reconnaissance acad\u00e9mique comme\nl\u2019illustre la chaire annuelle de l\u2019INRIA au Coll\u00e8ge de France en \u00ab Informatique\net sciences num\u00e9riques \u00bb<\/a> consacr\u00e9e par Yann LeCun aux r\u00e9seaux\nneuronaux. Cette chaire, cours et s\u00e9minaires inclus, constitue\nd\u2019ailleurs une excellente introduction aux techniques des r\u00e9seaux\nneuronaux, parmi les multiples ressources disponibles librement sur\nInternet.<\/p>\n\n\n\n

Les r\u00e9seaux de neurones sont \u00e9tudi\u00e9s depuis les ann\u00e9es 50 avec\nl\u2019invention du perceptron<\/a>. Mais\nceux qui bouleversent la communaut\u00e9 du machine learning depuis 2011 se\nd\u00e9nomment plus pr\u00e9cis\u00e9ment \u00ab r\u00e9seaux de neurones profonds \u00e0\nconvolution \u00bb (\u00ab deep convolutional neural networks \u00bb, abr\u00e9g\u00e9 parfois\nen CNN pour Convolutional Neural Networks ou encore ConvNets) :neurone<\/strong> : M\u00eame s’il y a une lointaine analogie\nentre les neurones biologiques et les neurones informatiques, ils\nconstituent deux domaines d’\u00e9tude \u00e0 ne pas confondre. Un neurone\ninformatique prend en entr\u00e9e plusieurs valeurs num\u00e9riques et\napplique une fonction \u00e0 ces entr\u00e9es. Le r\u00e9sultat num\u00e9rique de cette\nfonction constitue l’unique sortie du neurone. Le neurone Rectified\nLinear Unit<\/a>\u00e9(ReLU)\u00e9est majoritairement employ\u00e9 : chaque entr\u00e9e\nest\u00e9multipli\u00e9e par un coefficient (ou poids) puis cette somme est\nrenvoy\u00e9e si elle est positive, z\u00e9ro est renvoy\u00e9 sinon. \n<\/p>\n\n\n\n

\"neurone\"<\/a><\/figure>\n\n\n\n

\nFigure 1 : neurone de type ReLU \u00e0 3 entr\u00e9es.\n\n\n\n<\/li> \n\n r\u00e9seau<\/strong> : Les\nneurones sont dispos\u00e9s en un r\u00e9seau qui prend la forme de plusieurs\ncouches successives. La premi\u00e8re couche prend en entr\u00e9e les valeurs de\nl’image (ou d’un autre type d’entr\u00e9e comme du texte ou du son). Les\nsorties de la premi\u00e8re couche constituent les entr\u00e9es de la deuxi\u00e8me\ncouche, etc. Les sorties de la derni\u00e8re couche sont les sorties du\nr\u00e9seau, mais les valeurs num\u00e9riques qui transitent entre les couches\nsont cach\u00e9es \u00e0 l’utilisateur. De l\u00e0 vient en partie leur r\u00e9putation\nd’\u00eatre des \u00ab bo\u00eetes noires \u00bb. \n\n<\/a><\/p>\n\n\n\n

\nFigure 2 : r\u00e9seau de neurones \u00e0 3 couches\n\n<\/li> \n\n convolution\n<\/strong>(paragraphe technique \u00e0 lire en seconde lecture)<\/em> :\nLes r\u00e9seaux\n\u00e0 convolution<\/a> op\u00e8rent g\u00e9n\u00e9ralement sur des images. La premi\u00e8re\ncouche de neurones est de la m\u00eame forme que l’image en entr\u00e9e. La\nsortie de cette premi\u00e8re couche, comme toutes les sorties\ninterm\u00e9diaires, forment des images. Au sein d’une couche de neurones,\nles param\u00e8tres de chaque neurones sont choisis de telle sorte que la\ncouche applique un filtrage lin\u00e9aire puis une rectification. Un\nfiltrage lin\u00e9aire est la convolution entre une image d’entr\u00e9e et un\nfiltre lin\u00e9aire. Un filtre lin\u00e9aire, dans le cas du traitement\nd’images, se repr\u00e9sente come une petite image, typiquement de taille 3\npar 3 pixels ou 5 par 5. Les r\u00e9seaux \u00e0 convolution ont l’avantage de\ntirer partie de la structure g\u00e9om\u00e9trique de l’image d’entr\u00e9e. De plus,\nchaque couche de neurones est param\u00e9tr\u00e9e par un filtre lin\u00e9aire qui\nest beaucoup plus simple \u00e0 apprendre que dans le cas g\u00e9n\u00e9ral. Par\nexemple, pour une image d’entr\u00e9e de 224 par 224 pixel en noir et\nblanc, une couche de neurones de la m\u00eame taille est compos\u00e9 de 224×224\nneurones et si chaque neurone est connect\u00e9 \u00e0 chaque pixel d’entr\u00e9e, il\ny a 222×224 param\u00e8tres par neurones. Cela fait un total de\n224x224x224x224 = 2.517.630.976 param\u00e8tres pour cette seule couche. Il\nfaudrait donc des milliards d’images pour faire apprendre correctement\nun tel r\u00e9seau. En comparaison, param\u00e9trer la couche de neurones par un\nfiltre de 3×3 pixels ne requiert d’apprendre que 9 valeurs\nnum\u00e9riques. Concr\u00e8tement, cela revient \u00e0 mettre la majorit\u00e9 des poids\ndes neurones \u00e0 z\u00e9ro, et \u00e0 partager tous les poids restants entre les\nneurones de la couche. Dans un r\u00e9seau \u00e0 convolution, des \u00e9tapes de\nr\u00e9duction de la taille de l’image s’intercalent entre les couches de\nneurones. Pour le r\u00e9seau LeNet 5, deux \u00e9tapes de r\u00e9duction, appel\u00e9es\n\u00ab subsampling \u00bb alternent avec les deux \u00e9tapes de convolution. Les\nderni\u00e8res couchent perdent la structure g\u00e9om\u00e9trique en d\u00e9pliant\nl’image sur une dimension, mais le nombre de param\u00e8tres \u00e0 apprendre\nest raisonnable du fait de la petite taille des images. Enfin, il\nfaut pr\u00e9ciser que, de la m\u00eame mani\u00e8re qu’une image d’entr\u00e9e peut\ncontenir plusieurs canaux de couleur (rouge, vert et bleu par\nexemple), les images interm\u00e9diaires se composent de plusieurs\ncanaux. Dans le cas de LeNet 5, les images interm\u00e9diaires se composent\nde 6 puis de 16 canaux. Au fil de l’apprentissage du r\u00e9seau, chaque\ncanal va se sp\u00e9cialiser dans la reconnaissance d’une forme g\u00e9om\u00e9trique\nparticuli\u00e8re.\n\n profond<\/strong> : Les\nr\u00e9seaux de neurones traditionnels, \u00e9tudi\u00e9s dans les ann\u00e9es 70,\nutilisaient entre 1 et 3 couches de neurones. On parle de r\u00e9seaux\nprofonds pour parler des architectures avec un nombre \u00e9lev\u00e9s de\ncouches qui peut d\u00e9passer la centaine ! Les couches proches de l’image\nd’entr\u00e9e se sp\u00e9cialisent dans la d\u00e9tection de features g\u00e9om\u00e9triques\ntr\u00e8s simples (des coins, des lignes) alors les couches finales\nd\u00e9tectent des features abstraites qui d\u00e9pendent de l’usage du r\u00e9seau\n(des lettres pour un r\u00e9seau de reconnaissance d’\u00e9criture, des objets,\ndes esp\u00e8ces d’animaux). <\/ul>\n\n\n<\/p>\n\n\n\n

\"lenet5\"<\/a><\/figure>\n\n\n\n

\nFgure 3 : r\u00e9seau de neurones LeNet 5\n<\/p>\n\n\n\n

Comme tous les algorithmes dits\nsupervis\u00e9s, les r\u00e9seaux de neurones sont \u00ab appris \u00bb sur un \u00e9chantillon\nde donn\u00e9es d’exemples labellis\u00e9s. La m\u00e9thode d’apprentissage utilis\u00e9e,\nnomm\u00e9e backpropagation<\/a>,\nva modifier petit \u00e0 petit les param\u00e8tres de chaque couche pour\naugmenter la qualit\u00e9 des pr\u00e9dictions jusqu’\u00e0 atteindre une situation\n(localement) optimale. Une fois la phase d’apprentissage termin\u00e9e, le\nr\u00e9seau\u00e9est capable de faire des pr\u00e9dictions sur de nouvelles images.\n<\/p>\n\n\n\n

Les r\u00e9seaux de neurones pr\u00e9sentent des\nperformances spectaculaires et inattendues. Une des enjeux th\u00e9orique\nactuel est de comprendre ces performances et de les confirmer par des\ngaranties th\u00e9oriques. C’est par exemple l’objet des recherches\nactuelle de St\u00e9phane Mallat qui travaille sur la m\u00e9thode de\nscattering<\/a>, apparent\u00e9e aux r\u00e9seaux de neurones. <\/p>\n\n\n\n

\nLibrairie, r\u00e9seau et code utilis\u00e9s\n<\/h1>\n\n\n\n

\nLibrairie de deep-learning\n<\/h2>\n\n\n\n

\nLes librairies de deep-learning ne manquent pas<\/a>. La\ndifficult\u00e9 est de choisir l’outil qui r\u00e9pond le mieux aux besoins du\nprojet. Pour r\u00e9pondre aux besoins d’OpenSolarMap, l’outil id\u00e9al\ndevra :\n<\/p>\n\n\n\n