Comment participer à des compétitions d'apprentissage automatique. Conférence à Yandex

De nombreux participants réguliers à la formation ML ont une opinion raisonnable que la participation à des compétitions est le moyen le plus rapide d'accéder à la profession. Nous avions même un article sur ce sujet. L'auteur de la conférence d'aujourd'hui Arthur Kuzin, en utilisant son propre exemple, a montré comment vous pouvez vous recycler en quelques années d'un domaine qui n'est pas du tout lié à la programmation à un spécialiste de l'analyse de données.


- Bonjour à tous. Je m'appelle Arthur Cousin, je suis un scientifique principal des données chez Dbrain.

Emil avait un rapport assez complet, racontant tant d'aspects. Je vais me concentrer sur ce que je considère comme le plus important et le plus amusant. Avant de passer au sujet du rapport, je veux me présenter. D'une manière générale, je suis diplômé de physique et pendant environ 8 ans, à partir de la troisième année, j'ai travaillé dans le laboratoire, qui est situé à l'étage du NK. Ce laboratoire est engagé dans la création de micro et nanostructures.



Pendant tout ce temps, j'ai travaillé en tant que chercheur, et cela n'avait rien à voir avec le ML ou même la programmation. Cela montre à quel point le seuil d'entrée dans l'apprentissage automatique est bas, à quelle vitesse vous pouvez vous y développer. De plus, dans la région de 2013, mes amis m'ont appelé dans une startup engagée dans le ML. Et au cours de 2-3 ans, j'ai étudié la programmation et le ML en même temps. Mes progrès ont été assez lents - j'ai étudié les matériaux, je me suis plongé dedans, mais ce n'était pas aussi rapide qu'aujourd'hui. Pour moi, tout a changé quand j'ai commencé à participer aux compétitions ML. La première compétition était d'Avito, sur le classement des voitures. Je ne savais pas vraiment comment y participer, mais j'ai réussi à prendre la troisième place. Immédiatement après cela, un autre concours a commencé, déjà dédié au classement des annonces. Il y avait des photos, du texte, une description, un prix - c'était une compétition complexe. Dans ce document, j'ai pris la première place, après quoi j'ai reçu presque immédiatement une offre et ils m'ont emmené à Avito. Ensuite, il n'y avait pas de poste subalterne, j'ai été immédiatement pris par le milieu - presque sans expérience pertinente.

De plus, alors que je travaillais déjà chez Avito, j'ai commencé à participer à des compétitions à Kaggle et en environ un an j'ai reçu des grands maîtres. Maintenant, je suis à la 58e place du classement général. Ceci est mon profil. Ayant travaillé chez Avito pendant un an et demi, j'ai déménagé à Dbrain et maintenant je suis un peu directeur de la science des données, coordonnant le travail de sept scientifiques des données. Tout ce que j'utilise dans mon travail, j'ai appris des compétitions. Par conséquent, je crois que c'est un sujet très cool, et de toutes les manières possibles, je préconise de participer à des compétitions et de se développer.



Parfois, ils me demandent ce qui doit être fait si vous voulez devenir un data scientist. Il y a deux façons. Écoutez d'abord certains cours. Il y en a beaucoup, ils sont tous de très bonne qualité. Mais pour moi personnellement, cela ne fonctionne pas du tout. Toutes les personnes sont différentes, mais je n'aime pas ça, simplement parce que, en règle générale, les cours sont des tâches très abstraites, et quand je passe par une section, je ne comprends pas toujours pourquoi j'ai besoin de le savoir. Contrairement à cette approche, vous pouvez simplement prendre et commencer à résoudre la compétition. Et c'est un flux complètement différent en termes d'approche. Il diffère en ce que vous acquérez immédiatement une certaine quantité de connaissances et commencez à étudier un nouveau sujet lorsque vous rencontrez un inconnu. Autrement dit, vous commencez à décider et à comprendre que vous manquez de connaissances sur la façon de former un réseau neuronal. Vous prenez, google et étudiez - uniquement lorsque vous en avez besoin. C'est très simple en termes de motivation, de progrès, car vous avez déjà une tâche strictement formulée dans le cadre du concours, une métrique cible et beaucoup de support en termes de chat Open Data Science. Et, comme bonus lointain, c'est que votre décision sera un projet qui n'est pas encore là.



