{"id":679,"date":"2026-10-09T17:00:21","date_gmt":"2026-10-09T15:00:21","guid":{"rendered":"https:\/\/www.ranksignal.fr\/blog\/?p=679"},"modified":"2026-10-14T17:46:40","modified_gmt":"2026-10-14T15:46:40","slug":"que-sont-les-convolutions-a-une-dimension","status":"publish","type":"post","link":"https:\/\/www.ranksignal.fr\/blog\/deep-learning\/que-sont-les-convolutions-a-une-dimension\/","title":{"rendered":"Convolutions 1D : un filtre qui glisse sur une s\u00e9quence"},"content":{"rendered":"<p>Une phrase, c&rsquo;est une file de mots. Pour y rep\u00e9rer \u00ab le chat mange \u00bb ou \u00ab mange des croquettes \u00bb, il suffit de regarder trois mots \u00e0 la fois, puis de d\u00e9caler le regard d&rsquo;un cran. Ce regard qui avance, c&rsquo;est une convolution \u00e0 une dimension. Tu vas voir ce qu&rsquo;elle calcule, ce qu&rsquo;elle apprend, comment on la demande \u00e0 une biblioth\u00e8que, et ce qu&rsquo;elle ne sait pas faire.<\/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=\"#d-une-grille-de-pixels-a-une-simple-ligne\">D&rsquo;une grille de pixels \u00e0 une simple ligne<\/a><\/li>\n<li><a href=\"#un-noyau-de-trois-mots-qui-avance-sur-la-phrase\">Un noyau de trois mots qui avance sur la phrase<\/a><\/li>\n<li><a href=\"#plusieurs-noyaux-plusieurs-motifs\">Plusieurs noyaux, plusieurs motifs<\/a><\/li>\n<li><a href=\"#lire-un-appel-a-conv1d-ligne-par-ligne\">Lire un appel \u00e0 Conv1d ligne par ligne<\/a><\/li>\n<li><a href=\"#ce-que-la-convolution-1d-ne-fait-pas\">Ce que la convolution 1D 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>Une convolution 1D fait glisser un <strong>filtre \u00e0 une seule dimension<\/strong>, aussi appel\u00e9 noyau, le long d&rsquo;une s\u00e9quence.<\/li>\n<li>\u00c0 chaque position, les entr\u00e9es sont multipli\u00e9es par les poids du filtre puis additionn\u00e9es, avec <strong>un poids appris par entr\u00e9e du filtre<\/strong>.<\/li>\n<li>Pour du texte, le noyau couvre en g\u00e9n\u00e9ral <strong>de trois \u00e0 sept mots, voire plus<\/strong>.<\/li>\n<li>Plusieurs noyaux apprennent <strong>plusieurs motifs diff\u00e9rents<\/strong> \u00e0 la fois.<\/li>\n<li>Ce qu&rsquo;elle apprend, ce sont des <strong>motifs entre les mots du noyau<\/strong> : une vision locale, rapide \u00e0 calculer.<\/li>\n<\/ul>\n<h2 id=\"d-une-grille-de-pixels-a-une-simple-ligne\">D&rsquo;une grille de pixels \u00e0 une simple ligne<\/h2>\n<p>La convolution est n\u00e9e pour trouver des motifs dans des images, ou dans toute matrice \u00e0 deux dimensions. On y fait glisser un filtre, une petite matrice qu&rsquo;on appelle aussi noyau : on le multiplie par les valeurs qu&rsquo;il recouvre, puis on additionne les produits. Pendant l&rsquo;entra\u00eenement, on apprend un poids pour chaque entr\u00e9e du filtre.<\/p>\n<p>Ce principe a si bien r\u00e9ussi en vision, parce qu&rsquo;il extrait l&rsquo;information locale et reconna\u00eet des motifs complexes, qu&rsquo;on l&rsquo;a propos\u00e9 pour les s\u00e9quences. Une <strong>convolution \u00e0 une dimension<\/strong> garde exactement la m\u00eame id\u00e9e, mais son filtre n&rsquo;a plus qu&rsquo;une direction : une rang\u00e9e de poids qu&rsquo;on fait glisser le long de la s\u00e9quence.<\/p>\n<h2 id=\"un-noyau-de-trois-mots-qui-avance-sur-la-phrase\">Un noyau de trois mots qui avance sur la phrase<\/h2>\n<p>Prends \u00ab le chat mange des croquettes \u00bb et un noyau de taille 3. Il regarde d&rsquo;abord \u00ab le chat mange \u00bb, puis \u00ab chat mange des \u00bb, puis \u00ab mange des croquettes \u00bb, et ainsi de suite jusqu&rsquo;au bout de la phrase. \u00c0 chaque arr\u00eat, chaque mot est multipli\u00e9 par le poids qui lui correspond dans le noyau et le tout est additionn\u00e9. Les mots entrent sous forme de vecteurs, ceux d&rsquo;un <a href=\"\/blog\/rag\/que-sont-les-embeddings\/\" title=\"embedding\">embedding<\/a>.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef46c68f71&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef46c68f71\" 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\/b2_ch01_word2vec_fenetre.png\" alt=\"Une phrase d\u00e9coup\u00e9e en fen\u00eatre de trois mots : \u00ab chat \u00bb, \u00ab mange \u00bb, \u00ab des \u00bb entourent le mot central, et deux mots tir\u00e9s au hasard sont mis \u00e0 part\" class=\"wp-image-677\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b2_ch01_word2vec_fenetre.png 2250w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b2_ch01_word2vec_fenetre-300x160.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b2_ch01_word2vec_fenetre-1024x546.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b2_ch01_word2vec_fenetre-768x410.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b2_ch01_word2vec_fenetre-1536x819.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b2_ch01_word2vec_fenetre-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\">Regarde le bloc de trois mots autour de \u00ab mange \u00bb : c&rsquo;est exactement ce qu&rsquo;un noyau de taille 3 voit \u00e0 un instant donn\u00e9. Le sch\u00e9ma vient d&rsquo;une autre technique, qui fait elle aussi glisser une fen\u00eatre de contexte sur le texte, et le noyau d&rsquo;une convolution 1D s&rsquo;en rapproche beaucoup.<\/figcaption><\/figure>\n\n\n<p>Cette fen\u00eatre n&rsquo;est pas fig\u00e9e \u00e0 trois mots : le noyau peut avoir une taille arbitraire, souvent de trois \u00e0 sept mots, davantage si on le souhaite. Et comme il ne fait que glisser, <strong>le calcul est tr\u00e8s rapide<\/strong>.<\/p>\n<blockquote>\n<p><strong>\ud83d\udca1 Intuition<\/strong> Pense \u00e0 une loupe de trois mots qu&rsquo;on prom\u00e8ne sur la phrase. Ses poids disent quelles combinaisons de mots voisins la font r\u00e9agir fort. Ces poids ne sont \u00e9crits par personne : ils s&rsquo;apprennent \u00e0 l&rsquo;entra\u00eenement.<\/p>\n<\/blockquote>\n<h2 id=\"plusieurs-noyaux-plusieurs-motifs\">Plusieurs noyaux, plusieurs motifs<\/h2>\n<p>Un noyau ne cherche qu&rsquo;un seul genre de motif. Pour en rep\u00e9rer plusieurs, on utilise <strong>plusieurs noyaux<\/strong> c\u00f4te \u00e0 c\u00f4te : chacun donne un balayage diff\u00e9rent de la s\u00e9quence, que l&rsquo;on peut visualiser comme une carte de caract\u00e9ristiques.<\/p>\n<p>Comme pour les images, on peut ensuite ajouter des op\u00e9rations telles que le max pooling, qui ne retient que les caract\u00e9ristiques les plus importantes.<\/p>\n<h2 id=\"lire-un-appel-a-conv1d-ligne-par-ligne\">Lire un appel \u00e0 Conv1d ligne par ligne<\/h2>\n<p>Comment demander \u00e0 PyTorch de faire glisser un noyau de taille 3 sur des donn\u00e9es ? Voici un exemple, qui fabrique un tenseur de valeurs al\u00e9atoires puis lui applique une couche <code>Conv1d<\/code>.<\/p>\n<pre><code>data_tensor = torch.tensor(np.random.random((10, 5, 3)),\n                           dtype=torch.float32)\nConv1d = nn.Conv1d(in_channels=5, out_channels=16,\n                   kernel_size=3, stride=1, padding=1)\noutput = Conv1d(data_tensor)\noutput.shape\n<\/code><\/pre>\n<p>Les noms <code>torch<\/code>, <code>nn<\/code> et <code>np<\/code> viennent des importations habituelles de PyTorch et de NumPy, non reproduites ici. La premi\u00e8re instruction cr\u00e9e un tenseur al\u00e9atoire de dimensions (10, 5, 3). La deuxi\u00e8me construit la couche : 5 canaux en entr\u00e9e, 16 canaux en sortie, <code>kernel_size=3<\/code> pour <strong>un noyau de taille 3<\/strong>, avec <code>stride=1<\/code> et <code>padding=1<\/code>. La troisi\u00e8me applique la couche aux donn\u00e9es, et <code>output.shape<\/code> affiche la forme du tenseur obtenu.<\/p>\n<h2 id=\"ce-que-la-convolution-1d-ne-fait-pas\">Ce que la convolution 1D ne fait pas<\/h2>\n<p><strong>Elle ne sert pas qu&rsquo;aux images.<\/strong> C&rsquo;est m\u00eame une id\u00e9e re\u00e7ue tenace : n\u00e9e pour la vision, la convolution a \u00e9t\u00e9 reprise telle quelle pour les s\u00e9quences, texte en t\u00eate.<\/p>\n<p>Elle ne voit pas non plus toute la phrase d&rsquo;un coup. Ce qu&rsquo;elle apprend, ce sont des motifs entre les mots situ\u00e9s dans le noyau, donc dans une fen\u00eatre de quelques mots. C&rsquo;est la contrepartie de sa vitesse.<\/p>\n<p>Et ses motifs ne sont pas choisis \u00e0 la main : ses poids se r\u00e8glent \u00e0 l&rsquo;entra\u00eenement, un par entr\u00e9e du filtre.<\/p>\n<blockquote>\n<p><strong>\ud83d\udccc \u00c0 retenir<\/strong> Une convolution 1D, c&rsquo;est une fen\u00eatre de poids apprise qu&rsquo;on fait glisser sur une s\u00e9quence pour y trouver des motifs locaux, un noyau par type de motif.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Noyau, poids, canaux : comprends ce qu&rsquo;est une convolution \u00e0 une dimension, comment elle lit une phrase par fen\u00eatres et ce qu&rsquo;elle ne sait pas faire.<\/p>\n","protected":false},"author":1,"featured_media":678,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-679","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\/679","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=679"}],"version-history":[{"count":3,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/679\/revisions"}],"predecessor-version":[{"id":821,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/679\/revisions\/821"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media\/678"}],"wp:attachment":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media?parent=679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/categories?post=679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/tags?post=679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}