[PYTHON] Deep Learning from scratch Chapter 2 Perceptron (lecture du mémo)

introduction

Quel est cet article?

C'est un matériel et un mémo pour la session d'étude. Nous ne pouvons pas garantir la validité du contenu, nous vous recommandons donc de ne pas citer.

Lien de référence

2.1 Qu'est-ce que Perceptron?

perceptron.png

_2 Input Perceptron (à partir de "Deep Learning from Zero" P.22) _

En supposant que la sortie est $ y $, les éléments ci-dessus peuvent être exprimés mathématiquement comme suit.

y = \left\{
\begin{array}{ll}
0 & (w^1x^1 + w^2x^2 \leqq \theta) \\
1 & (w^1x^1 + w^2x^2 \gt \theta)
\end{array}
\right.

2.2 Circuit logique simple

2.2.1 Porte ET

_P.23 Voir "Fig. 2-2 Table de vérité des portes AND" _

2.2.2.1 Porte NAND

_P.24 Voir «Figure 2-3 Tableau de vérité de la porte NAND» _

--NAND = Not AND = AND Comportement opposé à la porte

2.2.2.2 OU Porte

2.3 Mise en œuvre de Perceptron

2.3.1 Mise en œuvre facile

Définissons et exécutons le circuit ET comme suit.

def AND(x1, x2):
  w1, w2, theta = 0.5, 0.5, 0.7
  tmp = x1 * w1 + x2 * w2

  if tmp <= theta:
    return 0
  elif tmp > theta:
    return 1

2.3.2 Introduction de pondérations et de biais

--Introduire une polarisation dans le circuit ET de 2.3.1.

y = \left\{
\begin{array}{ll}
0 & (w^1x^1 + w^2x^2 \leqq \theta) \\
1 & (w^1x^1 + w^2x^2 \gt \theta)
\end{array}
\right.
y = \left\{
\begin{array}{ll}
0 & (b + w^1x^1 + w^2x^2 \leqq 0) \\
1 & (b + w^1x^1 + w^2x^2 \gt 0)
\end{array}
\right.

Vérifions avec l'interprète.

>>> import numpy as np
>>> x = np.array([0, 1]) #contribution
>>> w = np.array([0.5, 0.5]) #poids
>>> b = -0.7 #biais
>>> w * x
>>> np.sum(w * x)
>>> np.sum(w * x) + b

2.3.3 Mise en œuvre par poids et biais

Implémentons chaque circuit de AND / NAND / OR basé sur la section précédente.

def AND(x1, x2):
  x = np.array([x1, x2])

  w = np.array([0.5, 0.5])
  b = -0.7

  tmp = np.sum(w * x) + b
  
  if tmp <= 0:
    return 0
  else:
    return 1
def NAND(x1, x2):
  x = np.array([x1, x2])

  #Seuls le poids et le biais sont différents de AND
  w = np.array([-0.5, -0.5])
  b = 0.7

  tmp = np.sum(w * x) + b
  
  if tmp <= 0:
    return 0
  else:
    return 1
def OR(x1, x2):
  x = np.array([x1, x2])

  #Seul le biais est différent de AND
  w = np.array([0.5, 0.5])
  b = -0.2

  tmp = np.sum(w * x) + b
  
  if tmp <= 0:
    return 0
  else:
    return 1

Différence entre biais et poids

--Weights $ w ^ 1, w ^ 2 ... $ contrôlent l'importance du signal d'entrée --Le biais ajuste la facilité de déclenchement des neurones (probabilité de sortie 1)

Le terme biais signifie «l'obtenir». Cela signifie combien vous voulez obtenir la sortie (ajoutez une valeur) lorsqu'il n'y a pas d'entrée (lorsque l'entrée est 0). En fait, le calcul de b + w1 x1 + w2 x2 dans l'équation (2.2) imprime uniquement la valeur du biais si les entrées x1 et x2 sont égales à 0.

(Extrait de la P.27)

2.4 Limites de Perceptron

--Un perceptron monocouche peut séparer des régions linéaires, mais pas des régions non linéaires telles que XOR (somme logique exclusive).

2.5 Perceptron multicouche

--XOR peut être exprimé par "superposition".

2.5.1 Combinaison de portes existantes

Un circuit XOR qui produit 1 lorsque l'une des entrées est 1 et l'autre est 0 est représenté par une combinaison de AND / NAND / OR existant. Essayons à nouveau de régler le comportement de chaque circuit.

--AND ... Sorties 1 si les deux entrées sont 1, sinon sorties 0. --NAND ... Sorties 0 si les deux entrées sont 1, sinon sorties 1.

En fait, cela peut être réalisé par le câblage suivant: La valeur initiale est $ x ^ 1, x ^ 2 $, la sortie de NAND est $ s ^ 1 $ et la sortie de OR est $ s ^ 2 $.

xor.png _P.32 Figure 2-11_

Vérifiez la table de vérité.

xor-chart.png _P.33 Figure 2-12 Table de vérité XOR Gate _

2.5.2 Implémentation XOR Gate

Implémentons-le dans le code basé sur la section précédente.

def XOR(x1, x2):
  s1 = NAND(x1, x2)
  s2 = OR(x1, x2)
  y = AND(s1, s2)
  return y

2.6 De NAND à l'ordinateur

2.7 Résumé

--Perceptron est un algorithme avec entrée et sortie. Étant donné une certaine entrée, une valeur fixe est sortie. --Dans Perceptron, «poids» et «biais» sont définis comme paramètres.

Recommended Posts

Deep Learning from scratch Chapter 2 Perceptron (lecture du mémo)
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 7]
Deep learning / Deep learning made from scratch Chapitre 6 Mémo
[Mémo d'apprentissage] Deep Learning fait de zéro [Chapitre 5]
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 6]
Deep learning / Deep learning made from scratch Chapitre 7 Mémo
[Mémo d'apprentissage] Deep Learning fait de zéro [~ Chapitre 4]
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Deep learning / Deep learning made from scratch Chapitre 3 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 5 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 7 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 8 Mémo
Deep learning / Deep learning made from scratch Chapitre 5 Mémo
Deep learning / Deep learning made from scratch Chapitre 4 Mémo
Deep learning / Deep learning from scratch 2 Chapitre 3 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 6 Mémo
Apprentissage profond à partir de zéro
Enregistrement d'apprentissage de la lecture "Deep Learning from scratch"
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 12) Deep learning
Mémo d'auto-apprentissage "Deep Learning from scratch" (glossaire illisible)
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
[Mémo d'apprentissage] Apprentissage profond à partir de zéro ~ Mise en œuvre de l'abandon ~
Mémo d'auto-apprentissage «Deep Learning from scratch» (10) Classe MultiLayerNet
Mémo d'auto-apprentissage «Deep Learning from scratch» (n ° 11) CNN
Apprentissage profond à partir de zéro 1 à 3 chapitres
Python vs Ruby «Deep Learning from scratch» Chapitre 2 Circuit logique par Perceptron
Apprentissage profond à partir de zéro (calcul des coûts)
Mémo d'apprentissage profond créé à partir de zéro
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 1
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 5
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 2
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 3
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 7
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 5
Un amateur a trébuché dans le Deep Learning ❷ fait de zéro Note: Chapitre 1
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 4
Mémo d'auto-apprentissage «Deep Learning from scratch» (n ° 18) One! Miaou! Grad-CAM!
Un amateur a trébuché dans le Deep Learning à partir de zéro.
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 2
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
Mémo d'auto-apprentissage "Deep Learning from scratch" (n ° 15) Tutoriel pour débutants TensorFlow
Apprentissage profond à partir de zéro (propagation vers l'avant)
Apprentissage profond / Apprentissage profond à partir de zéro 2-Essayez de déplacer GRU
"Deep Learning from scratch" avec Haskell (inachevé)
[Windows 10] Construction de l'environnement "Deep Learning from scratch"
[Deep Learning from scratch] À propos de l'optimisation des hyper paramètres
Mémo d'auto-apprentissage "Deep Learning from scratch" (n ° 13) Essayez d'utiliser Google Colaboratory
Mémo d'auto-apprentissage «Deep Learning from scratch» (n ° 10-2) Valeur initiale du poids
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 14) Exécutez le programme du chapitre 4 sur Google Colaboratory
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 8) J'ai dessiné le graphique du chapitre 6 avec matplotlib
Chapitre 2 Implémentation de Perceptron Ne découpez que les bons points de Deeplearning à partir de zéro
GitHub du bon livre "Deep Learning from scratch"
Django memo n ° 1 à partir de zéro
Résumé Python vs Ruby "Deep Learning from scratch"
Python vs Ruby "Deep Learning from scratch" Chapitre 4 Implémentation de la fonction de perte
Python vs Ruby "Deep Learning from scratch" Chapitre 3 Implémentation d'un réseau neuronal à 3 couches
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3