Pourquoi est-ce si amusant? D'où viennent les émotions positives? L'idée est que lorsque vous envoyez une soumission et qu'elle est légèrement meilleure que la précédente, ils disent - vous avez amélioré la métrique, c'est cool. Vous montez le classement. En revanche, si vous ne faites rien et n'envoyez pas de soumissions, vous descendez. Et cela provoque un feedback: vous vous sentez bien lorsque vous progressez, et vice versa. C'est un mécanisme sympa qui n'exploite, semble-t-il, que Kaggle. Et un autre point: Kaggle exploite le même mécanisme de dépendance que les machines à sous et Tinder. Vous ne savez pas si votre soumission est meilleure ou pire. Cela provoque une attente d'un résultat qui vous est inconnu. Ainsi, Kaggle est très addictif, mais il est assez constructif: vous développez et essayez d'améliorer votre décision.

Comment obtenir la première dose? Vous devez entrer dans la section des noyaux. Ils présentent certains morceaux de pipeline ou toute la solution. Une autre question est de savoir pourquoi les gens font cela. Un homme a passé du temps à se développer - à quoi bon le mettre en public? Ils peuvent profiter et contourner l'auteur.

L'idée est que, premièrement, les meilleures solutions ne sont pas présentées. En règle générale, ces solutions ne sont pas optimales du point de vue des modèles de formation, elles n'ont pas toutes les nuances, mais il y a tout un pipeline du début à la fin afin que vous ne résolviez pas les tâches de routine liées au traitement des données, au post-traitement, à la collecte des soumissions, etc. Cela abaisse le seuil d'entrée pour attirer de nouveaux entrants. Vous devez comprendre que la communauté des scientifiques des données est très ouverte à la discussion et, en général, assez positive. Je n'ai pas vu cela dans la communauté scientifique. La principale motivation est que de nouvelles personnes viennent avec de nouvelles idées. Cela développe une discussion sur le problème, la concurrence et permet à toute la communauté de se développer.

Si vous avez pris la décision de quelqu'un d'autre, que vous l'avez lancée, que vous avez commencé à vous entraîner, la prochaine chose que je recommande vivement est d'examiner les données. Un conseil banal, mais vous ne croirez pas combien de personnes d'en haut ne l'utilisent pas. Pour comprendre pourquoi c'est important, je vous conseille de voir le rapport d'Eugène Nizhibitsky. Il parle des visages dans les compétitions de films et du visage dans Airbus , qui peut également être vu simplement en regardant les données. Cela ne prend pas beaucoup de temps et aide à comprendre le problème. Et les visages sur les photos parlaient du fait que sur différentes plates-formes et dans différentes compétitions, il était possible d'obtenir des réponses aux tests du train. Autrement dit, vous ne pouviez former aucun modèle, mais regardez simplement les données et comprenez comment vous pouvez collecter les réponses pour votre test - partiellement ou complètement. C'est une habitude qui est importante non seulement dans les compétitions, mais aussi dans la pratique réelle, lorsque vous travaillez avec des scientifiques des données. Dans la vraie vie, très probablement, la tâche sera mal formulée. Vous ne le formulez pas, mais vous devez comprendre quelle est son essence et l'essence des données. L'habitude de regarder les données est très importante, passez du temps dessus.

Ensuite, vous devez comprendre quelle est la tâche. Si vous avez regardé les données et compris quelle est la cible ... Vous, si je comprends bien, pour la plupart, vous êtes de Fiztekh. Vous devez avoir une pensée critique qui vous amène à la question: pourquoi les personnes qui ont conçu le concours ont-elles tout fait correctement? Pourquoi ne pas changer, par exemple, la métrique cible, chercher autre chose et collecter les bonnes choses à partir de la nouvelle métrique? À mon avis, maintenant qu'il y a un tas de tutoriels et de code d'autres personnes, faire prédire le flux n'est plus un problème. Former un modèle, former un réseau de neurones est une tâche très simple, accessible à un très large cercle de personnes. Mais il est important de comprendre quelle est votre cible, ce que vous prédisez et comment assembler votre métrique cible. Si vous prédisez quelque chose de non pertinent dans la réalité objective, le modèle n'apprend tout simplement pas et vous obtenez une très mauvaise vitesse.

