Perceptron: Baustein eines künstlichen neuronalen Netzwerks

Quellknoten: 1216283

Wenn Sie sich für maschinelles Lernen und KI begeistern, sind Sie bestimmt schon einmal auf das Wort Perzeptron gestoßen. Perceptron wird im ersten Kapitel vieler Deep-Learning-Kurse gelehrt. Was genau ist es also? Was ist die Inspiration dahinter? Wie genau löst es das Klassifizierungsproblem? In diesem Artikel werden wir mit der biologischen Inspiration hinter dem Perzeptron beginnen, uns dann mit seinen mathematischen technischen Details befassen und schließlich mithilfe einer Perzeptroneinheit einen binären Klassifikator von Grund auf erstellen.

Biologische Inspiration neuronaler Netze

Ein Neuron (Nervenzelle) ist der Grundbaustein des Nervensystems. Ein menschliches Gehirn besteht aus Milliarden von Neuronen, die miteinander verbunden sind. Sie sind dafür verantwortlich, Signale vom Gehirn zu empfangen und zu senden. Wie im folgenden Diagramm zu sehen ist, besteht ein typisches Neuron aus den drei Hauptteilen – Dendriten, einem Axon und einem Zellkörper oder Soma. Dendriten sind baumartige Äste, die vom Zellkörper ausgehen. Sie erhalten Informationen von den anderen Neuronen. Soma ist der Kern eines Neurons. Es ist für die Verarbeitung der von Dendriten empfangenen Informationen verantwortlich. Axon ist wie ein Kabel, durch das die Neuronen die Informationen senden. Gegen Ende teilt sich das Axon in viele Äste auf, die über ihre Dendriten Verbindungen zu den anderen Neuronen herstellen. Der Die Verbindung zwischen dem Axon und den Dendriten anderer Neuronen wird als Synapse bezeichnet.

1: Biologisches Neuron versus künstliches neuronales Netzwerk

Bildquelle: Willems, K. (2017, 2. Mai). Keras-Tutorial: Deep Learning in Python.

Da ANN von der Funktionsweise des Gehirns inspiriert ist, wollen wir sehen, wie das Gehirn funktioniert. Das Gehirn besteht aus einem Netzwerk von Milliarden Neuronen. Sie kommunizieren mittels elektrischer und chemischer Signale über eine Synapse, in der die Informationen von einem Neuron an andere Neuronen übertragen werden. Der Übertragungsprozess beinhaltet einen elektrischen Impuls, der als „Aktionspotential“ bezeichnet wird. Damit die Informationen übertragen werden können, müssen die Eingangssignale (Impuls) stark genug sein, um eine bestimmte Schwellenwertbarriere zu überschreiten. Dann wird nur ein Neuron aktiviert und sendet das Signal weiter (Ausgang).

Inspiriert von der biologischen Funktionsweise eines Neurons entwickelte der amerikanische Wissenschaftler Franck Rosenblatt 1957 am Cornell Aeronautical Laboratory das Konzept des Perzeptrons.

  • Ein Neuron empfängt Informationen von anderen Neuronen in Form von elektrischen Impulsen unterschiedlicher Stärke.
  • Das Neuron integriert alle Impulse, die es von den anderen Neuronen erhält.
  • Wenn die resultierende Summe größer als ein bestimmter Schwellenwert ist, „feuert“ das Neuron und löst ein Aktionspotential aus, das an die anderen angeschlossenen Neuronen übertragen wird.

Hauptbestandteile von Perceptron

Rosenblatts Perzeptron ist im Grunde ein binärer Klassifikator. Das Perzeptron besteht aus 3 Hauptteilen:

  • Eingabeknoten oder Eingabeebene: Die Eingabeebene übernimmt die Ausgangsdaten zur weiteren Verarbeitung in das System. Jedem Eingabeknoten ist ein numerischer Wert zugeordnet. Es kann jeden realen Wert annehmen.
  • Gewichtungen und Voreingenommenheit: Gewichtsparameter stellen die Stärke der Verbindung zwischen Einheiten dar. Je höher das Gewicht, desto stärker ist der Einfluss des zugehörigen Eingabeneurons auf die Entscheidung über die Ausgabe. Bias spielt die gleiche Rolle wie der Achsenabschnitt in einer linearen Gleichung.
  • Aktivierungsfunktion: Die Aktivierungsfunktion bestimmt, ob das Neuron feuert oder nicht. Im einfachsten Fall ist die Aktivierungsfunktion eine Schrittfunktion, je nach Szenario können jedoch unterschiedliche Aktivierungsfunktionen verwendet werden.

Wir werden im folgenden Abschnitt mehr darüber erfahren.

Funktionsweise eines Perzeptrons

