AI et apprentissage: comment les apprendre visuellement

J'ai créé ce tutoriel en tant que pièce d'entrée de gamme sur l'intelligence artificielle.

Toute nouvelle matière doit être présentée dans une langue correspondant au niveau de compétence de l'apprenant à ce moment-là. Donc, ne vous attendez pas à des formules de calcul folles pour l'instant.

Nous allons en particulier nous intéresser à Machine Learning, également appelé Deep Learning.

La profondeur d'un réseau de neurones est déterminée par le nombre de couches d'entrée.

Les algorithmes d'apprentissage automatique évaluent la probabilité qu'un ensemble de données particulier soit comparé à un modèle spécifique.

Penser dans les gammes

Les neurones dans votre cerveau ne sont certainement pas numériques, mais ils ressemblent à la logique binaire, qu’ils soient activés ou non. Mais dans le logiciel, nous utilisons plutôt une gamme de valeurs.

Le résultat d'un cycle de calcul dans une opération d'intelligence artificielle est une estimation de la précision dans la plage de 0,0 à 1,0. En fin de compte - une valeur de sortie est générée en fonction de la concordance des données en entrée avec un modèle spécifique, 1.0 correspondant à 100% (vous atteignez rarement cela, mais 0,95 - 0,97 est bon.)

Ce modèle est généralement formé avant que des résultats significatifs puissent être produits. Plus sur cela un peu plus tard dans ce tutoriel. Mais d’abord, voici le ML le plus fondamental.

Tout commence avec les réseaux de neurones - une imitation logicielle de la structure physique des neurones dans le cerveau.

Structure simple de réseau neuronal

Machine Learning dans sa forme la plus élémentaire - un réseau de neurones très simple.

Dans cet exemple minimaliste, 1 couche d'entrée composée de 3 nœuds d'entrée est présentée.

Un ensemble d'entrées multiples par couche est généralement fourni. Chaque entrée est collectée à partir d’un type de source. Comme un tableau de pixels d'une image utilisée pour la reconnaissance de visage, par exemple / ou toute autre donnée. Cela dépend de l’objectif de ce que vous essayez d’atteindre avec votre algorithme d’IA.

Les valeurs d'entrée et de sortie sont des valeurs flottantes. nombres compris entre 0.0 et 1.0.

Logistiquement, pendant le fonctionnement du réseau, les données sont alimentées de gauche à droite. Cependant… La rétrodiffusion est parfois utilisée pour optimiser le réseau de neurones. C’est lorsque nous parcourons le réseau en sens inverse. Mais pour le moment, nous n’avons pas besoin de nous en préoccuper.

Somme

La somme de plusieurs noeuds d'entrée est exactement ce que cela ressemble. C'est la somme totale des poids de chaque nœud de la couche d'entrée précédente. Après avoir calculé la somme, il est ensuite passé à la fonction d'activation pour traitement.

Fonction d'activation

La fonction d'activation convertit la somme des valeurs d'entrée en une valeur de sortie.

Mais comment ça marche exactement?

Nous devons examiner un autre aspect de l’apprentissage automatique.

Vous vous souvenez de ces équations mathématiques du lycée? Paraboles - n'importe qui?

Source de l'image: https://pl.wikipedia.org/wiki/Plik:Catenary-pm.svg

Une fonction d'activation n'est littéralement qu'une équation mathématique. Donc, pour ceux qui ont une formation en mathématiques, cela pourrait être un peu plus facile à comprendre. Sinon, lisez les schémas visuels et le reste de ce tutoriel pour qu'il commence à s'imprégner!

La raison pour laquelle nous ne pouvons pas utiliser des équations linéaires simples est due à leurs limites.

Ils ne suffisent pas pour créer des réseaux de neurones utiles.

Les réseaux de neurones sont conçus autour d'équations plus complexes. Par exemple, la fonction Sigmoid (également appelée logistique) est assez courante. (Nous en examinerons quelques-unes dans la section ci-dessous.)

Ils prennent tous la forme de f (x) =… et écrivent ensuite la valeur x d'une manière unique à cette fonction. Pourquoi cela est important et pourquoi nous avons différentes fonctions AF deviendront plus apparents un peu plus tard.

Qu'est-ce qui se passe une fois que nous obtenons notre résultat?