Exemples. Un concours a eu lieu au Topcoder Konica-Minolta.



Il se composait des éléments suivants: vous avez deux images, celle du haut et l'une d'entre elles a de la saleté, un petit point à droite. Il fallait la mettre en évidence et la segmenter. Cela semblerait une tâche très simple, et les réseaux de neurones devraient le résoudre à la fois. Mais le problème est que ce sont deux photos qui ont été prises soit avec un décalage horaire, soit à partir de caméras différentes. En conséquence, une image s'est déplacée un peu par rapport à une autre. L'échelle était vraiment très petite. Mais il y avait une autre caractéristique de cette tâche: les masques sont également petits. Il y a une image qui s'est déplacée par rapport à une autre, tandis que le masque s'est toujours déplacé par rapport à elle. Il est à peu près clair quelle est la difficulté.



Aleksey Buslaev à la troisième place, il a pris le réseau neuronal siamois avec deux entrées pour que ces têtes siamoises apprennent quelques transformations concernant cette image déformée. Après cela, il a combiné ces caractéristiques, a eu un ensemble de convolutions et il a obtenu une sorte de prédiction. Pour niveler ce dévers dans les données, il a mis en place un réseau assez compliqué. Par exemple, je n'ai jamais formé de réseau siamois, je n'ai pas eu à le faire. Il l'a fait, c'est très cool, il a pris la troisième place. En premier lieu, Evgeny (nrzb.), Qui a simplement redimensionné l'image. Il a vu cela comme un dévers dans les données, car il les a regardées, a redimensionné les images et a formé l'UNet vanille. C'est un réseau neuronal très simple, c'est juste dans le manuel, dans les articles. Cela montre que si vous regardez les données et sélectionnez la bonne cible, vous pouvez être au sommet avec une solution simple.

Je me suis retrouvé à la deuxième place, parce que je suis ami avec Zhenya, après quoi les topcoders ont été offensés pour une raison quelconque et ne m'ont pas emmené dans l'équipe Kaggle. Mais ce sont des gars très cool, Topcoder a pris 5-6 place, ce (NRZB.) Et Victor Durnov. Alexander Buslaev a pris la troisième place. Ils se sont ensuite associés et ont montré la classe lors d'une compétition à Kaggle. C'est aussi un exemple d'une très belle solution, lorsque les mecs ont non seulement développé une architecture monstrueuse, mais ont choisi la bonne cible.


Lien depuis la diapositive

La tâche ici était de segmenter les cellules, et pas seulement de dire où se trouve la cellule et où elle ne l'est pas, mais il était nécessaire d'isoler les cellules individuelles, telles que la segmentation instage de chaque cellule indépendante. De plus, avant cette compétition, il y avait beaucoup de compétitions de segmentation, et on a prétendu que le problème de segmentation était assez bien résolu par la communauté ODS, au niveau de l'état de l'artisanat, une certaine pointe de la science qui nous permet de bien résoudre ce problème.

Dans le même temps, la tâche d'inst Segmentation, lorsque vous devez séparer les cellules, a été très mal résolue. L'état de l'art avant cette compétition était MacrCNN, qui est un type de détecteur, un extracteur de fonctionnalités, puis un bloc qui produit une segmentation des masques, et c'est assez difficile à former, vous devez former chaque morceau du pipeline séparément, c'est une chanson entière.

Au lieu de cela, Topcoder a développé un pipeline lorsque vous ne prédisez que les cellules et les bordures. La segmentation du pipeline est compliquée par un mineur et vous permet de faire une très belle segmentation, en soustrayant les bordures des cellules. Après cela, ils ont élevé la barre en termes de précision de cet algorithme, tandis que leur réseau neuronal séparé prédit les cellules mieux que tout ce que les universitaires ont fait dans ce domaine auparavant. C'est cool pour les topcoders et très mauvais pour les universitaires. Pour autant que je sache, récemment des académiciens ont essayé de publier un article sur cette base de données, ils l'ont rejeté parce qu'ils ne pouvaient pas battre le résultat sur Kaggle. Les temps difficiles sont venus pour les universitaires, maintenant nous devons faire quelque chose de normal, et pas seulement faire un travail crypté dans leur domaine.



