• Aucun résultat trouvé

3.3 Modélisation et simulation au niveau circuit

3.3.2 Exemple de co-simulation Python/Cadence

Dans cette partie, nous nous proposons de simuler le mécanisme d’apprentissage STDP sur des dispositifs PCM, en implémentant au niveau circuit le mécanisme de programmation qui est décrit dans le chapitre «Implémentations matérielles sur des technologies memristives». Le modèle semi-physique de la PCM introduit avec la pré- sentation de la technologie est utilisé.

Pour référence, l’implémentation se décompose en 8 fichiers VHDL : – model_pcm.vhms: modèle semi-physique d’un dispositif PCM ;

– neuron_ctrl.vhd: machine d’état globale contrôlant l’inhibition des neurones ;

– neuron_in_ctrl.vhd : machine d’état d’un neurone d’entrée ;

– neuron_in.vhms: interface analogique d’un neurone d’entrée ;

– neuron_out_ctrl.vhd : machine d’état d’un neurone de sortie ;

– neuron_out.vhms: interface analogique d’un neurone de sortie ;

– xbar_pcm.vhms: matrice de synapses PCM, interfacée avec les neurones d’entrée et

de sortie ;

– cell.vhms: système complet.

Le listing 3.4 montre comment créer une «netlist» Verilog-AMS avec la classe Py- thonVamsNetlist. La figure 3.9 correspond au schéma équivalent après instanciation des

deux entités U0 et U1. La classe Stimuli permet quant à elle de générer des signaux

logiques en VHDL. En passant par Python pour générer la «netlist» de haut niveau («top-level»), la création des signaux d’entrée à partir de données extérieures, comme une base d’images ou de vidéos, est facilitée (VHDL et Verilog disposent tous deux de fonctions basiques pour la gestion de fichiers, mais bien trop limitées pour faire du pré-traitement sur des images par exemple). L’utilisation d’un script simplifie égale- ment l’automatisation de simulations, pour faire varier des paramètres ou tester un grand nombre de vecteurs d’entrée. Enfin, il offre un gain de productivité par rapport à une saisie sur schéma via une interface graphique, pour l’édition des paramètres des instances ou le changement de la taille des bus d’entrée/sortie notamment.

