{"id":686,"date":"2026-10-09T17:07:32","date_gmt":"2026-10-09T15:07:32","guid":{"rendered":"https:\/\/www.ranksignal.fr\/blog\/?p=686"},"modified":"2026-10-09T17:07:34","modified_gmt":"2026-10-09T15:07:34","slug":"lora-low-rank-adaptation","status":"publish","type":"post","link":"https:\/\/www.ranksignal.fr\/blog\/machine-learning\/lora-low-rank-adaptation\/","title":{"rendered":"LoRA : le pari du faible rang pour adapter un gros mod\u00e8le"},"content":{"rendered":"<p><\/p>\n<p>Garde seulement une trentaine de valeurs singuli\u00e8res d&rsquo;une image, et elle redevient presque indiscernable de l&rsquo;originale ; avec trois, l&rsquo;essentiel des d\u00e9tails a disparu.  Pose maintenant la m\u00eame question \u00e0 la correction qu&rsquo;il faut apporter aux poids d&rsquo;un grand mod\u00e8le : de combien de nombres a-t-elle vraiment besoin ? LoRA r\u00e9pond \u00ab tr\u00e8s peu \u00bb, et tout son principe tient dans ce pari. Quand tu auras tout lu, \u00ab faible rang \u00bb n&rsquo;aura plus de myst\u00e8re pour toi et une configuration LoRA se lira ligne par ligne.<\/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=\"#le-rang-d-une-matrice-sa-part-d-information-independante\">Le rang d&rsquo;une matrice : sa part d&rsquo;information ind\u00e9pendante<\/a><\/li>\n<li><a href=\"#trente-valeurs-pour-toute-une-image-la-compression-par-svd\">Trente valeurs pour toute une image : la compression par SVD<\/a><\/li>\n<li><a href=\"#lora-applique-ce-pari-a-la-correction-des-poids\">LoRA applique ce pari \u00e0 la correction des poids<\/a><\/li>\n<li><a href=\"#lire-une-configuration-lora-ligne-par-ligne\">Lire une configuration LoRA ligne par ligne<\/a><\/li>\n<li><a href=\"#lora-ne-decide-pas-de-l-objectif-d-entrainement\">LoRA ne d\u00e9cide pas de l&rsquo;objectif d&rsquo;entra\u00eenement<\/a><\/li>\n<li><a href=\"#ou-vit-la-partie-entrainee-lora-adaptateurs-prefixes\">O\u00f9 vit la partie entra\u00een\u00e9e : LoRA, adaptateurs, pr\u00e9fixes<\/a><\/li>\n<li><a href=\"#ce-que-lora-ne-fait-pas\">Ce que LoRA ne fait pas<\/a><\/li>\n<\/ul>\n<h2 id=\"l-essentiel-en-30-secondes\">L&rsquo;essentiel en 30 secondes<\/h2>\n<ul>\n<li>LoRA (Low-Rank Adaptation) <strong>n&rsquo;entra\u00eene qu&rsquo;une correction<\/strong> ajout\u00e9e aux poids gel\u00e9s du mod\u00e8le, jamais les poids eux-m\u00eames.<\/li>\n<li>Cette correction s&rsquo;\u00e9crit comme <strong>le produit de deux petites matrices<\/strong>, A et B, de rang faible.<\/li>\n<li>Le pari ressemble \u00e0 celui de la compression d&rsquo;image : <strong>peu de composantes suffisent<\/strong> \u00e0 restituer l&rsquo;essentiel.<\/li>\n<li>En code, tout se r\u00e8gle dans une configuration courte o\u00f9 <strong>le rang r et les matrices cibl\u00e9es<\/strong> comptent le plus.<\/li>\n<li>LoRA <strong>ne change pas l&rsquo;architecture<\/strong> du mod\u00e8le : seul son comportement bouge.<\/li>\n<\/ul>\n<h2 id=\"le-rang-d-une-matrice-sa-part-d-information-independante\">Le rang d&rsquo;une matrice : sa part d&rsquo;information ind\u00e9pendante<\/h2>\n<p>Une matrice est un tableau de nombres, mais toutes ses colonnes ne disent pas des choses diff\u00e9rentes. Si la troisi\u00e8me colonne d&rsquo;un tableau n&rsquo;est que la somme des deux premi\u00e8res, elle n&rsquo;apprend rien de neuf : on dit qu&rsquo;elle est lin\u00e9airement d\u00e9pendante des autres.<\/p>\n<p>Le nombre maximal de colonnes lin\u00e9airement ind\u00e9pendantes s&rsquo;appelle le <strong>rang<\/strong> de la matrice. Il ne d\u00e9passe jamais la plus petite de ses deux dimensions, et il mesure en quelque sorte la quantit\u00e9 d&rsquo;information r\u00e9ellement ind\u00e9pendante qu&rsquo;elle contient.  Retiens une cons\u00e9quence : une matrice tr\u00e8s \u00e9troite, avec peu de colonnes, est <strong>forc\u00e9ment de rang faible<\/strong>.<\/p>\n<p>Pour voir ce rang \u00e0 l&rsquo;\u0153uvre, il existe un outil : la d\u00e9composition en valeurs singuli\u00e8res, ou SVD. Toute matrice <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-10ebb71bad275c1815a8f2a8c5dea0be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#77;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"19\" style=\"vertical-align: 0px;\"\/> de taille <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-5318ec8a850d9431e3fecca4da591a6e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#110;&#32;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#100;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"42\" style=\"vertical-align: 0px;\"\/> peut s&rsquo;\u00e9crire<\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 21px;\"><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-8fcc9166ba3dd01da4d79ef8019109c3_l3.png\" height=\"21\" width=\"203\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#92;&#109;&#97;&#116;&#104;&#98;&#102;&#123;&#77;&#125;&#95;&#123;&#110;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#100;&#125;&#32;&#61;&#32;&#92;&#109;&#97;&#116;&#104;&#98;&#102;&#123;&#85;&#125;&#95;&#123;&#110;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#110;&#125;&#92;&#44;&#32;&#92;&#109;&#97;&#116;&#104;&#98;&#102;&#123;&#83;&#125;&#95;&#123;&#110;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#100;&#125;&#92;&#44;&#32;&#92;&#109;&#97;&#116;&#104;&#98;&#102;&#123;&#86;&#125;&#94;&#84;&#95;&#123;&#100;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#100;&#125;&#44;&#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n<p>o\u00f9 <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-2b60fc262803f27ba3717d8ec4eb656d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"13\" style=\"vertical-align: 0px;\"\/> et <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;\"\/> sont des matrices orthogonales et <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-520cb534cd5b6bed768a61515b57cb7e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#83;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"12\" style=\"vertical-align: 0px;\"\/> une matrice diagonale. Les \u00e9l\u00e9ments de <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-520cb534cd5b6bed768a61515b57cb7e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#83;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"12\" style=\"vertical-align: 0px;\"\/>, les valeurs singuli\u00e8res, sont rang\u00e9s par ordre d\u00e9croissant, et <strong>leur nombre non nul \u00e9gale le rang<\/strong> de <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-10ebb71bad275c1815a8f2a8c5dea0be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#77;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"19\" style=\"vertical-align: 0px;\"\/>.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef46d6dcff&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef46d6dcff\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"670\" 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_ch04_decomposition_svd_triangle-scaled.png\" alt=\"Quatre panneaux : un triangle d'abord intact, puis tourn\u00e9 par V transpos\u00e9e, \u00e9tir\u00e9 par S jusqu'\u00e0 s'aplatir presque en segment, enfin tourn\u00e9 par U pour donner la transformation compl\u00e8te\" class=\"wp-image-682\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-scaled.png 2560w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-300x78.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-1024x268.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-768x201.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-1536x402.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-2048x536.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><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 panneaux dans l&rsquo;ordre : le triangle pivote, puis l&rsquo;\u00e9tirement par <img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"670\" 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_ch04_decomposition_svd_triangle-scaled.png\" alt=\"Quatre panneaux : un triangle d'abord intact, puis tourn\u00e9 par V transpos\u00e9e, \u00e9tir\u00e9 par S jusqu'\u00e0 s'aplatir presque en segment, enfin tourn\u00e9 par U pour donner la transformation compl\u00e8te\" class=\"wp-image-682\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-scaled.png 2560w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-300x78.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-1024x268.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-768x201.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-1536x402.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_decomposition_svd_triangle-2048x536.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><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> l&rsquo;\u00e9crase presque en un segment quasi vertical, avant une derni\u00e8re rotation. Toute transformation lin\u00e9aire se d\u00e9coupe ainsi en trois gestes : tourner, \u00e9tirer, tourner de nouveau. Les valeurs singuli\u00e8res mesurent l&rsquo;intensit\u00e9 de l&rsquo;\u00e9tirement.<\/figcaption><\/figure>\n\n\n<h2 id=\"trente-valeurs-pour-toute-une-image-la-compression-par-svd\">Trente valeurs pour toute une image : la compression par SVD<\/h2>\n<p>Une image en niveaux de gris n&rsquo;est jamais qu&rsquo;une matrice de valeurs de pixels. En ne conservant que les <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-3422b6bb5c160593658b7c39425d9880_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#107;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"9\" style=\"vertical-align: 0px;\"\/> premi\u00e8res valeurs singuli\u00e8res, celles qui portent l&rsquo;essentiel de l&rsquo;information, tu reconstruis une version tr\u00e8s proche de l&rsquo;original pour un espace de stockage bien moindre.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef46d6e1e1&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef46d6e1e1\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"709\" 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_ch04_compression_image_svd-scaled.png\" alt=\"Une m\u00eame forme abstraite en noir et blanc : l'image d'origine \u00e0 rang plein, puis trois reconstructions avec 3, 10 et 30 valeurs singuli\u00e8res, de plus en plus nettes\" class=\"wp-image-683\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_compression_image_svd-scaled.png 2560w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_compression_image_svd-300x83.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_compression_image_svd-1024x284.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_compression_image_svd-768x213.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_compression_image_svd-1536x425.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b3_ch04_compression_image_svd-2048x567.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><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><\/figure>\n\n\n<p style=\"text-align: center;\"><em>Compare les vignettes de gauche \u00e0 droite : avec <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-85c520d4d93c7b2260f11feb4713042b_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#107;&#32;&#61;&#32;&#51;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"42\" style=\"vertical-align: 0px;\"\/>, presque tous les d\u00e9tails ont disparu ; avec <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-00c49dd0b8d2abf5bcd358b83c8652cb_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#107;&#32;&#61;&#32;&#51;&#48;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"51\" style=\"vertical-align: 0px;\"\/>, la reconstruction se distingue \u00e0 peine de l&rsquo;original. Le compromis entre qualit\u00e9 et compression se lit dans le rapport entre la somme des carr\u00e9s des valeurs singuli\u00e8res gard\u00e9es et celle de toutes les valeurs singuli\u00e8res.<\/em><\/p>\n<p>Ce que montre cette photo, c&rsquo;est qu&rsquo;une grande matrice peut <strong>cacher peu d&rsquo;information ind\u00e9pendante<\/strong>. C&rsquo;est exactement ce que suppose l&rsquo;hypoth\u00e8se du rang intrins\u00e8que pour un r\u00e9seau de neurones : les changements significatifs de ses poids se capturent avec une repr\u00e9sentation de plus petite dimension.<\/p>\n<h2 id=\"lora-applique-ce-pari-a-la-correction-des-poids\">LoRA applique ce pari \u00e0 la correction des poids<\/h2>\n<p>Quand tu ajustes un mod\u00e8le, ses poids <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-4caed22919a1780df1b6310b338b904e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"19\" style=\"vertical-align: 0px;\"\/> deviennent <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-94e40dbfbbf605dbab4df49458252be9_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;&#39;&#32;&#61;&#32;&#87;&#32;&#43;&#32;&#92;&#68;&#101;&#108;&#116;&#97;&#32;&#87;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"122\" style=\"vertical-align: -2px;\"\/>, o\u00f9 <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-317c286040e1479281fb8e09001d293e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#68;&#101;&#108;&#116;&#97;&#32;&#87;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"34\" style=\"vertical-align: 0px;\"\/> est la correction apprise pendant l&rsquo;entra\u00eenement. LoRA refuse de stocker cette correction en entier : il la repr\u00e9sente par le produit de deux petites matrices <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-25b206f25506e6d6f46be832f7119ffa_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> et <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-770fd1447ccf2fc229801b486b0d8f8a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/>, et <strong>n&rsquo;entra\u00eene qu&rsquo;elles<\/strong>.<\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 20px;\"><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-b4d8f4464de04d17d28e523a6cb346d3_l3.png\" height=\"20\" width=\"240\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91;&#89;&#61;&#87;&#39;&#88;&#44;&#92;&#113;&#113;&#117;&#97;&#100;&#32;&#87;&#39;&#61;&#87;&#43;&#66;&#65;&#46;&#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n<p>Lis cette formule de droite \u00e0 gauche : <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-3bd330a601d21818fc8ccb7377aa4e91_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"27\" style=\"vertical-align: 0px;\"\/> est la correction, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-4caed22919a1780df1b6310b338b904e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"19\" style=\"vertical-align: 0px;\"\/> le mod\u00e8le d&rsquo;origine qui ne bouge pas, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-ee3daf21bf5ff06daf5e6cc5f34c8591_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;&#39;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"23\" style=\"vertical-align: 0px;\"\/> leur somme, et <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-82606c3098bb09002088b0f6f9ffbb2a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#89;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/> ce que <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-ee3daf21bf5ff06daf5e6cc5f34c8591_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;&#39;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"23\" style=\"vertical-align: 0px;\"\/> fait de l&rsquo;entr\u00e9e <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-d4ee28752517d6062a3ca0314890342d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#88;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"16\" style=\"vertical-align: 0px;\"\/>.<\/p>\n<p>Pour que cette somme ait un sens, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-3bd330a601d21818fc8ccb7377aa4e91_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"27\" style=\"vertical-align: 0px;\"\/> doit avoir la m\u00eame taille que <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-4caed22919a1780df1b6310b338b904e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"19\" style=\"vertical-align: 0px;\"\/>, car on n&rsquo;additionne que des matrices de m\u00eame taille. Or un produit n&rsquo;existe que si le nombre de colonnes de la premi\u00e8re matrice \u00e9gale le nombre de lignes de la seconde.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef46d6e5e8&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef46d6e5e8\" 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_ch03_lora.png\" alt=\"Une entr\u00e9e x suit deux chemins en parall\u00e8le : une grande matrice W gel\u00e9e de taille d par d, et deux rectangles \u00e9troits, A de taille r par d puis B de taille d par r, dont les sorties s'additionnent\" class=\"wp-image-684\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch03_lora.png 2250w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch03_lora-300x160.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch03_lora-1024x546.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch03_lora-768x410.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch03_lora-1536x819.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch03_lora-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><\/figure>\n\n\n<p style=\"text-align: center;\"><em>Regarde les \u00e9tiquettes de tailles : <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-4caed22919a1780df1b6310b338b904e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"19\" style=\"vertical-align: 0px;\"\/> est un grand carr\u00e9 <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-168ed3e810d3bffdd15780d3a619ab0e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#100;&#32;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#100;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"41\" style=\"vertical-align: 0px;\"\/>, alors que <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-25b206f25506e6d6f46be832f7119ffa_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> (<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-fcd0be086475f762d97b3cc17205ad3a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#114;&#32;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#100;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"40\" style=\"vertical-align: 0px;\"\/>) et <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-770fd1447ccf2fc229801b486b0d8f8a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/> (<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-a70430554aee950a51adfc7fbd1f772b_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#100;&#32;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#114;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"39\" style=\"vertical-align: 0px;\"\/>) sont deux rectangles \u00e9troits. Dans le produit <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-3bd330a601d21818fc8ccb7377aa4e91_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"27\" style=\"vertical-align: 0px;\"\/>, la dimension commune <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-c409433a9e2dfcdb83360a974d243f18_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#114;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"8\" style=\"vertical-align: 0px;\"\/> dispara\u00eet et il reste une matrice <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-168ed3e810d3bffdd15780d3a619ab0e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#100;&#32;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#100;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"41\" style=\"vertical-align: 0px;\"\/>, de la taille de <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-4caed22919a1780df1b6310b338b904e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"19\" style=\"vertical-align: 0px;\"\/>.<\/em><\/p>\n<p>Comme la multiplication matricielle est associative, calculer <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-0d7cd46326e488d15b4ff8ede62947a9_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;&#40;&#65;&#120;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"50\" style=\"vertical-align: -5px;\"\/> ou <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-77aaafe6082ccba9cab20aefc7673d76_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#40;&#66;&#65;&#41;&#120;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"50\" style=\"vertical-align: -5px;\"\/> donne le m\u00eame r\u00e9sultat, et la sortie de la figure s&rsquo;\u00e9crit <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-65d506c51c5442c72c8cb42e0725c7ef_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#121;&#32;&#61;&#32;&#87;&#120;&#32;&#43;&#32;&#66;&#65;&#120;\" title=\"Rendered by QuickLaTeX.com\" height=\"17\" width=\"121\" style=\"vertical-align: -4px;\"\/>. Le nombre <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-c409433a9e2dfcdb83360a974d243f18_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#114;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"8\" style=\"vertical-align: 0px;\"\/> est la largeur du goulot que traversent <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-25b206f25506e6d6f46be832f7119ffa_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> et <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-770fd1447ccf2fc229801b486b0d8f8a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/> : par analogie, c&rsquo;est le <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-3422b6bb5c160593658b7c39425d9880_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#107;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"9\" style=\"vertical-align: 0px;\"\/> de la photo compress\u00e9e, la place qu&rsquo;on laisse \u00e0 la correction.<\/p>\n<blockquote>\n<p><strong>\ud83d\udca1 Intuition<\/strong> Imagine un calque transparent pos\u00e9 sur un plan : le plan n&rsquo;est pas redessin\u00e9, on y trace seulement la correction. Et parce que cette correction est de rang faible, elle tient dans un petit rectangle.<\/p>\n<\/blockquote>\n<h2 id=\"lire-une-configuration-lora-ligne-par-ligne\">Lire une configuration LoRA ligne par ligne<\/h2>\n<p>Tu veux ajuster Phi-3-mini, un mod\u00e8le de 3,8 milliards de param\u00e8tres. Il faut deux gestes : charger le mod\u00e8le sans saturer la m\u00e9moire, puis y brancher LoRA. Voici comment un exemple en Python les \u00e9crit avec les biblioth\u00e8ques <code>transformers<\/code> et <code>peft<\/code> :<\/p>\n<pre><code>import torch, os\nfrom transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments,\n    BitsAndBytesConfig\nfrom peft import LoraConfig, get_peft_model\n...\nBASE_SFT_CKPT = \"microsoft\/Phi-3-mini-4k-instruct\"\n...\nbnb_config = BitsAndBytesConfig(\n    load_in_4bit=True,\n    bnb_4bit_use_double_quant=True,\n    bnb_4bit_compute_dtype=torch.bfloat16\n)\n\nbase = AutoModelForCausalLM.from_pretrained(\n    BASE_SFT_CKPT,\n    device_map=\"auto\",\n    torch_dtype=torch.bfloat16,\n    quantization_config=bnb_config\n)\n\nlora_cfg = LoraConfig(\n    r=8,\n    lora_alpha=16,\n    lora_dropout=0.05,\n   target_modules=[\"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\", \"gate_proj\",\n                    \"up_proj\", \"down_proj\"],\n    bias=\"none\",\n    task_type=\"CAUSAL_LM\",\n)\nmodel = get_peft_model(base, lora_cfg)\n<\/code><\/pre>\n<p>Lis le bloc en trois temps, de haut en bas. D&rsquo;abord <code>BitsAndBytesConfig<\/code>, qui d\u00e9crit le chargement : le mod\u00e8le de base passe en <strong>pr\u00e9cision r\u00e9duite, sur 4 bits<\/strong>, pour tenir en m\u00e9moire. C&rsquo;est un r\u00e9glage de chargement, distinct de LoRA.<\/p>\n<p>Vient ensuite <code>LoraConfig<\/code>, qui d\u00e9crit la correction. <code>r=8<\/code> fixe le rang, donc la largeur du goulot des matrices <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-25b206f25506e6d6f46be832f7119ffa_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> et <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-770fd1447ccf2fc229801b486b0d8f8a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/>. <code>target_modules<\/code> liste sept noms de couches : les projections d&rsquo;attention (<code>q_proj<\/code>, <code>k_proj<\/code>, <code>v_proj<\/code>, <code>o_proj<\/code>) et celles de la couche dense (<code>gate_proj<\/code>, <code>up_proj<\/code>, <code>down_proj<\/code>). Ce sont <strong>les seules couches \u00e0 recevoir l&rsquo;adaptation<\/strong>.<\/p>\n<p>Deux lignes restent \u00e0 situer. <code>task_type=\"CAUSAL_LM\"<\/code> annonce un mod\u00e8le de langage causal, qui pr\u00e9dit le jeton suivant d&rsquo;apr\u00e8s les pr\u00e9c\u00e9dents. <code>lora_alpha<\/code>, <code>lora_dropout<\/code> et <code>bias<\/code> sont trois r\u00e9glages d&rsquo;accompagnement, laiss\u00e9s tels quels dans cet exemple.<\/p>\n<p>Reste le dernier geste : <code>get_peft_model(base, lora_cfg)<\/code> enveloppe le mod\u00e8le de base dans les adaptateurs LoRA de rang 8. Le <code>model<\/code> obtenu est celui que tu donneras ensuite \u00e0 l&rsquo;entra\u00eenement.<\/p>\n<h2 id=\"lora-ne-decide-pas-de-l-objectif-d-entrainement\">LoRA ne d\u00e9cide pas de l&rsquo;objectif d&rsquo;entra\u00eenement<\/h2>\n<p>LoRA est-il une m\u00e9thode d&rsquo;entra\u00eenement au m\u00eame titre que l&rsquo;affinage supervis\u00e9 ou l&rsquo;optimisation directe des pr\u00e9f\u00e9rences (DPO) ? Les exemples de code r\u00e9pondent non, et le montrent par deux entr\u00e9es diff\u00e9rentes.<\/p>\n<p>Pour l&rsquo;affinage supervis\u00e9, la fonction d&rsquo;entra\u00eenement re\u00e7oit la configuration sous le nom <code>peft_cfg<\/code> et la transmet \u00e0 l&rsquo;entra\u00eeneur par <code>peft_config=peft_cfg<\/code>. Pour l&rsquo;optimisation des pr\u00e9f\u00e9rences, le mod\u00e8le est d&rsquo;abord envelopp\u00e9 par <code>get_peft_model<\/code>, comme dans le bloc pr\u00e9c\u00e9dent, puis affin\u00e9 avec un entra\u00eeneur DPO. Dans les deux cas, la perte et les donn\u00e9es appartiennent \u00e0 l&rsquo;entra\u00eenement ; LoRA se contente de <strong>limiter les poids qui bougent<\/strong>.<\/p>\n<p>Cette s\u00e9paration explique pourquoi on le retrouve partout. Un exemple d&rsquo;appel de fonctions l&#8217;emploie pour n&rsquo;adapter que des couches cibl\u00e9es, et LoRA comme QLoRA sont cit\u00e9s parmi les techniques qui r\u00e9duisent le co\u00fbt de l&rsquo;ajustement, avec des biblioth\u00e8ques comme TRL, Unsloth ou Axolotl pour le r\u00e9aliser.<\/p>\n<h2 id=\"ou-vit-la-partie-entrainee-lora-adaptateurs-prefixes\">O\u00f9 vit la partie entra\u00een\u00e9e : LoRA, adaptateurs, pr\u00e9fixes<\/h2>\n<p>LoRA fait partie d&rsquo;une famille de m\u00e9thodes qui n&rsquo;entra\u00eenent qu&rsquo;une poign\u00e9e de param\u00e8tres : le finetuning \u00e0 param\u00e8tres efficients, abr\u00e9g\u00e9 PEFT. Ce qui les distingue, c&rsquo;est l&rsquo;endroit o\u00f9 se loge la partie entra\u00een\u00e9e :<\/p>\n<table>\n<thead>\n<tr>\n<th>M\u00e9thode<\/th>\n<th>Ce qu&rsquo;on entra\u00eene<\/th>\n<th>O\u00f9 cela se loge<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>LoRA<\/td>\n<td>deux petites matrices <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-25b206f25506e6d6f46be832f7119ffa_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> et <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-770fd1447ccf2fc229801b486b0d8f8a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/><\/td>\n<td>en parall\u00e8le d&rsquo;une matrice gel\u00e9e, leur produit s&rsquo;ajoute \u00e0 sa sortie<\/td>\n<\/tr>\n<tr>\n<td>Adaptateurs<\/td>\n<td>de petites couches ajustables, de structure proche d&rsquo;un autoencodeur<\/td>\n<td>\u00e0 l&rsquo;int\u00e9rieur des blocs du transformeur<\/td>\n<\/tr>\n<tr>\n<td>Prompt tuning<\/td>\n<td>un tenseur entra\u00eenable<\/td>\n<td>devant les embeddings d&rsquo;entr\u00e9e<\/td>\n<\/tr>\n<tr>\n<td>Prefix tuning<\/td>\n<td>des tenseurs entra\u00eenables<\/td>\n<td>dans les \u00e9tats cach\u00e9s de toutes les couches<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Les deux derni\u00e8res lignes touchent \u00e0 ce que le mod\u00e8le voit en entr\u00e9e ou en cours de route, alors que LoRA ajoute sa correction \u00e0 la sortie d&rsquo;une matrice existante. Le prompt tuning et le prefix tuning peuvent d&rsquo;ailleurs \u00eatre <strong>instables<\/strong>, ce qui explique que LoRA et les adaptateurs dominent l&rsquo;usage.<\/p>\n<h2 id=\"ce-que-lora-ne-fait-pas\">Ce que LoRA ne fait pas<\/h2>\n<h3>\u00ab LoRA modifie l&rsquo;architecture \u00bb<\/h3>\n<p>Non. Une m\u00eame architecture se d\u00e9cline en plusieurs tailles, en plusieurs variantes (les versions \u00ab base \u00bb et \u00ab instruct \u00bb la partagent) et en un nombre illimit\u00e9 d&rsquo;affinages, comme LoRA, qui changent le comportement mais pas l&rsquo;architecture. C&rsquo;est une bonne nouvelle pour l&rsquo;ex\u00e9cution : les moteurs d&rsquo;inf\u00e9rence se r\u00e8glent sur une architecture, donc <strong>un d\u00e9ploiement optimis\u00e9 pour elle<\/strong> profite \u00e0 ses variantes.<\/p>\n<h3>\u00ab LoRA compresse le mod\u00e8le \u00bb<\/h3>\n<blockquote>\n<p><strong>\u26a0\ufe0f Pi\u00e8ge<\/strong> L&rsquo;analogie de la photo peut tromper : on compresse la correction, pas le mod\u00e8le. Sur la figure, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-4caed22919a1780df1b6310b338b904e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#87;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"19\" style=\"vertical-align: 0px;\"\/> reste une grande matrice gel\u00e9e de milliards de param\u00e8tres.<\/p>\n<\/blockquote>\n<p>Le passage en 4 bits du bloc de code est un autre levier : il appartient \u00e0 la quantification, qui existe en deux grandes variantes, appliqu\u00e9e apr\u00e8s l&rsquo;entra\u00eenement ou prise en compte d\u00e8s l&rsquo;entra\u00eenement. Dans le code, les deux r\u00e9glages vivent d&rsquo;ailleurs dans deux objets s\u00e9par\u00e9s, <code>BitsAndBytesConfig<\/code> et <code>LoraConfig<\/code>.<\/p>\n<blockquote>\n<p><strong>\ud83d\udccc \u00c0 retenir<\/strong> LoRA, c&rsquo;est un mod\u00e8le laiss\u00e9 intact auquel on ajoute une correction \u00e0 goulot \u00e9troit. L&rsquo;objectif d&rsquo;entra\u00eenement, les donn\u00e9es et la pr\u00e9cision du chargement se d\u00e9cident ailleurs.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>LoRA n&rsquo;entra\u00eene qu&rsquo;une petite correction, produit de deux matrices de faible rang. Rang, SVD, compression d&rsquo;image, configuration en code : tout pour comprendre.<\/p>\n","protected":false},"author":1,"featured_media":685,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-686","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-machine-learning"],"_links":{"self":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/686","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=686"}],"version-history":[{"count":3,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/686\/revisions"}],"predecessor-version":[{"id":689,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/686\/revisions\/689"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media\/685"}],"wp:attachment":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media?parent=686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/categories?post=686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/tags?post=686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}