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.
_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.
_P.23 Voir "Fig. 2-2 Table de vérité des portes AND" _
_P.24 Voir «Figure 2-3 Tableau de vérité de la porte NAND» _
--NAND = Not AND = AND Comportement opposé à la porte
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
--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
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
--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)
--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).
--XOR peut être exprimé par "superposition".
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 $.
_P.32 Figure 2-11_Vérifiez la table de vérité.
_P.33 Figure 2-12 Table de vérité 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
--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