Les différents types de machine learning
Performance et surapprentissage
On peut penser que la performance d’un modèle sera en fonction des prédictions correctes faites sur l’ensemble d’observation utilisées pour l’apprentissage, plus elle est élevé, mieux c’est. Pourtant c’est complètement faux, ce qu’on cherche à obtenir du ML n’est pas de prédire avec exactitude les valeurs des variables cibles connues puisque elles ont été utilisées pour l’apprentissage mais bien de prédire celles qui n’ont pas encore été observées. Par conséquent, la qualité d’un algorithme de ML se juge sur sa capacité à faire les bonnes prédictions sur les nouvelles observations grâce aux caractéristiques apprises lors de la phase d’entraînement. Il faut donc éviter le cas ou on a un modèle de MLtellement trop entraîné qu’il arrive à prédire à la perfection les données d’apprentissage mais qui n’arrive pas à généraliser sur les données de test.
On l’appelle le sur-apprentissage. La cause du sur-apprentissage est que le modèle est trop complexe par rapport à la fonction F que l’on souhaite apprendre. Figure 3 – Le sur-apprentissage : le graphe montre l’évolution de l’erreur commise sur l’ensemble de test par rapport à celle commise sur l’ensemble d’apprentissage, les deux erreurs diminuent mais dés que l’on rentre dans une phase de sur-apprentissage, l’erreur d’apprentissage continue de diminuer alors que celle du test augmente. Pour résoudre ce problème, on divise les données disponibles en deux groupes distincts. Le premier sera l’ensemble d’apprentissage, et le deuxième sera l’ensemble de test. Pour avoir une bonne séparation des données en données d’apprentissage et données de test, on utilise la validation croisée. L’idée c’est de séparer aléatoirement les données dont on dispose en k parties séparées de même taille. Parmi ces k parties, une fera office d’ensemble de test et les autres constitueront l’ensemble d’apprentissage. Après que chaque échantillon ait été utilisé une fois comme ensemble de test. On calcule la moyenne des k erreurs moyennes pour estimer l’erreur de prédiction.
Les arbres de décision
Les arbres de décision sont des modèles de MLsupervisés, pouvant être utilisés pour la classification que pour la régression. Un arbre de décision représente une fonction qui prend comme entrée un vecteur d’attributs et retourne une décision qui est une valeur unique. Les entrées et les sorties peuvent être discrètes ou continues. Un arbre de décision prend ses décisions en exécutant une sequence de test, chaque noeud interne de l’arbre correspond à un test de la valeur d’un attribut et les branches qui sortent du noeud sont les valeurs possibles de l’attribut. La classe de la variable cible est alors déterminée par la feuille dans laquelle parvient l’observation à l’issue de la sequence de test. La phase d’apprentissage consiste à trouver la bonne sequence de test. Pour cela, on doit décider des bons attributs à garder. Un bon attribut divise les exemples en ensembles homogènes c.à .d qu’ils ne contiennent que des observations appartenant à la même classe, alors qu’un attribut inutile laissera les exemples avec presque la même proportion de valeur pour la variable cible . Ce dont on a besoin c’est d’une mesure formelle de « bon » et « inutile ». Pour cela, il existe des métriques standards homogénéisées avec lesquels on peut mesurer l’homogénéité d’un ensemble. Les plus connus sont l’indice de diversité de Gini et l’entropie [15] En général l’entropie d’une variable aléatoire V avec des valeurs vk chacune avec une probabilité P(vk) est définie comme :
Les limites théoriques de l’optimisation
Plusieurs résultats théoriques montrent qu’il existe une limite de performance de n’importe quel algorithme d’optimisation qu’on peut concevoir pour un réseau de neurones [90] [91]. Certains résultats théoriques s’appliquent uniquement au cas où les unités de réseaux ne produisent que des valeurs discrètes. Des résultats théoriques révèlent qu’il existe des classes de problèmes insolubles, mais il peut être difficile de dire si un problème particulier appartient à cette classe. D’autres résultats montrent que trouver une solution pour un réseau d’une taille donnée est insoluble, mais en pratique, nous pouvons trouver une solution facilement en utilisant un réseau plus large pour lequel de nombreux paramètres correspondent à une solution acceptable. En outre, dans le contexte de l’apprentissage d’ un réseau de neurones, nous ne nous soucions généralement pas de trouver le minimum exact d’une fonction, mais nous cherchons seulement à réduire sa valeur de manière suffisante pour obtenir une bonne erreur de test. L’analyse théorique de savoir si un algorithme d’optimisation peut atteindre cet objectif est extrêmement difficile [42].
initialisation des paramètres
Lorsque on travaille avec des réseaux de neurones profonds, une bonne initialisation des poids peut être la différence entre une convergence en un temps raisonnable ou non, même après des milliers d’itérations. Dans le cas d’une sigmoïde ou bien tanh, si les poids sont trop petits, la variance du signal d’entrée commence à diminuer à mesure qu’il traverse chaque couche du réseau. L’entrée aboutit finalement à une valeur très faible et ne peut plus être utile. Si les poids sont trop importants, la variance des données d’entrée tend à augmenter rapidement avec chaque couche de passage. Finalement, il devient si grand qu’il devient inutile parce que la fonction sigmoïde et tanh tendent à devenir plates pour des valeurs plus grandes. Cela signifie que nos activations deviendront saturées et les gradients commencent à s’approcher de zéro. L’initialisation du réseau avec les bons poids est très importante si nous souhaitons que le réseau fonctionne correctement. Nous devons nous assurer que les poids soient dans un rang raisonnable avant de commencer à entraîner le réseau. Pour cela, nous utiliserons Glorot initialization [99].
Conclusion
Dans cette partie, nous avons décrit la démarche suivie afin d’obtenir le classifieur le plus précis possible. Nous avons commencé par un réseau de neurones convolutif classique et analysé ses défauts en observant son comportement grâce aux graphes et nous avons fait changer les paramètres un à un afin de comprendre l’impacte de chacun sur la performance finale. Après avoir trouvé l’architecture qui nous convient le mieux, nous avons décidé de tirer le maximum du réseau en laissant l’apprentissage durer longtemps jusqu’à obtenir la performance maximale que peut atteindre notre modèle et qui est l’une des meilleures performances enregistrées sur la base cifar-10
Grâce aux Deep Learning, l’avenir de l’intelligence artificielle est prometteur. Dans ce travail, nous avons exploré le domaine de la classification d’image qui comme tous les autres domaines de l’intelligence artificielle ont connue une évolution majeure depuis l’apparition du Deep Learning. Afin d’aboutir à ces résultats, nous avons passé beaucoup de temps à lire et à étudier les publications et les articles pour voir ce qui se fait de mieux en matière de classification et pour pouvoir concevoir notre propre modèle. Pour finir, avant de passer aux perspectives, ce travail nous a permis de mettre en pratique nos connaissances sur les réseaux de neurones et d’en acquérir d’autres et le temps passé à lire des articles nous a servi d’une bonne initiation à la recherche.
|
Table des matières
Table des figures
Liste des tableaux
Acronyms
I Introduction générale
1 Introduction
2 problématique
3 Contribution
II État de l’art
1 Qu’est ce que le machine learning ?
2 performance et surapprentissage
3 Les différents types de machine learning
3.1 apprentissage supervisé et non supervisé
3.2 régression et classification
4 Les différents type d’algorithme
4.1 La régression linéaire
4.2 Les k plus proches voisins
4.3 Le classifieur naïf de Bayes
4.4 k-means
4.5 Les arbres de décision
4.6 Les forets aléatoires
4.7 Les machines à vecteur de support
4.8 Le perceptron multicouches
5 Conclusion
III Deep Learning
1 Introduction
2 Histoire du deep learning
3 Pourquoi le deep learning ?
4 Les différents types de modèles
4.1 Les réseaux de neurones convolutifs
4.1.1 Inspiration
4.1.2 L’opération de convolution
4.1.3 Couche convolutif
4.1.4 Couche de pooling
4.1.5 Perceptron
4.1.6 Quelques réseaux convolutifs célèbres
4.2 Réseau de neurones récurrents
4.2.1 C’est quoi un Recurrent Neural Network (RNN) ?
4.2.2 Apprentissage
4.2.3 Application
4.3 deep generative model
5 Optimisation pour l’apprentissage en Deep Learning
5.1 Les variantes de la descente de gradient
5.1.1 Batch gradient descent
5.1.2 Descente de gradient stochastique
5.1.3 Mini-batch gradient descent
5.2 Algorithmes d’optimisation de la descente de gradient
5.2.1 Momentum
5.2.2 Nesterov accelerated gradient
5.2.3 Adagrad
5.2.4 RMSprop
5.2.5 Adam optimizer
5.3 Les méthodes du second ordre
5.4 Les limites théoriques de l’optimisation
6 Les fonctions d’activation
6.1 Caractéristiques
6.2 Quelque fonction d’activation
6.2.1 Rectified Linear Units et leur généralisations
6.2.2 Sigmoïde et tangente hyperbolique
7 Conclusion
IV Contribution
1 Introduction
2 Problématique étudié
3 Présentation des outils
3.1 Le software
3.1.1 Theano
3.1.2 TensorFlow
3.1.3 Keras
3.1.4 PyTorch
3.1.5 Autres frameworks
3.2 Le hardware
4 Quelques notions
5 Architecture
6 initialisation des paramètres
6.1 Glorot initialization
6.1.1 Comment ?
7 L’apprentissage
7.0.1 Discussion
8 Régularisation
8.1 Dropout
9 Exponential Linear Units
10 Batch normalization
11 Global average pooling
12 Interface
13 Conclusion
V Conclusion et perspectives
Bibliographie
Télécharger le rapport complet