IA, objets connectés et apps mobiles : le trio gagnant de l’e-santé

Pour une fois, les avis des experts s’accordent sur un point : le triplet {IA, IOT et e-Santé} va connaître un essor sans précédant dans les prochaines années.

Pour mémoire, l’Intelligence Artificielle qui fut bien malmenée au cours des années 90, après avoir suscité l’intérêt de nombreux laboratoires de recherche dans les années 70 et 80, regroupe plusieurs domaines parmi lesquels :

  • L’analyse en séries temporelles (TSA – Time Series Analysis) – objectifs : prévoir / anticiper le comportement d’une série de données temporelles représentant des attributs d’objets ou d’individus (échantillonnées à intervalles réguliers)
  • Les techniques de régression – objectifs : définir un modèle mathématique simple (calculable) permettant de représenter le comportement d’une série de données représentant des attributs d’objets ou d’individus
  • L’apprentissage (machine learning) – objectifs : à partir d’une simulation ultra-simplifiée du fonctionnement d’un cerveau humain, mettre en oeuvre des algorithmes d’apprentissage, entraînés à l’aide d’une série de données dédiées – objectifs : exploiter cette capacité de raisonnement pseudo-intelligent sur des séries de données représentant des attributs d’objets ou d’individus
  • La classification (clustering) – objectifs : déterminer dynamiquement des classifications d’objets ou d’invididus à partir de données représentant leur propriétés ou caractéristiques

Naturellement, il convient souvent de combiner ces différentes techniques – et les outils afférents – pour parvenir à résoudre des problèmes variés, allant de la reconnaissance d’image ou de types de scènes, au traitement du langage naturel en passant par la résolution (par approximation et réductions successives) de problèmes complexes.

Globalement, les mathématiques (et par rebond, les algorithmes) utilisés dans ces quatre domaines sont d’une complexité maîtrisable, pourvu bien sûr que l’on dispose de la puissance de calcul nécessaire pour les mettre en oeuvre.

Ainsi, quelques lignes de code relativement simples suffisent pour créer un algorithme capable de reconnaître des caractères (OCR), à l’aide par exemple d’un réseau de neurones de Hopfield (en fin d’article, les amateurs de Wolfram Mathematica trouveront un exemple élémentaire de code de ce type). Plusieurs plates-formes en ligne permettent de faire du “calcul neuronal” mettant en oeuvre des réseaux de neurones. Nombreuses sont en outre les solutions de Big Data qui embarquent des composants logiciels ou des opérateurs issus de l’IA.

Réseaux de neurones et apprentissage

En schématisant (pardon pour les experts pointilleux), les réseaux de neurones sont des ensembles d’unités algorithmiques (automates) interconnectées selon des modèles (topologies) plus ou moins sophistiqués (avec ou sans bouclage – rétroaction -, par exemple). On commence par “entraîner” un tel réseau à l’aide d’un jeu de données baptisé pour l’occasion “training set”. L’entraîner équivaut en quelque sorte à lui permettre d’assimiler des connaissances.

Chaque neurone constitue une unité logique de traitement très simple, par mimétisme avec ce que l’on comprend du fonctionnement du cerveau humain. Ce neurone dispose de quelques paramètres, en plus d’une fonction d’activation (de type seuil, à l’instar de la fonction Sigmoid décrite ci-après).

Prenons l’exemple d’un réseau de neurones composé de 12 unités (neurones) répartis en 3 couches (baptisées respectivement couche d’entrée, couche intermédiaire – ou cachée – et couche de sortie). Dans cet exemple, le flux d’information avance de l’entrée vers la sortie, sans aucun retour arrière – de tels retours sont parfaitement envisageables et produisent des résultats fructueux dans certaines configurations. L’organisation des neurones en couches successives (forward propagation) correspond à une construction logique : on dispose de n variables en entrée (un vecteur de dimension n), il est donc naturel de disposer d’au moins n neurones dans la couche correspondante. De même, le nombre de neurones présents dans la couche de sortie ne dépend que de la nature de la réponse attendue (dimension du vecteur résultat). Dans notre exemple, le réseau affiche 2 entrées et autant de sorties. On voit que le premier niveau de la couche intermédiaire (cachée) dispose de 3 neurones, chacun recevant une copie des sorties des neurones de la couche d’entrée. Chacun neurone i intermédiaire applique une transformation linéaire (a(i).x1 + b(i).x2) aux valeurs x1 et x2 qu’il reçoit. Dans cette équation, a(i) et b(i) désignent des paramètres qui caractérisent le comportement du neurone d’indice i. En sortie, on applique une fonction d’activation (par exemple une sigmoid) qui détermine la valeur de sortie (la réponse) du neurone considéré. Dès lors, l’apprentissage d’un tel réseau revient à déterminer, par un algorithme approprié et à partir d’un jeu de données dédié, les valeurs des paramètres de chaque neurone et la configuration précise de la fonction d’activation. Entraîner un réseau de neurones c’est tenter de réduire la différence existante entre chaque valeur attendue (réponse idéale) et la valeur obtenue (réponse calculée) en ajustant les valeurs de ces paramètres.