Listing 3.4 – Génération d’une «netlist» avec un script Python. La création des stimuli d’entrée, contenu dans la variable stimu, n’est pas détaillée (voir figure 3.10 pour leur représentation

1 # Simulation parameters

2 SizeIn = 4 # Number of input neurons (= size of input stimuli) 3 SizeOut = 1 # Number of output neurons

4 Tclk = 1e-5 # Clock period

5 Tstimu = 1e-3 # Duration of a stimuli

6 StimuliLength = 60 # Number of stimuli presented during learning

7 UpdateLimit = 20 # Number of weight updates on a 2-PCM synapse before a refresh 8

9 # Generate netlist

10 netlist = VamsNetlist.VamsNetlist()

11 netlist.addElectrical("rd_voltage", "wr_voltage", "rst_voltage", "thres_voltage") 12 netlist.addBus("in_event", SizeIn)

13 netlist.addDcSource("Vrd", ["rd_voltage", "gnd"], 0.1) 14 netlist.addDcSource("Vwr", ["wr_voltage", "gnd"], 1.0) 15 netlist.addDcSource("Vrst", ["rst_voltage", "gnd"], 8.0) 16 netlist.addDcSource("Vthres", ["thres_voltage", "gnd"], 3.5e-5) 17 netlist.addInstance("U0", {

18 "clk": "clk", "rst": "rst", "in_event": "in_event", "out_event": "out_event", " rd_voltage": "rd_voltage", "wr_voltage": "wr_voltage", "rst_voltage": " rst_voltage", "thres_voltage": "thres_voltage", "ref": "gnd"

19 }, "cell", {

20 "SizeIn": SizeIn, "SizeOut": SizeOut, "Tread": netlist.time(100e-9), "Twrite": netlist.time(300e-9), "Treset": netlist.time(100e-9), "Tleak": netlist.time (0.35*Tstimu), "Tltp": 0.35*Tstimu/Tclk, "Tinhibit": 0.35*Tstimu/Tclk, " UpdateLimit": UpdateLimit

21 })

22 netlist.addInstance("U1", {"clk": "clk", "rst": "rst", "in_event": "in_event"}, " ctrl_stimu")

23

24 # Generate control stimuli

25 stm = Stimuli.Stimuli("ctrl_stimu") 26 stm.addClock("clk", Tclk) 27 stm.addLogical("rst", [0, 1e-5]) 28 stm.addLogical("in_event", stimu) clk rst out_event rd_voltage wr_voltage rst_voltage thres_voltage gnd in_event[3:0] clk rst out_event rd_voltage wr_voltage rst_voltage thres_voltage ref in_event U0 WORKLIB:CELL(STRUCTURAL) clk rst in_event[3:0] clk rst in_event U1 WORKLIB:CTRL_STIMU(BEHAVIORAL)

Figure 3.9 – Schéma de la «netlist» correspondante au listing 3.4, obtenue avec l’outil SimVi- sion de Cadence.

La configuration de la simulation se fait avec la classe AmsSimulation, listing 3.5.

Listing 3.5 – Configuration de la simulation et exécution.

1 # Generate simulation 2 ams = AmsSimulation.AmsSimulation("/local/simus/cell") 3 ams.attachNetlist(netlist) 4 ams.includeStimuli(stm) 5 ams.include("../model_pcm.vhms") 6 ...

7 ams.spectre.analysis[’tran’].addOption("stop", (StimuliLength + 1)*Tstimu) 8 ams.addTclProbe()

Enfin, le listing 3.6 montre comment il est possible de récupérer les signaux de la simulation et de les afficher directement avec Python grâce au module Pylab. Les deux figures générées par ce script sont montrées figure 3.10 et 3.11.

Listing 3.6 – Récupération des résultats.

1 # Display simulation results 2 pylab.figure(1) 3 ams.plot("in_event[3:0]", append=True) 4 ams.plot("U0:inhibit", append=True) 5 ams.plot("out_event", append=True) 6 7 pylab.figure(2) 8 pylab.subplot(SizeIn + 1, 1, 1) 9 ams.plot("out_event") 10

11 for i in xrange(0, SizeIn):

12 pylab.subplot(SizeIn + 1, 1, i + 2) 13 pylab.hold(True)

14 pylab.plot(Rgst_p[i][0].time, 1.0/numpy.array(Rgst_p[i][0].V), ’r’, Rgst_n[i][0]. time, 1.0/numpy.array(Rgst_n[i][0].V), ’b’)

15 pylab.ylabel("in␣#%d" % (i))

La figure 3.10 montre de haut en bas les stimuli pour les quatre neurones d’en- trée (pré-synaptiques), le signal d’inhibition et le signal de sortie du neurone post- synaptique. Trois entrées sur 4 sont activées aléatoirement toutes les millisecondes, avec une probabilité d’activation de la dernière entrée inférieure de 50% aux 3 autres. Les synapses ayant activé le neurone sont renforcées avec la règle d’apprentissage STDP, tandis que celles qui n’ont pas été activées sont affaiblies. Sur la figure 3.11, on vérifie bien que la dernière synapse voit son poids équivalent diminuer plus rapidement que les 3 autres, puisqu’elle subit plus souvent une dépression à long terme – «Long-Term Depression» (LTD), ce qui a pour effet d’augmenter la conductance du dispositif LTD. Passé une trentaine de présentations de triplets (après 30 ms), seule l’activation rap- prochée des trois premières entrées déclenche l’activation du neurone, qui est devenu sélectif au motif le plus probable. Entre 35 et 40 ms, le mécanisme de rafraichissement des synapses reprogramme les poids synaptiques en minimisant la conductance des dispositifs PCM. Cette procédure, déjà simulée dans Xnet, peut être étudiée ici avec un modèle fonctionnel du circuit. Cela constitue un premier pas vers sa validation qui nécessiterait la conception des blocs analogiques au niveau transistor.

3.4

Discussion et perspectives

Le simulateur Xnet a depuis sa création mi-2010 été utilisé pour les résultats de 9 publications scientifiques (Bichler et al., 2012a,b; Suri et al., 2012; Querlioz et al., 2012b,a) (Suri et al.,2011,2012) (Bichler et al.,2011;Querlioz et al.,2011a). Il a éga- lement été utilisé dans le cadre d’un stage sur l’implémentation d’une FFT avec des opérateurs neuromorphiques (Gasnier,2011) et est actuellement utilisé pour un autre stage à l’Institut d’Électronique Fondamentale (IEF) sur le développement d’architec- tures à base de jonctions tunnel magnétiques – «Magnetic Tunnel Junctions» (MTJs). Xnet dispose aujourd’hui d’une assise solide et de nombreuses fonctionnalités pour fa- ciliter la conception et l’analyse de réseaux de neurones impulsionnels. Il supporte bien la comparaison avec les simulateurs existants tout en étant le seul à notre connaissance à réellement se focaliser à la fois sur l’implémentation et l’aspect applicatif pour des architectures à base de dispositifs memristifs.

La plateforme de co-simulation Python/Cadence et la méthodologie sous-jacente ont été développées pour faciliter la conception et la validation d’un système de traitement

0.00

0.01

0.02

0.03

0.04

0.05

0.06

0.07

Time (s)

in_event[3:0]<0> in_event[3:0]<1> in_event[3:0]<2> in_event[3:0]<3> U0:inhibit out_event

Figure 3.10 – Visualisation des signaux d’entrée et de la sortie du neurone pour le système d’apprentissage à base de PCM. out_event 0.0 0.51.01.5 2.0 2.5 in #0 (mS) 0.0 0.51.01.5 2.0 2.5 in #1 (mS) 0.0 0.51.01.5 2.0 2.5 in #2 (mS) 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 Time (s) 0.0 0.51.01.5 2.0 2.5 in #3 (mS)

Figure 3.11 – Évolution de la conductance des dispositifs PCM.

de données naturelles complet au niveau circuit, qui aurait été dans un premier temps mis au point avec Xnet.

A l’heure actuelle, dans le monde, aucun système hybride à base de dispositifs memristifs de taille conséquente n’a été réalisé avec succès (ou rendu public), malgré un effort considérable dans le projet SyNAPSE, financé par la Defense Advanced Re- search Projects Agency (DARPA). La difficulté est en grande partie technologique, mais aussi méthodologique. La tendance générale des implémentations proposées de STDP est d’émuler les mesures biologiques dans l’idée de s’affranchir de l’aspect ap- plicatif, qui est considéré comme acquis de par les capacités cognitives du cerveau biologique. Les approches explorées, en particulier dans le projet de la DARPA, sont

donc de type «bottom-up». La méthodologie que nous proposons est au contraire de type «top-down», puisqu’elle part d’un ensemble d’applications possibles pour aller par raffinements successifs à un implémentation circuit adaptée à celles-ci. Nous espérons que cette méthodologie ainsi que les outils associés pourrons être mis en œuvre avec succès pour la réalisation future d’un prototype à moyenne échelle (plusieurs milliers de synapses).

Étude d’architectures

neuro-inspirées nouvelle

génération pour le traitement de

données naturelles

Sommaire

4.1 Introduction . . . . 73 4.2 Extraction non supervisée de motifs visuels . . . . 74

4.2.1 Méthodologie . . . 75 4.2.2 Principe de l’apprentissage . . . 77 4.2.3 Apprentissage de motifs à partir de capteurs de vision dyna-

miques . . . 81 4.2.4 Robustesse et immunité au bruit . . . 89

4.3 Détection de motifs auditifs dans du bruit . . . . 90

4.3.1 Méthodologie . . . 91 4.3.2 Résultats des simulations . . . 94

4.4 Apprentissage et classification de motifs . . . . 97

4.4.1 Méthodologie . . . 97 4.4.2 Performances comparées avec un Perceptron . . . 102

4.5 Discussion et perspectives . . . 104

4.1

Introduction

Ce chapitre présente en détail trois applications de traitement de données naturelles étudiées dans ces travaux : l’apprentissage et l’extraction de motifs visuels, de motifs auditifs et la classification. Nous développons et mettons en œuvre les idées présentées dans l’introduction et le premier chapitre. Nous montrons comment - et avec quel codage temporel de l’information - réaliser de l’apprentissage non supervisé de motif en utilisant la règle d’apprentissage «Spike-Timing-Dependent Plasticity» (STDP). Ce chapitre répond au premier enjeu majeur évoqué dans l’introduction : montrer que des applications concrètes sont ainsi réalisables pour le traitement des données naturelles. Il répond également en partie au troisième enjeu, qui est de démontrer la tolérance de telles architectures aux variabilités synaptiques. Ce dernier point est essentiel pour envisager des implémentations sur des dispositifs memristifs, qui à l’échelle nanométrique sont intrinsèquement fortement variables.

Les applications présentées dans ce chapitre se veulent être relativement indépen- dantes vis-à-vis du nano-dispositif memristif utilisé pour implémenter les synapses. Ainsi, nous préférons dans la suite parler simplement de synapse, plutôt que de dési- gner explicitement telle ou telle technologie memristive. L’implémentation concrète des architectures présentées dans ce chapitre sur des nano-dispositifs fait l’objet du chapitre suivant, «Implémentations matérielles sur des technologies memristives». Dans ce cha- pitre, nous réintroduisons et réutilisons le modèle déjà utilisé pour les caractéristiques de potentialisation et de dépression des dispositifs mémoire à changement de phase – «Phase-Change Memory» (PCM) et mémoire résistive – «Resistive RAM» (RRAM) (section 2.3.3), comme modèle générique d’évolution du poids synaptique.

Documents relatifs