Choses à apprendre pour développer et rechercher le ML

Ashwath Salimath, notre chercheur d'été chez Octavian, a demandé aujourd'hui sur quoi il devrait se concentrer pour consolider ses compétences en apprentissage automatique:

Je souhaite développer la maîtrise des principaux algorithmes ML dans TensorFlow et pouvoir convertir rapidement les documents de recherche en code bien écrit. Que devrais-je faire au cours des 3 à 6 prochains mois?

Cela a donné lieu à une discussion intéressante, dont j'espère que le résumé sera utile aux autres ici.

Pour devenir solide dans le développement (et éventuellement dans la recherche) d’algorithmes d’apprentissage automatique, je vous conseillerais de consacrer du temps aux tâches suivantes:

Ecrire une gamme variée de modèles à partir de zéro

Pour bien comprendre le fonctionnement de quelque chose, rien ne vaut l’écriture (c’est pourquoi de nombreux cours d’informatique enseignent toujours l’assemblage et le matériel). Écrire un modèle à partir de zéro vous aidera à apprécier chaque décision de conception et chaque fonction de bibliothèque utilisée. Cela permet également de mémoriser le fonctionnement de ce modèle.

En outre, le débogage d’un modèle vous oblige à comprendre ce qu’il fait (/ ne fait) pas, pourquoi il le fait, quelles sont ses limites et comment résoudre les problèmes courants.

Il est recommandé de choisir un problème de données non trivial (par exemple, pas MNIST ou Iris) afin que vous rencontriez des problèmes plus pertinents dans le monde réel (par exemple, déséquilibre de classe, bruit, intractabilité, différentes métriques de précision, nettoyage des données et pré-analyse). En traitement).

Si vous voulez vraiment apprendre (et ressentir de la douleur!), Choisissez des problèmes qui manquent de solution publique ou de tutoriel. Ceux-ci n'ont pas de raccourcis faciles et pousseront vos capacités.

Pour que vous soyez flexible et que vous puissiez utiliser un large éventail de tactiques, je vous suggère de vous familiariser avec toutes les architectures ML majeures:

  • Couches denses / Régression
  • Réseaux de neurones convolutifs
  • Réseaux de neurones récurrents
  • Réseaux de neurones de renforcement
  • Embeddings (filtrage collaboratif, recherche, par exemple)
  • Bonus: machines neurales

Construire un code modulaire, testable, assertif / typé

Les bibliothèques d'apprentissage automatique ont tendance à encourager le code monolithique, difficile à lire et difficile à tester. Combattez cette envie!

En écrivant plus de code à l'épreuve des balles, vous pourrez écrire des modèles fonctionnels plus rapidement.

Vous voulez créer un code amical pour les autres, susceptible de fonctionner et donnant une erreur facile à comprendre au lieu d'une précision embarrassante à zéro pour cent.

  1. Construisez vos modèles à partir de nombreuses petites fonctions qui racontent une histoire
  2. Incluez autant de vérifications statiques et d’exécution que possible (par exemple, associez des assertions voulant que les tenseurs soient la forme que vous pensez être, les masques d’affirmation étant bien le bon format)
  3. Incluez des tests unitaires de sous-modules (par exemple, votre module de lecture de mémoire récupère-t-il correctement les valeurs? La tokenisation de langue encode-t-elle de manière fiable les valeurs de décodage?)
  4. Utilisez des fonctions de bibliothèque bien testées au lieu de lancer les vôtres lorsque cela est possible (par exemple, explorez les utilitaires de votre bibliothèque!)

Essayez plusieurs outils et plates-formes

Il existe actuellement de nombreux outils et plateformes formidables pour accélérer votre travail. Par exemple:

  • Essayez tous les différents onglets de TensorBoard (l'onglet de projection est vraiment pratique pour calculer des incorporations! Essayez de générer votre propre dictionnaire d'étiquettes pour cela).
  • Essayez de vous entraîner dans le cloud (avec FloydHub, Cloud ML, SageMaker, par exemple).
  • Essayez une autre bibliothèque d’apprentissage automatique (p. Ex. PyTorch vs TensorFlow, consultez la classe Model de Keras)

