samedi , 22 septembre 2018
Home » Tutoriel » Les compétences en machine learning que les ingénieurs logiciels doivent avoir

Les compétences en machine learning que les ingénieurs logiciels doivent avoir

Vous n’avez pas besoin d’être un scientifique des données pour faire de machine learning (apprentissage automatique), mais vous avez besoin de compétences en données. Commencez avec ceux qui suivent.

Il y a très longtemps, au milieu des années 1950, Robert Heinlein a écrit un article intitulé « Une porte vers l’été » dans lequel un ingénieur en mécanique compétent a raccordé des « tubes Thorsen » pour la mémoire de motifs et certains « circuits latéraux pour ajouter du jugement » et a engendré toute une industrie de robots intelligents. Pour rendre l’article plus plausible, il a été réalisé dans le futur, en 1970. Ces robots pourraient faire une tâche comme la vaisselle, puis la refaire parfaitement.

Il faut dire que cela ne s’est pas passé comme ça. Cet article pouvait sembler plausible en 1956, mais à partir de 1969, en 1970, il était clair que ça ne l’était plus. Et puis un peu plus tard, il était clair qu’il ne le serait pas non plus en 1980, ni en 1990 ni en 2000. Tous les 10 ans, la capacité pour un ingénieur normal de construire une machine artificiellement intelligente semblait reculer au moins aussi vite que le temps passait. Au fur et à mesure que la technologie s’améliorait, l’énorme difficulté du problème devenait évidente car des couches de difficultés successives étaient rencontrées.

Ce n’est pas que le machine learning ne résout pas des problèmes importants ; ça l’était. Par exemple, au milieu des années 90, toutes les transactions par carte de crédit étaient essentiellement analysées à la recherche de fraude via des réseaux neuronaux. À la fin des années 90, Google analysait le Web pour trouver des signaux avancés afin de faciliter la recherche. Mais, notre ingénieur logiciel n’avait aucune chance de construire un tel système à moins de retourner à l’école pour obtenir un doctorat et trouver un groupe d’amis partageant les mêmes idées qui feraient la même chose. Le machine learning était difficile, et chaque nouveau domaine demandait une grande innovation. Même les meilleurs chercheurs ne pouvaient pas résoudre des problèmes difficiles comme la reconnaissance des images dans le monde réel.

Heureusement, cette situation a radicalement changé. Aucun d’entre nous n’est sur le point de créer une société d’ingénierie

entièrement robotisée et auto-magique, de type Heinlein, mais il est désormais possible pour un ingénieur logiciel sans formation particulièrement avancée de concevoir des systèmes qui feront des choses vraiment incroyables. La partie surprenante n’est pas que les ordinateurs pourraient faire ces choses. (On sait depuis 1956 que cela serait possible d’un jour à l’autre !) Ce qui est surprenant est de savoir où en était nous la dernière décennie. Ce qui aurait fait vraiment un bon doctorat de la recherche il y a 10 ans est maintenant un projet cool pour un week-end.

Le machine learning devient plus facile (ou du moins plus accessible)

Dans le livre « Machine Learning Logistics » (écrit par O’Reilly), Ellen Friedman et son équipe a décrit un système connu sous le nom de TensorChicken qu’un ingénieur logiciel, Ian Downard, a conçu comme un projet maison amusant. Le problème à résoudre était que les geais bleus entraient dans le poulailler et picoraient les œufs. Il voulait construire un système de vision par ordinateur capable de reconnaître un geai bleu afin de prendre certaines mesures pour arrêter le picage.

Après avoir assisté à une présentation de deep learning par les ingénieurs de Google de l’équipe TensorFlow, Ian a commencé à craquer et a conçu un tel système. Il a pu le faire en commençant par un modèle partiel connu sous le nom d’Inception-v3 et en l’entraînant à la tâche de geai bleu avec quelques milliers de nouvelles images prises par une webcam dans son poulailler. Le résultat pourrait être déployé sur un Raspberry Pi, mais un temps de réponse rapide et plausible nécessite quelque chose d’un peu plus robuste, comme un processeur Intel Core i7.

Et Ian n’est pas seul. Il y a toutes sortes de gens, dont beaucoup ne sont pas formés comme scientifiques des données, construisant des robots géniaux pour faire toutes sortes de choses. Et un nombre croissant de développeurs commencent à travailler sur différents projets de machine sérieux, car ils reconnaissent que le machine learning et même le deep learning sont devenus plus accessibles. Les développeurs commencent à remplir des rôles d’ingénieurs de données dans un style de travail « data ops », où les compétences centrées sur les données (ingénierie de données, architecte, data scientist) sont associées à une approche devops pour construire des systèmes de machine learning.

