[PYTHON] [Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique


Cet article est le cinquième jour du "Calendrier de l'Avent Money Forward 2015". Désolé d'être en retard

Aperçu

Cible

Ce qu'il ne faut pas faire

Intro Je sens que l'enthousiasme dans ce domaine s'accélère, car des géants de l'informatique tels que Googe, Microsoft et IBM ont rendu les systèmes d'apprentissage automatique open source. À mon avis (peut-être l'espoir), le 3ème boom de l'IA a pris racine avant l'hiver, et nous sommes maintenant au stade de la prise de conscience de créer des services qui «utilisent l'apprentissage automatique pour le rendre naturel + le différencier». N'est-ce pas?

J'ai donc consacré ces derniers mois d'activités de contribution exclusivement à suivre des MOOC et à lire la série MLP.

Ce que j'ai ressenti là-dedans était également dans Le chemin le plus court pour les adultes qui travaillent qui ont évité les mathématiques de commencer à étudier l'apprentissage automatique. À tout le moins, si vous n’êtes pas habitué à manipuler les matrices et les vecteurs, même si vous manipulez la matrice légèrement pendant le cours, il est facile de vous familiariser avec ce que vous faites maintenant (guillemet). Je me suis spécialisé dans l'ingénierie de contrôle et la mécatronique à l'université, donc j'avais une certaine formation, mais je luttais encore (excusez-moi parce que j'avais un blanc de quatre ans). J'ai eu du mal moi-même, donc c'est dur pour les personnes au même poste ou sans expérience! D'un point de vue légèrement supérieur, j'aimerais écrire sur l'apprentissage automatique en utilisant des vecteurs et des matrices avec des exemples.

Pourquoi utiliser des vecteurs / matrices

C'est simplement parce que la vitesse d'exécution (d'apprentissage) est rapide. Si vous n'utilisez pas de matrice, vous utiliserez for-loop pour entraîner chaque échantillon, mais lorsque n> 1000, la vitesse d'apprentissage diminuera considérablement. En effet, Octave et Python, qui sont des langages interprétés, entraînent une surcharge pour chacun pendant une minute. Par conséquent, il est recommandé d'étudier avec une matrice plutôt qu'avec une boucle for.

Pour référence, je présenterai les performances lorsque j'ai essayé d'implémenter l'apprentissage des données MNIST (28x28 pixels) du modèle MLP (perceptron multicouche) à la fois en version matricielle et en version phrase.

Comment le vectorisez-vous?

Prenons une simple régression logistique. Cette fois, vectorisons l'intégrale minute de z et du gradient.

Vectorisation de l'état z

Le vecteur z (chaque élément) avant de plonger dans la fonction d'activation peut être calculé comme suit. Ce qui précède est d'abord implémenté avec une instruction for, mais le but est de l'implémenter sous une forme qui utilise une matrice.

image

Autrement dit, nous voulons faire de z la forme suivante avec une seule commande.

image

Et chacune des colonnes ci-dessus peut être transformée comme suit. Veuillez le reconnaître comme ** une telle chose **.

image

Comme mentionné ci-dessus, chaque élément de z est le produit interne du vecteur x et du vecteur thêta. Pour exprimer cela avec x et thêta sans utiliser l'instruction for, créez X comme si chaque vecteur x (translocation) était superposé sur une ligne comme indiqué ci-dessous.

image

Ensuite, vous pouvez créer une formule simple comme celle ci-dessous.

image

la mise en oeuvre

Si vous implémentez cela avec Octave / python, vous pouvez obtenir une forme soignée comme indiqué ci-dessous.

octave.m


z = X * theta;

python.py


#Avec la méthode utilisant numpy
np.dot(theta, X)

Exemple 2 Vectorisation de gradient

Afin de trouver le paramètre optimal, nous voulons trouver une valeur qui rend la différenciation partielle pour chaque paramètre de la fonction d'évaluation 0, ou un paramètre qui est en dessous du seuil, nous devons donc implémenter la formule de différenciation partielle.

\frac{\partial J}{\partial \theta_j} = \frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)}) x_{j}^{(i)}

Quand ceci est vectorisé

image

Maintenant, pour transformer cela, vous pouvez d'abord utiliser les règles suivantes. Veuillez le reconnaître comme ** une telle chose **.

image

La matrice dans laquelle x est aligné est la transposition de X introduite dans la vectorisation de z, donc

image

Par conséquent, vous pouvez écrire un différentiel partiel vectorisé de la fonction de coût comme indiqué ci-dessous.