AF transmet la valeur calculée au noeud suivant et constitue essentiellement une entrée partielle dans l'une des fonctions d'activation d'un noeud du prochain jeu d'entrées.

Vous pouvez penser que cela prend plusieurs entrées. Et en passant la valeur calculée sur le prochain noeud. C’est la passerelle de valeur entre les ensembles d’entrée.

Différents types de fonctions d'activation

Tout comme il existe différents types d'équations mathématiques, il existe différents types de fonctions d'activation.

La manière exacte dont ils réduisent les chiffres pour arriver à la valeur de sortie finale est étroitement liée à la formation préalable d’un réseau existant. Nous ne pouvons donc pas entrer aussi profondément dans le sujet, car dans l’ensemble, le système n’est pas basé sur quelque chose d'aussi simple que le calcul et le rendu d'un résultat numérique.

Mais ce que nous pouvons faire - pour approfondir notre compréhension jusqu’à présent - est de jeter un coup d’œil sur la représentation visuelle de chaque équation mathématique derrière différentes fonctions d’activation!

Ceci est un tutoriel visuel. Et pour vous donner une idée de base de ce avec quoi vous allez vous battre, voici un tableau des équations mathématiques classiques sur lesquelles de nombreuses fonctions d’activation classiques peuvent être basées.

La mise au point automatique la plus élémentaire est représentée par f (x) = x ou la fonction d'identité.

Quelques formules mathématiques de base bien connues.

Il y en a plusieurs autres. Mais ils sont un peu plus complexes.

Ces fonctions servent essentiellement à déterminer la valeur du nœud obtenue.

Comment une fonction d'activation détermine-t-elle exactement sa valeur?

Eh bien, c’est ce qu’est un AF. Il prend une entrée sous la forme d'un nombre et produit une valeur de retour comprise entre 0.0 et 1.0 (parfois, la plage est +/- infini). Les formules réelles sont décrites ci-dessus. Vous pouvez réécrire ces équations sous forme de fonctions dans Python, JavaScript ou tout autre langage de programmation.

Si vous aimez les mathématiques et que vous avez beaucoup de temps, vous adorerez écrire ces fonctions en code! Mais souvent vous n’avez pas à le faire. Et c’est parce que déjà existant A.I. les bibliothèques s'en occupent pour vous. De cette façon, vous pouvez vous concentrer sur la construction de votre réseau de neurones et sur sa formation dans un but spécifique.

Chaque nœud porte un poids calculé

Donc, ces fonctions d'activation produisent une valeur.

La chose la plus importante à noter en ce moment - chaque point est un poids.

Ce poids mesure la probabilité qu'un modèle donné soit apparié.

Mais plusieurs couches de jeux d'entrées sont possibles, comme illustré dans l'exemple suivant.

Nœuds dans un réseau de neurones légèrement plus avancé connecté les uns aux autres.

Chaque nœud communique avec chaque nœud de la couche d’entrée suivante constituant cette autoroute de communication interconnectée.

Le nombre d'éléments dans chaque couche est arbitraire. Il n’est pas nécessaire que le numéro soit identique à celui indiqué dans le diagramme ci-dessus. En fonction du problème que vous essayez de résoudre.

Il faudra un peu d'intuition et de créativité pour déterminer le nombre de nœuds d'entrée que vous souhaitez utiliser dans chaque couche. Mais même résoudre le même problème peut être accompli par différentes structures de réseaux de neurones.

En raison de la nature non linéaire des calculs, ce processus est ambigu.

Couches cachées

Nous venons d’expliquer comment un réseau de neurones peut avoir plusieurs couches d’entrée. Ils peuvent être considérés comme des rangées verticales de nœuds.

Toutes les couches internes situées entre la première ligne d'entrée et le noeud de sortie sont souvent appelées couches masquées. Cela a du sens, car c’est là que se fait la majeure partie du travail de traitement de l’IA. En gros, c’est la boîte mystérieuse de l’IA.

Différents types de modèles de réseau neuronal

Parfois, ML peut sembler beaucoup comme créer un modèle de réseau pour correspondre à des modèles.

Les réseaux de neurones se présentent sous différentes formes.

Différents types de structures de réseaux neuronaux sont plus aptes à résoudre des types particuliers de problèmes associés à leur structure.

OK - Mais comment écrivons-nous le code?