Lire / mettre en œuvre des idées de documents de recherche

Tout d’abord, prendre l’habitude de lire des articles de recherche est un excellent moyen de:

  • Devenez bon en maths et en informatique de pointe
  • Entendre de nouvelles idées
  • Trouvez l'inspiration pour vos projets

Twitter est actuellement un bon endroit pour découvrir de nouveaux journaux. Voici quelques idées de poignées à suivre.

Ensuite, essayez de mettre en œuvre des choses à partir de papiers. Même si la mise en œuvre de tout un système de recherche est décourageante, vous pouvez utiliser de petites idées dans votre travail. Par exemple, je m'efforçais de trouver un taux d'apprentissage qui permettrait de former avec succès un modèle d'intégration, et une implémentation à 5 lignes de PercentDelta a résolu mon problème.

Construire un système de formation distribué

De nombreux problèmes / jeux de données du monde réel sont trop volumineux pour fonctionner sur votre ordinateur portable en dix minutes. Les systèmes distribués sont une bête complètement séparée (et peut-être plus difficile à déboguer que les modèles d'apprentissage en profondeur!)

Construire un système de formation distribué à l'échelle de l'entreprise est une entreprise de grande envergure, des projets plus conviviaux sont facilement possibles:

  • Essayez d’utiliser une file d’attente distribuée pour les données de formation / prévision (par exemple, Kafka, Rabbit MQ, Firebase).
  • Essayez d’utiliser plusieurs ordinateurs / instances pour la formation (par exemple, un cluster Kubernetes, des instances AWS, les ordinateurs portables de vos amis).

Personnellement, je me suis lancé dans la formation distribuée pour aider avec une expérience d'algorithmes génétiques / machine neuronale.

Exécuter un modèle sur un périphérique limité

Les déploiements dans le monde réel ont souvent des ressources limitées (par exemple, ils doivent être exécutés dans un navigateur ou doivent calculer les réponses très rapidement pour les utilisateurs).

Essayez l'une des solutions suivantes:

  • Obtenez un modèle que vous avez formé prédisant sur un téléphone
  • Obtenez un modèle que vous avez appris à prévoir dans un navigateur
  • Rendre possible la formation d'un modèle sur un téléphone / un ancien ordinateur

Écrivez sur les choses que vous apprenez

L'écriture et l'enseignement vous obligent à mettre en lumière les lacunes de vos connaissances. Ce sont deux compétences précieuses, enrichissantes et amusantes.

Voici quelques formats courants que vous pouvez essayer:

  • Un rapport de laboratoire sur ce que vous avez fait, quels ont été les résultats
  • Un court QA technique (par exemple, comment résoudre un piège courant, contourner un bug)
  • Un tutoriel
  • Une explication d'un concept complexe
  • Une présentation d'une nouvelle découverte

S'entraîner à trouver des problèmes intéressants

Repérer un bon titre / problème de recherche est une compétence en soi. Vous voulez trouver quelque chose qui est:

  • Roman (n'a pas déjà été résolu / fait)
  • Intéressant pour les autres
  • Possible avec le temps, les compétences et les ressources dont vous disposez

Il peut être difficile de trouver des solutions qui répondent à tous ces critères (il est souvent très utile d’augmenter vos compétences et vos ressources). Mais avec chaque projet, vous pouvez réfléchir à son déroulement et perfectionner vos compétences.

Finalement…

S'amuser! C’est le plaisir et la passion qui vous guideront à travers tout cela, surtout si vous le faites pendant votre temps libre. Trouvez des activités, des problèmes et des architectures techniques qui vous passionnent et suivez le terrier des lapins!