Comme nous l’avons vu dans l’article précédent, la plupart des petits objets autonomes que nous côtoyons au quotidien sont loin d’avoir les mêmes capacités de calcul et de stockage que notre PC ou qu’un serveur. Cependant, sous certaines conditions, il semble pertinent d’embarquer de plus en plus d’intelligence dans ces petits objets.

Est-il possible d’aller jusqu’à y intégrer du machine learning? Et surtout, comment s’y prendre, notamment pour garantir la fiabilité et la prédictibilité du système? C’est ce que nous allons étudier maintenant.

 

3 – Le machine learning, c’est quoi exactement ?

Avant de détailler le principe du machine learning, regardons tout d’abord ce que le machine learning n’est PAS (ou pas systématiquement) :

3.1 Pas d’auto-apprentissage

L’appareil ne devra pas être capable de trouver par lui-même des algorithmes capables de détecter des événements initialement inconnus. L’idée qu’ ”à force d’emmagasiner des données tout au long de sa vie, l’objet pourrait finir par reconnaître certains événements précédemment rencontrés et qu’en corrélant cela avec d’autres critères, il pourrait “comprendre” à quoi ces événements correspondent” va bien au delà des concepts de machine learning dont nous parlons ici.
Au contraire, les algorithmes de détection seront mis au point avant l’implémentation dans le système. C’est ce qu’on appelle l’apprentissage.

3.2 Pas d’apprentissage embarqué

Il ne faut donc pas confondre cet apprentissage, qui pourra même se faire lors d’une phase de R&D avant le développement du produit, et l’utilisation a posteriori des algorithmes issus de cet apprentissage dans le device.
C’est l’apprentissage qui constitue la partie la plus gourmande en ressources, à la fois par la quantité de données à analyser et par la puissance de calcul nécessaire pour mettre au point les algorithmes potentiels. Il n’a donc pas vocation à être effectué sur l’appareil final, mais peut se faire sur un PC ou un serveur dédié.
Le résultat de cet apprentissage sera un algorithme capable de détecter les différents événements, et ce sera uniquement cet algorithme qui sera à implémenter sur le produit final.

3.3 Pas d’invention

Les logiciels de machine learning que nous allons utiliser pour l’apprentissage ne vont pas inventer les différents événements ou situations qui pourront être détectés par la suite.
Il faudra leur fournir en entrée des données déjà classifiées. C’est à dire que pour chaque donnée qui servira à l’apprentissage il faudra indiquer à l’avance à quel événement ou situation elle correspond.

3.4 Fonctionnement du machine learning

Le machine learning fonctionne donc en 3 temps:

  • la classification des données : l’ensemble des données pré-enregistrées doivent être, parfois manuellement, retraitées pour être associées à chacun des événements ou situation qui devront être détectables.
  • l’apprentissage : grâce à ces données classifiées, un logiciel (sur un PC) va essayer de trouver les bons critères et les bons algorithmes pour détecter le plus efficacement possible les différents événements. En général, une grosse partie des données sert à trouver les algorithmes et le reste sert à les tester pour déterminer leur fiabilité.
  • l’implémentation du meilleur algorithme trouvé sur la cible finale (c’est à dire sur notre produit).
Schéma processus machine learning

4 – Comment adapter le “machine learning” pour nos contraintes ?

Dans le monde de l’IoT, il existe bien sûr des objets qui ont des capacités de calcul et de stockage quasi-équivalentes à un PC. Mais ils sont en général alimentés en permanence (une caméra connectée par exemple) ou doivent être rechargés très régulièrement (une montre GPS connectée par exemple).
Nous nous intéressons ici à des objets à grande autonomie et dont les ressources sont ultra-limitées: les conseils qui suivent visent à adapter le processus de machine learning pour tenir compte de ces limitations.

4.1 Le choix des outils

