<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Département d'Informatique Blog</title>
        <link>https://cours.techinfojoliette.ca/blog</link>
        <description>Département d'Informatique Blog</description>
        <lastBuildDate>Thu, 01 Oct 2020 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>fr</language>
        <item>
            <title><![CDATA[Réseau de neurones]]></title>
            <link>https://cours.techinfojoliette.ca/blog/post</link>
            <guid>https://cours.techinfojoliette.ca/blog/post</guid>
            <pubDate>Thu, 01 Oct 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Introduction aux réseaux de neurones.]]></description>
            <content:encoded><![CDATA[<p>Introduction aux réseaux de neurones.</p>
<!-- -->
<p align="justify">L'intelligence artificielle comporte une multitude de domaines, dont l'apprentissage machine (machine learning).</p>
<p align="justify">L'une des techniques de ce domaine est l'apprentissage profond (deep learning), et celle-ci utilise des réseaux neuronaux pour certains types d'apprentissages.</p>
<h1>Neurone</h1>
<p align="justify">Au départ, les chercheurs en informatique se sont inspirés du cerveau humain pour tenter de reproduire son fonctionnement artificiellement.</p>
<p align="justify">En 1943, McCulloch et Pitts ont établis les bases des premiers neurones artificiels.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="biologie">Biologie<a href="https://cours.techinfojoliette.ca/blog/post#biologie" class="hash-link" aria-label="Lien direct vers Biologie" title="Lien direct vers Biologie" translate="no">​</a></h2>
<p align="justify">En simplifiant énormément, un neurone biologique comporte trois éléments principaux :</p>
<p><img decoding="async" loading="lazy" alt="Neurone" src="https://cours.techinfojoliette.ca/assets/images/neurone-3bdcec3653c879378530480f7e5989b3.png" width="688" height="500" class="img_ev3q"></p>
<p align="justify">Le somma (noyau) reçoit des impulsions électriques de ses dendrites (entrées). Selon l'intensité des impulsions reçues, le somma transmet, ou pas, une impulsion électrique par son axone (sortie). Les synapses, quant à elles, permettent de lier les axones aux dendrites afin de former un réseau.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="programmation">Programmation<a href="https://cours.techinfojoliette.ca/blog/post#programmation" class="hash-link" aria-label="Lien direct vers Programmation" title="Lien direct vers Programmation" translate="no">​</a></h2>
<p align="justify">On peut aussi visualiser un neurone comme étant une fonction (soma), qui reçoit des paramètres (dendrites), et retourne un résultat (axone).</p>
<h1>Réseau</h1>
<p align="justify">En 1958, Frank Rosenblatt lie des neurones de façon à crée le plus ancien, et le plus simple, des réseaux neuronaux: le perceptron.</p>
<p align="justify">Rosenblatt va un peu plus loin que McCulloch et Pitt, en ajoutant une notion de poids aux calculs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="perceptron">Perceptron<a href="https://cours.techinfojoliette.ca/blog/post#perceptron" class="hash-link" aria-label="Lien direct vers Perceptron" title="Lien direct vers Perceptron" translate="no">​</a></h2>
<p align="justify">Un réseau neuronal de type perceptron contient (S) neurones, chacunes liées à (D) entrées, et produit (A) sorties. De plus, les synapses reliant les neurones possèdent maintenant un poids :</p>
<p><img decoding="async" loading="lazy" alt="Perceptron" src="https://cours.techinfojoliette.ca/assets/images/perceptron-80320bb432f97bf162f5d65f4063dfde.png" width="674" height="246" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="couches">Couches<a href="https://cours.techinfojoliette.ca/blog/post#couches" class="hash-link" aria-label="Lien direct vers Couches" title="Lien direct vers Couches" translate="no">​</a></h2>
<p align="justify">On nomme « couche cachée » les neurones entre les entrées et les sorties. Si le réseau perceptron est simpliste, il permet aussi de résoudre que des problèmes relativement simples. Pour résoudre des problèmes plus complexes, plusieurs couches cachées peuvent être ajoutées :</p>
<p><img decoding="async" loading="lazy" alt="Couches" src="https://cours.techinfojoliette.ca/assets/images/layers-eea4361523ee5f04df27b6a167ac29cf.png" width="688" height="270" class="img_ev3q"></p>
<h1>Propagation</h1>
<p align="justify">On nomme « propagation avant (feedforward) » les calculs qui sont effectués entre les couches cachées.</p>
<p align="justify">Toute l'information se dirige dans le même sens: des noeuds d'entrés, par les noeuds cachés, jusqu'aux noeuds de sorties.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="calculs">Calculs<a href="https://cours.techinfojoliette.ca/blog/post#calculs" class="hash-link" aria-label="Lien direct vers Calculs" title="Lien direct vers Calculs" translate="no">​</a></h2>
<p align="justify">Chaque neurone fera une somme pondérée des poids des synapses avec les données d’entrée afin d'estimer un rendement :</p>
<p><img decoding="async" loading="lazy" alt="Pondération" src="https://cours.techinfojoliette.ca/assets/images/ponderation-57a4110e03a3169663ac46fd34bc5551.png" width="673" height="247" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="activation">Activation<a href="https://cours.techinfojoliette.ca/blog/post#activation" class="hash-link" aria-label="Lien direct vers Activation" title="Lien direct vers Activation" translate="no">​</a></h2>
<p align="justify">Pour déterminer l'activation de chacun des neurones, il existe une multitude de fonctions telles Linéaire, Seuil, Sigmoïde, ReLU, etc., ayant chacune leurs spécificités :</p>
<p><img decoding="async" loading="lazy" alt="Sigmoïde" src="https://cours.techinfojoliette.ca/assets/images/sigmoid-8d8d5b69e2c8f2daf8df1622742db050.png" width="688" height="307" class="img_ev3q"></p>
<h1>Rétropropagation</h1>
<p align="justify">En 1974, Paul Werbos est l'un des premiers à observer l'application de la rétropropagation (backpropagation) au sein des réseaux neuronaux.</p>
<p align="justify">C'est cette technique qui permettra au réseau neuronal de s'ajuster, en apprenant de ses erreurs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="coût">Coût<a href="https://cours.techinfojoliette.ca/blog/post#co%C3%BBt" class="hash-link" aria-label="Lien direct vers Coût" title="Lien direct vers Coût" translate="no">​</a></h2>
<p align="justify">On nomme « coût » la gravité de l'erreur commise. Ce coût est calculé à partir du résultat obtenu versus le résultat attendu.</p>
<p align="justify">Tout comme la fonction d'activation, il existe une multitude de fonctions de coûts selon les besoins.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ajustement">Ajustement<a href="https://cours.techinfojoliette.ca/blog/post#ajustement" class="hash-link" aria-label="Lien direct vers Ajustement" title="Lien direct vers Ajustement" translate="no">​</a></h2>
<p align="justify">Le coût permettra de calculer les ajustements, que l'on nomme « gradient », à apporter au poids de chaque synapse.</p>
<h1>Exemple</h1>
<p>Exemple simpliste d'un réseau neuronal, de type perceptron, afin d'apprendre un opérateur logique :</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> np</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sigmoid</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">x</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">exp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">-</span><span class="token plain">x</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Réseau de neurones</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">neuronesA </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">vstack</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">synapsesA </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">random</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">rand</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">16</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">neuronesB </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">synapsesB </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">random</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">rand</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">16</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">neuronesC </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Résultats attendus pour l'opérateur logique ET</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">resultats </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">vstack</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Apprentissage</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> i </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Propagation avant</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  neuronesB </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> sigmoid</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">dot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neuronesA</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> synapsesA</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  neuronesC </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> sigmoid</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">dot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neuronesB</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> synapsesB</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Gravité des erreurs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  graviteErreurs </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neuronesC </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> resultats</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> neuronesC </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> neuronesC</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Propagation arrière</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  gradiantB </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">dot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neuronesC</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">T</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> graviteErreurs</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  gradiantA </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">dot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neuronesA</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">T</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> np</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">dot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graviteErreurs</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> synapsesB</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">T</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> neuronesB </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> neuronesB</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Ajustement des poids</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  synapsesB </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> synapsesB </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> gradiantB</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  synapsesA </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> synapsesA </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> gradiantA</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Prédictions</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> i </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neuronesA</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token builtin">round</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neuronesC</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>]]></content:encoded>
            <category>I.A.</category>
            <category>Programmation</category>
        </item>
    </channel>
</rss>