C'était beaucoup de théorie.

Mais comment pouvons-nous réellement l'implémenter dans le code?

Vous pouvez utiliser une bibliothèque comme Tensorflow.js pour commencer.

Mais cela ne servira à rien car il reste encore beaucoup à couvrir.

OK - Mais comment cela produit-il des résultats significatifs?

Nous avons discuté de la structure d’un réseau de neurones jusqu’à présent.

Nous avons parlé des fonctions d'activation, des entrées de données et des couches cachées.

Nous avons également parlé des poids passés entre les connexions simulées.

Pour qu'un algorithme d'apprentissage automatique non linéaire produise un résultat raisonnable, il faut d'abord le former à un ensemble de données préexistantes.

Vous commencez toujours par choisir les données pour entraîner votre algorithme d'intelligence artificielle.

Cela dépend du problème que vous essayez de résoudre.

Si vous souhaitez reconnaître des numéros dans une image, commencez par des images de chiffres.

Reconnaître les nombres à partir d'une capture d'écran

L’exemple classique de l’intelligence artificielle consiste à apprendre à un réseau de neurones à reconnaître les nombres de 0 à 9. De la même manière que vous pouvez entraîner un algorithme de machine à reconnaître les lettres AZ ou même des parties d’un visage humain - un œil ou une bouche sur un La photographie représente également un type particulier de forme ou de motif qui est commun à tous les humains mais qui peut paraître légèrement différent.

N'oubliez pas que tout ce dont nous traitons ici sont des modèles.

Lorsque l'algorithme reconnaît un motif, il ne correspond jamais à 100%. Mais plus nous pouvons nous approcher de 1,0 (100%), plus la forme que nous recherchons est susceptible de représenter ce pour quoi elle a été formée.

Si nous utilisions une police standard, nous n’aurions même pas à travailler sur l’intelligence artificielle. Nous pourrions simplement numériser chaque chiffre pour un motif de pixels exact. Mais le point clé de l'IA est de reconnaître un motif dans l'obscurité.

Premièrement, nous devons avoir un type de support qui sera utilisé comme donnée de formation. Chaque chiffre peut être représenté par une image:

Les mêmes chiffres écrits plusieurs fois produisent un motif légèrement différent. Image extraite de la démo JavaScript AI située à l'adresse http://myselph.de/neuralNet.html

Vous pouvez facilement reconnaître chaque chiffre à vue. Mais un algorithme d'intelligence artificielle doit être formé pour reconnaître des modèles similaires car, s'ils sont similaires, ils ne sont toujours pas identiques à 100%.

Pour ce faire, nous pouvons décomposer le motif principal en blocs plus petits et mettre en œuvre un procédé appelé extraction de caractéristiques.

Extraction de caractéristiques

Pour identifier un chiffre, l'algorithme implémente un système d'extraction de caractéristiques qui décompose les modèles communs en contreparties pertinentes pour la construction du chiffre / symbole / lettre / etc. complet.

L'essence d'un motif reste la même. Par exemple, 0 est principalement un cercle - vous pouvez le décomposer en motifs plus petits avec une arche sur chacun des côtés:

Si nous ne pouvons que former notre algorithme à reconnaître ces 4 modèles uniques et à vérifier leur présence dans la zone localisée d'une image, nous pouvons calculer le degré de certitude avec lequel on peut dire qu'il peut s'agir d'un zéro.

Il en va de même pour les autres chiffres. Le chiffre 1, par exemple, est une barre verticale unique. Ou peut-être avec une ligne plus petite avec un léger angle en haut.

Le numéro 2 est un demi-cercle en haut, une diagonale et une ligne horizontale.

Le numéro 3 peut être divisé en deux modèles de demi-voûte.

Le numéro 4 peut être considéré comme 3 lignes: verticale, horizontale et diagonale.

…etc.

Et si c’était un chiffre écrit à la main? Il a toujours les mêmes propriétés de ce chiffre: les mêmes bords, les mêmes boucles.

Que se passe-t-il si le chiffre apparaissant sur une limite de vitesse se déconnecte dans la rue sous un angle indirect sur une photo? Tout comme notre vision, l'IA devrait pouvoir prendre en charge un certain type de terme d'erreur.

Est-ce cinq, trois ou huit?