La fonction d’activation d’un neurone typique fait souvent appel à la fonction Sigmoid :

s(x)=1/[1+exp(-x)]

Cette fonction possède la propriété remarquable d’admettre une dérivée qui s’exprime à l’aide d’elle-même :

s'(x) = s(x)[1-s(x)]

ce qui s’avère très avantageux dans la mise en oeuvre d’algorithmes classiques de descente de gradient : en clair, l’apprentissage du réseau fait appel à des calculs simples.

L’évolution considérable de la puissance de calcul dont nous disposons, y compris au coeur de nos objets électroniques nomades, permet désormais d’emporter avec nous des dispositifs pseudo-intelligents mettant en oeuvre des réseaux de neurones complexes. FaceID, introduit par Apple avec son onéreux iPhone X, s’appuie sur cette technologie (entre autre) pour améliorer par apprentissage la pertinence de son mécanisme de reconnaissance du propriétaire de l’appareil. Ainsi, plus vous utilisez votre iPhone X, mieux il vous reconnaîtra.

Données temporelles : TSA

Chaque fois que l’on dispose de données temporelles, c’est-à-dire lorsque chaque unité d’information est associée à une date ou à un numéro d’ordre chronologique (unique), les mathématiques nous offrent une kyrielle de techniques d’analyse qui permettent notamment d’anticiper la valeur de la donnée d’indice n+1 à partir des valeurs des données d’indice {1, 2, … n} avec une probabilité proche de 1 (une vérité vraie), puis la valeur de la donnée d’indice n+2 avec une probabilité légèrement inférieure à 1 (une vérité un peu moins certaine), etc.

Clustering

La classification (clustering) permet quant à elle, à partir de jeux de données caractérisant les propriétés d’une population d’individus ou d’objets, de déterminer une ou plusieurs taxinomies en créant des vecteurs combinant les attributs de ces mêmes individus ou objets. On cherche ainsi à créer des modèles permettant de classer les individus, et par là-même de réduire la complexité d’un système ou de prédire les comportements encore d’individus ou d’objets que l’algorithme aura rangé dans une catégorie (un cluster) donnée.

Voici par exemple le résultat de l’exécution d’un algorithme de clustering appliqué à des données représentant la taille et le type des feuilles de différentes variétés d’iris.

Un monde de promesses fructueuses pour le secteur de l’e-Santé

On le voit, les techniques propres à l’IA et leur combinaison idoine permettent de créer des dispositifs informatiques singeant certains pans de notre intelligence. Naturellement, ces techniques sont fortement “datavores”, c’est-à-dire qu’elles ont besoin d’importantes quantités de données pour révéler tout leur potentiel. Et c’est ici que l’explosion du marché des objets connectés (IOT, Internet Of Things) entre en jeu.

Mais concrètement, à quoi peuvent servir de telles technologies ?

Si vous portez une montre connectée, recueillant à intervalles de temps T réguliers (échantillonnage à la fréquence de 1/T), une valeur représentant votre pulsation cardiaque, vous collectez des données temporelles qu’un dispositif s’appuyant sur l’analyse en séries temporelles, combiné avec un réseau de neurone, permettra de rapprocher des données collectées pour d’autres utilisateurs, porteurs d’une montre du même type. En théorie, un tel “système”, après un temps d’apprentissage, doit être capable de détecter des configurations de données (des suites de valeurs) qui pourraient traduire un risque d’infarctus du myocarde pour un utilisateur donné, à condition qu’un nombre suffisant d’incidents cardiaques de ce type aient été préalablement signalés au système par des utilisateurs malchanceux (malades du coeur). L’IOT produit de la donnée valable, calculable, exploitable…

