INPI-France/Brevets-Francais-2024-Chunked huggingface dataset:
Selon un mode de réalisation, le nombre impair est le nombre 3 et/ou le nombre 5 et/ou le nombre 7.
Selon un mode de réalisation, la valeur de poids égale à 0 est encodée par une valeur spécifique, par exemple la suite binaire X111, où X est égale à 0 ou 1.
Selon un mode de réalisation, la couche est une couche de convolution.
Un autre mode de réalisation prévoit un procédé de génération, par un circuit, d’une valeur de sortie pondérée d’un neurone d’une couche d’un réseau de neurones, le procédé comprenant la multiplication d’une valeur de donnée d’entrée par un poids, dans lequel le poids est uniquement à valeur dans un ensemble limité constitué uniquement de la valeur 0, d’une pluralité de valeurs égales à , où est un entier, et d’une pluralité de valeurs, chacune égale au produit de par un nombre impair supérieur ou égal à 3.
Un autre mode de réalisation prévoit un procédé d’entrainement d’un réseau de neurones artificiel, comprenant la détermination de poids de neurones, la détermination étant effectuée en sélectionnant chaque poids uniquement dans un ensemble limité constitué uniquement de la valeur 0, d’une pluralité de valeurs égales à , où est un entier, et d’une pluralité de valeurs, chacune égale au produit de par un nombre impair supérieur ou égal à 3.
la illustre un exemple d’un réseau de neurones convolutif ;
la illustre l’implémentation matérielle d’une opération de multiplication et accumulation ;
la illustre une opération de quantification sur 8 bits ;
la est un histogramme de valeurs de poids, selon un mode de réalisation de la présente description ;
la est un graphique illustrant une quantification gaussienne, selon un mode de réalisation de la présente description ;
la est un schéma par blocs illustrant un multiplieur, selon un mode de réalisation de la présente description ;
la illustre un test de validation de l’opération de quantification, selon un mode de réalisation de la présente description ;
la est un tableau comprenant les résultats des tests de validation ; et
la est un graphe représentant plusieurs modes de quantification pour un modèle de réseau de neurone de type VGG.
Par souci de clarté, seuls les étapes et éléments utiles à la compréhension des modes de réalisation décrits ont été représentés et sont détaillés. En particulier, le fonctionnement et l’implémentation des réseaux de neurones artificiels sont connus de la personne du métier et ne sont pas décrits en détail.
La illustre un exemple d’un réseau de neurones convolutif 100. A titre d’exemple, le réseau de neurones 100 illustré est configuré pour effectuer de la reconnaissance d’image. Plus particulièrement, à partir d’une image d’entrée 102, illustrant par exemple un chien, le réseau de neurones 100 est configuré pour estimer des probabilités d’appartenance a une ou plusieurs classes d’objets. Le réseau de neurones 100 est donc configuré pour, par exemple, générer une donnée de sortie 104, par exemple un vecteur, indiquant des probabilités d’appartenance, de l’image d’entrée 102, à des classes, ou catégories, telles que, par exemple, « °chien », « chat », « lions » et « oiseau ». D’autres exemples de traitement d’images et d’autres catégories sont bien sûr possibles. De même, dans d’autres exemples, le réseau de neurones 100 est configuré pour générer un vecteur de sortie 104 comprenant les probabilités d’appartenance de l’image d’entrée 102 vers plus d’une dizaine, ou d’une centaine de classes. L’exemple d’un réseau configuré pour effectuer du traitement d’image n’est bien sûr pas limitatif. De manière générale, le réseau de neurones 100 comprend au moins une couche de convolution.
A titre d’exemple, l’image d’entrée 102 est traitée successivement par une suite de couches du réseau de neurones 100. A titre d’exemple, la première couche du réseau 100 est une couche de convolution 106 configurée pour détecter des caractéristiques dans l’image d’entrée 102, telles que par exemple, des contours, des formes, des couleurs et/ou des textures. La couche 106 est par exemple suivie d’une couche de regroupement 108 (en anglais « pooling ») configurée pour réduire les dimensions de l’image et permettre ainsi de réduire le nombre de paramètres et de calculs effectués dans le réseau 100. La couche 108 est par exemple suivie d’une nouvelle couche de convolution 110. La couche 110 est par exemple configurée pour détecter des caractéristiques dans l’image d’entrée 102, telles que par exemple, des contours, des formes, des couleurs et/ou des textures. A titre d’exemple, les caractéristiques détectées par la couche 110 sont des caractéristiques plus fines que celles détectées par la couche 106. Par exemple, la couche 106 va être configurée pour détecter des couleurs et/ou des contours et la couche 110 va être configurée pour détecter des motifs et/ou des textures dans l’image. A titre d’exemple, la couche 110 est suivie d’une nouvelle couche de regroupement 112, elle-même reliée à une couche complétement connectée 114 (en anglais « Fully-connected ») configurée pour combiner les caractéristiques extraites dans les couches précédentes afin de générer le vecteur de sortie 104.
Chacune des couches 106, 108, 110, 112 et 114 est associée à un ou plusieurs paramètres, tels que par exemple, des poids associés à chaque neurone d’une couche. La valeur de chaque paramètre, et en particulier de chaque poids est une valeur apprise lors de l’entrainement, ou l’apprentissage, du réseau 100. Une fois les valeurs des paramètres fixées, c’est-à-dire lorsque l’entrainement du réseau 100 est jugé terminé, le réseau 100 est utilisé pour effectuer, par l’intermédiaire de la suite de couches 106 à 114, des opérations d’inférences. En particulier, durant l’exécution du réseau 100 des opérations de type multiplications et accumulation (de l’anglais « Multiply and ACcumulate » - MAC) sont effectuées. Les opérations MAC correspondent, par exemple, à la sommation, sur plusieurs neurones d’une couche, des produits entre une valeur fournie à un neurone et par exemple, le poids associé à ce neurone. En d’autres termes, une opération MAC, sur un nombre N de neurones, N étant un entier supérieur ou égal à 1, correspond à effectuer l’opération suivante : , où est le poids associé au neurone de rang et où est la valeur d’entrée fournie au neurone de rang .
La illustre un exemple d’implémentation matérielle 200 d’une opération de multiplication et accumulation.
A titre d’exemple, l’implémentation, ou circuit, 200 comprend un multiplieur 202 ( ) configuré pour recevoir deux valeurs d’entrée et pour générer une valeur de sortie correspondante au produit des deux valeurs d’entrée. A titre d’exemple, les deux valeurs d’entrée fournies au multiplieur correspondent respectivement à une valeur d’entrée vers un neurone et le poids associé à ce neurone. Le circuit 200 comprend en outre un additionneur 204 (+). L’additionneur 204 est par exemple relié au multiplieur 202, et le multiplieur 202 est configuré pour fournir la valeur de sortie générée à l’additionneur 204. L’additionneur 204 est, par exemple, en outre relié à une mémoire 206 (ACCU). A titre d’exemple, la mémoire 206 est un registre. A titre d’exemple, l’additionneur 204 est en outre configuré pour lire la valeur stockée dans la mémoire 206 et pour générer une valeur de sortie en l’additionnant à la valeur fournie par le multiplieur 202. L’additionneur 204 est alors, par exemple, configuré pour stocker la valeur générée dans la mémoire 206. A titre d’exemple, le stockage de la valeur générée s’effectue suite à la suppression de la valeur qui a été précédemment lue par l’additionneur 204.
Les valeurs manipulées par les circuits MAC tels que le circuits 200 sont des valeurs quantifiées dans des ensemble de valeurs. Les valeurs quantifiées sont, par exemple, à virgule fixe.
La illustre une opération de quantification des poids du réseau 100 sur 8 bits.
A titre d’exemple, l’apprentissage du réseau 100 est réalisé par un dispositif externe au circuit sur lequel il sera implémenté. A titre d’exemple, le dispositif externe est un dispositif ayant une grande capacité de calcul. Suite à l’apprentissage, les poids sont, par exemple, stockés dans une mémoire 300 (CLOUD AI), externe au circuit sur lequel le réseau 100 sera implémenté. A titre d’exemple, la mémoire 300 est un serveur. A titre d’exemple, les poids stockés dans la mémoire 300 sont des nombres à virgule flottante et sont par exemple codés sur 16 ou 32 bits.
A titre d’exemple, avant d’être stockés dans une mémoire d’un dispositif dans lequel sera implémenté le réseau 100, les valeurs de poids apprises sont quantifiées, ou transformées, en des valeurs quantifiées étant des valeurs entières ou en des valeurs à virgules fixes. A titre d’exemple, la quantification est réalisée par un compilateur pour le portage vers un circuit périphérique 302 (EDGE AI). A titre d’exemple le circuit périphérique 302 est configuré pour effectuer des opérations selon des méthodes d’informatiques en périphérie de réseau (en anglais « Edge computing »).
A titre d’exemple, le circuit 302 est configuré pour transformer les valeurs de poids transmises par la mémoire 300 en des valeurs entières, et par exemple sur un nombre inférieur à 16 bits, par exemple sur 8 ou 4 bits.
A titre d’exemple, le circuit 302 est configuré pour quantifier les valeurs de poids sur 8 bits en effectuant une opération linéaire. A titre d’exemple, pour une valeur à virgule flottante , par exemple codée sur 32 ou sur 16 bits, une valeur entière , par exemple codée sur 8 bits, est telle que , où la valeur S est une constante réelle et positive représentant un facteur d’échelle (en anglais « scaling factor »), la valeur Z est un décalage de la valeur zéro (en anglais « zero offset ») correspondant à la valeur quantifiant la valeur 0. L’opération linéaire ainsi décrite est connue par la personne du métier et est par exemple décrite dans la partie de 2 de la publication « Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference » de B. Jacob, S. Kligys, B. Chen, M. Zhu, M. Tang, A. Howard, H. Adam et D. Kalenichenko. Dans cet exemple, et en relation avec la , les données d’entrée fournies au multiplieur 202 sont, par exemple, des données codées sur 8 bits. Le multiplieur 202 est par exemple alors configuré pour générer, à partir des deux valeurs d’entrées codées sur 8 bits, une valeur codée sur 16 bits.
La figure 4A est un histogramme 400 de valeurs de poids, selon un mode de réalisation de la présente description. En particulier, l’histogramme 400 illustre une répartition gaussienne de valeurs appartenant à un ensemble de valeurs entières où . Autrement dit, l’ensemble comprend uniquement, par exemple la valeur 0, les entiers égaux à des puissances de 2, tels que par exemple les valeurs -4, -2, -1, 1, 2, 4, etc., et les entiers égaux aux puissances de 2, multipliés par 3, tels que par exemple, -6, -3, 3, 6 etc. Dans un autre exemple, la valeur 0 n’appartient pas à l’ensemble .
Les nombres de bits manipulés par les éléments du multiplieur 502 et par l’additionneur 522 sont donnés à titre d’exemple. A titre d’exemple, dans le cas où l’exposant est codé sur un nombre de bits supérieur à 2, la personne du métier saura adapter le nombre de bits manipulés par les différents éléments du circuit 500 au nombre de bit encodant la valeur de poids ainsi que le décalage effectué par le circuit 520.
Dans le cas où la valeur de poids appartient à un ensemble du type , ou à l’union de plusieurs ensembles de type , , la personne du métier saura adapter la partie du circuit 502 comprenant les éléments 506, 510, 512 et 508 afin de les remplacer, ou d’ajouter d’autres éléments de manière à effectuer une multiplication par le, ou les, nombres impairs voulus. A titre d’exemple, si l’ensemble considéré est de la forme , un autre multiplexeur pourra être ajouté afin de sélectionner si la valeur de poids est un multiple de 5 ou non, et cet autre multiplexeur pourra être relié à un additionneur et à un circuit de décalage configuré pour décaler, d’au moins un bit vers la gauche la valeur reçue. Le nombre de bit impliqué dans le décalage dépend du nombre de bits utilisé pour encoder la valeur de l’exposant de 2. En fonction de la position de cet autre multiplexeur, le circuit pourra être adapté à l’ensemble sans avoir à ajouter d’autre composant matériel supplémentaire. Dans ce cas, l’ensemble correspondra à (1xA+2xA)+4xA, où un premier multiplexeur choisira d’ajouter la valeur 2xA ou non, de la même manière que le multiplexeur 512, et un deuxième multiplexeur choisira d’ajouter la valeur 4xA ou non. De manière générale, plus l’ensemble considéré comprend des unions d’ensemble de type , plus la représentation s’approchera d’une description en virgule flottante. De manière générale, la partie 502 du circuit comprend un nombre d’additionneurs égal au nombre de « 1 » dans la représentation binaire du nombre impair, moins un. Par exemple, les représentations binaires des impairs 3 et 5 sont « 011 » et « 101 », comprenant deux valeurs « 1 », ainsi la partie 502 adaptée à ou à comprend un additionneur. Par exemple, la représentation binaire de l’impair est « 111 » comprenant trois valeurs « 1 », ainsi la partie 502 adaptée à comprend deux additionneurs.
La figure 6 illustre un test de validation de la quantification dans l’ensemble .
A titre d’exemple, le test de validation illustré est effectué suite à l’apprentissage des poids d’une couche de convolution d’un réseau par exemple similaire au réseau de neurones 100 décrit en relation avec la . A titre d’exemple, le réseau est un réseau du type CNN (de l’anglais « Convolutional Neural Network »).
Un histogramme 600 illustre la répartition des poids (WEIGHT REPARTITION) obtenus, lors de l’apprentissage, pour la deuxième couche du réseau. Plus particulièrement, les poids illustrés dans l’histogramme 600 sont des valeurs à virgule flottante. La répartition des poids forme alors une gaussienne.
Un histogramme 602 illustre la répartition de poids quantifiés. A titre d’exemple les poids quantifiés sont les poids obtenus, lors de l’apprentissage, pour la deuxième couche du réseau, puis quantifiés dans l’ensemble . A titre d’exemple, à partir d’un poids à virgule flottante , un poids quantifié est tel que . La répartition des poids quantifiés dans forme aussi une gaussienne. De plus, on remarque que tous les poids quantifiés appartiennent à l’intervalle et peuvent par conséquent être codés sur 4 bits comme décrit en relation avec la .
La figure 7 illustre un tableau 700 et un tableau 702 comprenant chacun les résultats de tests de validation. En particulier, les tableaux 700 et 702 comprennent des comparatifs des coûts en consommation d’énergie (POWER ( W)), en surface (AREA ( )) ainsi que la précision du réseau (ACCURACY) pour une quantification linéaire (LINEAR) et une quantification dans , sur 4 bits (SIMPLE ). En particulier, le tableau 700 illustre une comparaison entre une quantification linéaire (LINEAR), par exemple décrite en relation avec la figure 3, sur 8 bits et la quantification dans sur 4 bits. Le tableau 702 illustre une quantification linéaire sur 4 bits et la quantification dans sur 4 bits. La comparaison s’effectue par exemple pour une couche de convolution d’un réseau de neurones similaire au réseau 100 et dans lequel les données d’activation de la couche sont codées, par une quantification linéaire, sur 8 bits. Les quantifications sont alors réalisées pour les poids de neurones de ladite couche, et à partir de valeur à virgule flottante, obtenues par exemple lors de l’apprentissage du réseau.
A titre d’exemple la quantification linéaire sur 8 bits permet de quantifier des valeurs à virgule flottante en des entiers appartenant par exemple à l’intervalle . La quantification linéaire sur 4 bits permet de quantifier des valeurs à virgule flottante en des entiers appartenant par exemple à l’intervalle . Plus particulièrement, la quantification linéaire sur 8 bits possède 256 représentations de valeur pour les poids et la quantification linéaire sur 4 bits possède 16 représentations. La quantification dans sur 4 bits possède, comme décrit en relation avec la figure 5, 15 représentations, la valeur 0 incluse. Une colonne de gain (GAIN) dans chaque tableau 700 et 702 comprend les gains en consommation d’énergie, en surface et en précision apportés par la quantification dans par rapport à la quantification linéaire. A titre d’exemple, la surface utilisée par la quantification dans sur 4 bits est calculée à partir de l’implémentation du circuit MAC 500 décrit en relation avec la .
A titre d’exemple, sur une technologie de 40nm testée, une quantification linéaire sur 8 bits, respectivement sur 4 bits, demande par exemple 28.1 de consommation, respectivement 20.6 , alors que la quantification dans demande par exemple 17.9 , ce qui représente un gain de 36% dans le premier cas et de 13.1% dans le deuxième cas. De même, la quantification linéaire sur 8 bits, respectivement sur 4 bits, demande par exemple 566.3 de surface, respectivement 369 , alors que la quantification dans demande par exemple 358 , ce qui représente un gain de 37% dans le premier cas et de 3% dans le deuxième cas.
La précision dans le cas de la quantification linéaire sur 8 bits est par exemple de 99.06% et de 99.05% dans le cas de la quantification linéaire sur 4 bits. La précision pour la quantification sur est par exemple de 99.37%, soit un gain de 0.31% par rapport à la quantification linéaire sur 8 bits et de 0.32% par rapport à la quantification linéaire sur 4 bits.
Bien que la quantification dans et sur 4 bits permette le codage des valeurs de poids uniquement dans un ensemble de 14 valeurs, ou 16 si les valeurs -24 et 24 sont incluses, ou de 15 en incluant la valeur 0, celles-ci sont plus réparties de façon à couvrir plus judicieusement et astucieusement la répartition gaussienne, ce qui se traduit par une précision élevée. En effet, les 16 valeurs décrites par la représentation linéaire sur 4 bits sont trop peu nombreuses et toutes à égale distance les unes des autres ce qui ne convient pas idéalement pour décrire des valeurs réparties selon une loi normale. De plus, les 256 valeurs décrites par la représentation linéaire sur 8 bits, bien que permettant de décrire fidèlement la répartition gaussienne, sont trop nombreuses. En effet, les valeurs de queue, c’est-à-dire les valeurs hautes et basses sont très peu utilisées et le fait de les considérer augmente la surface et la consommation d’énergie sans pour autant apporter un gain de précision notable.
La est un graphe 800 représentant plusieurs modes de quantification pour un modèle de réseau de neurones de type VGG (de l’anglais « Visual Geometry Group »). Ce modèle se caractérise par une succession de blocs composés de deux à trois couches de convolution suivies d'une couche dite de maxpooling. Chaque couche de convolution possède un filtre 3 par 3 et les couches de maxpooling sont de taille 2 par 2. A titre d’exemple, un modèle VGG16 à une profondeur de 16 couches et un modèle VGG19 à une profondeur de 19 couches. En particulier, le graphe 800 comprend plusieurs points, chacun associé à un modèle de quantification. L’abscisse de chaque point représente le ratio de consommation (POWER RATIO) et l’ordonnée de chaque point représente la précision obtenue par le réseau VGG. Le ratio de consommation est défini par rapport à la consommation de la quantification linéaire avec 8 bits de poids et 8 bits d’activation. A titre d’exemple, un ratio de 65% signifie que la quantification testée consomme 35% d’énergie en moins que la quantification linéaire sur 8 bits. A titre d’exemple, les paramètres du réseau VGG ont été obtenu par apprentissage et sont, de base des valeurs à virgule flottante (FLOAT). Les différentes quantifications illustrées sont effectuées par exemple sur les poids des couches de convolutions du réseau. A titre d’exemple, un premier apprentissage du réseau s’effectue avec des valeurs en virgule flottante, ensuite un deuxième apprentissage est réalisé, à partir des poids obtenus lors du premier apprentissage, afin de simuler une quantification. Cette technique est connue par la personne du métier sous le nom de QAT (de l’anglais « Quantization Aware Training »). A titre d’exemple, pour chaque point, entre 10 et 20, par exemple 15, entrainements du réseau sont réalisés et la précision maximale est récupérée.
A titre d’exemple, des points 801 (Linear_a8_w8), 802 (Linear_a8_w4), 804 (Linear_a6_w8) et 806 (Linear_a6_w4) représentent le ratio de consommation et la précision du réseau VGG pour des quantifications linéaires. En particulier, le point 801 est associé à une quantification linéaire sur 8 bits, et pour laquelle les points d’activation sont aussi sur 8 bits. Le point 802 est associé à une quantification linéaire sur 4 bits, et pour laquelle les points d’activation sont aussi sur 8 bits. La précision apportée par ces deux quantifications est similaire, soit d’environ 99,05%, mais la quantification sur 4 bits est moins couteuse en consommation d’énergie. Les point 804 et 806 sont associés à une quantification linéaire respectivement sur 8 et 4 bits, et pour lesquelles les points d’activation sont aussi sur 6 bits.
Des points 808 (Log2_a8_w4), 810 (Log2_a6_w4) et 812 (Log2_a4_w4) sont associés à des quantifications logarithmiques sur 4 bits, et pour lesquelles les points d’activation sont, respectivement, sur 8, 6 et 4 bits.
Des points 814 (Simple_ _a8_w4), 816 (Simple_ _a6_w4) et 818 (Simple_ _a4_w4) sont associés à des quantifications simples dans sur 4 bits, telles que décrites en relation avec la , et pour lesquelles les points d’activation sont, respectivement, sur 8, 6 et 4 bits.
Des points 820 (Gauss_ _a8_w4), 822 (Gauss_ _a6_w4) et 824 (Gauss_ _a4_w4) sont associés à des quantifications gaussiennes, telles que décrites en relation avec la figure 4B, dans sur 4 bits, et pour lesquelles les points d’activation sont, respectivement, sur 8, 6 et 4 bits.
Selon des variantes de réalisation non représentées, la coiffe avant de soutien peut être constituée par une toile textile ajourée, telle que par exemple une toile de type Batyline ® . Dans un tel cas de figure, l’appuie-tête ne sera pas intégré à la coiffe mais monté sur le cadre d’armature.
Selon encore d’autres variantes de réalisation non représentées, la coque arrière 500 peut être dépourvue de prédécoupe frangible en regard du coussin gonflable de sécurité 300, la fixation entre la bordure extérieure de la coiffe 600 et celle de la coque arrière 500 étant configurée pour se rompre sous l’effort exercé par ce coussin 300 lors de son déclenchement.
On peut également envisager que la coque arrière 500 présente une fenêtre disposée en regard du coussin gonflable de sécurité 300 et recouverte d’un empiétement textile cousu à l’aide d’une couture fusible se déchirant sous l’effort exercé par ce coussin 300 lors de son déclenchement.