Avant de se lancer dans le processus du machine learning, il faut choisir les logiciels que nous utiliserons. Certains sont plus adaptés à certaines cibles que d’autres.
Le fabricant du microprocesseur (ou plutôt du microcontrôleur) utilisé sur le produit a probablement déjà des exemples d’application du machine learning sur ses composants: réutiliser les outils présentés dans ces exemples peut être une bonne piste.

4.2 Pas de calcul sur des flottants

C’est une règle de base pour tout développement sur un petit microcontrôleur: éviter à tout prix les calculs sur des nombres flottants (cad les nombres “à virgule”)! Ceci n’est pas du tout pris en compte quel que soit l’outil choisi ou les méthodes qui seront utilisées par la suite.
Par contre il est possible de convertir des nombres flottants en nombres entiers (plutôt que d’avoir une accélération de 1,589g on peut considérer une accélération de 1589mg) et de modifier les calculs pour conserver une précision suffisante sur ces entiers.

4.3 Le choix des métriques

La plupart du temps la détection des événements ne se fera pas sur les valeurs brutes des données mais plutôt sur des profils de variation. Il sera donc souvent nécessaire de pré-calculer des statistiques sur ces données, ce que nous appelons des métriques.
Ce sont ces métriques qui seront directement utilisés dans l’algorithme issu de l’apprentissage: il faudra donc pouvoir calculer ces métriques dans le produit final pour pouvoir implémenter l’algorithme en question.
Il est donc pertinent de commencer par l’utilisation de métriques les plus simples possibles (moyenne, peak-to-peak, min, max, …) et de ne passer à des métriques plus complexes (variance, déviation standard, écart-type, …) que si les premiers ne donnent pas satisfaction.

4.4 Le choix des fenêtres d’analyse

De même les données et leurs métriques seront analysées sur une certaine durée (par exemple “la moyenne de l’accélération sur 10 secondes”). Plus cette durée sera longue, plus il faudra stocker temporairement de données et plus le calcul sera complexe.
On veillera donc à garder une fenêtre d’analyse la plus courte possible et à effectuer des calculs intermédiaires si ce n’est pas possible.

4.5 Le choix des types d’algorithmes

Le logiciel d’apprentissage peut tester plusieurs types d’algorithmes. Là encore on choisira d’abord les algorithmes les plus simples (arbre de décision par exemple) avant de passer à des algorithmes plus complexes si nécessaire.
Cela permettra également d’obtenir un algorithme “compréhensible” et de maîtriser ainsi le comportement du système (c’est à dire sa prédictibilité et sa fiabilité), voire de pouvoir modifier a posteriori l’algorithme appris (même si cela est en théorie à éviter).

4.6 La validation des algorithmes issus de l’apprentissage

En utilisant une partie des données disponibles pour tester les algorithmes trouvés, le logiciel d’apprentissage fournira un taux de succès pour chacun de ces algorithmes.
Evidemment l’objectif est de trouver l’algorithme qui fournit le taux de succès le plus proche possible de 100%.
Cependant il faut également relativiser ce taux en fonction de la complexité de l’algorithme et des métriques utilisés : se demander si on ne peut pas accepter un taux un peu plus faible si cela permet de garantir une meilleure utilisation des ressources et une plus grande fiabilité du système.
Une réflexion également très importante à mener : ne serait-il pas possible d’améliorer le taux de succès d’un algorithme plus simple ? Une meilleure classification initiale des événements ou davantage de données en entrée peuvent faire une différence bien plus grande que de changer d’algorithme ou de métriques.

Chez Next4, c’est en suivant ces quelques règles que nous avons notamment réussi à implémenter dans notre tracker N402 un algorithme de détection de grutage des containers dans les bateaux, sans être limités par les ressources de notre microcontrôleur.
Quels autres obstacles avons-nous dû franchir pour y parvenir? Qu’est ce que cela nous apporte par rapport à des algorithmes plus “empiriques”? Quelles possibilités s’offrent à nous pour la suite? C’est ce que nous verrons bientôt dans le dernier article de cette série.

par Julien Brongniart