Il est impressionnant de savoir qu’un ordinateur peut assez facilement être entraîné à repérer un geai bleu, à l’aide d’un modèle de reconnaissance d’image. Dans de nombreux cas, les gens ordinaires peuvent s’asseoir et le faire, et bien plus encore. Tout ce dont vous avez besoin, ce sont quelques conseils sur les techniques utiles et un peu de remise à zéro de votre état d’esprit, surtout si vous êtes principalement habitué à développer des logiciels.

La construction de modèles est différente de la création de logiciels ordinaires en ce sens qu’elle est axée sur les données et non sur la conception. Vous devez regarder le système d’un point de vue empirique et compter un peu plus que vous ne le souhaitez sur les preuves de fonction expérimentales, plutôt que d’implémenter avec soin une bonne conception accompagnée de tests unitaires et d’intégration. Gardez également à l’esprit que dans les domaines problématiques où le machine learning est devenu facile, il peut être bêtement facile. De l’autre côté, cependant, il y a des problèmes qui sont encore très difficiles et qui exigent des compétences plus sophistiquées en science des données, y compris davantage de mathématiques. Alors, prototypez votre solution. Essayez-la. Ne pariez pas la ferme (ou le poulailler) que si vous sachiez que votre problème est facile, ou moins facile. Ne pariez même pas la ferme que si elle semble fonctionner pour la première fois. Méfiez-vous des bons résultats, tout comme un bon scientifique.

Les compétences essentielles en matière de données pour les débutants en machine learning

Le reste de cet article décrit certaines des compétences et des tactiques dont les développeurs ont besoin pour utiliser efficacement le machine learning.

Vous pouvez aussi lire notre article sur « Machine learning : ce que les développeurs et les analystes doivent savoir« .

Laissez parler les données

Dans une bonne ingénierie logicielle, vous pouvez souvent raisonner une conception, écrire votre logiciel et valider l’exactitude de votre solution directement et indépendamment. Dans certains cas, vous pouvez même prouver mathématiquement que votre logiciel est correct. Le monde réel intervient un peu, surtout lorsque les humains sont impliqués, mais si vous avez de bonnes spécifications, vous pouvez implémenter une solution correcte.

Avec machine learning, vous n’avez généralement pas de spécifications strictes. Vous avez des données qui représentent l’expérience passée d’un système et vous devez créer un système qui fonctionnera dans le futur. Pour savoir si votre système fonctionne vraiment, vous devez mesurer les performances dans des situations réalistes. Passer à ce style de développement axé sur les données et les spécifications peut être difficile, mais c’est une étape critique si vous voulez créer des systèmes avec machine learning.

Apprenez à repérer le meilleur modèle

Comparer deux nombres est facile. En supposant qu’ils sont tous les deux des valeurs valides (pas celles de NaN), vous vérifiez ce qui est le plus grand et c’est tout. En ce qui concerne la précision d’un modèle de machine learning, ce n’est pas si simple. Vous avez beaucoup de résultats pour les modèles que vous comparez et il n’y a généralement pas de réponse nette. Les compétences les plus élémentaires dans la création de systèmes de machine learning sont la capacité à examiner l’historique des décisions prises par deux modèles et à déterminer quel modèle convient le mieux à votre situation. Ce jugement nécessite des techniques de base pour réfléchir à des valeurs qui ont un cloud complet de valeurs plutôt qu’une valeur unique. Cela nécessite également que vous soyez capable de visualiser les données. Des histogrammes et des diagrammes de dispersion et de nombreuses techniques connexes seront nécessaires.

Méfiez-vous de vos conclusions

Outre la possibilité de déterminer quelle variante d’un système fonctionne mieux, il est vraiment important de vous méfier de vos conclusions. Vos résultats sont-ils un hasard statistique qui ira dans l’autre sens avec plus de données ? Le monde a-t-il changé depuis votre évaluation, changeant ainsi quel système est le meilleur ? Construire un système avec le machine learning signifie que vous devez garder un œil sur le système pour vous assurer qu’il continue à faire ce que vous pensiez qu’il était en train de faire. Cette nature suspecte est nécessaire pour faire face à des comparaisons floues dans un monde en mutation.

Construisez de nombreux modèles à jeter

C’est une maxime bien connue dans le développement de logiciels, vous aurez besoin de construire une version de votre système juste pour le jeter. En fait, jusqu’à ce que vous arriviez à construire un système qui fonctionne, vous ne comprendrez pas suffisamment le problème pour bien construire ce système. Donc, vous construisez une version pour apprendre et ensuite utiliser cet apprentissage pour concevoir et construire le vrai système.

