Künstliche Intelligenz

Perzeptrone als kleine Computer

Wir haben Perzeptrone als eine Methode beschrieben, um Daten abzuwägen, um Entscheidungen zu treffen. Eine weitere Möglichkeit, Perzeptrons zu verwenden, ist die Berechnung elementarer logischer Funktionen, die wir gewöhnlich für die Berechnung grundlegender Funktionen wie AND, OR und NAND brauchen. Nehmen wir zum Beispiel an, wir haben ein Perzeptron mit zwei Eingängen, jeder mit einem Gewicht von -2, und einem Bias von 3. Hier ist unser Perzeptron:

Hier sehen wir, dass der Eingabewert 00 eine Ausgabe von 1 erzeugt, da (-2)·0+(-2)·0+(-2)·0+3 = 3 positiv ist und positive Werte wiederum nach unserer Definition eine 1 liefern. Ähnliche Berechnungen zeigen, dass die Eingabewerte 01 und 10 den Ausgang 1 erzeugen. Der Eingang 11 liefert jedoch den Ausgang 0, da (-2)·1+(-2)·1+(-2)·1+3 = -1 negativ ist. Und so implementiert unser Perzeptron ein NAND-Gatter!

Das NAND-Beispiel zeigt, dass wir mit Hilfe von Perzeptrons einfache logische Funktionen berechnen können. Tatsächlich können wir mit Hilfe von Perzeptronennetzen jede beliebige logische Funktion berechnen. Der Grund dafür ist, dass das NAND-Gatter universell für die Berechnung ist, d.h. wir können jede beliebige Berechnung aus NAND-Gates aufbauen. Zum Beispiel können wir NAND-Gatter verwenden, um eine Schaltung zu bauen, die zwei Bits, x1 und x2, addiert, mit Übertrag (einen Halbaddierer). Dies erfordert die Berechnung der bitweisen Summe, x1 \(\oplus\) x2, sowie ein Übertrag-Bit, das auf 1 gesetzt wird, wenn sowohl x1 als auch x2 1 sind, d.h. das Übertrags-Bit ist nur das bitweise Produkt von x1 und x2:

Um ein äquivalentes Netzwerk von Perzeptronen zu erhalten, ersetzen wir alle NAND-Gatter durch die Perzeptrone mit zwei Eingängen, jeweils mit einem Gewicht von -2, und einem Bias von 3. Hier ist das resultierende Netzwerk: (Das Netzwerk ist ein wenig verschoben, um es einfacher zu machen, die Pfeile auf dem Diagramm zu zeichnen):

Ein bemerkenswerter Aspekt dieses Netzwerks von Perzeptronen ist, dass der Output des linken Perzeptrons zweifach als Input für das unterste Perzeptron verwendet wird. Bei der Definition des Perzeptron-Modells habe ich nicht gesagt, ob diese Art von Doppelte-Ausgabe-Doppelte-Eingabe erlaubt ist. Eigentlich spielt es keine Rolle. Wenn wir so etwas nicht möchten, dann ist es möglich, die beiden Linien einfach zu einer einzigen Verbindung mit einem Gewicht von -4 statt zwei Verbindungen mit -2 Gewichten zu kombinieren. (Wenn Sie das nicht offensichtlich finden, sollten Sie aufhören und sich selbst beweisen, dass dies gleichwertig ist. Mit dieser Änderung sieht das Netzwerk wie folgt aus, mit allen unmarkierten Gewichten gleich -2, allen Bias gleich 3 und einem einzigen Gewicht von -4, wie hier:

Bisher haben wir Eingaben wie x1 und x2 als Variablen gezeichnet, die links vom Netz der Perzeptrone liegen. In der Tat ist es üblich, eine zusätzliche Schicht von Perzeptronen – die Input-Ebene (input layer) – zu zeichnen, um die Eingänge zu kodieren:

Diese Notation für Input Perzeptronen, in der wir einen Ausgang haben, aber keine Eingänge, ist eine verkürzte Schreibweise:

Es bedeutet nicht, dass es sich um ein Perzeptron ohne Eingänge handelt. Um das zu verstehen, nehmen wir an, wir hätten ein Perzeptron ohne Eingänge. Dann wäre die gewichtete Summe \(\sum_j w_j x_j\) immer Null, und so würde das Perzeptron 1 ausgeben, wenn b > 0, und 0, wenn b ≤ 0. Das heißt, das Perzeptron würde einfach einen festen Wert ausgeben, nicht den gewünschten Wert (x1, im obigen Beispiel). Besser ist es, die Eingabeperzeptrone nicht wirklich als Perzeptrone zu betrachten, sondern als spezielle Einheiten, die einfach definiert sind, um die gewünschten Werte auszugeben, x1, x2, …

Das Addierer-Beispiel zeigt, wie ein Netzwerk von Perzeptronen verwendet werden kann, um eine Schaltung mit vielen NAND-Gattern zu realisieren. Und weil NAND-Gatter universell für die Berechnung sind, folgt daraus, dass Perzeptrone auch universell für die Berechnung sind.

Die rechnerische Universalität der Perzeptrone ist beruhigend und enttäuschend zugleich. Es ist beruhigend, weil es uns sagt, dass Netzwerke von Perzeptronen genauso leistungsfähig sein können wie jedes andere Rechensystem. Aber es ist auch enttäuschend, weil es den Anschein erweckt, als seien Perzeptrone nur eine neue Art von NAND-Gatter. Das sind keine großen Neuigkeiten!

Die Situation ist jedoch besser, als dies vermuten lässt. Es stellt sich heraus, dass wir Lernalgorithmen entwickeln können, die automatisch die Gewichte und Bias eines Netzwerks künstlicher Neuronen justieren können. Diese Abstimmung erfolgt als Reaktion auf äußere Reize, ohne direkten Eingriff eines Entwicklers. Diese Lernalgorithmen ermöglichen es uns, künstliche Neuronen auf eine Art und Weise zu nutzen, die sich radikal von herkömmlichen Logikgattern unterscheidet. Anstatt explizit eine Schaltung aus NAND und anderen Gattern anzulegen, können unsere neuronalen Netze einfach lernen, Probleme zu lösen, manchmal Probleme, bei denen es extrem schwierig wäre, eine konventionelle Schaltung direkt zu entwerfen.