La prochaine chose pour laquelle je me noie beaucoup, non seulement à Kaggle, mais aussi au travail, c'est la formation de pipe. Je ne vois pas beaucoup de valeurs dans la création d'une architecture de réseau neuronal monstrueux, avec des morceaux sympas avec atténuation, avec des concaténations de fonctionnalités. Tout fonctionne, mais il est beaucoup plus important de pouvoir simplement former un réseau neuronal. Et il n'y a pas de fusée de sens, c'est une chose assez simple, étant donné qu'il y a maintenant un tas d'articles, de tutoriels et ainsi de suite. Je vois beaucoup de valeurs dans le fait que vous veniez de suivre une formation sur le pipeline. Je comprends cela comme un code qui s'exécute sur une config, et il vous apprend un réseau neuronal de manière contrôlée, prévisible et assez rapide.

Cette diapositive montre les journaux d'entraînement de la compétition qui se déroule actuellement, Kaggle Salt. J'ai encore un tas de cartes vidéo, c'est aussi un bonus. L'idée est qu'avec l'aide du pipeline, j'ai fait une recherche dans la grille des architectures qui m'ont paru les plus intéressantes. Je viens de faire une configuration de lancement pour toutes les architectures, par convention, un forum sur le zoo des réseaux de neurones, j'ai parcouru et entraîné tous les réseaux de neurones sans prendre aucun effort. C'est un très gros bonus, et c'est ce que je réutilise de compétition en compétition et au travail. Par conséquent, je suis extrêmement agité non seulement pour former des réseaux de neurones, mais aussi pour réfléchir à ce que vous enseignez et à ce que vous écrivez en termes de pipeline, que vous devez réutiliser.



Ici, j'ai souligné quelques éléments clés qui devraient être dans le pipeline de formation. Il s'agit d'une configuration de démarrage qui définit pleinement le processus d'apprentissage. Où vous spécifiez tous les paramètres sur les données, sur les réseaux de neurones, sur les pertes - tout devrait être dans la configuration de lancement. Cela devrait être contrôlable. Journalisation supplémentaire. Les beaux journaux que j'ai montrés sont le résultat du fait que j'enregistre chaque étape que je prends.

La modularité signifie qu'il ne vous faut pas beaucoup de temps pour ajouter un nouveau réseau de neurones, une nouvelle augmentation, un nouvel ensemble de données. Tout cela devrait être très simple et maintenable.

La reproductibilité consiste simplement à fixer les graines, alors que non seulement celles aléatoires dans NumPy et Random, mais il y a encore quelques paiterchiks, je vais vous en dire plus. Et la réutilisabilité. Une fois que vous avez développé un pipeline, il peut être utilisé dans d'autres tâches. Et c'est un gros bonus, ceux qui commencent à participer aux compétitions tôt, peuvent continuer à utiliser ces pipelines dans les compétitions et au travail, tout cela donne un gros bonus aux autres participants.

Certains peuvent demander: je ne sais pas comment coder, que faire, comment développer un pipeline? Il y a une solution.


Liens depuis la diapositive: premier , deuxième , troisième

Sergey Kolesnikov est mon collègue qui travaille à Dbrain, il développe une telle chose depuis longtemps. Au début, il l'appelait PyTorch Common, puis il a appelé Prométhée, maintenant il s'appelle Catalist. Très probablement, dans une semaine, le nom sera différent, mais le lien sera vers le nom suivant, suivez le lien "Catalist".

L'idée est que Sergey a développé une sorte de lib, qui est un trainloop. Et il dans la version actuelle a presque toutes les propriétés que j'ai décrites. Il y a encore un tas d'exemples sur la façon de faire la classification, la segmentation et un tas d'autres trucs sympas qu'il a développés.

