Introduction au deep learning et aux réseaux de mémoire à long terme

Deuxième partie : Générer des données pour détecter des anomalies

Romeo Kienzler

Ce tutoriel est la deuxième partie d’une série de cours pour vous apprendre quelques avantages du machine learning dans l’analyse de données et les journaux d’évènements, pour améliorer votre proactivité dans la détection et la résolution d’anomalies sur vos systèmes connectés.

Dans ce tutoriel, vous allez utilisez Node-RED pour créer un générateur de données de test.

Un espace de discussion est disponible sur le forum pour recevoir vos avis sur ce tutoriel. Commentez

- Titre : Introduction au deep learning et aux réseaux de mémoire à long terme

- Auteur : Romeo Kienzler

- Parution : 28 septembre 2018

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2018 Romeo Kienzler. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Création du simulateur de données de test

- III. Comprendre ce flux Node-RED

- IV. Conclusion

- V. Remerciements Developpez.com

I - Introduction

Ce contenu constitue la deuxième partie d’une série, afin d’apprendre à développer des solutions cognitives IoT pour la détection des anomalies en utilisant le deep learning.

Chaque projet de données commence par des données. Donnée est un terme très large. Il peut être structuré ou non structuré, grand ou petit, rapide ou lent, précis ou bruité.

J'ai écrit une série d'articles sur l'apprentissage en profondeur et le développement de solutions cognitives IoT en commençant par « Introduction à l’apprentissage en profondeur et aux réseaux de mémoire à long terme ». Les articles suivants traitent de l’utilisation de Deeplearning4j, ApacheSystemML, et TensorFlow (TensorSpark) pour la detection d’anomalies. Mon cas d'utilisation est la détection d'anomalies pour les données de séries chronologiques IoT à partir de données de capteurs de vibrations (accéléromètre). Pour tester efficacement le processus de création d'une solution d'apprentissage en profondeur sur ces différentes technologies, j'ai besoin de données. J'ai besoin de données structurées, rapides et volumineuses, qui peuvent aussi être bruitées.

Pour disposer d'un cadre simple pour la création de données, j'ai écrit un simulateur de données de test, qui fait partie d'une série d'outils plus complète de séries chronologiques et d'apprentissage automatique.

Ce simulateur génère des données à partir de l'échantillonnage de divers modèles physiques. Vous pouvez décider du degré de bruit et du basculement entre différents états (sain et cassé) du modèle physique pour les tâches de détection et de classification des anomalies.

Pour l'instant, j'ai implémenté le modèle Attracteur de Lorenz. C'est un modèle physique très simple mais très intéressant. Lorenz a été l’un des pionniers de la théorie du chaos et il a montré qu’un modèle très simple composé de trois équations et de quatre paramètres de modèle pouvait créer un système chaotique très sensible aux conditions initiales et oscillant également entre plusieurs états stables où les transitions d'état sont très difficiles à prévoir.

J'utilise Node-RED comme plate-forme d'exécution pour le simulateur car c'est un moyen très rapide d'implémenter des applications centrées sur les données. Node-RED est open source et fonctionne entièrement sur Node.js.

Comme le simulateur de données est entièrement implémenté en tant que flux Node-RED, nous pouvons utiliser Node-RED à partir de la plate-forme de démarrage IoT sur le Cloud IBM. Bien sûr, le simulateur de données peut s'exécuter sur n'importe quelle instance Node-RED, même sur un Raspberry Pi, où il peut être utilisé pour simuler des données de capteur sur le bord.

II - Création du simulateur de données de test

Bien qu'il ait été difficile de créer le simulateur de données de test, vous pouvez exécuter le simulateur en quatre étapes principales:

1. Déployer le modèle Node-RED IoT Starter sur IBM Cloud.

2. Déployer le flux du simulateur de données test.

3. Tester le simulateur de données test.

4. Récupérer les informations d’identification IBM Watson IoT Platform pour utiliser les données à l’aide de MQTT depuis n’importe quel endroit dans le monde.

Avant de commencer, vous aurez besoin d'un compte IBM Cloud. (Inscrivez-vous pour un compte IBM Cloud Lite, un compte gratuit qui n'expire jamais.)

