Cet article est le 19ème jour de "Comment avez-vous appris l'apprentissage automatique par Nikkei xTECH Business AI② Advent Calendar 2019".
J'écrirai sur la façon dont j'ai étudié l'apprentissage automatique en tant qu'oncle SE. Le déclencheur est parti de la question «Puis-je utiliser l'apprentissage automatique?» Dans la tâche de classification que j'avais à ce moment-là. Depuis que j'étais dans les nuages sombres, ma mémoire honnête est ambiguë.
L'historique du programme remonte à près de 30 ans. En commençant par MS BASIC, que j'ai appris quand j'étais à l'école primaire, j'ai touché l'assembleur Z80, l'assembleur MC68000, FORTRAN, C (UNIX), C ++ (Mac), VB, Java (Android), VB.NET et C #. Je suis entré en contact avec différentes langues, mais aucune d'entre elles n'a été aussi étroite.
Concernant l'apprentissage automatique, il y a plus de 20 ans, à la fin du soi-disant deuxième boom de l'IA, j'ai traité des réseaux de neurones sous le thème de ma thèse de fin d'études. Cependant, la partie logique était gérée par une autre personne, et j'étais en charge de la mise en œuvre, donc je n'étais pas sûr de ce que c'était. En y réfléchissant maintenant, je pense que j'aurais dû étudier plus dur en ce moment, mais c'est un festival plus tardif. Au fait, il n'y avait pas de bibliothèque d'apprentissage automatique à l'époque, je l'ai donc implémentée en langage C.
Avant d'étudier l'apprentissage automatique, j'étudiais seul Python. J'ai décidé d'utiliser Raspberry Pi pour surveiller ma maison et j'ai utilisé Pyhton pour l'implémenter. Cependant, je ne connaissais pas les détails dans la mesure où ils pouvaient être copiés et modifiés. Les livres suivants ont été référencés à cette époque.
[Travail électronique illustré en couleurs appris avec le dernier Raspberry Pi] -Amazon Japon
Raspberry Pi a été activé pour utiliser Python par défaut, donc c'était un bon début pour moi, qui ne connaissait même pas le caractère P de Python. Cependant, il n'est pas réaliste d'acheter un Raspberry Pi uniquement pour Python, je recommande donc un site d'apprentissage en ligne maintenant. Autour de moi, "Paiza Learning" et "Progate" étaient populaires gratuitement. ..
Tout a commencé lorsque j'ai senti qu'il y avait une limite à la mise en œuvre fondée sur des règles des problèmes de classification que j'avais à l'époque. J'avais l'illusion que l'intelligence artificielle pouvait faire quelque chose à ce sujet, mais quand je ne pouvais pas comprendre, j'ai appris que l'apprentissage automatique pouvait être implémenté à l'aide de la bibliothèque Python scicit-learn. J'ai donc acheté les livres suivants qui ont été récemment publiés à cette époque.
Je l'ai acheté simplement parce qu'il contenait les caractères «Python» scikit-learn »« apprentissage automatique », et parce que c'était un livre O'Reilly auquel je suis redevable depuis un certain temps. Pour être honnête, je n'ai pu lire qu'une partie des chapitres 1 et 2 à Chimpung Kampung. Voici ce que j'ai appris dans ce processus.
[Chapitre 1 Introduction] ・ Syntaxe Python ・ Existence de diverses bibliothèques (scikit-learn, NumPy, pandas, matplotlib) ・ Ensemble de données Iris
[Chapitre 2 Apprendre avec un enseignant] ・ Méthode de voisinage K ・ SVM
Je pense que je n'ai pas compris 10% du contenu du livre à ce stade. Même ainsi, je l'ai mis en œuvre pour voir s'il pouvait être utilisé pour les problèmes que j'avais à l'époque. Le contenu était une classification de données à valeurs multiples avec de nombreux paramètres. À ce moment-là, il était mis en œuvre sur une base de règles, mais je souffrais d'un manque de précision. J'ai pu visualiser empiriquement les données et les regarder à vol d'oiseau, mais je ne pouvais guère trouver de régularité dans les données telles que le bruit, et j'ai senti qu'il était impossible d'améliorer davantage la précision sur la base de règles. C'était.
La figure ci-dessus est une image des données analysées à ce moment-là. C'était un problème de classification à valeurs multiples avec des dizaines de telles données. De nos jours, il ne fait aucun doute que nous le ferons avec l'apprentissage automatique, mais à l'époque, les gens de l'entreprise, y compris moi-même, n'avaient pas du tout eu cette idée et essayaient désespérément de la mettre en œuvre sur une base de règles.
Lorsque j'ai plongé ces données dans SVM et la méthode k-voisinage, elles ont été en quelque sorte classifiées. En particulier, lorsque les hyper paramètres ont été arrondis par la méthode k-near, une certaine précision a été observée, bien que la précision soit légèrement inférieure à celle de la méthode basée sur des règles. Bien que je me débattais sur la base des règles, j'ai senti la possibilité qu'un modèle pouvant être classé avec une précision raisonnable soit achevé en quelques minutes seulement après la saisie des données.
Cependant, à ce moment-là, je ne savais pas comment améliorer la précision et j'ai décidé que je ne pouvais pas passer plus de temps, alors j'ai ressenti une réponse, mais l'adoption de l'apprentissage automatique a été reportée.
D'ailleurs, à la fin de cette tentative, j'ai été hospitalisée pendant longtemps et j'ai relu le livre d'O'Reilly dans la chambre d'hôpital. J'étais capable de lire plus que la dernière fois, mais je ne me souvenais pas beaucoup parce que je ne pouvais pas coder parce que je ne pouvais pas apporter mon ordinateur à la chambre d'hôpital. Après tout, j'ai réalisé que je ne pouvais pas le porter à moins de bouger mes mains.
J'avais été absent de l'apprentissage automatique pendant environ six mois après la tentative ci-dessus, mais j'ai ressenti une réponse à l'apprentissage automatique, alors j'ai décidé d'essayer l'apprentissage en profondeur. À ce moment-là, j'ai fait un tutoriel sur TensorFlow.
【TensorFlow 2 quickstart for beginners】 - Tensorflow
Le contenu du didacticiel était un problème de classification MNIST (numéro manuscrit), mais à ce moment-là, je ne pouvais pas le lire en appuyant directement sur l'API TensorFlow. Bien que je ne puisse pas le lire, j'ai réussi à mettre en œuvre la classification des iris, mais j'étais frustré car je ne pouvais pas obtenir de précision.
Après cela, j'ai appris l'existence de Keras et appris à classer les images en les appliquant à CNN à l'aide d'un modèle séquentiel tout en regardant un exemple de programme.
【keras-team/keras/examples】- Github 【keras-team/keras/examples/mnist_cnn】- Github
Actuellement, le didacticiel TensorFlow utilise Keras (tf.keras), donc je pense que c'est beaucoup plus facile à faire.
De plus, la note suivante [^ 1] est un résumé du savoir-faire qui a permis d'utiliser le machine learning et TensorFlow sur les terminaux Raspberry Pi et Windows à l'époque.
La plus grande chose que j'ai apprise à propos du deep learning a été d'apprendre l'existence de Google Colaboratory (ci-après, Google Colab). En utilisant GoogleColab, vous pouvez utiliser TensorFlow et Keras simplement en le démarrant, et vous pouvez apprendre à haute vitesse en utilisant le GPU gratuitement, donc les ressources en temps ont été réduites à la fois.
C'est une avancée, et je pense que mon étude de l'apprentissage automatique n'aurait pas progressé sans ** Google Colab **. Maintenant, le tutoriel TensorFlow m'amène également à Google Colab, qui est un outil très utile. Une fois que vous avez créé un compte Google, vous pouvez l'utiliser gratuitement, donc si vous craignez de créer un environnement ou de ralentir la vitesse de traitement, veuillez l'utiliser.
Pendant cette période, j'ai essayé à plusieurs reprises d'améliorer la précision de MNIST sur Google Colab. Si vous y réfléchissez maintenant, vous pouvez défier MNIST (Digit Recognizer) même au sein de Kaggle, donc j'aurais aimé avoir rejoint Kaggle plus tôt. pense.
En utilisant la technologie acquise dans ce défi, j'ai implémenté un modèle de classification d'image qui pourrait être utilisé pour les entreprises, implémenté WebAPI (Flask) en Python et créé une application simple qui renvoie le résultat lorsqu'une image est lancée. Je pense que la précision était d'environ 97,5%. La figure ci-dessous est une image PoC qui a été réalisée avant de réaliser l'application prototype.
Lorsque je l'ai examiné en interne, il a été rejeté comme "Il n'y a pas d'erreur dans 25 cas sur 1000". À cette époque, la maîtrise de l'IA était faible, y compris moi-même, donc je ne pouvais pas contester quoi que ce soit ...
Aussi, à ce moment, j'ai entrepris un projet à implémenter en Python. Bien que cela ne soit pas directement lié à l'apprentissage automatique, j'ai beaucoup appris sur l'utilisation de Pandas ici car c'était un projet qui traitait une grande quantité de données dans des fichiers DB et CSV.
Quand j'ai appris ce qu'était CNN, je suis devenu conférencier et j'ai organisé une session d'étude en interne sur l'apprentissage automatique et l'apprentissage profond. Ce fut également un grand tournant. Lorsque les connaissances sur l'apprentissage automatique dans l'entreprise se sont répandues dans une certaine mesure, il y a eu un mouvement pour promouvoir l'apprentissage automatique dans toute la section. Cela a conduit aux actions qui ont suivi.
J'ai décidé de contester le test G avec les membres participants de la session d'étude ci-dessus. Les livres utilisés à cette époque sont les suivants.
[Texte officiel du Deep Learning Textbook Deep Learning G Test (Generalist)] [AI White Paper 2019]
Dans le même temps, plusieurs employés devaient se soumettre à la certification G, ce qui améliorait les connaissances internes en IA. Grâce à cela, j'ai plus d'occasions de parler de machine learning en interne, ce dont je ne pouvais parler à personne auparavant, et j'ai moi-même considérablement soulagé mon stress.
Pour être honnête, je ne pense pas que le test G puisse être utilisé dans la pratique, mais je pense que c'était très utile pour les employés de pouvoir parler en utilisant des termes courants. Après tout, je ne pouvais pas le faire seul et je sentais que je devais recruter des amis et travailler dur.
Après avoir réussi le test G, j'ai participé à divers séminaires pratiques gratuits organisés par Google et Microsft. J'ai participé de différentes manières, mais cela n'a pas eu beaucoup d'impact sur moi à ce moment-là. Le séminaire pour débutants n'a peut-être pas été satisfaisant.
Pendant ce temps, j'ai eu l'opportunité de participer à un séminaire de longue durée pendant six mois. À ce moment-là, la vidéo suivante était fournie sous forme de vidéo de pré-apprentissage.
[[Style Kikagaku] Cours sur l'intelligence artificielle / apprentissage automatique de la boîte noire-Débutant -] - Udemy [[Style Kikagaku] Cours sur l'intelligence artificielle / apprentissage automatique de la boîte noire - intermédiaire -] - Udemy
En regardant cette vidéo, j'ai pu approfondir l'apprentissage automatique que j'avais utilisé d'une manière que j'avais en quelque sorte comprise.
J'omettrai ici le séminaire de longue durée car ce sera un miso à court terme, mais ce fut une expérience difficile de travailler dur avec d'autres étudiants pendant six mois ainsi que le contenu du séminaire.
Tout en participant en tant qu'étudiant au séminaire ci-dessus, nous avons fourni des connaissances du domaine et un soutien technique aux instructeurs. La seconde moitié du séminaire étant principalement consacrée à la formation pratique, j'ai participé en tant que mentor au lieu d'étudiant. Je me demande si j'ai pu bien le faire à ma première occasion, mais je pense que c'était un très bon endroit pour l'auto-apprentissage.
--Mécanisme mathématique de l'apprentissage automatique et de l'apprentissage en profondeur
Actuellement, nous tenons un système d'apprentissage automatique "Mokumokukai". Au départ, c'était à usage interne, mais nous soutenons ceux qui essaient le nouvel apprentissage automatique tout en en faisant un lieu où les participants et les diplômés du séminaire peuvent se retrouver. Je suis également impliqué dans "DEEP LEARNING LAB", donc je serai activement impliqué dans cela aussi.
Même dans une petite zone, j'aimerais former une communauté où les gens peuvent se connecter grâce à l'apprentissage automatique et à l'IA, et réduire le nombre de personnes qui s'inquiètent et abandonnent seules.
J'ai beaucoup écrit, mais il y a certainement quelque chose que je peux dire. Cela signifie que ** s'étire le plus lorsque vous bougez vos mains **. Même si vous lisez un livre ou un article sur le Web et que vous le découvrez, vous trébucherez lorsque vous tenterez réellement de le déplacer. Vous pouvez le comprendre profondément lorsque vous déplacez réellement ce qui est écrit. Si possible, il est préférable de le penser et de l'implémenter vous-même, plutôt que de copier le code. La plupart du temps, je suis tombé sur la mise en œuvre. Je pense que vous apprendrez que vous avez fait face à divers défis lors de la mise en œuvre et que vous les avez surmontés.
Quoi qu'il en soit, même si vous essayez d'utiliser des ensembles de données existants tels que Ayame et MNIST, la valeur attendue de l'amélioration des compétences est faible. C'est bien d'essayer les fameux jeux de données Titanic comme tutoriel, mais honnêtement, ces jeux de données ne me motivent pas, donc je ne peux pas vraiment travailler dessus. Lorsque j'essaie de gérer des données liées à ce que je veux faire, comme des problèmes commerciaux réels, je rencontre divers problèmes et je prends des mesures pour les résoudre, ce que j'acquiers en tant que compétence.
Même si vous n'avez pas de connexion directe avec votre entreprise, vous pouvez ** trouver un ensemble de données qui vous intéresse et y travailler ** sur Kaggle. Peu importe si vous êtes intéressé par des ensembles de données ou des prix, mais si ce n'est pas une tâche de motivation, vous vous compromettez rapidement lorsque vous rencontrez des problèmes. Dans le cas de Kaggle, le résultat est directement lié au rang, donc le résultat est facile à comprendre, et il est recommandé car vous pouvez le comparer avec votre propre méthode tout en regardant le code de la personne de haut rang.
La partie la plus difficile de travailler sur le domaine inconnu de l'apprentissage automatique était que je n'avais personne à qui parler. Ce n'est pas bon mentalement parce que ça s'arrête quand on est coincé et ce n'est pas bon de travailler seul. De nombreuses personnes que j'ai rencontrées lors du séminaire ont également bénéficié de diverses consultations car ** personne ne pouvait s'exprimer dans l'entreprise **. Nous vous guiderons vers la solution tout en écoutant l'histoire, mais ceux qui la résolvent en discutant entre eux, ceux qui la résolvent par eux-mêmes en discutant, amènent des collègues au "Mokumokukai" et augmentent le nombre d'amis dans l'entreprise et la résolvent ensemble Il y avait différentes personnes, comme celles qui l'ont fait. Dans tous les cas, parler aux autres a tendance à vous rapprocher de la résolution du problème. Parler est aussi une sorte de sortie, donc je pense qu'il est très important de parler pour organiser son esprit. Idéalement, vous devriez trouver quelqu'un à qui parler dans la vraie vie, non seulement en interne, mais aussi lors d'événements tels que des séminaires et des mokumoku-kai. Même si ce n'est pas le cas, je pense qu'il est possible de communiquer en ligne, comme dans le forum Kaggle.
Le Japon est encore immature en matière d'apprentissage automatique et d'IA. La plupart des informations sont en anglais, et il y a de nombreuses scènes où vous heurtez un mur sans trouver les informations que vous recherchez. Arrêtons de nous inquiéter seuls dans un tel cas. Peu importe que vous soyez un patron ou un collègue, impliquons donc les autres. Si vous n'êtes pas là, regardez plus loin. De nombreuses personnes dans le monde sont également inquiètes. De nos jours, dans la société Internet, vous pouvez facilement trouver des personnes dans la même situation. Je vais continuer à étudier pour pouvoir vous aider, alors faisons de notre mieux ensemble.
[^ 1]: [Comment exécuter Python sous Windows sans polluer autant que possible l'environnement (version intégrable Python)] - Qiita
[Sous Windows Comment exécuter Python sans polluer autant que possible l'environnement (WSL utilise Windows10, version 1607 ou ultérieure uniquement)] - Qiita
[[GPU avec TensorFlow pour Windows] Use (Install CUDA)] - Qiita](https://qiita.com/rhene/items/31bf4713b9dbda28bcc1)
[[Etude de construction de Raspberry Pi pour Python et Machine Learning] -Qiita](https: // qiita) .com / rhene / items / 71b92c253d5ac2a4cc52)
[Construction de RaspberryPi pour Python et étude d'apprentissage automatique (version RaspberryPi4 et Buster) -Qiita]