Im ersten Schritt werden alle Eingabewerte mit ihren jeweiligen Gewichten multipliziert und addiert. Das erhaltene Ergebnis wird als gewichtete Summe bezeichnet ∑wi*xi, oder anders ausgedrückt,  x1*w1 + x2*w2 +…wn*xn. Diese Summe ergibt eine angemessene Darstellung der Eingaben basierend auf ihrer Bedeutung. Zusätzlich ein Bias-Begriff b Zu dieser Summe wird ∑wi*xi + addiert b. Bias dient als weiterer Modellparameter (zusätzlich zu den Gewichtungen), der angepasst werden kann, um die Leistung des Modells zu verbessern.

Im zweiten Schritt erfolgt eine Aktivierungsfunktion f wird auf die oben genannte Summe angewendet ∑wi*xi + b, um die Ausgabe Y = zu erhalten f(∑wi*xi + b). Abhängig vom Szenario und der verwendeten Aktivierungsfunktion kann die Output entweder binär {1, 0} oder ein kontinuierlicher Wert. 

Funktionsweise eines Perzeptrons

(Oft werden diese beiden Schritte in mehrschichtigen Perzeptronen als ein einziger Schritt dargestellt. Hier habe ich sie zum besseren Verständnis als zwei verschiedene Schritte dargestellt.)

Aktivierungsfunktionen

Ein biologisches Neuron feuert nur, wenn ein bestimmter Schwellenwert überschritten wird. Ebenso wird das künstliche Neuron nur dann ausgelöst, wenn die Summe der Eingaben (gewichtete Summe) einen bestimmten Schwellenwert überschreitet, sagen wir 0. Intuitiv können wir uns einen regelbasierten Ansatz wie diesen vorstellen:

Wenn ∑wi*xi + b > 0:
Ausgabe = 1
anders:
Ausgabe = 0

Sein Diagramm sieht etwa so aus:

Aktivierungsfunktionen

Dabei handelt es sich tatsächlich um die Aktivierungsfunktion „Unit Step (Threshold)“, die ursprünglich von Rosenblatt verwendet wurde. Aber wie Sie sehen können, ist diese Funktion bei 0 diskontinuierlich und verursacht daher Probleme bei mathematischen Berechnungen. Eine glattere Version der obigen Funktion ist die Sigmoidfunktion. Es gibt einen Wert zwischen 0 und 1 aus. Ein weiterer Wert ist der hyperbolische Tangens (tanh)-Funktion, die eine Ausgabe zwischen -1 und 1 erzeugt. Sowohl Sigmoid- als auch Tanh-Funktionen leiden unter Problemen mit verschwindenden Gradienten. Heutzutage sind ReLU und Leaky ReLU die am häufigsten verwendeten Aktivierungsfunktionen. Sie sind über tiefe Netzwerke vergleichsweise stabil.

Perzeptron als binärer Klassifikator

Bisher haben wir die biologische Inspiration und die Mathematik des Perzeptrons gesehen. In diesem Abschnitt werden wir sehen, wie ein Perzeptron ein lineares Klassifizierungsproblem löst.

Einige Bibliotheken importieren –

aus sklearn.datasets make_blobs importieren
matplotlib.pyplot als plt importieren
numpy als np importieren
%matplotlib inline

Generieren eines Dummy-Datensatzes mit make_blobs von scikit learn bereitgestellte Funktionalität –

# Datensatz generieren
X, Y = make_blobs(n_features = 2, centres = 2, n_samples = 1000, random_state = 12)
# Datensatz visualisieren
plt.figure(figsize = (6, 6))
plt.scatter(X[:, 0], X[:, 1], c = Y)
plt.title('Ground Truth', Schriftgröße = 18)
plt.show()
Perzeptron als binärer Klassifikator

Nehmen wir an, die blauen Punkte sind Einsen und die grünen Punkte sind Nullen. Mithilfe der Perzeptronlogik können wir eine Entscheidungsgrenze erstellen(Hyperebene) zur Klassifizierung, die verschiedene Datenpunkte im Diagramm trennt.

Bevor wir fortfahren, fügen wir dem Eingabevektor einen Bias-Term (Einsen) hinzu –

# Fügen Sie dem Eingabevektor eine Verzerrung hinzu
X_bias = np.ones([X.shape[0], 3])
X_bias[:, 1:3] = X

Der Datensatz wird in etwa so aussehen

Datensatz

Hier stellt jede Zeile des obigen Datensatzes den Eingabevektor (einen Datenpunkt) dar. Um eine Entscheidungsgrenze zu erstellen, müssen wir die entsprechenden Gewichte herausfinden. Die Gewichte werden aus dem Training anhand der folgenden Regel „gelernt“:

