--- title: "IA : Deep Learing" date: 2023-10-24 tags: ["IA", "jeux"] categories: ["Intelligence artificielle", "Cours"] mathjax: true --- L'apprentissage profond -- ou *deep learing* -- est une branche de l'intelligence artificielle. Il utilise les réseaux de neurones pour résoudre des tâches complexes. Ces techniques ont permi des progès significatif et rapide dans des domaines tels que la reconnaissances d'écritures, la vision par ordinateur, les traitements automatisés du lancages etc. Il existe deux catégories d'apprentissage profond : * **supervisé**: l'algorithme d'apprentissage est entraîné avec des jeux de données etiquettés afin de produire les résultats attendus; * **non supervisé**: les données ne sont pas étiquetées, c'est à l'algorithme de découvrir les structures sous-jascentes. Ces deux méthodes sont totalement différentes, nou étudirons seulement l'entraînement supervisé dans le cadre de ce cours. ## Un neurone D'abord il y a le neurone biologique en voici un schéma, crédits [Nicolas Rougier][wiki_neurone] CC-BY. ![Schéma de neurone biologique ](./images/Neuron-figure-fr.svg) En 1943, les travaux de [Mc Culloch][mcculloch] et [Pitts][pitts] mène à la publication de l'article *« A logical calculus of the Ideas Immanent in Nervous activity »* dans *Bulletin of Mathematical Biophysics, University of Chicago Press*. Ces travaux mènerons à la définission du **neurone formel*. ### Neurone formel C'est une représentation mathématique et informatique d'un neuronne. ![Schéma de fonctionnement de neurone formel](./images/neurone_formel.svg) Il se compose d'une ou plusieurs **entrées** associés à des **coefficients** (poids). Notre neurone formel calcule la *somme pondérée* des entrées à laquelle il ajoute un **biais** puis envoie la sortie dans une **fonction d'activation**. ### Premiers pas en Python Pour implémenter notre premier neurone formel, nous utiliserons *Python* et la bibliothèque *Numpy*. ```python import numpy as np """ La définition mathématique du neurone x: entrée w: poids b: biais f: fonction d'activation """ def neron(x, w , b, f): x = np.dot(x, w) + b return f(2) # et maintenant nous allons utiliser notre neurone # -- # Définissons les entrées x = np.array([1,2,3,4]) # Nous mettons les poids à 1 w = np.array([1,1,1,1]) # Et notre biais à 1 b = np.array([1]) ## Et on l'utilise neuron(x, w, b, lambda z: np.exp(z)) ``` ### Fonctions d'activation C'est une fonction mathématique appliquée à un signal en sortie de notre neurone. Son nom viens de son équivalent biologique **potentiel d'activation** qui représente le seuil qui entraîne une réponse du neurone une fois atteint. N'importe quel fonction mathématique peut faire l'affaire, on utilisera cependant les fonctions suivants **leurs caractéristiques** : * Linéaire; * Seuil; * ReLU (*Rectified Linear Unit*): \\(f(x) = max(0, z)\\) * Radiale : \\( f(x) = \sqrt{1/2\pi{e}^{(-z^{2}/2)}}\\) ## les réseaux de neurones D'un neurone vers l'infini... ![Exemple d'un réseau de neurones](./images/reseau_neurones.svg) Dans un réseau de neurones, chacune a son propre poid et biais, les paramètres du réseau sont composés de l'ensemble des poids et biais. Tous les neurones d'une même couche ont **les mêmes fonctions**. [wiki_neurone]:https://commons.wikimedia.org/w/index.php?title=User:Nicolas.Rougier [mcculloch]:https://fr.wikipedia.org/wiki/Warren_McCulloch [pitts]:https://fr.wikipedia.org/wiki/Walter_Pitts