[PYTHON] Führen Sie logische Operationen mit Perceptron aus

Einführung

Das Ziel ist zu verstehen, was Perceptron ist.

Was ist Perceptron?

Es werden mehrere Signale als Ein- und Ausgänge verwendet. Das Ausgangssignal nimmt einen Binärwert von 0 oder 1 an.

2020-01-24 (3).png

x1 und x2 sind Eingangssignale, y sind Ausgangssignale, w1 und w2 sind Gewichte. ○ wird als Knoten oder Neuron bezeichnet. Jedes Eingangssignal wird mit seinem eigenen Gewicht multipliziert und an das Neuron gesendet. Das Neuron gibt die Summe der gesendeten Signale (x1w1 + x2w2) aus. Zu diesem Zeitpunkt ein bestimmter Schwellenwert (Grenzwert). Wenn es überschreitet, wird 1 ausgegeben, und wenn es unter dem Schwellenwert liegt, wird 0 ausgegeben.

Ein vereinfachtes Modell, bei dem Eingang und Ausgang direkt miteinander verbunden sind, wird als einfaches Perzeptron bezeichnet, während ein Modell mit einer Schicht (Zwischenschicht, verborgene Schicht) zwischen Eingang und Ausgang als mehrschichtiges Perzeptron bezeichnet wird.

Ein Ausdruck, der das Funktionsprinzip von Perceptron ausdrückt

y = \left\{
\begin{array}{ll}
0 & (x_1 w_1 + x_2 w_2 \leq \phi) \\
1 & (x_1 w_1 + x_2 w_2 \gt \phi)
\end{array}
\right.

x: Eingangssignal, w: Gewicht, $ \ phi $: Schwelle

Da der Schwellenwert schwer zu handhaben ist, fügen Sie einen negativen Wert hinzu und übertragen Sie ihn auf die linke Seite. Der übertragene Wert ist $ b $ (Vorspannung). Die Vorspannung bestimmt die Leichtigkeit und Schwierigkeit der Zündung. Die Vorspannung ist groß → sie entzündet sich. Einfach (die Gesamtsumme der Eingangssignale überschreitet tendenziell 0).

y = \left\{
\begin{array}{ll}
0 & (b + x_1 w_1 + x_2 w_2 \leq 0) \\
1 & (b + x_1 w_1 + x_2 w_2 \gt 0)
\end{array}
\right.
2020-01-24 (4).png

Passen Sie die Parameter (Vorspannung und Gewicht) an die Brennbedingungen an.

UND-Betrieb

import numpy as np

def AND(x1, x2):
    x1_x2 = np.array([x1, x2])
    b = -0.8
    w1_w2 = np.array([0.5, 0.5])
    tmp = b + np.sum(x1_x2 * w1_w2)
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

Passen Sie die Parameter an die Bedingungen an. Ersetzen Sie ($ b $, $ w_1 $, $ w_2 $) durch einen geeigneten Wert. Im obigen Code ist es (-0,8, 0,5, 0,5), aber Sie können es beispielsweise mit (-0,3, 0,2, 0,2) reproduzieren.

Die NAND-Operation invertiert das Vorzeichen der Vorspannung und des Gewichts der UND-Operation.

ODER-Betrieb

import numpy as np

def OR(x1, x2):
    x1_x2 = np.array([x1, x2])
    b = -0.3 #Veränderung
    w1_w2 = np.array([0.5, 0.5])
    tmp = b + np.sum(x1_x2 * w1_w2)
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

Die Tendenz $ b $ hat sich geändert.

XOR-Betrieb

import numpy as np

#NAND-Betrieb
def NAND(x1, x2):
    x1_x2 = np.array([x1, x2])
    b = 0.8
    w1_w2 = np.array([-0.5, -0.5])
    tmp = b + np.sum(x1_x2 * w1_w2)
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

#ODER-Betrieb
def OR(x1, x2):
    x1_x2 = np.array([x1, x2])
    b = -0.3
    w1_w2 = np.array([0.5, 0.5])
    tmp = b + np.sum(x1_x2 * w1_w2)
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

#UND-Betrieb
def AND(x1, x2):
    x1_x2 = np.array([x1, x2])
    b = -0.8
    w1_w2 = np.array([0.5, 0.5])
    tmp = b + np.sum(x1_x2 * w1_w2)
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

#XOR-Betrieb
def XOR(x1, x2):
    nand_ = NAND(x1, x2)
    or_ = OR(x1, x2)
    xor_ = AND(nand_, or_)
    return xor_

Da die XOR-Operation nicht durch ein Modell (einfaches Perzeptron) ausgedrückt werden kann, das die Eingabe und Ausgabe direkt verbindet, wird eine Schicht in das Innere gebissen. Es handelt sich um ein mehrschichtiges Perzeptron. Dieses Mal wird das Ergebnis der ODER-Verknüpfung mit NAND UND-verknüpft. Die Tatsache, dass es nicht durch ein einfaches Perzeptron dargestellt werden kann, bedeutet, dass es nicht linear getrennt werden kann. Bitte zeichnen Sie ein Diagramm und überprüfen Sie es.

schließlich

Ist es so ...

Recommended Posts

Führen Sie logische Operationen mit Perceptron aus
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Skripterstellung mit Paver-File-Vorgängen
Dateivorgang mit open - "../"
Führen Sie mit PyTorch eine geschichtete Aufteilung durch
Führen Sie eine minimale quadratische Anpassung mit numpy durch.
Scala-ähnliche Erfassungsoperation in Python
ROS Lecture 113 Führen Sie Aufgaben mit smach aus
Mehrschichtiges Perzeptron mit Kette: Funktionsanpassung
[Chainer] Lernen von XOR mit mehrschichtigem Perzeptron
Perceptron-Lernexperiment mit Python
Automatisierung von Remote-Operationen mit Fabric