w = w + (erwartet – vorhergesagt) * x

Perzeptron w

Dies bedeutet, dass das geschätzte Ergebnis von der Grundwahrheit subtrahiert und dann mit dem aktuellen Eingabevektor multipliziert und alte Gewichte hinzugefügt werden, um den neuen Wert der Gewichte zu erhalten. Wenn unsere Ausgabe mit der tatsächlichen Klasse übereinstimmt, ändern sich die Gewichte nicht. Wenn unsere Schätzung jedoch von der Grundwahrheit abweicht, erhöhen oder verringern sich die Gewichte entsprechend. Auf diese Weise werden die Gewichte in jeder Iteration schrittweise angepasst.

Wir beginnen damit, dem Gewichtsvektor beliebige Werte zuzuweisen, und passen sie dann in jeder Iteration schrittweise unter Verwendung des Fehlers und der vorliegenden Daten an –

# Gewichte mit Zufallswerten initialisieren
w = np.random.rand(3, 1)
drucken(w)

Ausgang:

[[0.37547448]
[0.00239401] [0.18640939]]

Definieren Sie die Aktivierungsfunktion des Perzeptrons –

def activate_func(z): wenn z >= 1: 1 zurückgeben, sonst: 0 zurückgeben

Als nächstes wenden wir die Perzeptron-Lernregel an –

for _ in range(100): for i in range(X_bias.shape[0]): y = activate_func(w.transpose().dot(X_bias[i, :])) # Gewichte aktualisieren w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Es ist nicht garantiert, dass die Gewichte in einem Durchgang konvergieren, daher geben wir alle Trainingsdaten 100 Mal in den Perzeptron-Algorithmus ein und wenden dabei ständig die Lernregel an, sodass wir es schließlich schaffen, die optimalen Gewichte zu erhalten.

Nachdem wir nun die optimalen Gewichte erhalten haben, haben wir Sagen Sie die Klasse für jeden Datenpunkt mit Y = voraus f(∑wi*xi + b) oder Y = wT.x in Vektorform.

# Vorhersage der Klasse der Datenpunkte
result_class = [activation_func(w.transpose().dot(x)) für x in X_bias]

Visualisieren Sie die Entscheidungsgrenze und die vorhergesagten Klassenbezeichnungen –

# in Einheitsvektor umwandeln
w = w/np.sqrt(w.transpose().dot(w))
# Ergebnisse visualisieren
plt.figure(figsize = (6, 6))
plt.scatter(X[:, 0], X[:, 1], c = result_class)
plt.plot([-10, -1], hyperplane([-10, -1], w), lw = 3, c = 'red')
plt.title('Perceptron-Klassifizierung mit Entscheidungsgrenze')
plt.show()
Perzeptronklassifizierung mit Entscheidungsgrenze

Sie können das Ground-Truth-Bild mit dem vorhergesagten Ergebnisbild vergleichen und einige Punkte sehen, die falsch klassifiziert sind. Wenn wir die Genauigkeit berechnen, liegt sie bei etwa 98 % (ich überlasse dies den Lesern als Übung).

Wie Sie sehen, waren unsere Originaldaten hier ziemlich getrennt, sodass wir eine so gute Genauigkeit erzielen konnten. Dies ist jedoch bei realen Daten nicht der Fall. Mit einem einzelnen Perzeptron können wir nur eine lineare Entscheidungsgrenze konstruieren. Wenn also die Daten gemischt werden, wird der Perzeptron-Algorithmus eine schlechte Leistung erbringen. Dies ist eine der Einschränkungen des Einzel-Perzeptron-Modells.

Endnoten

Wir begannen damit, die biologische Inspiration hinter Rosenblatts Perzeptron zu verstehen. Dann gingen wir zur Mathematik des Perzeptrons und der Aktivierungsfunktionen über. Schließlich haben wir anhand eines Spielzeugdatensatzes gesehen, wie Perceptron eine grundlegende Klassifizierung durchführen kann, indem es eine lineare Entscheidungsgrenze erstellt, die die zu verschiedenen Klassen gehörenden Datenpunkte trennt.

Über den Autor

Pratik Nabriya ist ein erfahrener Datenwissenschaftler, der derzeit bei einem Analyse- und KI-Unternehmen mit Sitz in Noida beschäftigt ist. Er beherrscht maschinelles Lernen, Deep Learning, NLP, Zeitreihenanalyse, Datenmanipulation, SQL und Python und ist mit der Arbeit in einer Cloud-Umgebung vertraut. In seiner Freizeit nimmt er gerne an Hackathons teil und schreibt technische Artikel.

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von Analytics Vidhya und werden nach Ermessen des Autors verwendet.

Quelle: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Zeitstempel:

Mehr von Analytics-Vidhya