[PYTHON] Reconnaissance d'image par apprentissage profond 1 théorie

Aidemy 2020/11/10

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! Ceci est le premier article sur l'apprentissage profond et la reconnaissance d'image Ravi de vous rencontrer.

Quoi apprendre cette fois ・ ・

Perceptron simple

Qu'est-ce que Simple Perceptron?

-__ Simple perceptron__ est une unité qui reçoit plusieurs entrées et sort une valeur (0 ou 1), et est l'unité de base de __neural net __. ・ La formule du perceptron simple est la suivante. $ \begin{eqnarray} u = \sum_{i=1}^N w_i x_i + \theta\\ y = H(u) \end{eqnarray} $

-Pour l'équation ci-dessus, "u" est la somme de chaque entrée $ x_i $ multipliée par le poids $ w_i $, et le biais θ est ajouté. D'autre part, $ H (u) $ est appelée fonction __step __ (fonction d'activation), qui vaut 1 lorsque u est positif et 0 lorsque u est négatif. -De cette façon, le perceptron simple reçoit plusieurs entrées et se déclenche lorsque le __seuil (0 cette fois) est dépassé. -Cependant, il ne peut être utilisé que lorsque __ la séparation linéaire est possible comme la fonction XOR __. Dans d'autres cas, utilisez le __ "perceptron multicouche" __ décrit plus loin.

-Code (exemple d'implémentation)![Screenshot 2020-11-09 9.51.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/c25e602f- 7e6f-9289-9676-0b1fa309efe6.png)

Apprentissage de la correction d'erreurs

-Il est nécessaire de changer les "w" et "θ" ci-dessus de manière appropriée, mais il n'est pas réaliste de les changer manuellement. Dans ce cas, la méthode qui __automatise la mise à jour de la valeur __ est __ "apprentissage de la correction d'erreur" __. -Dans l'apprentissage de correction d'erreurs, un «w» approprié est d'abord donné, et une sortie «y» est obtenue en donnant une entrée «x». À partir de la différence entre ce y et la sortie correcte "t", mettez à jour "w" avec la formule suivante. $ {\bf w} = {\bf w} + \eta(t_i - y_i){\bf x_i} $

・ À ce moment, par souci de simplicité, le poids w est (w1, w2, θ), l'entrée x est (x1, x2,1) et la sortie u est calculée par __ "(transloquée w) * x" __. (Omettez θ de la formule pour u). ・ $ \ Eta $ est le taux d'apprentissage. Les détails seront décrits plus tard. -Comme on peut le dire à partir de la formule, w est mis à jour uniquement lorsque les valeurs de t et y sont différentes (une différence se produit) et x est 1. De plus, lorsque y> t, w est mis à jour dans le sens négatif, et lorsque y <t, w est mis à jour dans le sens positif.

·code スクリーンショット 2020-11-09 10.23.06.png

・ Sortie (+ code pour la sortie) スクリーンショット 2020-11-09 10.23.40.png

Perceptron multicouche

Qu'est-ce que le Perceptron multicouche?

-Comme mentionné ci-dessus, il y avait un problème que le perceptron simple ne pouvait pas gérer __ séparation non linéaire, mais __ "perceptron multicouche" __ est utilisé dans un tel cas. Comme le mot «multicouche» signifie, celui avec le plus de couches est appelé ainsi. Plus précisément, en plus de la "couche d'entrée" et de la "couche de sortie", __ "couche intermédiaire (couche cachée)" __ est augmentée.

-Le code spécifique est le suivant. Pour les données d'entrée x, trouvez "u1" et "u2" en utilisant la même formule que le perceptron simple, trouvez la sortie "z1" et "z2" de la première couche, et calculez "u3" avec celles-ci, le poids w3 et le biais b3. Ensuite, la sortie finale "y" est calculée par "H (u3)".

スクリーンショット 2020-11-09 11.30.33.png

Méthode de descente de gradient

・ L '"apprentissage de la correction d'erreur" appris ci-dessus ne peut être géré que lorsque l'entrée est "0 ou 1". __ Si le nombre de couches cachées augmente, cette méthode ne peut pas être utilisée __, donc dans un tel cas, utilisez __ "méthode de descente de gradient" __. -La méthode de descente de gradient est __ une méthode qui a été utilisée jusqu'à présent dans le deep learning, et est un __ "apprentissage afin que la fonction d'erreur soit la plus petite" méthode __. -C'est __gradient __ qui est utilisé pour faire ce "plus petit". Ceci est obtenu par differential. ・ Ici aussi, un paramètre appelé __ "taux d'apprentissage" __ apparaît, mais c'est un paramètre pour ajuster __ "combien apprendre en une étape" __. Si cette valeur est trop grande, elle ne convergera pas vers la valeur souhaitée, et si elle est trop petite, il faudra trop de temps pour atteindre cette valeur, il est donc nécessaire de définir une valeur appropriée __. -Le taux d'apprentissage est défini __ fondamentalement exploratoire __, mais vous pouvez également utiliser un outil pour trouver une valeur appropriée.

Fonction d'activation

-La différenciation est effectuée dans la méthode de descente de gradient, mais si la fonction de l'étape précédente est utilisée pour la fonction __activation __, la sortie sera 0 ou 1, donc le résultat differentiation sera 0. Par conséquent, lors de l'utilisation de cette méthode, il est nécessaire d'utiliser __ une autre fonction pour la fonction d'activation __. -Par exemple, la fonction __ sigmoïde __ et la fonction __ReLU __. -Bien que ce soit une partie mathématique, la fonction __sigmoïde __ est exprimée par la formule suivante. La différenciation est également décrite. $ sigmoid(x) = \frac{1}{1+e^{-x}} $ $ \frac{d}{dx}sigmoid(x) = (1 - sigmoid(x))sigmoid(x) $

-Même dans le code, le résultat du calcul de la fonction sigmoïde peut être obtenu en calculant de cette manière.

-La fonction __ReLU __ est une fonction simple où __x reste "x" lorsque __x> = 0, et __x est "0" lorsque __x <0, et "x" a toujours une valeur lorsqu'il est différencié. Puisqu'il devient "1", il est souvent utilisé dans la méthode __error back propagation __.

Mise à jour du poids du réseau neuronal

-Dans le réseau de neurones, le poids est mis à jour dans le sens du gradient de la fonction d'erreur obtenue par __error back propagation __. En fonction de la façon de trouver le dégradé à ce moment, il peut être divisé selon les trois méthodes suivantes. -La première est appelée __ "la méthode de descente la plus raide" __, qui est mise à jour en fonction du gradient __ obtenu en utilisant toutes les données. Cependant, cette méthode présente le problème qu'une fois qu'elle atteint la solution __local __, elle ne peut pas en sortir. -La seconde est appelée __ "méthode de descente de gradient probabiliste" __, qui trouve le gradient en utilisant uniquement les __ith données __ et met à jour toutes les données en fonction de celui-ci. Bien qu'il soit peu probable que cette méthode tombe dans une solution locale, elle n'utilise qu'une seule donnée, donc si ces données sont une valeur aberrante, la mise à jour peut échouer. ・ La troisième __ "méthode mini-batch" __ peut réduire ce problème. Il s'agit d'une méthode pour décider du nombre de données __ (batch_size) __ utilisé pour calculer le gradient et mettre à jour en fonction de celui-ci.

Sommaire

-La structure de base du réseau neuronal est __ "simple perceptron" __ qui reçoit plusieurs entrées et produit une valeur. En ajoutant __hidden layer __ à cela, il devient __multi-layer perceptron __, et il prend également en charge la séparation non linéaire. -Lors de la mise à jour des pondérations et des biais de l'apprentissage profond, __ "apprentissage de correction d'erreur" __ est également utilisé, mais comme cela ne peut pas être utilisé lorsque le nombre de couches intermédiaires augmente, __ "méthode de descente de gradient" __ est utilisé à la place. Sera Il s'agit d'une méthode de mise à jour de la valeur vers la partie où le gradient obtenu en __différenciant __la fonction d'erreur __ est le plus petit. -Lors de l'utilisation de la méthode de descente de gradient, utilisez la fonction __sigmoid __ et la fonction ReLU pour la fonction activation. -Lors de la mise à jour des poids avec la méthode de descente de gradient, la méthode diffère en fonction de la quantité de données __all utilisée pour calculer le gradient. La plus couramment utilisée est une prescription qui décide vous-même du nombre de données (batch_size), et c'est ce qu'on appelle __ "méthode mini-batch" __.

Cette fois, c'est fini. Merci d'avoir lu jusqu'à la fin.

Recommended Posts

Reconnaissance d'image par apprentissage profond 1 théorie
Implémentation du modèle de reconnaissance d'images d'apprentissage en profondeur 2
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Reconnaissance d'image en apprentissage profond 3 après la création du modèle
Lire et mettre en œuvre l'apprentissage résiduel profond pour la reconnaissance d'image
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Reconnaissance d'image
L'apprentissage en profondeur
[AI] Apprentissage en profondeur pour le débruitage d'image
Deep learning 2 appris par l'implémentation (classification d'images)
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Image d'apprentissage gonflée
Alignement d'image: du SIFT au deep learning
Apprentissage en profondeur Python
Apprentissage profond × Python
Premier apprentissage profond ~ Lutte ~
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Reconnaissance d'image avec keras
Deep learning 1 Pratique du deep learning
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
Première solution d'apprentissage en profondeur ~
[AI] Apprentissage métrique profond
J'ai essayé le deep learning
Tutoriel Pepper (7): Reconnaissance d'image
Python: réglage du Deep Learning
Principes de base de la reconnaissance d'image CNN 1
Technologie d'apprentissage en profondeur à grande échelle
Fonction d'apprentissage profond / softmax
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
[Détection d'anomalies] Détecter la distorsion de l'image par apprentissage à distance
Apprentissage profond à partir de zéro 1 à 3 chapitres
Deep Learning Gaiden ~ Programmation GPU ~
<Cours> Apprentissage en profondeur: Day2 CNN
Deep running 2 Réglage de l'apprentissage profond
Apprentissage profond / code de travail LSTM
<Cours> Apprentissage en profondeur: Jour 1 NN
Apprentissage profond du noyau avec Pyro
Essayez le Deep Learning avec FPGA
Apprentissage profond pour la formation composée?
Présentation d'Udacity Deep Learning Nanodegree
Application de la reconnaissance d'image CNN2
Sujets> Deep Learning: Day3 RNN
[Apprentissage en profondeur] Classification d'images avec un réseau neuronal convolutif [DW jour 4]
Introduction au Deep Learning ~ Règles d'apprentissage ~
Reconnaissance d'image en temps réel sur les appareils mobiles à l'aide du modèle d'apprentissage TensorFlow
Classifier les ensembles de données d'image CIFAR-10 à l'aide de divers modèles d'apprentissage en profondeur
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Générez des Pokémon avec Deep Learning
Introduction au Deep Learning ~ Rétropropagation ~
Reconnaissance d'image avec Keras + OpenCV
Distillateur de bibliothèque d'éclaircissement de modèles d'apprentissage profond
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Identification de la race de chat avec Deep Learning
Deep learning / Deep learning made from scratch Chapitre 3 Mémo