{"id":726,"date":"2026-10-09T18:20:57","date_gmt":"2026-10-09T16:20:57","guid":{"rendered":"https:\/\/www.ranksignal.fr\/blog\/?p=726"},"modified":"2026-10-14T17:51:15","modified_gmt":"2026-10-14T15:51:15","slug":"softmax","status":"publish","type":"post","link":"https:\/\/www.ranksignal.fr\/blog\/maths\/softmax\/","title":{"rendered":"Softmax : transformer des scores en probabilit\u00e9s"},"content":{"rendered":"<p><\/p>\n<p>Ton r\u00e9seau de neurones vient de terminer son calcul et il rend trois nombres : 2, 1 et 0. Tu voudrais savoir quelle chance a chaque option, mais ces trois nombres ne sont pas des chances : rien ne dit qu&rsquo;ils totalisent 100 %. Une petite fonction se charge de cette conversion, et elle appara\u00eet dans presque tous les mod\u00e8les modernes. Tu vas apprendre \u00e0 lire sa formule, \u00e0 la calculer \u00e0 la main et \u00e0 rep\u00e9rer les endroits o\u00f9 elle travaille.<\/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=\"#des-scores-bruts-a-une-distribution\">Des scores bruts \u00e0 une distribution<\/a><\/li>\n<li><a href=\"#la-formule-morceau-par-morceau\">La formule, morceau par morceau<\/a><\/li>\n<li><a href=\"#le-calcul-sur-trois-scores\">Le calcul sur trois scores<\/a><\/li>\n<li><a href=\"#choisir-une-action-au-hasard-pas-toujours-la-meilleure\">Choisir une action au hasard, pas toujours la meilleure<\/a><\/li>\n<li><a href=\"#un-score-ou-toute-une-liste-softmax-et-sigmoide\">Un score ou toute une liste : softmax et sigmo\u00efde<\/a><\/li>\n<li><a href=\"#dans-l-attention-un-budget-de-1-par-mot\">Dans l&rsquo;attention : un budget de 1 par mot<\/a><\/li>\n<li><a href=\"#adoucir-une-distribution-avec-la-temperature\">Adoucir une distribution avec la temp\u00e9rature<\/a><\/li>\n<li><a href=\"#deux-idees-recues-a-ecarter\">Deux id\u00e9es re\u00e7ues \u00e0 \u00e9carter<\/a><\/li>\n<\/ul>\n<h2 id=\"l-essentiel-en-30-secondes\">L&rsquo;essentiel en 30 secondes<\/h2>\n<ul>\n<li>Softmax prend <strong>une liste de scores bruts<\/strong> (les logits) et rend une liste de probabilit\u00e9s.<\/li>\n<li>Chaque probabilit\u00e9 est <strong>comprise entre 0 et 1<\/strong>, et l&rsquo;ensemble des sorties totalise 1.<\/li>\n<li>Elle se calcule avec l&rsquo;exponentielle de chaque score, <strong>divis\u00e9e par la somme<\/strong> de toutes ces exponentielles.<\/li>\n<li>Elle sert \u00e0 classer, \u00e0 choisir une action, \u00e0 pond\u00e9rer l&rsquo;attention : <strong>la m\u00eame op\u00e9ration, quatre m\u00e9tiers<\/strong>.<\/li>\n<li>Elle <strong>ne choisit rien<\/strong> : elle fournit la distribution, le tirage ou le maximum viennent apr\u00e8s.<\/li>\n<\/ul>\n<h2 id=\"des-scores-bruts-a-une-distribution\">Des scores bruts \u00e0 une distribution<\/h2>\n<p>Un r\u00e9seau qui doit d\u00e9partager plusieurs options ne produit pas directement des probabilit\u00e9s. Sa derni\u00e8re couche rend un <strong>vecteur de logits<\/strong>, avec un score par option ; pour un mod\u00e8le de langage, ce vecteur a la longueur du vocabulaire. C&rsquo;est seulement apr\u00e8s une normalisation que ces scores repr\u00e9sentent la probabilit\u00e9 que chaque option soit la bonne r\u00e9ponse.<\/p>\n<p>Cette normalisation, c&rsquo;est la softmax. Elle \u00e9crase les scores entre 0 et 1 et attribue \u00e0 chacun une importance relative par rapport aux autres.<\/p>\n<blockquote>\n<p><strong>\ud83d\udca1 Intuition<\/strong> Imagine un g\u00e2teau \u00e0 partager entre les options. Les logits disent qui m\u00e9rite la plus grosse part ; la softmax d\u00e9coupe le g\u00e2teau pour qu&rsquo;il ne reste aucune miette en trop ni en moins.<\/p>\n<\/blockquote>\n<h2 id=\"la-formule-morceau-par-morceau\">La formule, morceau par morceau<\/h2>\n<p>Pour un vecteur de scores <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-ede05c264bba0eda080918aaa09c4658_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"10\" style=\"vertical-align: 0px;\"\/> qui compte plusieurs entr\u00e9es, la softmax de la i-\u00e8me entr\u00e9e s&rsquo;\u00e9crit :<\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 45px;\"><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-2c8acafe0e4d26bf3e4ae4ec13e1427e_l3.png\" height=\"45\" width=\"92\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#121;&#95;&#105;&#61;&#92;&#102;&#114;&#97;&#99;&#123;&#101;&#94;&#123;&#120;&#95;&#105;&#125;&#125;&#123;&#92;&#115;&#117;&#109;&#95;&#106;&#32;&#101;&#94;&#123;&#120;&#95;&#106;&#125;&#125;&#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n<p>En pratique, on la calcule d&rsquo;un coup sous forme vectorielle : <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-2e61f092294099cb428267f2e2da49d4_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#121;&#32;&#61;&#32;&#101;&#94;&#123;&#120;&#125;&#32;&#47;&#32;&#92;&#109;&#97;&#116;&#104;&#114;&#109;&#123;&#115;&#117;&#109;&#125;&#40;&#101;&#94;&#123;&#120;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"120\" style=\"vertical-align: -5px;\"\/>.<\/p>\n<p>Lis-la en deux temps. Au num\u00e9rateur, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-9491c9ee798d271644f271f116f1aa4f_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#101;&#94;&#123;&#120;&#95;&#105;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"20\" style=\"vertical-align: 0px;\"\/> est l&rsquo;exponentielle du score de l&rsquo;option <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-695d9d59bd04859c6c99e7feb11daab6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#105;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"6\" style=\"vertical-align: 0px;\"\/>. Au d\u00e9nominateur, la somme de toutes les exponentielles joue le r\u00f4le de total \u00e0 partager : c&rsquo;est elle qui garantit que les poids d&rsquo;une m\u00eame position <strong>somment \u00e0 1<\/strong>.<\/p>\n<p>Le m\u00eame motif appara\u00eet quand on l&rsquo;applique \u00e0 des scores d&rsquo;alignement <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-647dc95cf79844742fdf2dc93bb0b70e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#101;&#95;&#123;&#105;&#44;&#106;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"23\" style=\"vertical-align: -6px;\"\/> :<\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 46px;\"><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-3f4a38bc5a4a53e5097aa0df4af17606_l3.png\" height=\"46\" width=\"293\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#97;&#95;&#123;&#105;&#44;&#106;&#125;&#61;&#92;&#109;&#97;&#116;&#104;&#114;&#109;&#123;&#115;&#111;&#102;&#116;&#109;&#97;&#120;&#125;&#40;&#101;&#95;&#123;&#105;&#44;&#106;&#125;&#41;&#61;&#92;&#102;&#114;&#97;&#99;&#123;&#92;&#101;&#120;&#112;&#40;&#101;&#95;&#123;&#105;&#44;&#106;&#125;&#41;&#125;&#123;&#92;&#115;&#117;&#109;&#95;&#123;&#107;&#61;&#49;&#125;&#94;&#123;&#116;&#125;&#92;&#101;&#120;&#112;&#40;&#101;&#95;&#123;&#105;&#44;&#107;&#125;&#41;&#125;&#46;&#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n<p>Ici le d\u00e9nominateur additionne les <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-b4e3cbf5d4c5c6d9b702dd139f14c147_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#116;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"6\" style=\"vertical-align: 0px;\"\/> scores de la ligne <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-695d9d59bd04859c6c99e7feb11daab6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#105;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"6\" style=\"vertical-align: 0px;\"\/>, et chaque <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-fb98d3bf5126abc18f4ad8a7803f562f_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#97;&#95;&#123;&#105;&#44;&#106;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"24\" style=\"vertical-align: -6px;\"\/> en est la part.<\/p>\n<h2 id=\"le-calcul-sur-trois-scores\">Le calcul sur trois scores<\/h2>\n<p>Prenons un agent qui apprend \u00e0 jouer \u00e0 un jeu vid\u00e9o, avec trois actions possibles : gauche, droite, saut. Son r\u00e9seau rend les logits 2, 1 et 0 (valeurs choisies pour l&rsquo;illustration). Applique la formule :<\/p>\n<table>\n<thead>\n<tr>\n<th>Action<\/th>\n<th>Score<\/th>\n<th>Exponentielle<\/th>\n<th>Probabilit\u00e9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>gauche<\/td>\n<td>2<\/td>\n<td>7,39<\/td>\n<td>66,5 %<\/td>\n<\/tr>\n<tr>\n<td>droite<\/td>\n<td>1<\/td>\n<td>2,72<\/td>\n<td>24,5 %<\/td>\n<\/tr>\n<tr>\n<td>saut<\/td>\n<td>0<\/td>\n<td>1,00<\/td>\n<td>9,0 %<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La somme des exponentielles vaut 11,11. Chaque exponentielle divis\u00e9e par ce total donne la derni\u00e8re colonne, qui totalise bien 100 %.<\/p>\n<p>Regarde l&rsquo;\u00e9cart entre les scores : <strong>un point de score de plus<\/strong> multiplie la probabilit\u00e9 par <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-3fb8d552d2037408571b83389d22507f_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#101;&#32;&#92;&#97;&#112;&#112;&#114;&#111;&#120;&#32;&#50;&#123;&#44;&#125;&#55;&#50;\" title=\"Rendered by QuickLaTeX.com\" height=\"17\" width=\"63\" style=\"vertical-align: -4px;\"\/>, il ne l&rsquo;augmente pas d&rsquo;un m\u00eame nombre de points. \u00ab Gauche \u00bb gagne de peu au score et nettement en probabilit\u00e9. Le saut, avec un score nul, garde pourtant 9 % de chance : aucune option n&rsquo;est \u00e9limin\u00e9e.<\/p>\n<h2 id=\"choisir-une-action-au-hasard-pas-toujours-la-meilleure\">Choisir une action au hasard, pas toujours la meilleure<\/h2>\n<p>Cet agent n&rsquo;est pas imaginaire. Dans l&rsquo;algorithme A3C, qui apprend \u00e0 jouer \u00e0 un jeu vid\u00e9o, le mod\u00e8le local produit pour chaque \u00e9tat <strong>un ensemble de probabilit\u00e9s<\/strong>, dont on tire une action par \u00e9chantillonnage.<\/p>\n<pre><code>for _ in range(opt.num_local_steps):\n            curr_step += 1\n            logits, value, h_0, c_0 = local_model(state, h_0, c_0)\n            policy = F.softmax(logits, dim=1)\n            log_policy = F.log_softmax(logits, dim=1)\n            entropy = -(policy * log_policy).sum(1, keepdim=True)\n            m = Categorical(policy)\n            action = m.sample().item()\n            state, reward, done, _ = env.step(action)\n            ...\n<\/code><\/pre>\n<p>Suis la cha\u00eene. <code>opt<\/code> regroupe les r\u00e9glages de l&rsquo;entra\u00eenement, <code>env<\/code> est l&rsquo;environnement du jeu et <code>F<\/code> vient de PyTorch. <code>local_model<\/code> rend les <code>logits<\/code> (et d&rsquo;autres sorties dont on ne se sert pas ici) ; <code>F.softmax<\/code> en fait la <code>policy<\/code>, c&rsquo;est-\u00e0-dire la distribution sur les actions ; <code>Categorical(policy)<\/code> permet de tirer une action selon ces probabilit\u00e9s ; <code>env.step(action)<\/code> l&rsquo;ex\u00e9cute dans le jeu. \u00c0 chaque pas, on enregistre le logarithme de la probabilit\u00e9 de l&rsquo;action choisie et l&rsquo;entropie de la politique, calcul\u00e9s \u00e0 partir de <code>policy<\/code> et de <code>log_policy<\/code>.<\/p>\n<p>Avec nos trois actions, le tirage donne \u00ab saut \u00bb environ une fois sur onze. Cette part de hasard permet \u00e0 l&rsquo;agent d&rsquo;essayer d&rsquo;autres actions que la plus probable.<\/p>\n<h2 id=\"un-score-ou-toute-une-liste-softmax-et-sigmoide\">Un score ou toute une liste : softmax et sigmo\u00efde<\/h2>\n<p>Une autre fonction transforme elle aussi un score en probabilit\u00e9 : la <a href=\"\/blog\/maths\/qu-est-ce-qu-une-sigmoide\/\" title=\"sigmo\u00efde\">sigmo\u00efde<\/a>. Elle prend <strong>un seul nombre<\/strong> et le place entre 0 et 1.<\/p>\n<p>Dans l&rsquo;apprentissage de repr\u00e9sentations de mots, elle r\u00e9pond \u00e0 une question \u00e0 deux issues : le mot <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-41a04eeea923a1a0c28094a8a4680525_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#99;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"8\" style=\"vertical-align: 0px;\"\/> est-il attendu dans le contexte du mot <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;\"\/>, oui ou non ? Le score est le produit scalaire <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-e4d8d2cf04e2db55e2b30e2e4cbe15c5_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#99;&#92;&#99;&#100;&#111;&#116;&#32;&#119;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"33\" style=\"vertical-align: 0px;\"\/> de leurs vecteurs, et la sigmo\u00efde le convertit en probabilit\u00e9 :<\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 41px;\"><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-85ac149f69d9f0f6c2594c4520a80256_l3.png\" height=\"41\" width=\"317\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#80;&#40;&#43;&#92;&#109;&#105;&#100;&#32;&#119;&#44;&#99;&#41;&#61;&#92;&#115;&#105;&#103;&#109;&#97;&#40;&#99;&#92;&#99;&#100;&#111;&#116;&#32;&#119;&#41;&#61;&#92;&#102;&#114;&#97;&#99;&#123;&#49;&#125;&#123;&#49;&#43;&#92;&#101;&#120;&#112;&#40;&#45;&#99;&#92;&#99;&#100;&#111;&#116;&#32;&#119;&#41;&#125;&#46;&#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n<p>Un seul score entre, une seule probabilit\u00e9 sort.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef471ee125&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef471ee125\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2100\" 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\/b4_ch03_fonction_logistique_sigmoide.png\" alt=\"Courbe logistique en S, born\u00e9e entre 0 et 1, compar\u00e9e \u00e0 une droite de r\u00e9gression qui sort de cet intervalle\" class=\"wp-image-723\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch03_fonction_logistique_sigmoide.png 2100w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch03_fonction_logistique_sigmoide-300x214.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch03_fonction_logistique_sigmoide-1024x731.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch03_fonction_logistique_sigmoide-768x549.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch03_fonction_logistique_sigmoide-1536x1097.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b4_ch03_fonction_logistique_sigmoide-2048x1463.png 2048w\" sizes=\"auto, (max-width: 2100px) 100vw, 2100px\" \/><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 la courbe orange : si grand ou si petit que soit le score, la sortie reste entre 0 et 1, alors que la droite pointill\u00e9e d\u00e9passe l&rsquo;intervalle.<\/figcaption><\/figure>\n\n\n<p>Le choix entre les deux d\u00e9pend du nombre d&rsquo;issues. Un classifieur de sentiments qui ne distingue que \u00ab positif \u00bb et \u00ab n\u00e9gatif \u00bb se contente d&rsquo;<strong>une seule sortie suivie d&rsquo;une sigmo\u00efde<\/strong>. D\u00e8s qu&rsquo;il y a trois classes (positif, neutre, n\u00e9gatif), on applique une softmax au r\u00e9sultat de <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-39fa4451eeee6f21c8ad15bab2ed2481_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;&#104;&#95;&#123;&#67;&#76;&#83;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"58\" style=\"vertical-align: -3px;\"\/> pour obtenir une probabilit\u00e9 par classe.<\/p>\n<h2 id=\"dans-l-attention-un-budget-de-1-par-mot\">Dans l&rsquo;attention : un budget de 1 par mot<\/h2>\n<p>La softmax ne se cache pas seulement en sortie de r\u00e9seau. Dans l&rsquo;attention, les scores sont des produits scalaires entre requ\u00eates et cl\u00e9s, et la softmax les convertit en poids entre 0 et 1 :<\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 45px;\"><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-b4a0c8ab6def29e3f6029fce3672b97c_l3.png\" height=\"45\" width=\"321\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#92;&#109;&#97;&#116;&#104;&#114;&#109;&#123;&#65;&#116;&#116;&#101;&#110;&#116;&#105;&#111;&#110;&#125;&#40;&#81;&#44;&#75;&#44;&#86;&#41;&#61;&#92;&#109;&#97;&#116;&#104;&#114;&#109;&#123;&#115;&#111;&#102;&#116;&#109;&#97;&#120;&#125;&#92;&#33;&#92;&#108;&#101;&#102;&#116;&#40;&#92;&#102;&#114;&#97;&#99;&#123;&#81;&#75;&#94;&#123;&#84;&#125;&#125;&#123;&#92;&#115;&#113;&#114;&#116;&#123;&#100;&#95;&#107;&#125;&#125;&#92;&#114;&#105;&#103;&#104;&#116;&#41;&#86;&#46;&#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n<p>Les poids obtenus pour une m\u00eame position somment \u00e0 1 : ils fonctionnent comme <strong>un budget d&rsquo;attention<\/strong> que le mot r\u00e9partit entre les autres. Le produit par <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-63ada879859a9e41fd935f035b7313bc_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#86;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/> en fait une moyenne pond\u00e9r\u00e9e des valeurs.<\/p>\n<h2 id=\"adoucir-une-distribution-avec-la-temperature\">Adoucir une distribution avec la temp\u00e9rature<\/h2>\n<p>Il arrive qu&rsquo;on veuille comparer deux distributions de probabilit\u00e9s plut\u00f4t qu&rsquo;en tirer une action. C&rsquo;est le cas de la distillation, o\u00f9 un petit mod\u00e8le \u00e9l\u00e8ve cherche \u00e0 imiter un grand mod\u00e8le enseignant : la perte compare leurs logits \u00e0 l&rsquo;aide de la divergence de Kullback-Leibler, qui mesure la diff\u00e9rence entre deux distributions.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef471ee57f&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef471ee57f\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2250\" height=\"1200\" 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\/b1_ch02_distillation.png\" alt=\"Sch\u00e9ma de distillation : m\u00eames exemples d'entr\u00e9e pour un enseignant fig\u00e9 et un \u00e9l\u00e8ve entra\u00een\u00e9, dont les logits alimentent la perte\" class=\"wp-image-724\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_distillation.png 2250w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_distillation-300x160.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_distillation-1024x546.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_distillation-768x410.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_distillation-1536x819.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_distillation-2048x1092.png 2048w\" sizes=\"auto, (max-width: 2250px) 100vw, 2250px\" \/><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 le sch\u00e9ma de haut en bas : deux mod\u00e8les re\u00e7oivent les m\u00eames exemples, et c&rsquo;est l&rsquo;\u00e9cart entre leurs logits qui devient la perte.<\/figcaption><\/figure>\n\n\n<p>Le code la calcule ainsi :<\/p>\n<pre><code>def distillation_loss(outputs_student, outputs_teacher,\n                      temperature=2.0):\n    log_prob_student = F.log_softmax(\n        outputs_student \/ temperature, dim=-1)\n    prob_teacher = F.softmax(\n        outputs_teacher \/ temperature, dim=-1)\n    loss = KLDivLoss(reduction='batchmean')(\n        log_prob_student, prob_teacher)\n    return loss\n<\/code><\/pre>\n<p>Les logits des deux mod\u00e8les sont <strong>divis\u00e9s par la temp\u00e9rature<\/strong> avant d&rsquo;entrer dans la softmax : l&rsquo;\u00e9l\u00e8ve passe par <code>log_softmax<\/code>, l&rsquo;enseignant par <code>softmax<\/code>, et <code>KLDivLoss<\/code> compare les deux. La temp\u00e9rature adoucit les distributions avant comparaison.<\/p>\n<p>Reprends nos scores avec la valeur par d\u00e9faut <code>temperature=2.0<\/code> : ils deviennent 1, 0,5 et 0, ce qui donne environ 50,7 %, 30,7 % et 18,6 %. Le saut passe de 9 % \u00e0 pr\u00e8s de 19 % : la distribution est plus plate, plus indulgente.<\/p>\n<h2 id=\"deux-idees-recues-a-ecarter\">Deux id\u00e9es re\u00e7ues \u00e0 \u00e9carter<\/h2>\n<h3>\u00ab Softmax choisit la r\u00e9ponse \u00bb<\/h3>\n<p>Non : elle rend une distribution, rien de plus. Pour un mod\u00e8le de langage, une \u00e9tape ult\u00e9rieure pioche le token au sort en donnant \u00e0 chacun le poids que la distribution lui accorde ; dans l&rsquo;exemple de l&rsquo;agent, c&rsquo;est l&rsquo;\u00e9chantillonnage de <code>Categorical<\/code> qui d\u00e9signe l&rsquo;action. <strong>Le choix est une \u00e9tape distincte.<\/strong><\/p>\n<h3>\u00ab Softmax sert \u00e0 classer des images ou du texte, et c&rsquo;est tout \u00bb<\/h3>\n<p>La m\u00eame op\u00e9ration revient avec des sens diff\u00e9rents :<\/p>\n<ul>\n<li>sur une classe, dans la couche de classification d&rsquo;un mod\u00e8le de type BERT ;<\/li>\n<li>sur un mot du vocabulaire, \u00e0 la sortie d&rsquo;un mod\u00e8le de langage ;<\/li>\n<li>sur une action, dans la politique d&rsquo;un agent ;<\/li>\n<li>sur un autre mot de la phrase, dans l&rsquo;attention.<\/li>\n<\/ul>\n<p>Ce qui change, c&rsquo;est la signification des scores qui entrent. La softmax, elle, se contente de les convertir en parts d&rsquo;un total \u00e9gal \u00e0 1.<\/p>","protected":false},"excerpt":{"rendered":"<p>Softmax convertit une liste de scores bruts en probabilit\u00e9s qui totalisent 1. Sa formule, un calcul chiffr\u00e9, et les endroits o\u00f9 elle travaille vraiment.<\/p>\n","protected":false},"author":1,"featured_media":725,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-726","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-maths"],"_links":{"self":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/726","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=726"}],"version-history":[{"count":3,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/726\/revisions"}],"predecessor-version":[{"id":828,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/726\/revisions\/828"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media\/725"}],"wp:attachment":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media?parent=726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/categories?post=726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/tags?post=726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}