{"id":732,"date":"2026-10-09T18:39:06","date_gmt":"2026-10-09T16:39:06","guid":{"rendered":"https:\/\/www.ranksignal.fr\/blog\/?p=732"},"modified":"2026-10-14T17:48:59","modified_gmt":"2026-10-14T15:48:59","slug":"que-sont-les-reseaux-de-neurones","status":"publish","type":"post","link":"https:\/\/www.ranksignal.fr\/blog\/deep-learning\/que-sont-les-reseaux-de-neurones\/","title":{"rendered":"R\u00e9seaux de neurones : lis-les par leur entr\u00e9e et leur sortie"},"content":{"rendered":"<p><\/p>\n<p>Une image de 28 \u00d7 28 pixels, la position des pi\u00e8ces sur un \u00e9chiquier, un graphe de n\u0153uds et de liens : trois objets sans aucun rapport, et pourtant la m\u00eame famille de machines sait les lire. Pour la reconna\u00eetre, tu n&rsquo;as pas besoin de conna\u00eetre son architecture sur le bout des doigts. Il suffit de regarder ce qui entre et ce qui sort. Tu vas prendre ce r\u00e9flexe, puis lire la derni\u00e8re couche d&rsquo;un r\u00e9seau comme un cahier des charges.<\/p>\n<p><strong>Sommaire<\/strong><\/p>\n<ul>\n<li><a href=\"#l-essentiel-en-30-secondes\">L&rsquo;essentiel en 30 secondes<\/a><\/li>\n<li><a href=\"#tout-ce-qui-entre-est-un-tenseur\">Tout ce qui entre est un tenseur<\/a><\/li>\n<li><a href=\"#de-784-valeurs-a-10-sorties-un-reseau-en-quelques-lignes\">De 784 valeurs \u00e0 10 sorties : un r\u00e9seau en quelques lignes<\/a><\/li>\n<li><a href=\"#ce-que-le-reseau-doit-rendre-decide-de-sa-derniere-couche\">Ce que le r\u00e9seau doit rendre d\u00e9cide de sa derni\u00e8re couche<\/a><\/li>\n<li><a href=\"#quand-l-entree-est-un-graphe-pas-une-grille\">Quand l&rsquo;entr\u00e9e est un graphe, pas une grille<\/a><\/li>\n<li><a href=\"#le-point-commun-des-poids-que-le-gradient-regle\">Le point commun : des poids que le gradient r\u00e8gle<\/a><\/li>\n<\/ul>\n<h2 id=\"l-essentiel-en-30-secondes\">L&rsquo;essentiel en 30 secondes<\/h2>\n<ul>\n<li>Un r\u00e9seau de neurones est une machine qui <strong>prend un tenseur et en rend un autre<\/strong> : une liste de nombres, une grille, ou leurs variantes \u00e0 plus de dimensions.<\/li>\n<li>Ses neurones sont rang\u00e9s en couches, et chacun <strong>pond\u00e8re ses entr\u00e9es<\/strong> avant de les passer dans une fonction d&rsquo;activation.<\/li>\n<li>Ce que le r\u00e9seau doit produire <strong>fixe sa derni\u00e8re couche<\/strong> : dix scores, une probabilit\u00e9 par action, une valeur par action.<\/li>\n<li>Quand les donn\u00e9es forment un graphe plut\u00f4t qu&rsquo;une grille, un r\u00e9seau de graphes <strong>fait dialoguer chaque n\u0153ud avec ses voisins<\/strong>.<\/li>\n<li>Quelle que soit la forme, la recette de r\u00e9glage est la m\u00eame : <strong>des poids ajust\u00e9s par le gradient<\/strong>.<\/li>\n<\/ul>\n<h2 id=\"tout-ce-qui-entre-est-un-tenseur\">Tout ce qui entre est un tenseur<\/h2>\n<p>Prends la position des pi\u00e8ces sur un \u00e9chiquier : on la d\u00e9crit par une matrice, c&rsquo;est-\u00e0-dire une grille de nombres. Les actions que l&rsquo;on peut jouer se repr\u00e9sentent elles aussi par un tenseur. Ce mot regroupe les cas que tu rencontres tout le temps : un vecteur est une liste de nombres, une matrice une grille de nombres, et le <strong>tenseur<\/strong> en est la forme g\u00e9n\u00e9rale.<\/p>\n<p>Ces structures sont courantes en apprentissage automatique, et c&rsquo;est ce que l&rsquo;on donne en entr\u00e9e \u00e0 un <a href=\"\/blog\/deep-learning\/qu-est-ce-qu-un-modele-d-apprentissage-profond\/\" title=\"mod\u00e8le d&#x27;apprentissage profond\">mod\u00e8le d&rsquo;apprentissage profond<\/a>. Le r\u00e9seau de neurones lui-m\u00eame se compose de neurones organis\u00e9s en couches : il prend un tenseur en entr\u00e9e et produit un tenseur en sortie.<\/p>\n<p>Chaque neurone pond\u00e8re ses entr\u00e9es, les additionne, puis fait passer la somme dans une fonction d&rsquo;activation. Voil\u00e0 la brique de base, et tout le reste n&rsquo;est qu&rsquo;une affaire d&rsquo;assemblage.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef4713da5c&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef4713da5c\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2550\" height=\"1500\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch09_reseau_neurones_multicouches.png\" alt=\"R\u00e9seau \u00e0 quatre neurones d'entr\u00e9e, deux couches cach\u00e9es de six neurones chacune et un neurone de sortie, chaque neurone \u00e9tant reli\u00e9 \u00e0 tous ceux de la couche suivante\" class=\"wp-image-729\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch09_reseau_neurones_multicouches.png 2550w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch09_reseau_neurones_multicouches-300x176.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch09_reseau_neurones_multicouches-1024x602.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch09_reseau_neurones_multicouches-768x452.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch09_reseau_neurones_multicouches-1536x904.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch09_reseau_neurones_multicouches-2048x1205.png 2048w\" sizes=\"auto, (max-width: 2550px) 100vw, 2550px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Regarde les deux bords du sch\u00e9ma plut\u00f4t que son milieu : \u00e0 gauche, quatre valeurs entrent ; \u00e0 droite, une seule ressort. Entre les deux, chaque couche lit ce que la pr\u00e9c\u00e9dente a produit.<\/figcaption><\/figure>\n\n\n<blockquote>\n<p><strong>\ud83d\udca1 Intuition<\/strong> Un r\u00e9seau de neurones ressemble \u00e0 une prise normalis\u00e9e : pour le brancher, ce qui compte est la forme de la fiche d&rsquo;entr\u00e9e et celle de la fiche de sortie. L&rsquo;int\u00e9rieur vient apr\u00e8s.<\/p>\n<\/blockquote>\n<h2 id=\"de-784-valeurs-a-10-sorties-un-reseau-en-quelques-lignes\">De 784 valeurs \u00e0 10 sorties : un r\u00e9seau en quelques lignes<\/h2>\n<p>PyTorch est un paquet Python qui d\u00e9crit des op\u00e9rations sur des tenseurs. C&rsquo;est la technologie standard de l&rsquo;industrie pour entra\u00eener comme pour faire tourner les mod\u00e8les g\u00e9n\u00e9ratifs, et il sait entra\u00eener <strong>tout type de r\u00e9seau de neurones<\/strong>. Sa documentation en montre un exemple de base, que voici (l&rsquo;extrait suppose que le module <code>torch.nn<\/code> a \u00e9t\u00e9 import\u00e9 sous le nom <code>nn<\/code>) :<\/p>\n<pre><code>class NeuralNetwork(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.flatten = nn.Flatten()\n        self.linear_relu_stack = nn.Sequential(\n            nn.Linear(28*28, 512),\n            nn.ReLU(),\n            nn.Linear(512, 512),\n            nn.ReLU(),\n            nn.Linear(512, 10),\n        )\n\n    def forward(self, x):\n        x = self.flatten(x)\n        logits = self.linear_relu_stack(x)\n        return logits\n<\/code><\/pre>\n<p>Lis-le en commen\u00e7ant par ses deux extr\u00e9mit\u00e9s. \u00c0 l&rsquo;entr\u00e9e, <code>nn.Linear(28*28, 512)<\/code> attend 28 \u00d7 28 = 784 valeurs, ce qui correspond \u00e0 une image de 28 \u00d7 28 pixels : le nom <code>nn.Flatten()<\/code> dit ce qu&rsquo;il fait, il aplatit l&rsquo;image en une seule liste. \u00c0 la sortie, <code>nn.Linear(512, 10)<\/code> rend <strong>dix nombres<\/strong>, que le code appelle <code>logits<\/code>.<\/p>\n<p>Entre les deux, deux couches de 512 neurones s\u00e9par\u00e9es par des <code>nn.ReLU()<\/code> : ce sont les couches lin\u00e9aires et les activations qui forment les pi\u00e8ces essentielles d&rsquo;un r\u00e9seau. La m\u00e9thode <code>forward<\/code> d\u00e9crit le trajet complet, qui consiste \u00e0 aplatir l&rsquo;entr\u00e9e, \u00e0 la faire traverser la pile, puis \u00e0 renvoyer les dix sorties.<\/p>\n<p>L&rsquo;exemple est tr\u00e8s simple, mais il contient d\u00e9j\u00e0 la forme de tout r\u00e9seau : <strong>tenseur fixe en entr\u00e9e, tenseur fixe en sortie<\/strong>. Reste \u00e0 savoir ce que ce dernier tenseur doit contenir.<\/p>\n<h2 id=\"ce-que-le-reseau-doit-rendre-decide-de-sa-derniere-couche\">Ce que le r\u00e9seau doit rendre d\u00e9cide de sa derni\u00e8re couche<\/h2>\n<p>Les dix nombres du code pr\u00e9c\u00e9dent sont des scores, mais rien n&rsquo;oblige un r\u00e9seau \u00e0 en rendre dix. Sa derni\u00e8re couche \u00e9pouse la t\u00e2che. Reprends l&rsquo;\u00e9chiquier du d\u00e9but : un agent qui joue re\u00e7oit l&rsquo;\u00e9tat de la partie, c&rsquo;est-\u00e0-dire la position des pi\u00e8ces, et doit choisir une action. Deux r\u00e9seaux peuvent r\u00e9pondre \u00e0 cette m\u00eame entr\u00e9e, avec <strong>deux sorties diff\u00e9rentes<\/strong>.<\/p>\n<h3>Une probabilit\u00e9 par action<\/h3>\n<p>Le premier r\u00e9seau prend l&rsquo;\u00e9tat courant en entr\u00e9e et produit une distribution de probabilit\u00e9 sur toutes les actions possibles. On l&rsquo;appelle une politique stochastique, parce qu&rsquo;il ne rend pas directement une action mais des probabilit\u00e9s.<\/p>\n<p>Au d\u00e9part, ses poids sont al\u00e9atoires, donc les actions le sont aussi. On laisse alors l&rsquo;agent jouer en tirant chaque action dans la distribution rendue, ce qui produit une trajectoire, c&rsquo;est-\u00e0-dire la suite des \u00e9tats et des actions. Si elle rapporte de fortes r\u00e9compenses, on modifie les poids pour la rendre plus probable ; si l&rsquo;agent se comporte mal, la mise \u00e0 jour vise \u00e0 la rendre moins probable.<\/p>\n<blockquote>\n<p><strong>\u26a0\ufe0f Pi\u00e8ge<\/strong> Une probabilit\u00e9 par action n&rsquo;est pas une action. Il reste \u00e0 en tirer une dans la distribution, et c&rsquo;est ce tirage qui rend la politique stochastique.<\/p>\n<\/blockquote>\n<p>Apprendre directement une politique convient aux <strong>espaces d&rsquo;actions continus<\/strong>, alors qu&rsquo;un r\u00e9seau qui rendrait une valeur par action, comme le suivant, s&rsquo;y pr\u00eate beaucoup moins bien.<\/p>\n<h3>Une valeur par action<\/h3>\n<p>Le second r\u00e9seau re\u00e7oit le m\u00eame \u00e9tat mais rend autre chose. Pour le comprendre, pars de la table du Q-learning : une ligne par \u00e9tat, une colonne par action, et dans chaque cellule la r\u00e9compense future esp\u00e9r\u00e9e si l&rsquo;agent m\u00e8ne cette action depuis cet \u00e9tat puis suit la meilleure strat\u00e9gie. Dans les environnements complexes, cette table devient impraticable \u00e0 cause de sa taille potentiellement massive et de son co\u00fbt de calcul.<\/p>\n<p>On la remplace donc par un r\u00e9seau : on lui donne l&rsquo;\u00e9tat en entr\u00e9e, et il fournit en sortie <strong>la valeur de chaque action<\/strong> possible depuis cet \u00e9tat. Ce r\u00e9seau Q ne travaille pas seul dans le DQN, l&rsquo;algorithme utilis\u00e9 par DeepMind pour entra\u00eener un agent \u00e0 r\u00e9soudre des jeux vid\u00e9o. Il a deux compagnons :<\/p>\n<ul>\n<li><strong>la m\u00e9moire de rejeu<\/strong> range chaque exp\u00e9rience (\u00e9tat, action, r\u00e9compense, \u00e9tat suivant) ; \u00e0 l&rsquo;entra\u00eenement, on y tire des lots au hasard, m\u00e9lange d&rsquo;anciennes et de nouvelles exp\u00e9riences, ce qui casse la corr\u00e9lation entre exp\u00e9riences cons\u00e9cutives et r\u00e9utilise le pass\u00e9 ;<\/li>\n<li>le r\u00e9seau cible est une copie du r\u00e9seau Q qui fournit les valeurs \u00e0 atteindre ; toutes les quelques milliers d&rsquo;\u00e9tapes, on remplace ses poids par ceux du r\u00e9seau Q, ce qui stabilise l&rsquo;entra\u00eenement.<\/li>\n<\/ul>\n<p>\u00c0 chaque entra\u00eenement, le r\u00e9seau Q pr\u00e9dit la valeur des actions pour un \u00e9tat et le r\u00e9seau cible pr\u00e9dit la valeur cible ; l&rsquo;\u00e9cart entre les deux, avec la r\u00e9compense observ\u00e9e, donne la perte qui r\u00e8gle le r\u00e9seau Q.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef4713e086&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef4713e086\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2340\" height=\"1260\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch08_dqn.png\" alt=\"Architecture du DQN : l'environnement alimente une m\u00e9moire de rejeu qui entra\u00eene le r\u00e9seau Q et fournit aussi des \u00e9chantillons au r\u00e9seau cible, une copie fig\u00e9e, dont les sorties convergent avec celles du r\u00e9seau Q vers un bloc de perte\" class=\"wp-image-730\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch08_dqn.png 2340w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch08_dqn-300x162.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch08_dqn-1024x551.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch08_dqn-768x414.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch08_dqn-1536x827.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch08_dqn-2048x1103.png 2048w\" sizes=\"auto, (max-width: 2340px) 100vw, 2340px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Suis les fl\u00e8ches depuis l&rsquo;environnement : l&rsquo;exp\u00e9rience entre dans la m\u00e9moire de rejeu, puis part dans deux directions, vers le r\u00e9seau qu&rsquo;on entra\u00eene et vers sa copie fig\u00e9e. Les deux sorties se retrouvent dans le bloc de perte, qui compare le Q pr\u00e9dit \u00e0 la cible.<\/figcaption><\/figure>\n\n\n<p>Ce montage sait extraire seul les caract\u00e9ristiques d&rsquo;espaces de grande dimension comme les images : il a ainsi ma\u00eetris\u00e9 des jeux Atari \u00e0 partir de pixels bruts. Il a ses limites : il demande beaucoup d&rsquo;\u00e9chantillons, reste sensible au choix des hyperparam\u00e8tres, et se montre <strong>instable avec des actions continues<\/strong>, alors qu&rsquo;il se comporte bien sur des actions en nombre fini.<\/p>\n<h2 id=\"quand-l-entree-est-un-graphe-pas-une-grille\">Quand l&rsquo;entr\u00e9e est un graphe, pas une grille<\/h2>\n<p>Les mod\u00e8les classiques attendent des donn\u00e9es rectangulaires ou en grille. Un graphe n&rsquo;entre pas dans cette case, et pour une t\u00e2che on voudrait pourtant exploiter \u00e0 la fois ses n\u0153uds, ses ar\u00eates, son contexte global et sa connectivit\u00e9.<\/p>\n<p>La connectivit\u00e9 est la plus difficile \u00e0 repr\u00e9senter. On emploie d&rsquo;ordinaire une matrice d&rsquo;adjacence, qui grossit beaucoup avec le nombre de n\u0153uds et se r\u00e9v\u00e8le peu efficace en espace. Pire, un graphe n&rsquo;ayant pas d&rsquo;ordre, <strong>plusieurs matrices diff\u00e9rentes<\/strong> disent la m\u00eame chose, sans qu&rsquo;un mod\u00e8le sache forc\u00e9ment les reconna\u00eetre comme identiques.<\/p>\n<p>Un r\u00e9seau de neurones de graphes (GNN) prend le graphe tel quel et exploite sa structure pendant l&rsquo;apprentissage. Son principe est le passage de messages : \u00e0 chaque pas, chaque n\u0153ud collecte les repr\u00e9sentations de ses voisins, applique une fonction d&rsquo;agr\u00e9gation (elle varie selon les architectures), puis une non-lin\u00e9arit\u00e9. Pour une version courante, la r\u00e8gle de mise \u00e0 jour s&rsquo;\u00e9crit :<\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 50px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-fce4fb166c28ebfe87d1b4ff0be4721a_l3.png\" height=\"50\" width=\"283\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#104;&#95;&#118;&#94;&#123;&#40;&#108;&#43;&#49;&#41;&#125;&#61;&#87;&#94;&#123;&#40;&#108;&#43;&#49;&#41;&#125;&#92;&#99;&#100;&#111;&#116;&#92;&#115;&#117;&#109;&#95;&#123;&#119;&#92;&#105;&#110;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#78;&#125;&#40;&#118;&#41;&#92;&#99;&#117;&#112;&#92;&#123;&#118;&#92;&#125;&#125;&#92;&#102;&#114;&#97;&#99;&#123;&#49;&#125;&#123;&#99;&#95;&#123;&#119;&#44;&#118;&#125;&#125;&#92;&#44;&#104;&#95;&#119;&#94;&#123;&#40;&#108;&#41;&#125;&#46;&#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n<p>Lis-la de la droite vers la gauche. <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-753670614293d0e99cc64db44a1fdc2c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#104;&#95;&#119;&#94;&#123;&#40;&#108;&#41;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"24\" style=\"vertical-align: -2px;\"\/> est la repr\u00e9sentation du n\u0153ud <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-dfee5c980777976ae8cf6541893fb572_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#119;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"13\" style=\"vertical-align: 0px;\"\/> \u00e0 la couche <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-502276c66966e5a861539c7de60c26c0_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#108;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"5\" style=\"vertical-align: 0px;\"\/> ; on additionne celles des voisins de <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-ef71511c70f0e4b25cc6bd69f3bc20c2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#118;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"9\" style=\"vertical-align: 0px;\"\/> (l&rsquo;ensemble <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-1076f41e26922a57b21d2a8a2574ad23_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#78;&#125;&#40;&#118;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"40\" style=\"vertical-align: -5px;\"\/>) et celle de <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-ef71511c70f0e4b25cc6bd69f3bc20c2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#118;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"9\" style=\"vertical-align: 0px;\"\/> lui-m\u00eame, chacune divis\u00e9e par un coefficient de normalisation <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-8979eaf64967a23024f0d03c2cb7346c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#99;&#95;&#123;&#119;&#44;&#118;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"29\" style=\"vertical-align: -6px;\"\/>. Le total est multipli\u00e9 par une matrice de poids <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-18ff55b25700953abea110194c69cddd_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;&#94;&#123;&#40;&#108;&#43;&#49;&#41;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"51\" style=\"vertical-align: 0px;\"\/> partag\u00e9e, ce qui donne la nouvelle repr\u00e9sentation <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-8903cb738440b7a5f4e27a0e7cb7c87a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#104;&#95;&#118;&#94;&#123;&#40;&#108;&#43;&#49;&#41;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"42\" style=\"vertical-align: -2px;\"\/> du n\u0153ud. La non-lin\u00e9arit\u00e9 s&rsquo;applique ensuite.<\/p>\n<p>Un GNN classique encha\u00eene plusieurs blocs de ce type, puis une couche finale qui exploite la repr\u00e9sentation apprise pour la t\u00e2che. Il a un avantage : tout en s&rsquo;entra\u00eenant sur sa t\u00e2che, il <strong>apprend un <a href=\"\/blog\/rag\/que-sont-les-embeddings\/\" title=\"embedding\">embedding<\/a> pour chaque n\u0153ud<\/strong>. L&rsquo;entr\u00e9e est un graphe, la sortie une repr\u00e9sentation par n\u0153ud, et c&rsquo;est toujours un r\u00e9seau de neurones.<\/p>\n<h2 id=\"le-point-commun-des-poids-que-le-gradient-regle\">Le point commun : des poids que le gradient r\u00e8gle<\/h2>\n<p>Que le r\u00e9seau rende dix scores, une probabilit\u00e9 par action, une valeur par action ou un embedding par n\u0153ud, il se r\u00e8gle de la m\u00eame fa\u00e7on. Optimiser la politique, c&rsquo;est optimiser les param\u00e8tres du r\u00e9seau. Les r\u00e9seaux de neurones sont des mod\u00e8les bien connus et <strong>on sait les optimiser<\/strong> : avec des m\u00e9thodes fond\u00e9es sur le gradient, on mesure comment une modification des param\u00e8tres change le r\u00e9sultat.<\/p>\n<p>Devant n&rsquo;importe quel r\u00e9seau, tu peux donc poser trois questions :<\/p>\n<ol>\n<li>Quel tenseur entre : une liste, une grille, un graphe ?<\/li>\n<li>Que doit rendre la derni\u00e8re couche : des scores, des probabilit\u00e9s, des valeurs, une repr\u00e9sentation par n\u0153ud ?<\/li>\n<li>Que r\u00e8gle-t-on : les poids, \u00e0 partir d&rsquo;un signal comme une cible ou une r\u00e9compense ?<\/li>\n<\/ol>\n<blockquote>\n<p><strong>\ud83d\udccc \u00c0 retenir<\/strong> Un r\u00e9seau de neurones transforme un tenseur en un autre, par des couches de neurones \u00e0 poids r\u00e9glables. Sa derni\u00e8re couche \u00e9pouse la t\u00e2che, et son r\u00e9glage suit le gradient.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Une image, un \u00e9chiquier, un graphe : un r\u00e9seau de neurones avale un tenseur et en rend un autre. Apprends \u00e0 le reconna\u00eetre \u00e0 sa forme, du code \u00e0 la derni\u00e8re couche.<\/p>\n","protected":false},"author":1,"featured_media":731,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-732","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deep-learning"],"_links":{"self":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/732","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/comments?post=732"}],"version-history":[{"count":3,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/732\/revisions"}],"predecessor-version":[{"id":825,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/732\/revisions\/825"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media\/731"}],"wp:attachment":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media?parent=732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/categories?post=732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/tags?post=732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}