image

la mise en oeuvre

Je l'appellerai brièvement comme suit.

octave.m


h = activate_function(z)
grad = 1 / m * (X'*(h-y))

python.py


h = activate_function(z)
grad = 1/m * np.dot(X.T, h-y)

Résumé

Ce qui précède est l'explication de la vectorisation. Je voudrais apporter un complément au cœur des débutants avec cela. Cependant, je n'ai pas l'impression de faire une erreur, alors j'aimerais beaucoup entendre vos opinions et commentaires.

Livres lus / cours suivis

De côté

Recommended Posts

[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Une introduction à OpenCV pour l'apprentissage automatique
Une introduction à Python pour l'apprentissage automatique
Introduction à l'apprentissage automatique
Une introduction à l'apprentissage automatique
Super introduction à l'apprentissage automatique
Tout pour que les débutants puissent faire du machine learning
Introduction au Deep Learning (1) --Chainer est expliqué d'une manière facile à comprendre pour les débutants-
Introduction à la rédaction de notes d'apprentissage automatique
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Présentation de la bibliothèque d'apprentissage automatique SHOGUN
[Explication pour les débutants] Introduction au traitement du pliage (expliqué dans TensorFlow)
Introduction à l'apprentissage automatique: fonctionnement du modèle
Premiers pas pour les débutants en apprentissage automatique (IA)
Avant l'introduction à l'apprentissage automatique. ~ Technologie requise pour l'apprentissage automatique autre que l'apprentissage automatique ~
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Une introduction à la programmation orientée objet pour les débutants par les débutants
Ordre d'étude recommandé pour les débutants en apprentissage automatique / apprentissage en profondeur
Essayez de calculer RPN avec Python (pour les débutants)
Prenons la version gratuite "Introduction à Python pour l'apprentissage automatique" en ligne jusqu'au 27/04
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Les débutants en Python publient des applications Web à l'aide de l'apprentissage automatique [Partie 2] Introduction à Python explosif !!
[Introduction pour les débutants] Manipuler MySQL avec Python
Introduction à la base de données Graph Neo4j en Python pour les débutants (pour Mac OS X)
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
Comment introduire IPython (Python2) dans Mac OS X-Préparation pour une introduction à la théorie de l'apprentissage automatique-
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitres 11 et 12 Introduction à Pandas Matplotlib
Un mémorandum de méthode souvent utilisé dans l'apprentissage automatique utilisant scikit-learn (pour les débutants)
[Pour les débutants] Comment utiliser la commande say avec python!
Créez un environnement interactif pour l'apprentissage automatique avec Python
Préparation au démarrage de «Python Machine Learning Programming» (pour macOS)
Les débutants en apprentissage automatique essaient de créer un arbre de décision
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
Entropie croisée à revoir dans les devoirs de la semaine 2 de Coursera Machine Learning
Introduction à l'apprentissage automatique à partir de Simple Perceptron
Ensemble de données pour l'apprentissage automatique
[Mémorandum d'apprentissage] Introduction à vim
Prétraitement japonais pour l'apprentissage automatique
Flux d'apprentissage pour les débutants en Python
Utilisé en EDA pour l'apprentissage automatique
Introduction au Deep Learning ~ Règles d'apprentissage ~
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Introduction à Python pour, pendant
Introduction au Deep Learning ~ Rétropropagation ~
Comment adapter plusieurs bibliothèques d'apprentissage automatique en une seule fois
Introduction à l'apprentissage automatique avec scikit-learn - De l'acquisition de données à l'optimisation des paramètres
Les débutants en Python publient des applications Web à l'aide de l'apprentissage automatique [Partie 1] Introduction
Utilisation d'icrawler plus simple pour la collecte de données d'apprentissage automatique
Pour ceux qui souhaitent démarrer l'apprentissage automatique avec TensorFlow2
Comment utiliser l'apprentissage automatique pour le travail? 03_Procédure de codage Python
Les débutants en apprentissage automatique tentent de contacter Naive Bayes (2) - Mise en œuvre
Pour les débutants, comment gérer les erreurs courantes dans les keras
Apprentissage automatique pour apprendre avec Nogisaka 46 et Keyakizaka 46 Partie 1 Introduction
[Python] Introduction à la création de graphiques à l'aide de données de virus corona [Pour les débutants]
Essayez l'apprentissage Q dans une bataille de style Drakue [Introduction au renforcement de l'apprentissage]