Les enjeux dans le domaine de l’e-Santé sont colossaux. La miniaturisation des capteurs et l’évolution ultra rapide des techniques combinant matériels et logiciels laissent entrevoir des possibilités remarquables dans un avenir proche : assistance au diagnostic de maladies rares, notifications intelligentes (et non sottement statistiques) visant à améliorer notre santé au quotidien, détection de symptômes à risque, etc.

Attention : données sensibles et patients vivants !

Naturellement, comme toute avancée significative sur un marché potentiellement lucratif, le boom de l’e-Santé s’accompagne de son cortège de risques et de dérives de toutes sortes. Fort heureusement, pour ce qui concerne l’Europe, des normes et des standards, ainsi que des dispositifs de certification permettent de protéger les futurs patients-utilisateurs collecteurs de données. La reconnaissance d’un dispositif électronique en tant que dispositif certifié de santé (dispositif médical) n’est pas une mince affaire et, nous en sommes les premiers témoins chez Wopata puisque nous accompagnons certains de nos clients dans à ce sujet, requiert de mettre en oeuvre des approches et des méthodes de conception et de développement parfaitement adaptées au risque que l’on cherche à contenir. L’hébergement des données de santé (HADS) permet quant-à-lui de garantir la sécurité et la confidentialité des informations nominatives manipulées par des tels dispositifs.

Le marché de l’e-Santé + IA + IOT explose. Cette explosion constitue une opportunité remarquable pour notre pays qui ne manque pas d’ingénieurs, de concepteurs, d’entrepreneurs et de mathématiciens brillants. Affaire à suivre…

Annexe : réseau de Hopfield en Mathematica.

Représentation graphique d’un réseau de neurones de type Hopfield créé à l’aide de Wolfram Mathematica.

Codage à l’aide de Wolfram Mathematica du réseau de neurones de Hopfield.

Hopfield Neuron Network
Create and train the Network
Author: Laurent Maury
The training set should adopt the following form:
trainingSet={{att},{set1}...{setn}}
The first element describes the x X y pixels format in the training set:
Input: att={x,y}

1. Train the network: a valid training set feeds the function. 

Input: 
hopfieldTrain[tSet_] := 
 Module[{n, l = Length@Last@tSet, ts = Take[tSet, -(Length@tSet - 1)]},
  n = Length@ts;
  Table[Sum[ts[[p, i]] ts[[p, j]], {p, 1, n}]/l, {i, 1, l}, {j, 1, 
     l}] SparseArray[{{i_, i_} -> 0, {i_, j_} -> 1}, {l, l}] ]
2. Apply the trained network to a new input.
Input: 
applyHopfield[h_, x_] := Module[{n = Length@x, hopfield = Normal@h},
  Table[Sign[Sum[hopfield[[i, j]] x[[j]], {j, 1, n}]], {i, 1, n}]]
3. A specific function is created to display the training set.
Input: 
plotTrainingSet[trainingSet_] := 
 Module[{att = First@trainingSet, l, k, n, ts = Flatten@trainingSet},
  {l, k} = att;
  n = Floor[(Length@ts - Length[att])/(k l)];
  ts = Take[ts, -(l*n*k)];
  Table[ArrayPlot[Partition[ts, l][[(i - 1)*k + 1 ;; (i - 1)*k + k]], 
    ColorFunction -> (Hue[#/3] &)], {i, 1, n}]]
Example #1: 5X5 Pixels OCR

The following training set contains 3 items, each representing a squared matrix of 5 X 5 pixels. 
Input: 
trainingSet = {{5, 5}, {-1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 
    1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1}, {1, 1, 1, 
    1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 
    1, 1, 1, -1}, {-1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 
    1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1}};
It is relevant to visualy check the nature of the training set.

Input: 
plotTrainingSet@trainingSet

Now, we can create and train the Hopfield network.

Input:
 h = hopfieldTrain[trainingSet]

The ArrayPlot primitive provides a cool visual representation of the trained network.

Input:
ArrayPlot[h, ColorFunction -> (Hue), PlotTheme -> "Detailed"]

It's time to test our OCR algorithm. First, check its efficiency with one item present in the original training set (letter E).

applyHopfield[h, {-1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1,
   1, -1, -1, -1, -1, 1, 1, 1, 1, -1}]
The algorithm reproduces the original E as expected. Now, lets add biases to our input. 

applyHopfield[h, {-1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1,
   1, -1, -1, -1, -1, 1, 1, 1, 1, 1}]

admin9501

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.