Avec machine learning, c’est la même chose, mais plus encore. Au lieu de construire un seul système jetable, vous devez être prêt à créer des dizaines ou des centaines de variantes. Certaines de ces variantes peuvent utiliser des technologies d’apprentissage différentes ou même des paramètres différents pour le moteur d’apprentissage. D’autres variantes peuvent être des reformulations complètement différentes du problème ou des données que vous utilisez pour former les modèles. Par exemple, vous pouvez déterminer qu’il existe un signal de substitution que vous pouvez utiliser pour former les modèles même si ce signal n’est pas vraiment ce que vous voulez prédire. Cela pourrait vous donner 10 fois plus de données pour vous entraîner. Ou vous pourrez peut-être reformuler le problème de manière à le résoudre plus facilement.

Le monde pourrait bien changer. Ceci est particulièrement vrai, par exemple, lorsque vous créez des modèles pour tenter de détecter la fraude. Même après avoir créé un système efficace, vous devrez changer à l’avenir. Les fraudeurs repéreront vos contre-mesures et changeront leur comportement. Vous devrez réagir avec de nouvelles contre-mesures.

Alors, pour réussir votre machine learning, prévoyez de créer un tas de modèles à jeter. Ne vous attendez pas à trouver un modèle en or qui restera la réponse pour toujours.

N’ayez pas peur de changer le jeu

La première question que vous essayez de résoudre avec l’apprentissage automatique n’est généralement pas la bonne. Souvent, c’est dramatiquement le mauvais. Le résultat de poser la mauvaise question peut être un modèle presque impossible à former ou des données d’entraînement impossibles à collecter. Ou il se peut qu’un modèle qui trouve la meilleure réponse a encore peu de valeur.

La refonte du problème peut parfois vous donner une situation où un modèle très simple à construire donne une valeur très élevée. Nous avons eu un problème une fois que nous étions censés faire avec des articles de recommandation de vente. Il était vraiment difficile d’obtenir même des gains insignifiants, même avec des techniques assez lourdes. Il s’est avéré que le problème majeur était de déterminer quand les bons articles étaient mis en vente. Une fois que vous avez su quand, le problème des produits à recommander est devenu insignifiant car il y avait beaucoup de bons produits à recommander. Au mauvais moment, il n’y avait rien à recommander de toute façon. Changer la question a grandement facilité le problème.

Commencez petit

Il est extrêmement utile de pouvoir déployer votre système d’origine dans quelques cas seulement ou avec un seul sous-problème. Cela vous permet de concentrer vos efforts et d’acquérir de l’expertise dans votre domaine problématique et d’obtenir un soutien dans votre entreprise lorsque vous construisez des modèles.

Commencez grand

Assurez-vous d’avoir suffisamment de données d’entraînement. En fait, si vous le pouvez, assurez-vous que vous obtenez 10 fois plus que vous pensez avoir besoin.

La connaissance du domaine compte toujours

Dans le machine learning, il faut comprendre comment un modèle peut prendre une décision ou une prédiction. Déterminer quelles sont réellement les questions importantes est beaucoup plus important. En tant que tel, si vous avez déjà beaucoup de connaissances sur le domaine, vous êtes beaucoup plus susceptible de poser les questions appropriées et d’être en mesure d’intégrer le machine learning dans un produit viable. La connaissance du domaine est essentielle pour déterminer où un sens du jugement doit être ajouté et où il pourrait vraisemblablement être ajouté.

Les compétences en codage comptent toujours

Il existe un certain nombre d’outils qui prétendent vous permettre de créer des modèles de machine learning en utilisant uniquement des outils de glisser-déposer. En fait, la majeure partie du travail dans la construction d’un système de machine learning n’a rien à voir avec le machine learning ou les modèles et a tout à voir avec la collecte de données de formation et la construction d’un système utilisant les résultats des modèles. Ce qui donne de bonnes compétences en codage extrêmement précieuses. Il y a une manière différente du code écrit pour manipuler les données, mais ce n’est pas difficile à comprendre. Les compétences de base d’un développeur s’avèrent donc être des compétences utiles dans de nombreuses variétés de machine learning.

De nombreux outils et nouvelles techniques deviennent disponibles, ce qui permet à pratiquement tous les ingénieurs logiciels de créer des systèmes utilisant le machine learning pour réaliser des choses étonnantes. Les compétences de base en ingénierie logicielle sont très utiles pour créer ces systèmes, mais vous devez les augmenter avec un peu de concentration sur les données. La meilleure façon d’acquérir ces nouvelles compétences est de commencer dès maintenant à construire quelque chose d’amusant.

À lire aussi

Comment augmenter la vitesse de vos builds de déploiement continu AWS Lambda ?

Parallélisez vos builds Maven, rendez-les reproductibles, et lancez le volume à 11 en utilisant Docker …