FR 3050855 A1 20171103 FR 1653745 A 20160427 DISPOSITIF ET PROCEDE DE CALCUL DE CONVOLUTION D'UN RESEAU DE NEURONES CONVOLUTIONNEL Domaine technique La présente invention concerne de manière générale les réseaux de neurones artificiels et en particulier un dispositif et un procédé de calcul de convolution d'un réseau de neurones convolutionnels. Les réseaux de neurones artificiels constituent des modèles de calculs imitant le fonctionnement des réseaux de neurones biologiques. Les réseaux de neurones artificiels comprennent des neurones interconnectés entre eux par des synapses, qui sont classiquement implémentées par des mémoires numériques. Les synapses peuvent être également implémentées par des composants résistifs dont la conductance varie en fonction de la tension appliquée à leurs bornes. Les réseaux de neurones artificiels sont utilisés dans différents domaines de traitement du signal (visuel, sonore, ou autre) comme par exemple dans le domaine de la classification d'image ou de la reconnaissance d'image. Les réseaux de neurones convolutionnels correspondent à un modèle particulier de réseau de neurones artificiels. Les réseaux de neurones convolutionnels ont été décrits initialement dans l'article de K. Fukushima, « Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36(4):193-202, 1980. ISSN 0340-1200. doi: 10.1007/BF00344251 ». Les réseaux de neurones convolutionnels (désignés en langue anglo-saxonne par les expressions "convolutional neural networks", ou "deep (convolutional) neural networks" ou encore "ConvNets") sont des réseaux de neurones sans rétro-action (« feedforward »), inspirés par les systèmes visuels biologiques. Les réseaux de neurones convolutionnels (CNN) sont utilisés notamment dans des systèmes de classifications d'images pour accélérer la classification. Appliqués à la reconnaissance d'images, ces réseaux permettent un apprentissage des représentations intermédiaires d'objets dans les images qui sont plus petites et généralisables pour des objets similaires, ce qui facilite leur reconnaissance. Cependant, le fonctionnement intrinsèquement parallèle et la complexité des classificateurs classiques de type réseau de neurones convolutionnels mettent un frein à leur implémentation efficace dans les systèmes embarqués. En effet, les 3050855 2 systèmes embarqués imposent de fortes contraintes en matière de surface et de consommation. Des solutions ont été proposées pour implémenter les réseaux de neurones sur processeur graphique GPU afin d'améliorer leurs performances, comme par exemple la solution décrite 5 dans l'article de D. C. Ciresan, U. Meier, J. Masci, L. M. Gambardella, and J. Schmidhuber, « Flexible, high performance convolutional neural networks for image classification. Proceedings of the Twenty-Second International Joint Conference on Artificial Intelligence Volume Two», IJCAI' 11, pages 1237-1242, 2011. ISBN 978-1-57735-514-4. doi: 10.5591/978-1-57735-516-8/ IJCA111-210. 10 Plusieurs implémentations matérielles de réseau convolutionnel impulsionnel ont notamment été proposées dans L. Camunas-Mesa, C. Zamarreno-Ramos, A. Linares-Barranco, A. Acosta-Jimenez, T. Serrano- Gotarredona, and B. Linares-Barranco. An event-driven multikernel convolution processor module for event-driven vision sensors. Solid-State Circuits, IEEE Journal of, 47(2):504-517, 2012. ISSN 0018-9200. doi: 10.1109/JSSC.2011.2167409. 15 Une telle implémentation de convolution utilise une mémoire numérique séparée pour stocker les coefficients des noyaux de convolution et nécessite de copier ces coefficients du noyau de la mémoire à l'unité de calcul (ALU) à chaque arrivée d'impulsion. Une autre solution, appelée "TrueNorth", a été proposée dans Paul A. Merolla, John V. Arthur, Rodrigo Alvarez-Icaza, Andrew S. Cassidy, Jun Sawada, Filipp Akopyan, Bryan L. 20 Jackson, Nabil Imam, Chen Guo, Yutaka Nakamura, Bernard Brezzo, Ivan Vo, Steven K. Esser, Rathinakumar Appuswamy, Brian Taba, Arnon Amir, Myron D. Flickner, William P. Risk, Rajit Manohar, and Dharmendra S. Modha, "A million spiking-neuron integrated circuit with a scalable communication network and interface Science", 8 August 2014: 345 (6197), 668-673. Cette solution fournit une puce neuromorphique basée sur une architecture multi- 25 coeur comprenant des unités de calcul classiques spécialisées dans les modèles de neurones impulsionnels. Elle est notamment basée sur une architecture et contient 268 millions de synapses par puce, réparties sur 4096 coeurs contenant 256 neurones. Chaque coeur utilise une SRAM pour créer une connexion binaire entre les entrées/sorties et chaque coeur à une précision synaptique de 3 niveaux. Les coeurs fonctionnent de façon 30 asynchrone. Une telle solution n'est cependant pas spécialisée dans les réseaux de neurones convolutionnels, ce qui implique une grande quantité de mémoire et de redondances, lors de son implémentation. De plus, la précision synaptique des coeurs n'est pas suffisante, ce qui implique une distribution du calcul d'une couche de convolution sur plusieurs coeurs et donc une redondance de mémoire et de calculateur. En outre, cette 35 solution ne virtualise pas le temps des impulsions, mais utilise le temps réel pour coder cette 3050855 3 information. Cela implique l'utilisation de fréquences de fonctionnement basses (de l'ordre du KHz), ce qui rend ce type de solution naturellement incompatible avec des applications nécessitant un traitement rapide des données (classification de milliers d'images par seconde par exemple) et limite donc son champ d'utilisation. 5 Les implémentations matérielles de réseau convolutionnel impulsionnel existantes reposent toutes sur une unité de calcul classique et sont limitées par la taille du bus de données des mémoires numériques. Par ailleurs, elles nécessitent dans un premier temps une récupération de la valeur stockée dans la mémoire avant de pouvoir effectuer une opération sur celle-ci. Ainsi, par exemple, si la taille du bus mémoire est de 64 bits et que les 10 coefficients sont stockés sur 8 bits, il n'est possible de récupérer à chaque coup d'horloge que 8 coefficients. Des millions de cycles d'horloge peuvent donc être nécessaires en fonction du nombre de coefficients dans le réseau. Le temps de traitement ainsi que la consommation énergétique requis pour calculer l'ensemble des sorties du réseau pour une donnée d'entrée sont donc très importants. Ces inconvénients constituent le goulot 15 d'étranglement fondamental de ce type d'architecture (encore appelé Goulot d'étranglement de Von Neumann ou « Von Neumann bottleneck » en langue anglo-saxonne). Il est possible tout au plus de limiter un tel goulot d'étranglement (sans toutefois l'éliminer) par l'utilisation d'instructions de type SIMD (acronyme pour « Single Instruction on Multiple Data » signifiant littéralement « instruction unique sur des données multiples ») permettant le traitement de 20 plusieurs données en une instruction processeur et par l'utilisation de mémoire distribuée avec plusieurs unités de calcul, comme dans les processeurs graphiques GPU ou comme dans l'architecture True North. Les architectures GPU ne sont cependant pas optimisées pour l'implémentation de réseaux impulsionnels tandis que la solution True North présente de faibles fréquences de fonctionnement limitative. 25 Il existe donc un besoin pour des calculateurs à base d'architecture de réseau de neurones convolutionnels à impulsions améliorés capables de satisfaire aux contraintes de surface, de consommation des systèmes embarqués sans dégrader les performances de classification. 30 Définition générale de l'invention L'invention vient améliorer la situation en proposant un calculateur pour calculer au moins une couche de convolution d'un réseau de neurones convolutionnel impulsionnel, en réponse à un événement d'entrée, le réseau de neurones convolutionnel comprenant au 35 moins un noyau de convolution, le noyau de convolution comprenant des coefficients de poids. Le calculateur comprend au moins un module de convolution configuré pour calculer 3050855 4 la ou les couches de convolution, chaque module de convolution comprenant un ensemble d'unités de calcul élémentaire pour calculer la valeur interne des neurones de la couche de convolution déclenchés par l'événement d'entrée, chaque module de convolution étant configuré pour mettre en correspondance les coefficients de poids du noyau avec certaines 5 au moins des unités de calcul élémentaires du module en parallèle, le nombre d'unités de calcul élémentaires étant indépendant du nombre de neurones de la couche de convolution. Dans un mode de réalisation, pour chaque événement d'entrée, chaque unité de calcul est associée à un coefficient de poids du noyau de convolution, tandis que chaque unité de 10 calcul élémentaire est configurée pour calculer la valeur d'un ensemble de neurones indépendants déclenchés par des événements d'entrée, en fonction du coefficient de poids associé à l'unité de calcul élémentaire. Chaque module de convolution peut comprendre au moins une mémoire pour stocker les 15 coefficients de poids d'au moins un noyau de convolution tandis que la mémoire de coefficients de poids est accessible en parallèle par les unités de calcul élémentaires. Chaque module de convolution peut comprendre une unité de routage configurée pour distribuer les coefficients de poids de la mémoire aux unités de calcul élémentaires au 20 moyen d'un bus de données comprenant un ensemble de lignes portant les coefficients de poids tandis que chaque module de convolution est configuré pour calculer les adresses des coefficients de poids dans le bus de données à affecter aux unités de calcul élémentaire en fonction de l'événement d'entrée, l'unité de routage utilisant ces adresses de coefficients de poids pour distribuer les coefficients de poids de la mémoire aux unités de calcul 25 élémentaires. Dans un mode de réalisation, chaque module de convolution peut comprendre au moins une mémoire de valeurs de neurones pour stocker les valeurs internes des neurones calculées par les unités de calcul élémentaires tandis que chaque module de convolution est configuré 30 pour calculer, pour chaque événement d'entrée et pour chaque unité de calcul élémentaire, une adresses de stockage des valeurs internes de neurones calculées par l'unité de calcul dans la mémoire de valeurs de neurones à partir de l'événement d'entrée et d'au moins un paramètre de la couche de convolution à traiter, chaque unité de calcul élémentaire étant apte à sélectionner une adresse de stockage pour stocker les valeurs internes des neurones 35 calculées par la unité de calcul. 3050855 5 Chaque couche de convolution peut comprendre au moins une carte de sortie, chaque carte de sortie comprenant un ensemble de neurones de sortie connectés à des neurones d'entrée d'au moins une partie d'une carte d'entrée du réseau de neurones, le noyau de convolution étant représenté par une matrice de convolution dans un repère de dimensions 5 données, l'événement d'entrée étant défini par une adresse d'entrée dans ce repère, l'adresse d'entrée comprenant les coordonnées de l'événement d'entrée sur la carte d'entrée. Chaque unité de calcul peut être associée à des coordonnées correspondant aux coordonnées du coefficient de poids associé à la matrice de convolution dans le repère, chaque unité de calcul élémentaire étant apte à sélectionner ladite adresse de stockage en 10 fonction des coordonnées de l'unité de calcul, dans le repère. Les paramètres de la couche de convolution peuvent comprendre au moins un paramètre choisi parmi la taille de la matrice de convolution et la taille de la matrice de sortie. 15 Chaque module de convolution peut comprendre au moins une mémoire de valeurs de neurones externe aux unités de calcul élémentaire. En variante, chaque module de convolution peut comprendre une mémoire de valeurs de neurones agencée dans chaque unité de calcul élémentaire. 20 Chaque unité de calcul élémentaire peut être configurée pour calculer la valeur interne de chaque neurone déclenché par l'événement d'entrée selon un modèle computationnel de neurone associé à une fonction algébrique non linéaire. 25 Chaque unité de calcul peut comprendre une unité logique de calcul configurée pour calculer une valeur de sortie d'un neurone en appliquant la fonction associée au modèle. Le réseau de neurones convolutionnel étant un réseau à impulsions, les valeurs d'entrée et les valeurs de sortie de chaque neurone étant codées par des impulsions, la valeur interne 30 d'un neurone calculée par une unité de calcul élémentaire donnée peut être l'intégrale temporelle des valeurs d'entrées reçues par le neurone, chaque valeur d'entrée étant pondérée par le coefficient de poids associé à l'unité de calcul pour chaque valeur d'entrée du neurone. 35 Chaque unité de calcul peut comprendre en outre une unité de sortie configurée pour déterminer l'adresse de sortie sur la carte de sortie des neurones déclenchés et pour communiquer l'adresse de sortie aux autres modules de calcul du calculateur. 3050855 6 Dans un mode de réalisation, les modules de convolution peuvent être interconnectés par un système d'interconnexion. 5 En particulier, le nombre d'unités de calcul élémentaires peut être au moins égal au nombre de poids synaptiques du noyau de convolution. L'invention fournit ainsi un calculateur dédié aux réseaux de neurones convolutionnels à impulsions qui est optimal dans certaines configurations en taille mémoire utilisé pour les 10 filtres et constant en temps de traitement quelle que soit la taille et le nombre de filtres de convolution (pour un nombre total maximal d'opérations donné). L'invention fournit une solution compatible avec les contraintes des systèmes embarqués tant en matière de surface que de consommation, sans pour autant dégrader les 15 performances de classification. L'invention est en outre optimale en termes de quantité mémoire et de nombres de calculateurs. 20 La topologie du calculateur peut être numérique ou hybride. Il est ainsi possible de l'implémenter avec des systèmes de mémoire et des calculateurs analogiques à très faible consommation. Les modes de réalisation de l'invention sont en outre optimaux pour le traitement de couche 25 de convolutions. Ils permettent notamment un parallélisme spatial complet tout en fournissant une grande précision synaptique avec un minimum de mémoire et de calculateurs. Brève description des dessins 30 D'autres caractéristiques et avantages de l'invention apparaîtront à l'aide de la description qui suit et des figures des dessins annexés dans lesquels: La figure 1 représente un exemple de réseau convolutionnel incluant des couches de 35 regroupement (« pooling »), pour la classification d'images et des perceptrons; La figure 2 est un schéma montrant une couche de convolution constituée de plusieurs cartes de sortie ; 3050855 7 La figure 3 illustre le principe de fonctionnement d'une couche de convolution dans un réseau de neurones convolutionnel ; La figure 4 est un schéma illustrant le codage impulsionnel et la propagation dans le réseau de neurones des impulsions ; 5 La figure 5 représente schématiquement un calculateur pour calculer au moins une couche de convolution ; La figure 6 représente l'architecture d'un module de calcul, dans un mode de réalisation utilisant un réseau de neurones impulsionnel ; La figure 7 représente la distribution des coefficients de poids en fonction d'un 10 événement en entrée La figure 8 représente la structure d'une unité de calcul, selon certains modes de réalisation. La figure 9 illustre un exemple de réalisation pour une convolution 3*3 sur une image 5*5 ; 15 La figure 10 illustre la condition d'indépendance des neurones pour une convolution de dimension 3*3, selon un exemple de réalisation ; La figure 11 illustre la répartition des neurones et des adresses des valeurs d'intégration sur la matrice de sortie, selon un exemple de réalisation ; La figure 12 est un organigramme représentant les étapes mises en oeuvre par 20 chaque module de calcul, selon un mode de réalisation utilisant un réseau de neurones convolutionnel de type impulsionnel ; La figure 13 est un schéma montrant les entrées/sorties du pré-calculateur inclus dans chaque module de calcul, selon certains modes de réalisation ; La figure 14 représente un circuit combinatoire utilisé pour implémenter le pré- 25 calculateur, selon un mode de réalisation ; La figure 15 est un schéma représentant les entrées/sorties de la fonction de calcul d'adresse d'intégration selon certains modes de réalisation. La figure 16 représente un circuit combinatoire utilisé pour implémenter la fonction de calcul d'adresse d'intégration implémentée dans chaque unité de calcul, selon 30 certains modes de réalisation. La figure 17 est un schéma représentant les entrées/sorties de la fonction de sortie, selon certains modes de réalisation. La figure 18 représente un circuit combinatoire utilisé pour implémenter la fonction de sortie de chaque unité de calcul, selon un mode de réalisation ; 35 La figure 19 représente les entrées/sorties de la fonction d'activation, selon un mode de réalisation ; 3050855 8 La figure 20 un circuit combinatoire représentant une implémentation de la fonction d'activation, selon un exemple de réalisation ; La figure 21 est un schéma représentant un exemple d'implémentation de l'unité de logique de calcul de chaque unité de calcul, selon certains modes de réalisation ; 5 La figure 22 illustre un exemple de réalisation de l'unité de gestion des sorties ; La figure 23 illustre un exemple un exemple d'implémentation du post-calculateur sous une forme combinatoire ; et La figure 24 est un organigramme représentant l'acheminement des données dans les différents composants du calculateur, selon des exemples de réalisation. 10 Les dessins pourront non seulement servir à mieux faire comprendre la description, mais aussi contribuer à la définition de l'invention, le cas échéant. Description détaillée 15 Pour faciliter la compréhension de la description de certains modes de réalisation, certaines caractéristiques et définitions des réseaux de neurones sont fournies ci-après. Un réseau de neurones est constitué d'une ou plusieurs couches de convolution, incluant ou 20 non des couches de regroupement (« pooling » en langue anglo-saxonne). Les couches peuvent être suivies par un classifieur type perceptron multicouches. La sortie d'une couche de convolution peut être connectée sur l'entrée de la couche suivante. Dans une couche de convolution, chaque neurone est connecté à au moins une partie (sous- 25 matrice) de la matrice d'entrée. Les sous-matrices ont la même taille pour une même couche et leur taille est égale à la taille du filtre. Elles peuvent être décalées les unes des autres de manière régulière et peuvent se chevaucher. La matrice d'entrée peut être de dimension quelconque. Cependant, la matrice d'entrée est généralement 2D avec des valeurs représentées en niveau de gris, la position d'un pixel donné étant fournie par les 30 coordonnées XY. Pour une image en couleur, plusieurs niveaux de gris sont utilisés ainsi que plusieurs matrices d'entrée. Les cordonnées d'un pixel s'exprime alors en XYZ. Dans un réseau de neurones, les neurones sont connectés à leur sous-matrice d'entrée I par des synapses dont le poids est réglable. La matrice K des poids synaptiques (les poids 35 synaptiques sont encore appelés « coefficient de poids» ou «coefficients de convolution » ou « pondérations ») appliquée aux sous-matrices d'entrée des neurones est la même pour tous les neurones d'une même carte de sortie ("feature map" en langue anglo-saxone). Une telle 3050855 9 matrice K est encore appelée « noyau de convolution ». Le fait que le noyau de convolution soit partagé pour l'ensemble des neurones d'une même carte de sortie O, et donc appliqué sur l'ensemble de la matrice d'entrée, diminue la mémoire nécessaire pour le stockage des coefficients, ce qui optimise les performances. Par exemple pour la reconnaissance 5 d'images, cela permet de minimiser le nombre de filtres ou de représentations intermédiaires qui codent au mieux les caractéristiques de l'image et qui sont réutilisables sur toute l'image. Les coefficients d'un noyau de convolution K (c'est-à-dire les poids synaptiques) peuvent correspondre à des filtres classiques de traitement du signal (par exemple Gaussien, Gabor, Laplace...), ou être déterminés par apprentissage, supervisé ou non-supervisé, par exemple 10 en utilisant l'algorithme de rétro-propagation du gradient. Les coefficients des noyaux de convolution peuvent être positifs ou négatifs et sont généralement normalisés entre -1 et 1, tout comme les valeurs d'entrée et de sortie des neurones. Un neurone impulsionnel peut être défini par au moins deux fonctions : 15 - une fonction d'intégration qui intègre les valeurs en entrée du neurone et peut implémenter une fuite. - Une fonction d'activation qui prend en paramètres les valeurs de l'intégration et fournit les valeurs de sortie du neurone. Une fonction d'activation est définie par une fonction algébrique non linéaire, paramétrée, à valeurs bornées, et ayant des variables réelles 20 appelées « entrée » en fonction du modèle de neurone utilisé. Un neurone est en outre caractérisé par une fonction d'activation go utilisée pour calculer la réponse d'un neurone (représentant la valeur interne du neurone) à un événement d'entrée, un seuil et des poids de connexion (encore appelés « poids synaptiques » ou « coefficients de convolution »). 25 Le modèle du neurone est défini par une fonction algébrique non linéaire. Cette fonction peut prendre en argument la valeur de l'intégration (représentant la valeur interne à un neurone) mais aussi, selon les modèles, le temps ou la sortie d'un compteur interne. Telle qu'utilisée ici, l'expression « intégration » désigne l'intégrale selon le temps des trains d'impulsions (« spike » en langue anglo-saxone) pondérées en entrée du neurone (i.e. intégrale 30 temporelle d'un train d'impulsions pondérées (peigne de Dirac par exemple)). Cette intégration peut être remise à zéro lorsque le neurone se déclenche (i.e. produit une impulsion en sortie). Un neurone réalise dans un premier temps l'intégrale des impulsions pondérées (avec fuite 35 selon le modèle). Les impulsions peuvent être unitaires de valeur 1 ou -1 (la valeur « -1 » n'est pas toujours utilisé). Les pondérations viennent du filtre. La valeur résultant de 3050855 10 l'intégration est notée I : g(I). Classiquement, g peut prendre la forme d'une fonction sigmoïde, comme par exemple la fonction tangente hyperbolique. Une couche de convolution peut contenir un ou plusieurs noyaux de convolution qui ont 5 chacun une matrice d'entrée, qui peut être la même, mais qui ont des coefficients différents correspondant à des filtres différents. Chaque noyau de convolution dans une couche produit une carte de sortie différente de sorte que les neurones de sortie sont différents pour chaque noyau. Les réseaux 10 convolutionnels peuvent également inclure des couches de "pooling" locales ou globales qui combinent les sorties de groupe de neurones d'une ou plusieurs cartes de sortie. La combinaison des sorties peut consister par exemple à prendre la valeur maximale ou moyenne des sorties du groupe de neurones, pour la sortie correspondante, sur la carte de sortie de la couche de « pooling ». Les couches de « pooling » permettent de réduire la taille 15 des cartes de sorties d'une couche à l'autre dans le réseau, tout en améliorant ses performances en le rendant plus tolérant à de petites déformations ou translations dans les données d'entrée. Les réseaux convolutionnels peuvent également inclure des couches complètement 20 connectés de type perceptron. La Figure 1 représente un exemple de réseau convolutionnel incluant des couches de regroupement (« pooling »), pour la classification d'images. Les images en bas de la figure 1 représentent un extrait des noyaux de convolution de la première couche, après un 25 apprentissage de type rétro-propagation du gradient, sur une base d'images telle que ImageNet. Comme illustré sur la figure 2, une couche de convolution ou de « pooling » peut être constituée d'une ou plusieurs matrices de sortie 14 (encore appelées « cartes de sortie » ou « output feature map » en langue anglo-saxonne), chaque carte de sortie pouvant être 30 connectée à une ou plusieurs matrices d'entrée 11 (encore appelées « cartes d'entrée »). Comme illustré sur la figure 3, une matrice de sortie notée 0 comprend des coefficients 01,j, et a une taille notée (Oh, Ow). Cette matrice correspond à une matrice de neurones et les coefficients 01,j correspondent aux valeurs de sortie de ces neurones, calculée à partir des entrées et des poids synaptiques. 3050855 11 Une matrice ou carte d'entrée 11 peut correspondre à une carte de sortie d'une couche précédente ou à une matrice d'entrée du réseau qui reçoit des stimuli ou une partie des stimuli à traiter. Un réseau peut être constitué d'une ou plusieurs matrices d'entrée 11. Il peut s'agir par exemple des composantes RGB, HSV, YUV ou de toute autre composante 5 classique d'une image, avec une matrice par composante. Une matrice d'entrée notée I comprend des coefficients kj et a une taille notée (Ih,/w). Une carte de sortie 0 peut être connectée à une matrice d'entrée I par une opération de convolution, via un noyau de convolution 12 noté K (le noyau de convolution est encore appelé filtre, ou matrice de convolution), de taille (n, m) et comprenant des coefficients Km. 10 Chaque neurone de la carte de sortie 14 est connecté à une partie de la matrice d'entrée 11, cette partie étant encore appelée « sous-matrice d'entrée » ou « champ récepteur du neurone » et étant de même taille que la matrice de convolution K. La matrice de convolution K comprenant les poids synaptiques est commune pour l'ensemble des neurones de la carte de sortie 0 (les poids de la matrice K sont alors dits « poids partagés). Chaque coefficient de 15 sortie de la matrice de sortie Ckj satisfait alors la formule suivante : min (n-1,1h-i.si) min (m-1,4,-j.sj) = g Kk,1 k=0 1=0 Dans la formule ci-dessus, g() désigne la fonction d'activation du neurone, tandis que si et sj désignent les paramètres de décalage (« stride » en langue anglo-saxone) vertical et horizontal respectivement. Un tel décalage « stride » correspond au décalage entre chaque application du noyau de convolution sur la matrice d'entrée. Par exemple, si le décalage est 20 supérieur ou égal à la taille du noyau, alors il n'y a pas de chevauchement entre chaque application du noyau. Une carte de sortie 0 est connectée à une matrice d'entrée I par une opération de « pooling » qui réalise un sous-échantillonnage de la matrice d'entrée, ce qui fournit une matrice sous-échantillonnée. Le sous-échantillonnage peut être de deux types : 25 - Un type de sous-échantillonnage dit « MAX pooling » (regroupement maximal) selon l'équation ci-dessous: 0i, - = g (maxkmin0 (n-1,1h-i.si) maxImin .) - Un type d'échantillonnage dit « AVERAGE pooling » (regroupement moyen) selon l'équation ci-dessous : 3050855 12 min (n-1,1h-i.si) min (m-1,/w-j.si) )-11.Si+k,j.Si +1 k=0 1=0 01,j = g (n.1m Les poids synaptiques associés aux connexions dans le cas d'une couche de « pooling » sont généralement unitaires et n'apparaissent donc pas dans les formules ci-dessus. Une couche complètement connectée comprend un ensemble de neurones, chaque neurone étant connecté à toutes les entrées de la couche. Chaque neurone Oj dispose de ses 5 propres poids synaptiques Wi,j avec les entrées Ii correspondantes et effectue la somme pondérée des coefficients d'entrée avec les poids qui est ensuite passée à la fonction d'activation du neurone pour obtenir la sortie du neurone. Oj = g (Ili. Wii) La fonction d'activation des neurones g() est généralement une fonction sigmoïde, comme par exemple la fonction tanhQ. Pour les couches de « pooling », la fonction d'activation peut 10 être par exemple la fonction Identité. Les poids synaptiques peuvent être déterminés par apprentissage. L'apprentissage d'un réseau de neurones consiste à trouver les valeurs optimales des poids synaptiques à partir d'une méthode d'optimisation et d'une base d'apprentissage. Il existe de nombreuses méthodes d'apprentissage tels que la méthode de rétro-propagation du gradient, le principe 15 de base consistant, à partir d'un stimulus en entrée du réseau, à calculer la sortie du réseau, la comparer à la sortie attendue (dans le cas d'un apprentissage dit supervisé) et rétro-propager un signal d'erreur dans le réseau, qui vient modifier les poids synaptiques par une méthode de descente du gradient. Tel qu'utilisée ici, une couche de convolution peut donc être définie comme comprenant une 20 ou plusieurs matrices de sortie 14 comprenant un ensemble de neurones de sortie, chaque matrice de sortie étant connectée à une matrice d'entrée (la matrice d'entrée comprenant un ensemble de neurones d'entrée) par des synapses artificielles associées à une matrice de convolution comprenant les coefficients de poids synaptiques correspondant aux neurones de sortie de la matrice de sortie, la valeur de sortie de chaque neurone de sortie étant 25 déterminée à partir des neurones d'entrée de la matrice d'entrée auxquels le neurone de sortie est connecté et des coefficients de poids synaptiques de la matrice de convolution associée à la matrice de sortie. 3050855 13 Les réseaux de neurones peuvent être transposés en codage impulsionnel comme illustré sur la figure 4. Dans ce cas, les signaux propagés en entrée et en sortie des couches du réseau ne sont plus des valeurs numériques, mais des impulsions électriques (assimilables à des impulsions Dirac). L'information qui était codée dans la valeur des signaux (normalisé 5 entre -1 et 1) est alors codée temporellement avec l'ordre d'arrivée des impulsions (codage par rang, ou « rank order coding ») ou avec la fréquence des impulsions. Dans le cas d'un codage par rang, l'instant d'arrivée de l'impulsion est inversement proportionnel à la valeur absolue du signal à coder. Le signe de l'impulsion détermine alors le signe de la valeur du signal à coder. 10 Dans le cas d'un codage fréquentielle, la fréquence des impulsions, comprise entre frnin et furax, est proportionnelle à la valeur absolue du signal à coder. Le signe de l'impulsion détermine le signe de la valeur du signal à coder. Par exemple, en considérant une matrice d'entrée du réseau correspondant à la composante de luminance d'une image, normalisée entre 0 et 1, un pixel (ou coefficient de la matrice) blanc, codé par une valeur 1, émettra des 15 impulsions à une fréquence furax' un pixel noir, codé par une valeur 0, émettra des impulsions à une fréquence frnin, tandis qu'un pixel gris, codé par une valeur x, émettra des impulsions à une fréquence f= f( min + - xf max !min) - Le codage peut également être pseudo-fréquentiel, par exemple poissonien : dans ce cas fmax et train représentent des fréquences moyennes uniquement. La phase initiale des impulsions peut être aléatoire. 20 Les impulsions peuvent également provenir directement d'un capteur, tel qu'une rétine ou une cochlée artificielle, imitant le fonctionnement de leur équivalent biologique. La figure 5 représente schématiquement un calculateur 100 configuré pour calculer au moins une couche de convolution (encore appelé « calcul neuromorphique ») d'un réseau de 25 neurones convolutionnel comprenant au moins un noyau de convolution 12, le noyau comprenant des coefficients de poids, selon certains modes de réalisation. Selon un aspect de l'invention, le calculateur comprend au moins un module de convolution 20 (encore appelé « bloc de convolution ») configuré pour calculer chaque couche de 30 convolution, chaque couche de convolution étant constituée d'une ou plusieurs cartes de sortie. Le calcul d'une couche de convolution consiste à calculer la valeur interne (encore appelée « valeur d'intégration ») des neurones qui ont reçu un événement d'entrée (tel qu'une 3050855 14 impulsion). Lorsque cette valeur d'intégration dépasse un seuil prédéfini, les neurones sont « déclenchés » ou « activés » et émettent un évènement (impulsion) en sortie. Le calcul d'une couche de convolution consiste ainsi à déterminer la réponse des neurones de la couche de convolution à un événement d'entrée. 5 Les modules de calcul de convolution 2 peuvent être interconnectés par un système d'interconnexion 101. Dans un mode de réalisation, les modules de calcul de convolution 2 peuvent être interconnectés en utilisant un système de réseaux sur puce (NOC). Un réseau sur puce permet de rediriger les événements entre les modules et/ou les entrées/sorties. Le 10 réseau assure la connexion entre les différentes couches du réseau de neurones 10. Dans certains modes de réalisation, le réseau sur puce peut implémenter en complément une fonction de gestion des priorités et de synchronisation des événements d'entrée. La suite de la description sera faite en référence à un système d'interconnexion de type 15 réseau sur puce à titre d'exemple non limitatif. L'homme du métier comprendra cependant aisément que d'autres systèmes d'interconnexion peuvent être utilisés tels que par exemple des systèmes d'interconnexions programmables (e.g. de type FPGA), des systèmes d'interconnexions à routage fixe, etc. Chaque module de calcul de convolution effectue une opération de convolution sur une ou une partie d'une couche du réseau. 20 Chaque module de convolution 2 peut être utilisé pour calculer une couche de convolution différente associée à un noyau de convolution (« filtre »). Cependant, chaque module de convolution 2 peut être utilisé pour réaliser plusieurs filtres dans une couche de convolution donnée. Dans certains modes de réalisation, lorsqu'un module de convolution 2 ne suffit pas 25 pour calculer une couche de convolution donnée, plusieurs modules de convolution peuvent être utilisés pour calculer cette couche de convolution. Chaque module de convolution 2 comprend un ensemble d'unités de calcul 200 (encore appelées « unité de calcul élémentaires »), tels que des processeurs ou des sous-30 calculateurs. Pour l'événement d'entrée de la couche de convolution (définissant le point d'application du noyau de convolution 12), le module est configuré pour mettre en correspondance les coefficients du noyau de convolution 12 avec certaines au moins des unités de calculs 200 35 en parallèle, le nombre d'unités de calcul étant indépendant du nombre de neurones de la couche de convolution. 3050855 15 Pour chaque événement d'entrée, chaque unité de calcul 200 est associée à un coefficient de poids du noyau de convolution. En particulier, le nombre d'unités de calcul peut être au moins égal au nombre de coefficients du noyau de convolution (taille du noyau de convolution). 5 Chaque unité de calcul peut calculer la valeur d'un ensemble de neurones indépendants déclenchés par des événements d'entrée, en fonction du coefficient de poids associé à l'unité de calcul pour chaque événement d'entrée. 10 Dans un mode de réalisation de réseau de neurones à impulsions, l'événement d'entrée est représenté par une impulsion arrivant sur le réseau. Un réseau de neurones à impulsions peut recevoir dans le temps un train d'impulsions, chaque impulsion pouvant déclencher un ou plusieurs neurones. 15 L'événement d'entrée peut alors être défini par une adresse d'entrée sur la couche de convolution. La suite de la description sera faite en référence à un réseau de neurones convolutionnel à impulsions pour faciliter la compréhension de l'invention. Telle qu'utilisée ici, « l'adresse d'entrée » d'une impulsion représente l'adresse de l'impulsion 20 émise par la couche précédente (impulsions d'entrée) et reçue par la couche considérée. Dans le système, les impulsions peuvent être transmises par un bus série. Les impulsions propagent donc avec elles au moins leur adresse d'émission. Lorsqu'une impulsion (définie par une adresse d'entrée) arrive sur une couche de 25 convolution, la connexion entre les neurones de sortie et les neurones d'entrée sur la carte d'entrée fait que cette impulsion n'est pas reçue par tous les neurones de cette couche. Ainsi, pour une impulsion entrante donnée, il existe des neurones qui ne peuvent pas recevoir cette impulsion, en même temps. De tels neurones sont dits indépendants. De plus, le nombre de neurones recevant une même impulsion en même temps est au plus égal à la 30 taille du filtre de convolution associé à la couche de convolution. Ces deux propriétés sont dues à la topologie des réseaux convolutionnels. Selon une caractéristique de l'invention, pour effectuer le calcul de la réponse d'une couche de convolution donnée à une impulsion en entrée (événement d'entrée), au moins N unités 35 de calcul élémentaires 200 peuvent être utilisées parallèlement et leurs fonctionnements peuvent êtres séquentielles (le nombre N représentant le nombre d'éléments dans le filtre de 3050855 16 convolution maximal pouvant être traité), les unités de calcul étant associées à des neurones indépendants travaillant en parallèle. Chaque module de calcul 200 forme ainsi un coeur de calcul. Chaque coeur de calcul peut 5 être utilisé pour calculer une ou plusieurs opérations de convolutions sur une ou plusieurs parties d'une couche de convolution 4 du réseau de convolution 10 avec une complexité 0(1), c'est-à-dire que le temps de calcul est indépendant des données à traiter (le calculateur est dit constant en temps). 10 Dans certaines applications de l'invention, le calculateur 100 peut être un calculateur multi- coeur à mémoires distribuées, chaque coeur pouvant être interconnecté par le système d'interconnexion 101. Les différentes couches de convolution 4 du réseau de neurones convolutionnel 10 peuvent 15 être distribuées sur les différents modules de calcul 20. En variante, les couches de convolution 4 peuvent être associées à un même module 20 en utilisant des décalages (« offsets ») en z et L et une boucle allant du module de convolution 20 vers lui-même. Pour calculer la réponse des neurones déclenchés (valeur interne d'un neurone), chaque 20 unité de calcul 200 utilise un modèle computationnel de neurones choisi. Le modèle du neurone peut être défini lors de la programmation du système. Dans certains modes de réalisation, il peut être identique pour tous les neurones d'une couche. Une unité de calcul élémentaire donnée 200 peut être associée avantageusement à 25 plusieurs neurones indépendants (i.e. un seul des neurones indépendants associé à une unité de calcul donné se déclenche pour une impulsion d'entrée donnée). Chaque unité de calcul de données élémentaire 200 est configurée pour générer une valeur de sortie représentant la valeur en sortie de chaque neurone indépendant qui lui est associé. La valeur de sortie résulte de l'intégration des valeurs d'entrée reçues par le neurone dans le 30 temps pondérées chacune par un coefficient de poids du noyau de convolution. Cette intégration temporelle est déterminée en utilisant la fonction algébrique (encore appelée « fonction d'activation » ou « fonction de transition ») qui dépend du modèle computationnel de neurone. 35 Les éléments constituant la matrice d'entrée et les cartes de sortie du réseau de neurones peuvent être des nombres, entiers ou décimaux, à virgule fixe ou flottante. Dans un réseau de neurones peut être « impulsionnel », les valeurs d'entrée et de sortie étant codées avec 3050855 17 des impulsions. Une valeur d'entrée ou de sortie peut ainsi être codée par le nombre d'impulsions durant une fenêtre de temps fixée (codage fréquentiel), ou par l'instant d'émission d'une impulsion selon une technique de codage d'ordre de rang. Dans les formes de réalisations de réseau de neurones impulsionnel avec codage fréquentiel, le calcul de la 5 somme pondérée h se fait par accumulation du coefficient du noyau de convolution 14 à chaque arrivée d'une impulsion sur l'entrée correspondante. La fonction d'activation du neurone g peut dans ce cas être remplacée par un seuil. Lorsque la valeur absolue de h dépasse le seuil suite à l'arrivée d'une impulsion sur la sous-matrice d'entrée, le neurone de sortie émet une impulsion du signe de h et remet la somme pondérée h à la valeur O. Le 10 neurone entre alors dans une période dite « réfractaire » durant laquelle il ne peut plus émettre d'impulsion durant une période fixée. Les impulsions peuvent par conséquent être positives ou négatives, selon le signe de h au moment du dépassement du seuil. Une impulsion négative en entrée inverse le signe du coefficient du noyau correspondant pour l'accumulation. 15 Les modèles computationnels de neurones impulsionnels définissent le calcul de l'intégration temporelle de l'information. La réponse d'un neurone à une stimulation est le temps d'émission de la prochaine impulsion. Une impulsion est émise au moment où l'excitation du neurone dépasse le seuil. Une horloge virtuelle peut être utilisée pour temporiser les 20 émissions d'impulsions sur les neurones, les impulsions pouvant alors être considérées comme des événements datés. Il existe plusieurs types de modèles de neurone impulsionnel comme par exemple : Le modèle de Hodgkin & Huxley (HH), qui est défini par quatre équations différentielles inter-dépendantes, qui décrit la dynamique temporelle du neurone par 25 les variations de concentrations ioniques (K+, Ca2+) dans différents compartiments et reproduit les principaux "modes" de fonctionnement du neurone biologique. Le modèle Integrate & Fire (IF) qui est décrit par une équation différentielle unique et qui modélise le circuit intégré sous la forme d'un circuit électrique comprenant un condensateur et une résistance électrique (dipôle RC). Dans ce modèle, la 30 dynamique du neurone est décrite par son potentiel de membrane et par l'intensité qui le traverse. Des modèles liés au modèle IF tels que le modèle Leaky Integrate & Fire (LIF) ou le modèle Quadratic Integrate&Fire (01F), le modèle à conductance Integrate & Fire (gIF) ; 35 Le modèle Spike Response Model (SRM) qui est basé sur le comportement du neurone (modélisation phénoménologique du neurone) ; ce modèle comprend une 3050855 18 fonction noyau fournissant la dynamique du potentiel de membrane du neurone et une fonction calculant la sommation des potentiels post-synaptiques ; Le modèle d'Izhikevich (lzhikevich, 2003) qui utilise deux équations différentielles couplées pour modéliser les flux d'ions et les dynamiques de potentiel du neurone. 5 La figure 6 représente un exemple d'architecture d'un module de calcul 20, dans un mode de réalisation basé sur une architecture de réseau de neurones impulsionnel, comprenant 4 unités de calcul 200 à impulsion (« Spike Processing Element » en langue anglo-saxonne ou SPE) pour générer les événements de sortie en fonction d'un modèle de neurones. 10 Selon un aspect de l'invention, chaque module de convolution 20 comprend au moins une mémoire de coefficients de poids 201 pour stocker les coefficients de poids d'au moins un noyau de convolution, la mémoire de coefficients de poids étant accessible en parallèle par lesdites unités de calcul. La mémoire de coefficients de poids 201 peut être utilisée pour 15 stocker des informations sur l'adresse de sortie, telle que « Zout », qui seront distribuées aux unités de calcul 200 dans la phase de calcul. Ces données ne passent pas par le routeur Les unités de calcul 200 peuvent ainsi lire la mémoire 201 en parallèle. Cependant, dans certains modes de réalisation, une même donnée de la mémoire 201 ne peut pas être 20 utilisée en même temps par les différentes unités de calcul. La mémoire 201 des coefficients de poids peut être modifiée lors de la programmation du système. Chaque module de convolution 20 peut comprendre en outre une unité de routage 202 configurée pour distribuer les coefficients de poids de la mémoire 201 aux unités de calcul 25 200 au moyen d'un bus de données comprenant un ensemble de lignes portant les coefficients de poids. Chaque module de convolution 20 est configuré pour calculer les adresses des coefficients de poids dans le bus de données 7 à affecter aux unités de calcul (200) en fonction de 30 l'événement d'entrée et des données du réseau (qui peuvent être programmées au démarrage). Les coefficients de poids reçus sont alors utilisés par les unités de calcul 200 pour calculer les valeurs internes des neurones (valeur d'intégration). L'unité de routage utilise ces adresses de coefficients de poids Aw pour distribuer les coefficients de poids de la mémoire 201 aux unités de calcul 200. 35 En réponse à l'émission d'un événement sous la forme d'une impulsion électrique encore appelée « potentiel d'action » (« spike » en langue anglo-saxonne) par un neurone d'entrée 3050855 19 (neurone pré-synaptique), l'impulsion traverse les synapses, ce qui induit une impulsion sur un nombre fini de neurones post-synaptiques qui sont alors sollicités (ce nombre est égal au maximum au nombre d'éléments dans le filtre de la convolution), comme illustré sur la figure 7. Une telle propriété implique l'existence de neurones indépendants dans une couche du 5 réseau de neurones 10 soumise à une impulsion (deux neurones sont dits indépendants si, pour un événement d'entrée donnée, ils ne peuvent pas se déclencher en même temps). Chaque module de convolution 20 peut comprendre au moins une mémoire de valeurs de neurones 2002 pour stocker les valeurs internes (ou « valeurs d'intégration ») des neurones 10 calculées par les unités de calcul 200. La ou les mémoires des valeurs d'intégration 2002 peuvent être agencées à l'extérieur des unités de calcul 200. En variante, chaque unité de calcul peut comprendre une mémoire de valeur d'intégration interne 2002 comme représenté dans l'exemple de la figure 6. 15 Selon un mode de réalisation, chaque module de convolution peut être configuré pour calculer, pour chaque événement d'entrée et pour chaque unité de calcul 200, une adresse possible de stockage des valeurs internes de neurones calculées par l'unité de calcul dans la mémoire de valeurs d'intégration 2002 à partir de l'événement d'entrée et d'au moins un paramètre de la couche de convolution à traiter. 20 Chaque unité de calcul 200 peut alors sélectionner cette adresse pour stocker les valeurs internes des neurones calculées par l'unité de calcul. Selon certains modes de réalisation, chaque module de calcul 20 peut être configuré pour 25 mutualiser certaines fonctions pour des groupes de neurones indépendants d'une même couche en utilisant notamment un pré-calculateur 203 pour effectuer les calculs de grandeurs utilisables en commun par les unités de calcul 200. Dans certains modes de réalisation, le pré-calculateur peut mutualiser le calcul des adresses 30 des coefficients de poids, dans le bus 7, à affecter aux unités de calcul 200 et/ou le calcul de l'adresse de stockage des valeurs internes des neurones dans la mémoire de valeurs d'intégration 2002. Il en résulte une topologie des modules de calcul 20 qui permet de minimiser la surface du 35 calculateur 100. Dans une couche de convolution donnée, les neurones partagent les mêmes coefficients de poids (valeurs du filtre de convolution). Dans chaque module de calcul 20, la mémoire des coefficients de poids 201 est distribuée parallèlement aux unités 3050855 20 de calculs 200 (SPE) en fonction des événements d'entrées. Ainsi, la mémoire des coefficients de poids 201 n'est pas redondante. Une telle répartition de la mémoire permet d'optimiser l'espace mémoire. 5 Dans un mode de réalisation, chaque module de calcul 20 peut comprendre au minimum un nombre N d'unités de calcul 200 (SPE). Le nombre N étant d'unités de calcul 200 peut être le nombre maximal d'éléments de la convolution qui correspond au nombre de cellules mémoire. Par exemple, pour une convolution de taille maximale de 11x11, le nombre minimal d'unités de calcul 200 est égal à 121. 10 Chaque module de calcul 20 peut comprendre une fonction d'entrée 204 formant une unité de communication pour implémenter la logique de communication, comme par exemple le protocole AER, UART, ou RS232. 15 Chaque module de calcul 20 peut comprendre en outre : - Une unité de gestion des sorties 206 (PE) configurée pour gérer la concurrence sur les événements de sortie des différentes unités de calcul élémentaires 200 ; et/ou - Un Post-calculateur 207 configuré pour réaliser une convolution à pas variable (« stride » en langue anglo-saxone) ; et/ou 20 -Un Contrôleur 205 configuré pour contrôler le déroulement des tâches dans le module de calcul et notamment pour contrôler la concurrence sur un évènement de sortie. Le post-calculateur 207 est configuré pour sélectionner les événements de sortie qui seront envoyés en sortie de l'unité de calcul 200 en fonction d'une ou plusieurs opérations sur 25 l'événement de sortie. Chaque module de calcul 20 peut notamment comprendre un système de communication d'entrée/sortie (204 et 208). 30 La figure 8 représente la structure d'une unité de calcul 200 selon certains modes de réalisation. Les signaux propagés en entrée 2000 et en sortie 2004 des couches du réseau peuvent être des valeurs numériques (cas de réseau de neurones non-impulsionnel) notamment 35 normalisées entre -1 et 1. En variante, dans les formes de réalisation utilisant un réseau de neurones impulsionnel comme représenté sur la figure 8, les signaux propagés en entrée 2000 et en sortie 2004 des couches du réseau peuvent être des impulsions électriques. 3050855 21 L'information est ainsi codée temporellement selon l'ordre d'arrivée des impulsions ou la fréquence des impulsions. Chaque unité de calcul 200 est associée à un ou plusieurs neurones indépendants qui 5 partagent l'Unité Logique de calcul ALU 2003 (acronyme pour « Arithmetic Logic Unit ») du modèle de neurone configurée pour calculer l'activation de chaque neurone, une mémoire 2002 partagée par les neurones pour stocker la valeur d'intégration I(i) calculée pour chaque neurone indépendant et une fonction de calcul d'adresse d'intégration 2001 configurée pour déterminer l'adresse de stockage des valeurs d'intégration dans la mémoire 2002. 10 L'association entre les neurones du réseau et les unités de calcul 200 est effectuée au moyen d'un calcul d'adresse d'intégration et d'adresse de coefficient de poids. Dans les formes de réalisation utilisant un réseau de neurones impulsionnel, comme dans l'exemple de la figure 8, chaque neurone i dispose d'une place unique 2002 dans la mémoire 15 interne pour stocker ses valeurs d'intégrations /(i) (une valeur d'intégration ou valeur d'intégration temporelle /(i) désigne l'intégration des impulsions provenant des mêmes entrées pondérées par les poids synaptiques dans le temps. Lorsque les impulsions sont identiques en valeur absolue (leur signe pouvant différer), leur intégrale peut être considérée comme unitaire ou normalisée. Dans l'exemple de la figure 8, l'unité de calcul 200 comprend 20 4 intégrations I(1), 1(2), 1(3), I(4) . La mémoire 2002 peut être partagée par des neurones indépendants. Elle peut donc être lue séquentiellement sans rompre le parallélisme spatial. Dans certains modes de réalisation, la mémoire 2002 peut-être externalisée et partagée entre plusieurs unités de calcul 200. 25 L'homme de métier notera que dans certains modes de réalisation, chaque module de convolution 20 peut comprendre au moins une mémoire de valeurs internes de neurones 2002 agencée(s) à l'extérieur des unités de calcul 200 pour stocker les valeurs internes des neurones calculées par les unités de calcul 200. 30 L'adresse de destination peut comporter trois composantes X, Y et Z selon le format de représentation choisi pour coder les impulsions. Par exemple, les impulsions transitant entre les couches du réseau de neurones 10 peuvent être codées au format AER (« AddressEvent Representation » signifiant représentation par événement d'adresse). Dans un tel 35 format, chaque impulsion est numérique et est constituée d'un train de bits codant l'adresse (X, Y) de destination de l'impulsion suivant deux axes perpendiculaires X et Y, le repère (X, Y) correspondant au repère de la matrice d'entrée, ainsi que le signe de l'impulsion. 3050855 22 Lorsqu'une impulsion arrive sur la matrice d'entrée, l'adresse (X, Y) codée représente l'emplacement du neurone d'entrée à activer. Ainsi, lorsqu'une impulsion arrive sur la matrice d'entrée, son adresse (X, Y) donne l'emplacement à activer avec X -> j et Y -> i. 5 Dans certains modes de réalisation, l'adresse peut comporter en outre des composantes Z et L (L désigne une composante de couche ou « Layers »). Dans de tels modes de réalisation, les composantes Z et L peuvent être utilisées pour créer des décalages (« offset ») en mémoire I et W. La mémoire des pondérations comporte alors plusieurs lignes adressées par @W. La composante L peut aussi être utilisée pour changer 10 dynamiquement la configuration d'un module. En considérant un repère spatial bidimensionnel (X, Y), les définitions suivantes sont fournies : Le paramètre Ceimx désigne le nombre d'éléments de la matrice de convolution selon 15 l'axe X; Le paramètre Cebny désigne le nombre d'éléments de la matrice de convolution selon l'axe Y; Le paramètre Oeimx désigne le nombre d'éléments de la carte de sortie selon l'axe X ; Le paramètre Oeimx désigne le nombre d'éléments de la carte de sortie selon l'axe Y ; 20 Le paramètre /eimx désigne le nombre d'éléments de la carte d'entrée I selon l'axe X ; Le paramètre Iebny désigne le nombre d'éléments de la carte d'entrée selon l'axe Y ; Le paramètre ix désigne la coordonnée de l'impulsion d'entrée selon l'axe X sur la carte d'entrée ; Le paramètre iy désigne la coordonnée de l'impulsion d'entrée, selon l'axe Y sur la 25 carte d'entrée ; Le paramètre or désigne la coordonnée de l'impulsion de sortie selon l'axe X sur la carte de sortie ; Le paramètreOeimx désigne le nombre d'éléments de la carte de sortie en X et est donné par : Oeimx = K, x Celmx ; 30 Le paramètre oy désigne la coordonnée de l'impulsion de sortie selon l'axe Y sur la carte de sortie ; Le nombre Oebny désigne le nombre d'éléments de la carte de sortie en Y et est donné par : Oebny = Ky X Cebny ; SPE, désigne la coordonnée selon l'axe X d'une unité de calcul SPE (200); 35 SPEy désigne la coordonnée selon l'axe Y d'une unité de calcul SPE (200); sr désigne une coordonnée intermédiaire entre or et SPE, ; 3050855 23 sy désigne une coordonnée intermédiaire entre oy et SPEy ; Al désigne l'adresse de l'intégration en fonction de ox et oy ; Aw désigne l'adresse du coefficient de poids en fonction de s, et sy ; SPE désigne l'adresse d'une unité de calcul SPE en fonction de 0, et oy ; 5 OUT désigne l'adresse de l'impulsion en sortie en fonction de ox et oy. Il convient de noter que l'adresse d'une unité de calcul SPE en fonction de ox et oy satisfait : SPE (0,, oy) = ((oy mod Ceiniy),(oxmod Ceimx)) (1) 10 La figure 9 illustre un exemple de réalisation pour une convolution 3x3 sur une image 5x5, montrant les coordonnées d'entrée (i,, iy), et de sortie (0,, oy), ainsi que deux unité de calcul définie par leurs adresses respectives SPE(0,0) et SPE(1,0). Sur la figure 9, l'unité de calcul définie par SPE(0,0) est associée à 2 neurones. De même, 15 l'unité de calcul définie par SPE(1,0) est associée à 2 neurones. L'ALU 2003 peut être configuré pour déterminer si la valeur absolue de l'intégration totale du neurone g(h) = f(1(0) considérée est supérieure à une valeur de seuillage (encore appelée « seuil ») prédéfinie. Si la valeur absolue de l'intégration dépasse le seuil par la 20 valeur de l'intégration du neurone (valeur interne d'un neurone impulsionnel), le neurone considéré est configuré pour émettre une impulsion en sortie 2004 qui sera propagée vers les neurones des couches suivantes connectés à ce neurone. Le signe de cette impulsion correspond au signe de l'intégration du neurone. Lorsque le neurone émet une impulsion, son intégration /(i) est remise à 0 et le neurone entre dans une période dite « réfractaire », 25 c'est-à-dire qu'il ne peut pas émettre de nouvelle impulsion en sortie, jusqu'à la fin de la période réfractaire. La période réfractaire peut être égale à la période minimale des impulsions se propageant dans le réseau. La fonction d'adressage 2001 est configurée pour garantir que les coordonnées sur la carte 30 de sortie des neurones d'une même unité de calcul 200 soient séparées d'une distance D égale au minimum de la taille de la convolution traitée en X et en Y. Par conséquent, les neurones d'une même unité de calcul ne peuvent pas se déclencher simultanément. La figure 10 illustre la condition d'indépendance des neurones pour une convolution de 35 dimension 3x3. Sur la figure 10, les 2 neurones 140 et 141 font partie d'une même unité de calcul 200 tandis que le neurone 143 se situe dans une unité de calcul différente. 3050855 24 Les neurones sont ainsi répartis dans les unités de calcul 200 en fonction de leur position sur la matrice de sortie 14 pour que chaque unité de calcul 200 ne contienne que des neurones indépendants. Ainsi les coordonnées des neurones contenus dans une unité de calcul 200 5 sont séparées sur la matrice de sortie au minimum d'une distance D égale à la taille de la convolution à traiter. Une telle division de l'espace est représentée par l'équation ci-dessous : SPE(ox, oy) = ((oy mod C (ox mod Ceinix)) (1) 10 Dans l'équation (1), SPE (ox, oy) désigne l'unité de calcul 200 associée au neurone de sortie de coordonnées de sortie (ox,oy). Par ailleurs, selon certains modes de réalisation, le calculateur 100 peut être configuré pour 15 éviter que les intégrations IL des neurones dans une même unité de calcul 200 ne soient confondues. Ainsi, le calculateur peut être configuré pour éviter que deux coordonnées différentes sur la matrice de sortie selon un axe considéré (X ou Y) correspondent à une même unité de calcul 200 et à une même intégration IL . La fonction d'adressage 2001 notée Al est donc configurée pour satisfaire : 20 y I Ox Al (or, oy) (1 [CeOny-1' C etmx1) Dans les équations utilisées dans la présente description, la notation [A] désigne la partie entière de A. Sur la figure 11, le diagramme A illustre la répartition des neurones sur la matrice de sortie 25 14 (valeur de la fonction SPE()), selon un exemple de réalisation, pour : -un nombre Ceinix d'éléments de la matrice de convolution en X et un nombre Cebny d'éléments de la matrice de convolution en Y égaux à 3 (Ceinix =Ce/mY=3) ; -un nombre 0 eimx d'éléments de la carte de sortie en X et un nombre 0 ebny d'éléments de la carte de sortie en Y égaux à 6 (0 eimx =0 elmY=6)- 30 Le diagramme B de la figure 11 illustre la répartition des valeurs des intégrations sur la matrice de sortie 14, selon un exemple de réalisation, pour les mêmes valeurs de paramètres C - elmX5 Celm175 elmX et 0 ebny que la figure 10 (Ceimx C = ebny =3 et 0 eunx elmY=6)- 35 3050855 25 La figure 12 est un organigramme représentant les étapes mises en oeuvre par chaque module de calcul pour calculer au moins une couche de convolution du réseau de neurones convolutionnel, selon un mode de réalisation utilisant un réseau de neurones impulsionnel. 5 Les relations entre les entrées et les sorties de la convolution comprennent : fix - sx = ox (3) (iy - .s3, = oy ÇSx = (ix - SP E x) modCeimx sy = (iy - SPE y) modCeimy Aw (sy, sx) = (sy, sx) (5) 10 OUT(oy, ox) = (0y, ox) (6) A l'étape 500, les coordonnées ix et iy d'un neurone déclenché sur la carte d'entrée sont reçues. 15 Aux étapes 502, 503 et 504, les adresses de coefficient de poids Aw , les adresses possibles des valeurs d'intégrations Al et les adresses de sortie OUT sont déterminées. Le procédé de calcul de couche de convolution s'appuie sur une reformulation des équations ci-dessus en fonction des unités de calcul SPE (200) et des coordonnées d'entrées ix et iy pour déterminer les adresses Aw , Al et OUT. 20 Les adresses des coefficients de poids Aw , déterminées à l'étape 502, représentent les adresses des coefficient de poids dans le bus de données 7, portant les coefficients de poids de la mémoire 201 en entrée de l'unité de routage 202, qui sont à affecter aux unités de calcul (200) en fonction de l'événement d'entrée, l'unité de routage 202 utilisant ces 25 adresses de coefficients de poids Aw pour distribuer les coefficients de poids de la mémoire 201 aux unités de calcul. Dans un mode de réalisation, les adresses de coefficients de poids peuvent être déterminées par le pré-calculateur 203 externe aux unités de calcul. Les adresses de coefficients de poids Aw peuvent être déterminées à partir des coordonnées du neurone déclenché sur la carte d'entrée ix et iy, et des paramètres de la couche de 30 convolution (taille de la matrice de convolution et/ou taille de la matrice de sortie). (4) 3050855 26 Les adresses possibles des valeurs d'intégration A1, déterminées à l'étape 503, représentent un ensemble d'adresses possibles de stockage des valeurs internes de neurones calculées par l'unité de calcul dans la mémoire de valeurs de neurones 2002 à partir de l'événement 5 d'entrée et d'au moins un paramètre de la couche de convolution à traiter (taille de la matrice de convolution et/ou taille de la matrice de sortie). Chaque unité de calcul 200 peut ensuite sélectionner une adresse parmi cet ensemble d'adresses possibles pour stocker les valeurs internes des neurones calculées par l'unité de calcul 200. En particulier, l'événement d'entrée étant défini par une adresse d'entrée (i,, iy) dans le repère choisi (X,Y) comprenant 10 les coordonnées de l'événement d'entrée sur la carte d'entrée. Chaque unité de calcul étant par ailleurs associée à des coordonnées (SPEr, SPEy) dans le repère qui correspondent aux coordonnées du coefficient de poids associé à la matrice de convolution dans ce même repère, chaque unité de calcul (200) peut sélectionner une adresse parmi l'ensemble d'adresses possibles en fonction des coordonnées de l'unité de calcul (SPEr, SPEy) dans le 15 repère. Les adresses possibles des valeurs d'intégration Al peuvent être déterminées à l'étape 503 par le pré-calculateur 203 qui est externe aux unités de calcul 200. 20 A l'étape 504, l'adresse de sortie OUT représente l'adresse de sortie sur la carte de sortie 14 des neurones déclenchés. Elle peut être déterminée par une unité de sortie 2004 prévue dans chaque unité de calcul configurée. L'adresse de sortie OUT peut alors être communiquée aux autres modules de calcul 20 du calculateur. 25 A l'étape 506, la convolution est calculée pour le neurone d'entrée considéré par les unités de traitement. Chaque unité de calcul 200 peut calculer la valeur interne de chaque neurone déclenché par l'événement d'entrée en utilisant les coefficients des poids distribués par l'unité de routage 202 en fonction des adresses de coefficients de poids A. . La valeur interne calculée par chaque unité de calcul 200 est stockée dans l'adresse de valeur 30 d'intégration sélectionnée par l'unité de calcul à partir de l'ensemble d'adresse de valeur d'intégration possible A1. Dans chaque unité de calcul 200, l'unité logique de calcul 2003 peut alors calculer la valeur de sortie d'un neurone en appliquant la fonction associée au modèle computationnel de neurone. 35 Dans un réseau de neurones convolutionnel à impulsions où les valeurs d'entrée et les valeurs de sortie de chaque neurone sont codées par des impulsions, la valeur interne d'un 3050855 27 neurone calculée par chaque unité de calcul est l'intégrale temporelle des valeurs d'entrées reçues par le neurone, chaque valeur d'entrée étant pondérée par le coefficient de poids associé à l'unité de calcul pour chaque valeur d'entrée du neurone. 5 Dans un mode de réalisation, l'étape de détermination de l'adresse de coefficient de poids Aw (étape 502 de la figure 12) peut être mise en oeuvre comme détaillé si après. Lorsqu'une impulsion est reçue par le calculateur, l'adresse du coefficient de poids Aw que doit lire chaque unité de calcul 200 est déterminée. Elle représente l'adresse du coefficient 10 de poids dans le bus de données 7. L'adresse de coefficient de poids ainsi déterminée pourra être utilisée par l'unité de routage 202 pour distribuer le coefficient de poids applicable à chaque unité de calcul 200. Le coefficient de poids reçu par chaque unité de calcul 200 sera utilisé par l'unité de calcul pour mettre à jour la valeur interne des neurones. 15 Pour chaque unité de calcul SPE (200), l'adresse de coefficient de poids Aw peut être déterminée en fonction des coordonnées de l'unité de calcul dans le repère choisi (SPE,; SPEy) et en fonction des coordonnées du neurone d'entrée sur la carte d'entrée (i,; iy). Dans un mode de réalisation, des coordonnées intermédiaires s, (respectivement sy) entre 20 la coordonnée correspondante de sortie ox sur la carte de sortie (respectivement oy) et la coordonnée correspondante de l'unité de calcul SPE, (respectivement SPEy) peuvent être tout d'abord déterminés en fonction des coordonnées (SPE,; SPEy) de l'unité de calcul dans le repère choisi, des coordonnées du neurone d'entrée sur la carte d'entrée (i,; iy), et du nombre d'éléments Ceimx (respectivement Ceimy) de la matrice de convolution selon l'axe 25 correspondant X (respectivement Y). Les coordonnées intermédiaires peuvent notamment être déterminées selon les équations suivantes dérivées de l'équation (4) : s, = (i, -SPE,)- Ceimxr y SPE,' { Les coordonnées (SPEx; SPEy) des unités de calcul 200 selon le repère choisi peuvent être prédéfinies avant le démarrage du calculateur 100 ou peuvent être modifiées 30 dynamiquement pendant le fonctionnement du calculateur. L'équation (7) peut être réécrite sous la forme : Cetmx i iy - SPEy -I (7) sy = (iy - SPEy) - C eimy my Cet 3050855 28 Sx = (ix -SPEx) ) C x, - -elmX[ ex { SPEx Ceimx CelmX-1 pn t i "I Sy = (iy - SPEy) - C iy SPEy elmY cil, Ceimy] D'après la définition de la partie fractionnelle d'un élément, il vient: ix SPEx -CelmX Ceimx iy 31 CelmY SPEy Celm» 1 ix I ix .5'13E - - LCelmX] St (CelmX) > (CelmX)q (9.1) Hi _1 ix 1 Si 1- ,SPE31 I-CelmY -I (CelmY) (CelmY) 1 iy 1 1 i iy f SPEx} ix mod CeimxSPEx (10) CelmX VelmX 10 L'adresse du coefficient de poids Aw que doit lire une unité de calcul donnée SPE de coordonnées (SPEx,SPEy) sur le bus de sortie de l'unité de routage 202 peut être déterminée en fonction de (SPEx,SPEy) et (ix,iy) selon les équations suivantes à l'étape 602 : Aw = Wx + CeimxWy Wx - {ix mod Ceimx - SPEx t lx MOd Ceimx - SPEx + Ceimx W fiy mod Cebny - SPEy Y liy mod Cebny - SPEy + Cebny si ix mod Ceimx > SPEx si ix mod Ceimx SPEx ox = (16) ir C SPEx + Cebny, Ceimx Si ix MOdCeimx SPE,, I, = iX ; Ceimx 15 Si i, mod Ceimx SPEx : am ox = SPEx + Ceinix i (19.1). Sinon, si ix mod CelmX ii), le résultat délivré en sortie du troisième comparateur 94 étant mis à une première valeur si la troisième 30 condition SPEZ max > i, est vérifiée et à une deuxième valeur si la troisième condition n'est pas vérifiée (i.e. SPEZ max REVENDICATIONS1. Calculateur pour calculer au moins une couche de convolution d'un réseau de neurones convolutionnel impulsionnel, en réponse à un événement d'entrée, le réseau de neurones convolutionnel comprenant au moins un noyau de convolution, le noyau de convolution comprenant des coefficients de poids, caractérisé en ce qu'il comprend au moins un module de convolution (20) configuré pour calculer ladite au moins une couche de convolution, chaque module de convolution comprenant un ensemble d'unités de calcul élémentaire (200) pour calculer la valeur interne des neurones de la couche de convolution déclenchés par ledit événement d'entrée, chaque module de convolution (20) étant configuré pour mettre en correspondance les coefficients de poids du noyau avec certaines au moins des unités de calcul élémentaires du module en parallèle, le nombre d'unités de calcul élémentaires étant indépendant du nombre de neurones de la couche de convolution. 2. Calculateur selon la revendication 1, caractérisé en ce que, pour chaque événement d'entrée, chaque unité de calcul (200) est associée à un coefficient de poids du noyau de convolution, et en ce que chaque unité de calcul élémentaire est configurée pour calculer la valeur d'un ensemble de neurones indépendants déclenchés par des événements d'entrée, en fonction du coefficient de poids associé à ladite unité de calcul élémentaire. 3. Calculateur selon la revendication 1, caractérisé en ce que chaque module de convolution (20) comprend au moins une mémoire (201) pour stocker les coefficients de poids d'au moins un noyau de convolution et en ce que ladite mémoire de coefficients de poids est accessible en parallèle par lesdites unités de calcul élémentaires (200). 4. Calculateur selon la revendication 3, caractérisé en ce que chaque module de convolution (20) comprend une unité de routage (202) configurée pour distribuer les coefficients de poids de la mémoire (201) aux unités de calcul élémentaires (200) au moyen d'un bus de données comprenant un ensemble de lignes portant les coefficients de poids, et en ce que chaque module de convolution (20) est configuré pour calculer les adresses des coefficients de poids dans ledit bus de données à affecter aux unités de calcul élémentaire (200) en fonction de l'événement d'entrée, l'unité de routage (202) utilisant les adresses de coefficients de poids pour distribuer les coefficients de poids de ladite mémoire (201) aux unités de calcul élémentaires. 3050855 47 5. Calculateur selon l'une des revendications précédentes, caractérisé en ce que chaque module de convolution (20) comprend au moins une mémoire de valeurs de neurones (2002) pour stocker les valeurs internes des neurones calculées par les unités de calcul élémentaires (200) et en ce que chaque module de convolution est configuré pour calculer, 5 pour chaque événement d'entrée et pour chaque unité de calcul élémentaire (200), une adresse de stockage des valeurs internes de neurones calculées par ladite unité de calcul dans ladite mémoire de valeurs de neurones (2002) à partir de l'événement d'entrée et d'au moins un paramètre de la couche de convolution à traiter, chaque unité de calcul élémentaire (200) étant apte à sélectionner une adresse de stockage pour stocker les 10 valeurs internes des neurones calculées par ladite unité de calcul. 6. Calculateur selon la revendication 5, caractérisé en ce que chaque couche de convolution comprend au moins une carte de sortie, chaque carte de sortie comprenant un ensemble de neurones de sortie connectés à des neurones d'entrée d'au moins une partie d'une carte 15 d'entrée du réseau de neurones, le noyau de convolution étant représenté par une matrice de convolution dans un repère de dimensions donnée, l'événement d'entrée étant défini par une adresse d'entrée dans ledit repère, ladite adresse d'entrée comprenant les coordonnées de l'événement d'entrée sur la carte d'entrée, et en ce que chaque unité de calcul élémentaire est associée à des coordonnées correspondant aux coordonnées du coefficient 20 de poids associé à ladite matrice de convolution dans ledit repère, chaque unité de calcul élémentaire (200) étant apte à sélectionner ladite adresse de stockage en fonction des coordonnées de ladite unité de calcul dans ledit repère. 7. Calculateur selon la revendication 6, caractérisé en ce que lesdits paramètres de la 25 couche de convolution comprennent au moins un paramètre choisi parmi la taille de la matrice de convolution et la taille de la matrice de sortie. 8. Calculateur selon l'une des revendications précédentes 5 à 7, caractérisé en ce que chaque module de convolution (20) comprend au moins une mémoire de valeurs de 30 neurones (2002) externe aux unités de calcul élémentaires (200). 9. Calculateur selon l'une des revendications précédentes 5 à 7, caractérisé en ce que chaque module de convolution (20) comprend une mémoire de valeurs de neurones (2002) agencée dans chaque unité de calcul élémentaire (200). 35 10. Calculateur selon l'une des revendications précédentes, caractérisé en ce que chaque unité de calcul élémentaire (200) est configurée pour calculer la valeur interne de chaque 3050855 48 neurone déclenché par ledit événement d'entrée selon un modèle computationnel de neurone associé à une fonction algébrique non linéaire. 11. Calculateur selon la revendication 10, caractérisé en ce que chaque unité de calcul 5 comprend une unité logique de calcul (2003) configurée pour calculer une valeur de sortie d'un neurone en appliquant ladite fonction associée au modèle. 12. Calculateur selon l'une des revendications précédentes, caractérisé en ce que la valeur interne d'un neurone calculée par une unité de calcul donnée est l'intégrale temporelle des 10 valeurs entrées reçues par ledit neurone, chaque valeur d'entrée étant pondérée par le coefficient de poids associé à ladite unité de calcul pour chaque valeur d'entrée du neurone. 13. Calculateur selon l'une des revendications 6 à 12, caractérisé en ce que chaque unité de calcul comprend en outre une unité de sortie (2004) configurée pour déterminer l'adresse de 15 sortie sur la carte de sortie (14) des neurones déclenchés et pour communiquer ladite adresse de sortie aux autres modules de convolution (20) du calculateur. 14. Calculateur selon l'une des revendications précédentes, caractérisé en ce que les modules (20) de convolution sont interconnectés par un système d'interconnexion. 20 15. Calculateur selon l'une des revendications précédentes, caractérisé en ce que le nombre d'unités de calcul élémentaires est au moins égal au nombre de poids synaptiques du noyau de convolution.