En règle générale, un scientifique des données a une vague idée du développement mobile et les développeurs d'applications mobiles ne s'engagent pas dans l'apprentissage automatique.
Andrei Volodin , ingénieur chez Prisma AI, vit à la jonction de ces deux mondes et a expliqué aux présentateurs de podcasts de Podlodka ce que cela faisait.
Profitant du moment, Stas Tsyganov (Tutu.ru) et Gleb Novik (Tinkoff Bank), tout d'abord, ont clairement fait savoir que
personne ne forme les réseaux de neurones sur des appareils mobiles . Et aussi compris que dans l'apprentissage automatique, malheureusement, il n'y a pas de magiciens; discuté des techniques modernes comme
l'apprentissage en profondeur, l'apprentissage par renforcement et les réseaux de capsules.
En conséquence, puisque Podlodka est une émission audio sur le développement mobile, ils sont venus vers elle et ont découvert comment tout cela fonctionne pour les appareils mobiles.
Vient ensuite la version texte de cette conversation, et l'entrée du podcast est
ici .
À propos d'Andrei Volodin, cocos2d et Fiber2d
GLEB: Parlez-nous un peu de vous. Tu fais quoi
ANDREW: Je suis développeur mobile, mais je fais très peu dans le développement iOS classique. Mes responsabilités n'incluent pratiquement pas de travailler avec UIKit. Je suis le développeur principal du moteur de jeu Cocos2d très populaire sur GitHub. En ce moment, je suis ingénieur GPU chez Prisma. Mes responsabilités incluent l'intégration de réseaux de neurones sur des cartes vidéo et le travail avec la réalité augmentée, en particulier, avec le VR-kit.
GLEB: Cool! Particulièrement intéressant sur cocos2d. À ma connaissance, ce cadre est apparu il y a longtemps.
ANDREW: Oui, vers 2009.
GLEB: Vous l'avez utilisé dès le début?
ANDREW: Non. Je ne suis devenu le développeur principal qu'en 2015. Avant cela, j'étais un contributeur principal. Apportable, qui a financé le développement, a fait faillite, les gens qui ont reçu l'argent pour le développement sont partis et je suis devenu le leader. Maintenant, je suis administrateur sur le forum, aidant les nouveaux arrivants à résoudre certains problèmes, les dernières versions ont été publiées par moi. Autrement dit, je suis le principal mainteneur en ce moment.
GLEB: Mais cocos2d est-il toujours vivant?
ANDREW: Probablement pas, principalement en raison du fait qu'il est écrit en Objective-C, et il y a beaucoup d'héritage. Par exemple, je soutiens mes vieux jouets écrits avec son utilisation, d'autres développeurs - mes projets hérités. Parmi les moteurs actuels, vous pouviez entendre parler de Fiber2d. C'est aussi mon projet.
Fiber2d est le premier moteur de jeu Swift à être porté sur Android. Nous avons lancé un jeu entièrement écrit en Swift sur iOS et Android. À ce sujet, vous pouvez également le trouver sur Github. Il s'agit du prochain jalon dans le développement de la communauté cocos2d.
À propos de l'apprentissage automatique sur les doigts
GLEB: Commençons à progresser progressivement vers notre sujet aujourd'hui. Aujourd'hui, nous parlerons
de l'apprentissage automatique et de tout ce qui l'entoure - connecté et non connecté aux téléphones mobiles. Tout d'abord, découvrons ce qu'est l'apprentissage automatique. Nous allons essayer d'expliquer autant que possible sur les doigts, car tous les développeurs mobiles ne le connaissent pas. Pouvez-vous nous dire ce que c'est?
ANDREW: Basé sur la définition classique,
l'apprentissage automatique est une recherche de modèles dans un ensemble de données . Un exemple classique est les réseaux de neurones, qui sont maintenant très populaires. Parmi eux, il existe des réseaux liés à la classification. Un exemple simple de la tâche de classification est de déterminer ce qui est montré dans l'image: il y a une sorte d'image, et nous voulons comprendre ce que c'est: un chien, un chat ou autre chose.
Il est très difficile d'écrire cela avec du code standard car il n'est pas clair comment procéder. Par conséquent, des modèles mathématiques sont utilisés, appelés apprentissage automatique. Ils sont basés sur le fait que certaines lois sont extraites d'un grand nombre d'exemples, puis, en utilisant ces lois, il est possible de faire des prédictions avec une certaine précision sur de nouveaux exemples qui n'étaient pas dans l'ensemble de données d'origine. C'est, en un mot.
GLEB: En conséquence, apprend-on une histoire sur la modification d'un modèle à l'aide d'un ensemble de données de formation?
ANDREW: Pendant l'entraînement, le modèle, en règle générale, reste constant. Autrement dit, vous choisissez une sorte d'architecture et vous l'apprenez. Si l'on prend par exemple les réseaux de neurones, qui ne se limitent pas à tout l'apprentissage automatique, là tout d'abord, grosso modo, tous les poids sont des zéros ou d'autres valeurs identiques. Au fur et à mesure que nous alimentons nos données dans le cadre d'apprentissage, les poids changent un peu avec chaque nouvel exemple et, à la fin, ils se déversent dans une machine formée.
STAS: Le but ultime de ce modèle est de fournir rapidement des données ne provenant pas de l'échantillon de formation, d'obtenir rapidement le résultat?
ANDREW: Oui, mais ce n'est pas seulement une question de vitesse. Par exemple, certaines tâches ne pouvaient pas être résolues différemment - disons, l'exemple de classification est très simple. Avant le tir des filets de classement, il n’y avait pas de solution pour comprendre ce qui est montré dans l’image. Autrement dit, dans certains domaines, il s'agit d'une technologie directement révolutionnaire.
À propos du travail manuel et de l'apprentissage automatique
STAS: J'ai récemment dit à ma grand-mère ce qu'est l'apprentissage automatique. Elle a d'abord pensé que l'apprentissage automatique, c'est quand une machine apprend à quelqu'un. J'ai commencé à lui expliquer qu'en fait, au contraire, nous essayons d'enseigner la machine pour qu'elle effectue ensuite une sorte de tâche.
J'ai présenté les problèmes que le machine learning résout. La plupart d'entre eux, avant le déclenchement de l'apprentissage automatique, étaient exécutés par des personnes. De plus, ce n'était pas considéré comme un travail peu qualifié, mais pas trop de haute technologie, disons-le. Ce sont les opérations les plus simples qu'une personne peut effectuer en grande partie. Pouvez-vous imaginer cela?
ANDREW: Cela aussi peut être dit. En fait, un tel travail est désormais nécessaire, mais uniquement pour préparer des ensembles de données pour l'apprentissage automatique. En effet, dans certains domaines, par exemple en médecine, l'apprentissage automatique permet de lisser un peu les tâches routinières et d'alléger un peu le processus. Mais pas toujours. Je ne dirais pas que l'apprentissage automatique vise à faciliter le travail stupide. Parfois, cela fait un travail assez intellectuel.
STAS: Pouvez-vous donner un exemple d'un tel travail intellectuel?
ANDREW: Par exemple, notre application Prisma - beaucoup l'ont probablement utilisée (ce n'est pas une publicité!) On ne peut pas dire que c'est un travail intellectuel et les gens redessinent souvent l'image en images, et le réseau de neurones le fait - vous lui donnez une image normale et
obtenez quelque chose de nouveau . De plus, on peut se demander si c'est beau ou pas, mais le fait est incontestable que c'est quelque chose qu'une personne ne peut pas faire, ou cela prend énormément de temps.
À propos de l'histoire
GLEB: Oui, je pense que c'est un excellent exemple. Cela vaut probablement un petit coup d'œil à l'histoire. Depuis combien de temps ce sujet est-il développé? Il me semble que presque depuis le tout début de la programmation, du moins il y a très, très longtemps.
ANDREW: Oui, en général, la plupart des concepts qui sont maintenant appliqués ont déjà été développés dans les années 90. Naturellement, de nouveaux algorithmes sont maintenant apparus et la qualité des algorithmes d'alors s'est améliorée. Et bien qu'il y ait le sentiment qu'un intérêt soudain pour l'apprentissage automatique est né de nulle part, en fait, les gens s'y intéressent depuis longtemps.
Les progrès dans les premiers stades sont dus au fait qu'il s'agit principalement de modèles mathématiques, et les mathématiques sont depuis longtemps stabilisées en termes de découvertes.
L'explosion actuelle est uniquement due au fait
que les capacités en fer autour de nous ont augmenté de manière significative , principalement en raison de l'utilisation de cartes vidéo. Du fait qu'aujourd'hui nous sommes capables de faire un énorme calcul parallèle, de nouvelles technologies sont apparues - l'apprentissage automatique, la crypto-monnaie, etc.
Pour la plupart, l'intérêt actuel et généralement la vague actuelle sont liés au fait que
cela est devenu possible . Ces calculs pourraient être effectués plus tôt, mais d'une durée catastrophique. Maintenant, cela leur prend un temps assez raisonnable, et donc tout le monde a commencé à l'utiliser.
À propos du fer
STAS: Je suis actuellement en cours, et là, notamment, j'ai besoin de former toutes sortes de modèles. J'en entraîne certains sur mon MacBook fonctionnel. Oui, dans certains cas, vous devez attendre, peut-être 5 minutes, et les modèles ne sont pas les meilleurs, la précision moyenne est d'environ 85%, mais l'essentiel est qu'ils fonctionnent. Il est clair que dans la bataille, vous voulez mieux ce pourcentage et peut-être que pour la production il ne convient pas tout à fait.
ANDREW: Oui, de tels modèles ne sont probablement pas très intéressants. Cela est probablement dû aux prévisions les plus simples, etc. En réalité, par exemple, un échantillon de formation peut peser 90 Go, et tout cela peut prendre une semaine pour apprendre. Des entreprises telles que Nvidia se vantent d'avoir sorti une nouvelle carte graphique spéciale Tesla et vous pouvez former Inception V3 en 24 heures! Ceci est considéré comme une percée directe, car il a fallu plusieurs semaines avant.
Plus il y a d'ensembles de données et plus la structure du modèle est complexe, plus il faut de temps pour apprendre . Mais les performances ne sont pas le seul problème. En principe, si vous en avez vraiment besoin, vous pouvez attendre un mois. Le problème est lié à l'inférence - comment ensuite appliquer ce réseau neuronal plus tard. Il est nécessaire que lors de son utilisation il montre également de bons résultats en termes de performances.
STAS: Parce que, en particulier, je veux que tout fonctionne sur les appareils mobiles et fonctionne rapidement.
ANDREW: Je ne pense pas qu'au départ, il a commencé à se développer en vue de travailler sur des applications mobiles. Un tel boom a commencé quelque part en 2011, et puis tout de même, il s'agissait de solutions de bureau. Mais maintenant, le véritable intérêt de la communauté est soutenu par le fait que sur les iPhones, y compris, il est devenu possible de lancer des réseaux qui fonctionnent en temps réel.
GLEB: Stas, vous avez dit que le résultat final dépend de la puissance de votre carte vidéo et en général du système. Autrement dit, cela ne fonctionne pas autrement?
ANDREW: Ce n'est pas le cas, mais je ne suis pas sûr que le modèle sera formé sur une machine à faible puissance.
GLEB: Soit dit en passant, je me souviens, il y a 5 ans, alors qu'il y avait juste un boom des réseaux de neurones, nos enseignants ont dit que tout ce qui était nouveau n'était qu'une bonne vieille oubli. Tout était déjà dans les années 70-80 et ça ne marcherait pas, depuis ça n'a pas marché. Probablement, ils avaient encore tort.
ANDREW: Oui. Pour certaines tâches, le machine learning a désormais connu un succès considérable. Objectivement, on peut dire qu'ils fonctionnent.
À propos de l'apprentissage en profondeur
GLEB: Il y a une chose à la mode: l'apprentissage en profondeur. Quelle est sa différence par rapport à ce dont nous avons parlé à ce sujet?
ANDREW: Je ne dirais pas qu'il y a des différences. Il n'y a que quelques sous-ensembles d'apprentissage automatique, et il y en a un grand nombre. Vous devez comprendre que ce qu'on appelle
l'apprentissage en profondeur est la partie de l'apprentissage automatique qui est communément appelée réseaux de neurones . Il est appelé profond car il existe de nombreuses couches dans les réseaux de neurones, et plus il y a de couches, plus le réseau de neurones est profond. De là est venu le nom.
Mais il existe d'autres types d'apprentissage automatique. Par exemple, l'apprentissage automatique basé sur les arbres a été utilisé avec succès pour le suivi du visage jusqu'à présent, car il est beaucoup plus rapide que les neurones. Il est également utilisé pour le classement, l'affichage d'annonces et plus encore.
Autrement dit, l'apprentissage en profondeur n'est pas autre chose. Il s'agit en fait d'un sous-ensemble d'apprentissage automatique qui comprend une tonne de tout. Le deep learning est devenu le plus populaire aujourd'hui.
À propos de la théorie des réseaux de neurones
STAS: Je voulais parler un peu de la théorie des réseaux de neurones, je vais essayer plus facilement. Vous avez dit qu'ils ont plusieurs couches. En théorie, si nous avons une couche et qu'il y a des objets situés sur le plan, avec l'aide d'une couche, nous pouvons réellement diviser ce plan en deux parties, non?
ANDREW: Non, pas vraiment.
STAS: Qu'est-ce qui nous donne un grand nombre de couches, si sur les doigts?
ANDREW: Qu'est-ce qu'un réseau neuronal? Soyons clairs. C'est juste une fonction mathématique qui prend un ensemble de nombres comme entrée, et donne également un ensemble de nombres comme sortie - c'est tout.
Qu'y a-t-il à l'intérieur? Maintenant, les réseaux de convolution les plus populaires dans lesquels la convolution a lieu ne sont que de nombreuses multiplications matricielles les unes par rapport aux autres, les résultats sont additionnés, ces opérations sont effectuées dans chaque couche. De plus, entre les couches, il y a ce qu'on appelle l'activation, qui permet simplement aux réseaux de neurones d'être profonds.
Étant donné que la combinaison de transformations linéaires est une transformation linéaire, après avoir créé 10 couches linéaires, elles peuvent toujours être représentées comme une couche linéaire. Pour que les couches ne s'effondrent pas, entre elles, certaines actions mathématiques rendent la fonction non linéaire. Cela est nécessaire pour augmenter le nombre de paramètres.
En gros, un réseau de neurones n'est qu'un vaste éventail de nombres, qui s'appliquent ensuite d'une manière ou d'une autre à nos données, par exemple, à une image. Mais une image - également un ensemble de nombres en fait - n'est qu'une série de pixels. Lorsque nous formons le réseau, nous considérons, par exemple, 15 millions de paramètres (chaque nombre est un paramètre distinct), qui peuvent être légèrement décalés un peu vers la gauche, un peu vers la droite à l'aide de quelques heuristiques. Grâce à un si grand nombre de paramètres, des résultats aussi cool sont obtenus.
Une formation approfondie est nécessaire précisément pour qu'il y ait beaucoup de ces paramètres, et que tout ne se réduise pas à une seule couche.
GLEB: Cela semble plus ou moins clair.
ANDREW: L'apprentissage profond est un sous-ensemble de l'apprentissage automatique. Mais pour une raison quelconque, le battage médiatique est apparu sur ce sujet - en particulier il y a quelque temps de toutes les fissures, je pense que vous pouviez entendre parler d'apprentissage en profondeur. Je ne sais pas si c'est justifié ou non.
GLEB: Je pense qu'une telle popularité est due au fait qu'elle donne des résultats impressionnants.
À propos des tâches
STAS: Avec l'aide de réseaux de neurones, vous pouvez résoudre la plupart des problèmes d'apprentissage automatique, non?
ANDREW: Oui.
STAS: Parlons alors des tâches qui peuvent être résolues en utilisant des méthodes d'apprentissage automatique?
ANDREW: En fait, c'est un sujet sensible, car en réalité, vous devez cesser d'idéaliser et de romantiser ce qui se passe. Comme je l'ai dit, il n'y a pas d'intelligence artificielle là-bas.
Il s'agit d'un modèle purement mathématique et d'une fonction mathématique qui multiplie quelque chose, etc.
De côté, il semble que maintenant, le machine learning a un peu ralenti sur certaines catégories de tâches. Ceci, par exemple, la classification (un exemple dont nous avons parlé au tout début), le suivi des objets et leur segmentation. Le dernier se trouve dans notre application Sticky AI - il sélectionne une personne et l'arrière-plan est supprimé. Il existe également une segmentation médicale biologique lorsque, par exemple, des cellules cancéreuses sont détectées. Il existe des réseaux génératifs qui apprennent à partir de nombres aléatoires, puis ils peuvent créer quelque chose de nouveau. Il existe des tâches de transfert de style et d'autres.
Mais pour le moment, il n'y a pas de plateforme et d'infrastructure pratiques pour utiliser l'apprentissage automatique. Par exemple, vous avez un problème que vous, en tant que personne, pouvez facilement résoudre, mais en tant que programmeur, vous ne pouvez pas le résoudre en raison de sa complexité et parce que vous ne pouvez pas simplement écrire un algorithme impératif. Mais en même temps, il n'est également pas possible de former un réseau de neurones principalement en raison d'un problème de pénurie de données. Pour former un neurone, vous avez besoin de grands ensembles de données avec de nombreux exemples, en plus d'être très formalisés, décrits dans une certaine réglementation, etc. De plus, vous avez besoin de l'architecture de ce réseau de neurones.
Autrement dit,
vous devez d'abord formaliser les données d'entrée sous forme de nombres , créer l'architecture du modèle elle-même, puis formaliser les données de sortie sous forme de nombres, les interpréter d'une manière ou d'une autre. Pour ce faire, vous avez besoin d'un appareil mathématique assez puissant et, en général, d'une compréhension de la façon dont tout fonctionne. Par conséquent, il me semble maintenant que l'utilisation de neurones en dehors d'entreprises spécialisées comme la nôtre s'affaisse un peu.
Certaines tâches qui n'avaient pas été résolues auparavant, les neurones ont appris à résoudre très cool. Mais il n'y a rien de tel que les neurones sont venus et ont résolu tout le spectre des problèmes non résolus.
GLEB: Dans quels domaines voyez-vous des problèmes globaux pour lesquels les réseaux de neurones ne conviennent généralement pas?
ANDREW: Il est difficile de répondre tout de suite. Nous sommes confrontés à des tâches sur lesquelles nous travaillons et sur lesquelles il n'est pas possible de former un réseau neuronal. Par exemple, maintenant l'industrie du jeu s'intéresse beaucoup à l'apprentissage, et même il y a des neurones qui ont une intelligence artificielle. Mais, par exemple, cela n'est pas encore utilisé dans les jeux AAA, car tout de même, pour le moment, il est impossible de former l'intelligence artificielle d'un soldat abstrait à se comporter comme une personne pour qu'elle ait l'air naturelle. C’est dur.
À propos de Dota
STAS: Avez-vous entendu dire que l'intelligence artificielle gagne déjà à Dota?
ANDREW: Oui, mais c'est quand même un peu différent. Dota est un jeu assez mathématique, on peut le décrire. Je ne veux offenser personne, mais c'est en fait comme des dames - un jeu de la même chose. Il y a certaines règles et vous ne faites que les respecter.
Mais en même temps, il reste des difficultés à créer une sorte de comportement naturel, associé principalement à une petite quantité de données et à un petit nombre d'ingénieurs qui peuvent le faire.
Par exemple, chez Google, les ingénieurs utilisent des réseaux de neurones pour entraîner un modèle humain 3D à marcher - juste pour le faire bouger. Ça a toujours l'air horrible, les gens ne marchent pas comme ça.
À propos de TensorFlow
STAS: Vous avez dit que maintenant, en fait, il n'y a pas de moyen facile et bon marché de résoudre les problèmes d'apprentissage automatique sans comprendre du tout l'apprentissage automatique. Dans tous les cas, il s'avère que cela doit être tâtonné. J'aimerais en savoir plus sur TensorFlow. Il semble que Google essaie de s'assurer que même les personnes qui ne sont pas très au courant de cela et qui n'ont pas une très grande expérience peuvent résoudre des problèmes simples. Dites-moi ce qu'est TensorFlow et comment pensez-vous que c'est possible?
ANDREW: Allez dans l'ordre.
TensorFlow n'est en fait pas la chose la plus simple de toutes . C'est l'un des soi-disant cadres d'apprentissage les plus populaires - un cadre d'apprentissage à usage général, pas nécessairement un neurone. Ce n'est pas le cadre de plus haut niveau disponible. Il y a, par exemple, Keras, qui est une abstraction de niveau supérieur sur TensorFlow. Là, vous pouvez faire de même avec beaucoup moins de code.
Les tâches typiques sont résolues très simplement, car, en particulier, Github est déjà plein d'exemples et de référentiels. Disons que si votre entreprise effectue une recherche d'images pour une librairie, alors, en principe, tout va bien pour vous. Vous allez dans Github, il y a des exemples de la façon dont vous pouvez prendre des fonctionnalités de l'image, vous écrivez une recherche de fonctionnalités - vous avez terminé!
En fait, c'est le cas pour un grand nombre de tâches. , . - , , , , , , TensorFlow — . , .
: , Google , ?
: , , , . , , , . , , .
: , . ? -, .
: . — « , , ». , .
: , , , , . ? , , 15 - iOS , - . , . , .
: — , , - . — — . . , , R&D , : «, !» — - , , , 0,5%: «, , !» . , .
: , , - , , . ? . , — , 70%. , , . , . , , .
: , , , . , . , - , . .
: , .
: , . .
: , ? , , , — ?
: , , . , .
-, ,
. , computer science. , .
. , 500 Python, . . . , . , , .
, . - , . , .
: , Python - , , C++? , .
: , . - learning , , TensorFlow, TensorFlow. ,
— , TensorFlow. TensorFlow — 1 — , , .
. , iOS . , learning , , Caffe, Torch, TensorFlow ., .
, , , . R&D - , . . () : « !» — , . C++.
:
: . , , .
: , ? , ?
: , . , — . : , , : «, , — », - . , , -, - . , . .
. , , , .
: Google , Google Street Maps. , .
: , - .
Data Scientist
: . , — , , ?
: , .
: , , , , data scientist'. , - . . , , . — !
, . , -, . .
: hype train.
: , , data scientist . , .
: , . - data scientist'?
: . , . , , , Git- . Data scientist - , . , code review, unit- — . , .
: , , .
: , , - , , Kaffe 2, PyTorch — ! : « Data scientist TensorFlow».
GPU-
. , , , Swift, UI-kit, . , , .
, - , . , . , , . enterprise.
- , , , . , , . , .
: , . GPU - . , — . , Junior GPU . , , .
: — .
: , ?
: , , - .
: — ?
: , , -, - .
: , ?
: . , , , , . Macbook Air. — - , , .
, Nvidia Titan , . , .
: ? , Nvidia , . , , . ?
: print , . NIPS, , , . , , . - , — , .
. ONNX , . . , . , , . , - ,
. .
: , . , , , ?
: , . , . , . , — , ..
, . , . — , , . . , , . , , .
reinforcement training
: . , , , , AlphaGo. , , , reinforcement training.
: Reinforcement training — . , . , , , . , , . , . Reinforcement training , , , , : « !»
,
AlphaGo — , . , . , , . , . AlphaGo , reinforcement training, , .
, , , , .
: , 10
170 — . , AlphaGo . , . , , , . — , - !
, , , . , , . , !
STAS: Je veux poser des questions sur les algorithmes génétiques. Selon la description, il semble que les algorithmes génétiques puissent également être attribués à l'apprentissage par renforcement. Comme je les imagine, il y a une génération, nous prenons chaque sujet individuel en une génération, il accomplit une tâche, nous évaluons ses actions, puis, sur la base de ces estimations, nous sélectionnons le meilleur. Ensuite, nous croisons leurs propriétés spécifiques, créons une nouvelle génération, ajoutons un peu de mutation, et maintenant nous avons une nouvelle génération. Et nous répétons ces opérations, en essayant d'augmenter l'utilité finale de chaque membre spécifique de cette génération. Cela semble logique. Est-ce considéré comme une formation de renforcement ou non?
ANDREW: Non, les algorithmes génétiques sont encore quelque peu différents.
STAS: Sont-ils liés à l'apprentissage automatique?
ANDREW: Je ne dirais pas cela. Je ne le prendrai pas maintenant, mais nous avons passé les algorithmes génétiques à l'université, comme tout le monde, et il me semble que cette chose est un peu plus simple et plus non réglementée ou quelque chose - bref, impératif. Autrement dit, il est connu à l'avance que ce qui sera entré, tel sera sorti. Dans l'apprentissage automatique, cependant, les choses sont quelque peu différentes - il y a une certaine probabilité, l'exactitude des prédictions et tout dans cet esprit.
Peut-être que je serai corrigé par des gens qui comprennent mieux la terminologie que moi, mais
du haut de ma tête, je dirais non.
STAS: Il s'avère que les algorithmes génétiques ne sont pas utilisés pour résoudre la plupart des problèmes réels?
ANDREW: Oui, ils sont surtout plus algorithmiques et dans la pratique, je les ai rarement rencontrés.
À propos des réseaux de capsules
GLEB: Il existe un autre sous-ensemble de l'apprentissage automatique - les soi-disant réseaux de capsules. Encore une fois, n'allons pas trop loin. Dites-moi en un mot ce que c'est et pourquoi il y a cette tendance maintenant?
ANDREW: C'est un sujet vraiment super nouveau, il n'a que quelques mois. Jeffrey Hinton a publié un article et dit que les réseaux convolutionnels actuels ne mènent nulle part, et nous offrons une nouvelle vision de la façon dont cela se développera. La communauté a accepté cette déclaration de manière ambiguë et divisée en deux camps: certains disent que c'est un sur-battage publicitaire, d'autres - une grande chose et tout ça.
Mais si vous expliquez du doigt, comment fonctionnent les réseaux de convolution? Prenons, par exemple, les neurones qui fonctionnent avec les images. Il y a une convolution - une colonne de matrices qui parcourt l'image avec une certaine étape, comme si elle la balayait. A chaque itération d'une telle étape, toute cette convolution est appliquée à cette pièce, et chaque convolution se transforme en un nouveau pixel conditionnel, mais de dimension beaucoup plus grande, cette opération est répétée pour toutes les grilles.
Mais le problème avec les réseaux convolutionnels est que toutes les données qui arrivent à la première couche atteignent la fin - peut-être pas en totalité, mais elles affectent toutes et atteignent toutes la phase finale. En gros, si vous devez déterminer une partie de l'image, par exemple un chat, vous n'avez pas besoin de numériser l'image entière. Il suffit à un moment donné de localiser la zone où le chat se trouve le plus probablement, et de ne considérer que lui, comme le fait une personne.
C'est ainsi que fonctionnent les réseaux de capsules. Je ne m'engagerai pas à expliquer de manière experte leurs entrailles, mais d'après ce que j'ai compris: il y a certains arbres à l'intérieur des réseaux de capsules, et chaque capsule suivante ne reçoit que les données pertinentes à l'entrée. Autrement dit, à travers eux ne passe pas tout-tout-tout ce que nous avons initialement accepté pour l'entrée, et avec chaque nouvelle couche (je ne sais pas comment cela peut être dit dans la terminologie des réseaux capsulaires) seules les données qui sont vraiment nécessaires sont traitées - seules des pièces de données importantes . C'est la principale différence entre les réseaux convolutifs et capsulaires.
GLEB: Cela semble intéressant, mais je ne comprends pas très bien - s'agit-il uniquement des images en question?
ANDREW: Non, c'est à peu près tout. J'ai utilisé les images juste pour expliquer. L'idée clé est la suivante: ne pilotons pas toutes les données et toutes les fonctionnalités, mais uniquement celles qui sont pertinentes pour la couche suivante.
En savoir plus sur les jeux
STAS: Entendu qu'après que les gars d'AlphaGo vont vaincre tout le monde dans StarCraft?
ANDREW: Forcé de vous décevoir, mais je ne suis pas vraiment de cet avis. Ce n'est pas que l'eSport m'intéresse, mais il devient déjà clair dans quel avenir se trouve. Par exemple, il existe déjà des startups qui sont formées pour jouer à Dota. Ils, en tant qu'entraîneur personnel, analysent comment vous jouez et disent où vous n'êtes pas assez bon, ils ont leurs propres données formées aux matchs de sport électronique. Il existe des startups pour les paris qui prédisent qui va gagner, et plus encore.
Beaucoup de gens travaillent dans ce domaine maintenant, principalement parce que beaucoup d'argent y tourne. Mais personnellement, cela ne m'intéresse pas du tout, donc je ne suis malheureusement pas au courant des nouvelles et des tendances.
STAS: Selon vous, quelle est la difficulté de créer une bonne intelligence artificielle spécifiquement pour les jeux stratégiques? Dois-je bien comprendre qu'il s'agit essentiellement d'un très grand nombre d'options?
ANDREW: Oui. En fait, nous avons déjà discuté de ce point lorsque j'ai expliqué que l'intelligence artificielle n'est toujours pas utilisée dans les jeux AAA, mais en même temps dans AlphaGo et, éventuellement, ailleurs.
Le jeu de go avec toute sa complexité consiste dans le fait qu'à chaque étape vous mettez simplement une puce pour tracer une pierre, et le jeu StarCraft est une chose très complexe. Là, vous pouvez envoyer vos unités le long d'un nombre pratiquement illimité de trajectoires, construire différents ensembles de vos constructions, etc. Tout cela est un paramètre.
De plus, la difficulté réside dans le fait que les réseaux de neurones ne pensent pas toujours comme une personne. Par exemple, lorsque nous construisons une unité, nous nous en souvenons. Mais de nombreux neurones fonctionnent à chaque fois. Bien sûr, il existe des réseaux récursifs qui peuvent se souvenir de leurs réalisations passées. Ils sont notamment utilisés pour la traduction et les informations textuelles, lorsque la phrase est générée, le neurone utilise de plus en plus de données.
Il y a d'énormes difficultés avec le fait que toute la quantité d'informations et d'options doit être formalisée, c'est-à-dire pour trouver un ensemble de données pour la formation afin qu'il réponde encore d'une manière adéquate aux actions de votre adversaire, qui peut également être un million, contrairement à jouer à un jeu de ou les échecs.
STAS: Je vois - il y a beaucoup de paramètres.
GLEB: Mais je ne comprends pas quoi, il est clair que DotA a moins de paramètres, mais c'est à peu près la même dans le sens où il a été envoyé n'importe où, etc.
STAS: Ici Andrei réduit au fait que, premièrement, vous avez une unité et le nombre d'options est beaucoup plus petit.
ANDREW: Pour être honnête, je n'ai jamais joué un deuxième Dota de ma vie, mais dans l'original, à ma connaissance, c'est un jeu super déterministe. Il y a 3 couloirs et tours qui doivent être détruits.
GLEB: Oui, mais dans StarCraft, bien que je ne joue pas du tout, il y a aussi quelques façons et les mêmes unités. Vous dites qu'il y en a beaucoup, mais très probablement ils sont toujours conduits par lots. Autrement dit, à peu près la même chose se révèle.
STAS: Vous devez toujours organiser correctement chaque unité séparément pendant la bataille. Au moment où ils ne sont pas pris dans un pack, mais commencent à être organisés, il y a immédiatement plus de paramètres.
ANDREW: Votre problème est que vous pensez dans ces catégories: mettez une unité, etc., mais tout le temps vous oubliez qu'un neurone n'est qu'une matrice - des nombres qui se multiplient. Là, vous devez formaliser, par exemple, des choses comme des tâches. Disons qu'il y a une carte pour StarCraft et qu'il y a une sorte de tâche dessus - peu importe si vous battez un joueur ou autre chose. Tout cela doit être présenté sous forme de primitives mathématiques, et c'est précisément le plus difficile.
S'il s'agissait vraiment d'intelligence artificielle, l'écart entre Dota et StarCraft serait minime. StarCraft peut être un peu plus compliqué en mécanique, mais toujours à peu près la même chose. Mais du fait que nous opérons avec des chiffres, il est plus difficile à formaliser.
À propos des réseaux d'apprentissage mutuel
STAS: J'ai la dernière question que je veux poser avant d'aller sur notre téléphone portable. Je ne sais pas comment on l'appelle correctement, mais il y a un moyen quand un réseau de neurones suit essentiellement un autre et essaie de trouver des modèles.
ANDREW: Je ne m'engagerai pas à expliquer maintenant comment cela fonctionne, mais je sais avec certitude qu'il existe des algorithmes super cool dont j'entends parfois parler au travail lorsque deux réseaux de neurones apprennent aux dépens l'un de l'autre. Ce domaine d'expertise est déjà complètement inaccessible pour moi, mais tout semble cool. Pour autant que je sache, cela est utilisé pour les réseaux génératifs. Malheureusement, je ne peux pas en dire plus.
STAS: Bien. Vous avez donné les mots clés les plus importants, le reste est Gleb et les lecteurs vont facilement google.
À propos des téléphones mobiles (Apple)
GLEB: Passons aux téléphones portables que nous utilisons depuis longtemps. Tout d'abord, que pouvons-nous faire lorsque nous parlons de machine learning sur les appareils mobiles?
ANDREW: Au fait, avez-vous un podcast pour les développeurs iOS?
GLEB: Nous ne sommes pas un podcast iOS. Oui, Stas?
STAS: Oui, pour les développeurs mobiles. Pourquoi la question?
ANDREW: Tout simplement parce que la situation est très différente. Apple, en raison du fait qu'il a toujours été bon dans l'intégration de logiciels et de matériel, et est célèbre pour cela, est très élégamment accroché à un train de battage médiatique formé par machine.
En 2014, Apple a présenté l'API graphique Metal. Des choses y étaient cousues, par exemple, des shaders informatiques, etc. Tout cela a permis avec l'avènement d'iOS 10 d'inclure dans le framework Metal Performance Shaders un grand nombre de couches, d'activations et d'autres opérateurs de réseaux de neurones, en particulier des réseaux de neurones convolutifs.
Cela a donné un énorme coup de pouce, car, en règle générale, les calculs sur une carte vidéo sont beaucoup plus rapides que sur un processeur central. Quand Apple a eu la possibilité de lire sur des cartes vidéo mobiles, et rapidement, il n'était pas nécessaire d'écrire leurs propres opérateurs mathématiques, etc. Il a directement tiré très fort. Et un an plus tard, ils ont publié CoreML (nous en parlerons un peu plus tard).
Apple avait une très bonne base. Je ne sais pas s'ils avaient une telle vision, ou alors coïncidaient, mais ils sont maintenant objectivement des leaders dans l'industrie du machine learning sur les appareils mobiles.
À propos des téléphones mobiles (Android)
Ce qui fonctionne relativement cool et génial en temps réel sur iOS, malheureusement, ne fonctionne pas tout aussi cool sur Android. Cela n'est pas seulement dû au fait qu'Android est nul. Il y a d'autres facteurs - tout d'abord, le fait qu'Android a une infrastructure très diversifiée: il y a des appareils faibles, il y en a de solides - vous ne pouvez pas tout comprendre.
Si Metal est pris en charge sur tous les appareils iOS, alors sur Android, c'est déjà plus compliqué - quelque part OpenGL est pris en charge dans une version, ailleurs, quelque part, il n'est pas du tout pris en charge. Quelque part il y a Vulkan, quelque part ce n'est pas le cas. Tous les fabricants ont leurs propres pilotes, qui, bien sûr, ne sont en aucun cas optimisés, mais prennent simplement en charge de manière minimale la norme. Il arrive même que vous exécutiez certains réseaux de neurones sur Android sur le GPU, et ils fonctionnent à la même vitesse que sur le CPU, car travailler avec de la mémoire partagée est très inefficace et tout ça.
Sur Android, les choses vont mal en ce moment. C'est assez surprenant, car Google est l'un des leaders, mais un peu affaissé à cet égard. Sur Android, il y a clairement un manque d'implémentation de haute qualité des capacités de l'apprentissage automatique moderne.
Pour nous, par exemple, même dans l'application, toutes les fonctionnalités ne fonctionnent pas de la même manière. Ce qui fonctionne rapidement sur iOS est plus lent sur Android, même sur les appareils phares de puissance comparable. En ce sens, en ce moment, Android en tant que plate-forme s'affaisse.
À propos de CoreML
STAS: Puisqu'ils ont parlé de CoreML, il serait probablement juste de dire à propos de TensorFlow Lite.
ANDREW: CoreML est en fait un cheval noir. Quand il est sorti l'année dernière, tout le monde a d'abord dit: "Wow, cool!" Mais ensuite, il est devenu clair que ce n'est qu'un petit emballage sur Metal. Les entreprises sérieusement engagées dans le machine learning, dont la nôtre, ont depuis longtemps leurs propres solutions. Par exemple, nos solutions de test ont montré de meilleurs résultats que CoreML en termes de vitesse et d'autres paramètres.
Mais le principal problème avec CoreML était qu'il ne pouvait pas être personnalisé. Il arrive parfois que vous ayez besoin d'une couche complexe dans un réseau de neurones, qui n'est pas, par exemple, dans Metal, et que vous ayez besoin de l'écrire vous-même. Dans CoreML, il n'était pas possible d'incorporer vos couches, et vous avez donc dû rétrograder vers Metal au niveau inférieur et tout écrire vous-même.
Récemment, CoreML a ajouté cela, et maintenant ce cadre est devenu plus intéressant. Si vous êtes un développeur qui n'a absolument rien à voir avec l'apprentissage automatique dans l'entreprise ou dans l'application, vous pouvez lancer un neurone en deux lignes et l'exécuter rapidement sur le GPU. Les résultats, qui montrent des tests de performances pour CoreML, sont comparables aux solutions personnalisées et au métal nu.
Autrement dit, CoreML fonctionne assez bien. C'est un peu humide, il y a des bugs, mais chaque mois ça s'améliore. Apple déploie activement des mises à jour - pas comme nous sommes habitués, que les mises à jour des frameworks Apple soient publiées une fois par an ou sur des versions semi-majeures d'iOS. CoreML est activement mis à jour, en ce sens, tout va bien.
TensorFlow Lite fournit un convertisseur en CoreML, CatBoost prend également en charge un convertisseur en CoreML. Bref, Apple a tout fait de nouveau correctement. Ils ont publié un convertisseur open source et ont déclaré: «Écrivons tous les convertisseurs dans CoreML» - et de nombreux frameworks d'apprentissage l'ont soutenu.
Au début, il y avait un certain scepticisme à propos de CoreML, lors de la dernière WWDC, la question la plus courante pour les développeurs CoreML était: «Pourquoi n'autorisez-vous pas le téléchargement de modèles depuis Internet? Pourquoi ne les laissez-vous pas crypter? " Il était possible d'obtenir ces modèles et, il s'avère, de voler la propriété intellectuelle.
Maintenant, tout a été réparé, ajouté des fonctionnalités, et pour le moment, CoreML est définitivement la plate-forme leader dans ce sens.
STAS: Pouvez-vous en parler plus en détail? Il s'avère que maintenant vous ne pouvez plus stocker le modèle, mais simplement le charger de quelque part?
ANDREW: Oui, c'est déjà possible. Auparavant, lorsque nous avons posé des questions à ce sujet, les développeurs ont souri et déclaré: "Regardez simplement les en-têtes." Il y avait vraiment des concepteurs qui pouvaient transférer des fichiers et tout se réunissait.
Mais les modèles CoreML à l'intérieur sont assez intéressants. Ce sont en fait des binaires ordinaires qui stockent des poids, mais en plus, ils sont générés des fichiers rapides, qui créent ensuite des classes implicites. Vous utilisez ces classes dans votre application et les compilateurs compilent ce modèle dans certains fichiers.
Maintenant, en utilisant certains hacks et approches, il est possible de rendre ce modèle portable. Vous pouvez protéger votre propriété intellectuelle par cryptage et alléger le poids de l'application.
En général, CoreML va maintenant dans la bonne direction. Tout ne peut pas être fait légalement du point de vue de l'App Review, tout ne peut pas être fait facilement, sans piratage, mais il est notable que les développeurs améliorent le cadre.
STAS: Cool! Je voulais ajouter que CoreML ressemble à une solution typique. Relativement parlant, c'est pratique lorsque vous voulez faire quelque chose de simple en utilisant l'apprentissage automatique dans votre application. Il semble que si c'est une tâche typique, Apple a essayé de rendre cet itinéraire aussi simple que possible, si vous trouvez un modèle, un ensemble de données et plus encore. Ce n'est qu'une histoire sur un problème typique, car pour eux, probablement, tout est déjà prêt.
ANDREW: Pour les tâches typiques, c'est généralement super! Sans hyperbole - il faut vraiment deux lignes de code pour exécuter le modèle. En ce sens, oui, c'est très cool, surtout pour les développeurs indépendants ou les entreprises qui n'ont pas de département R&D au sein du personnel, mais qui veulent également ajouter quelque chose de cool.
Mais ce n'est pas si intéressant, car les tâches typiques ont été résolues sur Github et avec Metal - vous pouvez simplement copier ce code pour vous-même et le mettre à la ferme - bien qu'un peu plus compliqué.
Il est important que ce cadre évolue désormais non seulement vers les tâches quotidiennes classiques, mais aussi vers des solutions intégrées. C'est vraiment cool!
À propos de la formation sur les téléphones mobiles
GLEB: Vous dites qu'après l'avènement du Metal, il est devenu possible de former des modèles sur des téléphones portables?
ANDREW: Non, la formation sur les téléphones portables n'a jamais été possible. Cela n'a pas de sens, vous ne pouvez que l'exécuter. Si je l'ai dit, j'ai fait une réservation. Sur les téléphones portables, bien sûr, personne n'enseigne rien.
STAS: Je n'ai pas non plus entendu parler de la formation sur un téléphone portable.
GLEB: Je n'ai pas entendu non plus, mais j'y ai pensé. Bien sûr, il semble intuitivement que c'est une chose étrange. Mais il n'y a certainement pas de tâches intéressantes, quand cela serait-il pertinent?
ANDREW: C'est difficile de les imaginer. S'il y a quelque chose comme ça, alors seulement l'apprentissage distribué. Il existe même des articles scientifiques sur la façon de procéder, mais si je comprends bien, vous demandez comment apprendre des données collectées sur le même téléphone? C'est juste que même si vous collectez autant (ce qui n'arrivera pas), il faudra tellement de temps pour apprendre que cela ne finira jamais, et personne ne portera le code de formation sur les plateformes mobiles, car pourquoi?
La formation se produit toujours sur les serveurs et l'inférence sur les appareils.STAS: Mais finalement ça se passe comme ça. Si vous êtes une entreprise, vous voulez avoir quelque chose comme ça, vous avez besoin de données, et vous pouvez les collecter auprès de vos utilisateurs, c'est-à-dire les charger périodiquement vous-même.
ANDREW: Oui, mais cela fonctionne un peu différemment. Vous collectez les données de tous les utilisateurs en un seul endroit sur votre serveur actif, vous vous y entraînez, puis renvoyez le modèle fini. Mais pas pour que tout le monde à la maison apprenne quelque chose.
STAS: D'un autre côté, le téléphone portable se réchaufferait - et en hiver, ce serait pertinent, mais pour très longtemps, probablement.
À propos des téléphones portables et de l'avenir
GLEB: Y a-t-il d'autres choses intéressantes en termes d'application de l'apprentissage automatique aux appareils mobiles? Nous avons parlé de ce que nous avons déjà. Il serait intéressant de se pencher un peu sur l'avenir - de sorte que nous souhaiterions généralement recevoir sur nos plates-formes mobiles certains superaliments, super-solutions.
: , , performance — , , . , - , .
. , style- , . .
CoreML . , , . , , : , , — , Android, iOS, . , , iOS Android.
, , , , — Android, iOS, Github . - — Uber , Horovod. Apple — , . , , , , — .
, . , , , — , , - . , .
: , , ? , , ? .
: , — (M. Bishop. Pattern Recognition and Machine Learning. Christopher. Springer. 2006), - . , , 3D , , - . . , — , — .
, , , . , -, , Andrew Ng Coursera. , .
, , , — MNIST. Hello World, .
, , , , - , . - , , , .
: ?
: advanced- Andrew Ng! , , Kaggle, , . , , — Data Scientist.
— , , , . , — R&D . , . . , , .
. , Kaggle, - — 90% .
Résumé
: . , , , , .
- , — . , , — .
- .
- .
- - .
- , , , .
- , . , , , - - !
- — , , CoreML — , .
, .
, AppsConf 2018 , 8 9 .
80 , Call for Papers — 3 . , , .