1. Créez une application IBM Cloud à l'aide d' « Internet of Things Platform Starter ». Si vous n'êtes pas connecté à IBM Cloud, connectez-vous.

2. Nommez votre application sous un nom unique et cliquez sur Créer.

1. Remarque : J’ai utilisé romeoiotstarter123 pour que mon application soit d’un nom unique. Le nom de l'application devient une partie de l'URL d’où votre application est accessible. Mon URL, par exemple, est romeoiotstarter123.mybluemix.net.

3. Dans le menu de gauche, cliquez sur Connections.

4. Sur la vignette « Internet of Things Platform », cliquez sur « View credentials ».

5. Notez les valeurs des propriétés suivantes pour les utiliser plus tard lorsque vous travaillez avec l'une des trois technologies (DeepLearning4j, ApacheSystemML et TensorFlow (TensorSpark)):

- org

- apiKey

- apiToken

- Cliquez sur « Close ».

- Attendez que votre application soit en cours d’exécution puis cliquez sur « Visit App URL ».

Remarque: Si vous obtenez une erreur « 404 - No route defined », rechargez la page en quelques minutes. Cette erreur est un problème connu dans le composant de plateforme cloud open source Cloud Foundry et se produit parfois si IBM doit faire face à des charges de travail élevées. Cloud Foundry communique de manière asynchrone entre ses composants et l'interface utilisateur pense que l'application est en cours d'exécution, mais que l'équilibreur de charge n'a pas été mis à jour.

- Avant de pouvoir accéder et ouvrir votre éditeur de flux Node-RED, vous devez sécuriser votre éditeur Node-RED.

1. Cliquez sur « Next ».

2. Définissez un nom d'utilisateur un mot de passe

Remarque: cochez la case pour partager votre application avec d’autres personnes. Si vous ne cochez pas cette case, votre implémentation restera privée.

3. Cliquez sur « Next ».

4. Cliquez sur « Finish ».

5. Cliquez sur « Go to your Node-RED flow editor ».

6. Connectez-vous avec le nom d'utilisateur et le mot de passe que vous venez de créer.

7. À l’aide de votre souris, sélectionnez tous les nœuds dans « Flow 1 »; Cliquez sur la touche « Delete » pour la vider.

8. A partir du menu supérieur droit, cliquez sur « Import > Clipboard ».

9. Ouvrez ce fichier simulatorflow.json file à partir de developerWorks GitHub repo; copier l’objet JSON dans le presse-papier.

10. Dans la fenêtre « Import nodes », collez l'objet JSON dans le champ de texte, puis cliquez sur « Import ».

Remarque: assurez-vous de coller un document JSON à partir de votre Presse-papiers et non HTML. Dans sa prochaine version, NodeRED aura l’intégration GIT, donc cette étape deviendra plus facile.

Le flux suivant est affiché dans l'onglet Flow.

11. Cliquez sur « Deploy ».  Le message « déployé avec succès » s'affichera.

L’onglet « debug » affiche les messages générés. Toutes nos félicitations! Votre générateur de données de test fonctionne.

III - Comprendre ce flux Node-RED

Vous l'avez fait, mais que se passe-t-il dans ce flux Node-RED?

Considérons le nœud étiqueté avec le mot timestamp.

Ce nœud est un nœud d'injection et génère des messages à des intervalles définis. Ceci est très utile comme point de départ pour notre simulateur. Dans un scénario réel, ce nœud serait remplacé par des nœuds connectés à des capteurs d'accéléromètre. Comme nous générons les valeurs de l’accéléromètre en utilisant le modèle Attracteur de Lorenz, nous pouvons ignorer la charge utile timestamp des messages et ne réagir que sur l’objet du message lui-même, ce que nous verrons plus tard.

Double-cliquez sur le nœud timestamp. Notez que le taux d'échantillonnage génère 100 messages par seconde (ou un taux d'échantillonnage de 100 Hz).

Remarque: Le taux d'échantillonnage doit être deux fois plus élevé que la fréquence la plus élevée que nous voulons capturer en raison du théorème de Nquist. Alors que 100 Hz est en réalité beaucoup trop faible, pour ce tutoriel, il est suffisamment élevé. Dans un scénario réel, vous devriez échantillonner à 20 ou 40 kHz (chaque 0.01 seconde est égale à 100 Hz).