Essayez cette démo JavaScript AI qui vous permet de dessiner quelque chose sur l’écran et que l’algorithme pré-entraîné vous indique ce que vous venez de dessiner.

L’algorithme essaiera de vous donner la meilleure correspondance même si ce que vous dessinez n’est pas vraiment un nombre. Vous pouvez néanmoins voir l'intellect artificiel au travail essayer de fournir l'approximation la plus proche possible.

À quoi ressemble l'ensemble formé?

Voici un extrait des données d'apprentissage de l'algorithme. C’est juste une liste de poids stockés dans un très long tableau (des milliers de valeurs):

// Pondérations du réseau de neurones (pondérations unité-unité et biais d'unité) // l'entraînement a été effectué dans Matlab avec l'ensemble de données MNIST.
// ces données concernent une unité 784-200-10, avec une non-linéarité logistique
// dans masqué et softmax dans la couche en sortie. L'entrée est un
// [-1; 1] image de niveau de gris, arrière-plan == 1, 28x28 pixels linéarisé
// dans l'ordre des colonnes (c'est-à-dire column1 (:); column2 (:); ...) i-ème résultat
// étant le maximum signifie que le réseau pense que l'entrée code
// (i-1) les poids ci-dessous ont montré un taux d'erreur de 1,92% sur le test
// ensemble de données (9808/10000 chiffres reconnus correctement).
Laisser la w12 = , 0.00692898, 0.0215552, 0.0540464, 0.0393167, 0.0668207, 0.0232665, 0.031598, 0.0143047, 0.0156885, -0.0269579, -0.00777022, 0.0397823, -0.00825727, 0.0212889, -0.0077559, -0.0077759, -30.005, 355.3535, -30.35.35.35.300, -35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.35.39.39.39.39.39.39.37.09.37.37.0, 0.06.09.35.0, 0.00692898, 0.0215552, 0.0540464, 0.0393167, 0.0668207, 0.0232665, 0.031598, 0.0143047, 0.0153098, -0.0269579,
/ * ... Des milliers de poids plus suivent ... * /

Le code source complet ne rentre pas dans cet article. Mais les ensembles sont généralement assez longs, même pour ce qui semble être des tests triviaux.

Peindre l'entrée d'image dans le réseau neuronal

Ce morceau de code provient de la fonction Recogn () écrite en JavaScript.

Il a été pris de la démo à http://myselph.de

Vous pouvez consulter le code source complet ici.

// pour la visualisation / débogage: peindre l'entrée dans le réseau neuronal. if (document.getElementById ('prétraitement'). vérifié == vrai)
{
    ctx.clearRect (0, 0, canvas.width, canvas.height);
    ctx.drawImage (copyCtx.canvas, 0, 0);
    pour (var y = 0; y <28; y ++) {
        pour (var x = 0; x <28; x ++) {
           var block = ctx.getImageData (x * 10, y * 10, 10, 10);
           var newVal = 255 * (0.5 - nnInput [x * 28 + y] / 2);
           pour (var i = 0; i <4 * 10 * 10; i + = 4) {
               block.data [i] = newVal;
               block.data [i + 1] = newVal;
               block.data [i + 2] = newVal;
               block.data [i + 3] = 255;
           }
       ctx.putImageData (bloc, x * 10, y * 10);
       }
   }
}

Ce morceau de code partiel "colle" l’image entrée (un dessin à main levée) qui était auparavant divisée en 10 x 10 blocs et stockant des valeurs moyennes d’échelle de gris pour cette zone de l’image.

Il le comparera ensuite à l'ensemble formé et, après avoir analysé les sommes / et les comparaisons moyennes, il renverra la probabilité du résultat en termes de correspondance du dessin de la zone de dessin HTML avec un chiffre particulier.

Mots finaux

L'intelligence artificielle est un vaste sujet. Chaque jour, différents types de modèles d'apprentissage automatique et de tutoriels sont publiés. Ce tutoriel ne devrait servir que d'introduction pour quelqu'un qui commence à peine!

Suivez-moi sur Twitter pour des cadeaux gratuits

Prenez votre copie de CSS Visual Dictionary incl. diagrammes de toutes les propriétés CSS.

Sur Twitter Tidal Wave est le compte qui donne mes livres gratuitement.

Suivez-moi sur @ js_tut où je poste des tutoriels JavaScript freemium.