Voici une liste des fonctionnalités qui sont en cours de développement. Vous pouvez prendre cette lib et commencer à l'utiliser pour entraîner vos algorithmes, vos réseaux de neurones dans la compétition qui se déroule actuellement. Je recommande à tout le monde de le faire.

En revanche, il existe un autre FastAI, récemment sorti en version 1.0, mais il y a du code dégoûtant et rien n'est clair.

Vous pouvez le maîtriser, cela vous donnera une certaine croissance, mais en raison du fait qu'il est très mal écrit en termes de code, ils ont leur propre flux en termes de comment il devrait être écrit. À partir d'un moment donné, vous ne comprendrez pas ce qui se passe. Par conséquent, je ne recommande pas FastAI, je recommande d'utiliser n'importe quel "Catalist".



Supposons maintenant que vous ayez traversé tout cela, que vous ayez votre propre pipeline, votre propre décision et que vous puissiez maintenant participer à l'équipe. Emil vient de se demander dans quelle mesure il est justifié de rejoindre une équipe si vous participez à la façon dont cela se produit. Il me semble que faire équipe en vaut la peine de toute façon, même si vous n'êtes pas au sommet, mais quelque part au milieu. Si vous avez développé votre solution vous-même, elle diffère toujours de la décision des autres sur certains détails. Et lorsqu'il est combiné, il donne presque toujours un coup de pouce aux autres participants.

De plus, c'est amusant, c'est un travail d'équipe en ce sens que vous aurez maintenant un référentiel commun où vous pourrez voir le code de chacun, vous avez un format commun pour les soumissions et une salle de chat où tout le plaisir se passe. L'interaction sociale et les compétences générales sont également très importantes dans le travail, qui mérite également d'être développé.



C'est un gros bonus dans le sens où maintenant vous voyez le code des autres, comment ils prennent telle ou telle décision. Et très souvent, je regarde dans le référentiel avec mes commandes précédentes, j'y trouve des solutions intéressantes en termes de code lui-même. C'est ce qui peut être retiré de la compétition sous forme de travail d'équipe.

Supposons que vous ayez fait tout ce tour. Qu'avez-vous enduré?



Vous avez probablement appris à exécuter le code de quelqu'un d'autre. J'espère vraiment que vous avez pris l'habitude de regarder les données. Vous comprenez le problème, avez appris à mener des expériences, vous avez une sorte de solution de votre choix et vous pouvez maintenant le concevoir sous la forme d'un projet. Si vous regardez de manière abstraite, cela ressemble beaucoup au travail normal dans une entreprise informatique. Si vous avez traversé une compétition et montré un bon résultat, c'est un point fort du CV, du moins pour moi. Quelque part entre 20 et 25 ans, j'ai été interviewé lors de mon recrutement chez Dbrain. Certains cas limites pourraient y être identifiés. Il y avait un mec qui venait de gérer le noyau public, et ne l'a pas vraiment compris. Cela me paraissait mauvais, je voulais juste que le mec comprenne le problème, je ne l'ai pas pris.

Un autre mec qui a honnêtement dit qu'il était surfait au classement, mais en même temps a dit tous les détails de sa décision, qui était sur le Datascience Bowl, nous l'avons pris, j'aime vraiment travailler avec lui. Kaggle et votre décision il y a un point fort dans votre CV, si vous pouvez le formater correctement sous forme de présentation, c'est un bon spectacle pour le futur employeur.

Si des questions sur le gain personnel, j'espère avoir fermé, pourquoi les entreprises en ont-elles besoin?



J'ai travaillé chez Avito, ils organisaient régulièrement des concours sur l'analyse des données. Il y a plusieurs raisons à cela. Lorsque le concours est organisé, vous devez collecter au moins un ensemble de données et très bien formuler la tâche, ce qui est un peu pénible.


Lien depuis la diapositive

Autrement dit, l'énoncé du problème et l'ensemble de données représentent déjà beaucoup pour l'entreprise. , «» , , , , . — , , .

, , , , . , , . - , , , .

, , — . , . , «» , . «» — , .



, — . , - . , — , . , , , . — importance XGBoost . , , . . , . , . , .

, , - , , , . , , , .



Coursera , . — ML- ODS- . .

Source: https://habr.com/ru/post/fr426889/


All Articles