Ensuite, regardez le nœud « function ». C'est le cœur du simulateur.

Double-cliquez sur ce nœud et consultez le code de fonction suivant:

var h = context.global.get('h')||0.008;
var a = context.global.get('a')||10;
var b = context.global.get('b')||28;
var c = context.global.get('c')||8/3;
var x = context.global.get('x')||2;
var y = context.global.get('y')||3;
var z = context.global.get('z')||4;

x+=h*a*(y-x)
y+=h*(x*(b-z)-y)
z+=h*(x*y-c*z)

context.global.set("x",x);
context.global.set("y",y);
context.global.set("z",z);
msg.payload={};
msg.payload.x=x;
msg.payload.y=y;
msg.payload.z=z;
return msg;

Remarque: Les paramètres initiaux du modèle sont h, a, b et c. Nous initialisons également x, y, et z sur certaines valeurs; les équations forment le modèle actuel. Ils sont dépendants de h, a, b, c, x, y, et z. À chaque pas de temps (actuellement 100 par seconde), le modèle avance d'un pas dans le futur car x, y, et z sont mis à jour en utilisant les valeurs de constantes h, a, b, et c et aussi des valeurs précédentes x, y, et z.

Vous avez besoin de paramétrer une limite pour les données en sortie pour deux raisons :

- Au taux d'échantillonnage actuel (100 messages par seconde), vous utiliserez les 200 Mo gratuits par mois sur la plateforme Watson IoT en quelques heures.

- L'analyse en aval peut ne pas être en mesure de gérer ce débit de données.

Examinons maintenant la limite au nœud de fonction « max 3000 ». Actuellement, le maximum est fixé à 30 secondes de données en utilisant un simple compte.

Double-cliquez sur le nœud pour voir le code de la fonction:

var count = context.global.get('count') || 0;
count += 1;
context.global.set('count',count);
if (count <= 3000) {
return msg;
}

Considérons maintenant le nœud de réinitialisation. Le nœud de fonction associé à ce nœud est configuré pour envoyer les 30 secondes suivantes de données à la file d'attente de messages.

Double-cliquez sur le nœud de la fonction. Il est implémenté comme suit:

context.global.set('count',0);
msg.payload=context.global.get('count');
return msg;

Les dernières étapes à suivre consistent à basculer ce simulateur entre les états cassé et sain. Pour simuler des données erronées ou cassées, nous pouvons cliquer sur le nœud de fonction associé au nœud d'injection rompu.

La seule chose que fait ce nœud est de mettre à jour les constantes du modèle Lorenz Attractor.

context.global.set('h',0.008);
context.global.set('a',30);
context.global.set('b',128);
context.global.set('c',28/3);

return msg;

Et bien sûr, jetez un coup d’œil à la fonction pour le ramener à un état sain.

context.global.set('h',0.008);
context.global.set('a',10);
context.global.set('b',28);
context.global.set('c',8/3);

return msg;

Enfin et surtout, voyons comment ces données sont transmises au courtier de messages MQTT de la plate-forme IBM Watson IoT.

Vous pouvez laisser la configuration telle quelle et les informations d'identification vous sont injectées à l'aide de Cloud Foundry exécuté sur IBM Cloud.

IV - Conclusion

Vous avez déployé avec succès un simulateur de données de test en créant une série chronologique d'événements échantillonnés à partir d'un modèle physique. Vous pouvez également basculer entre deux états (sain et cassé) pour la détection et la classification des anomalies. Vous pouvez maintenant utiliser ces données de test dans les autres didacticiels de cette série. Vous serez en mesure de développer des solutions cognitives IoT d'apprentissage en profondeur pour la détection des anomalies avec Deeplearning4j, ApacheSystemML et TensorFlow (TensorSpark).

V - Remerciements Developpez.com

Developpez.com remercie IBM pour la mise à disposition de ce tutoriel. Les remerciements également à Guillaume Sigui pour la mise au gabarit et Bruno Barthel pour la relecture orthographique.