Neuronale Netze für Kinder: Erklären Sie so einfach wie möglich

Hallo alle zusammen. Es ist kein Geheimnis, dass fast alle Artikel in unserem Blog veröffentlicht werden, um diesen oder jenen Kurs zu starten. Der nächste Artikel könnte zeitlich auf den Start des Kurses "Neuronale Netze in Python" abgestimmt sein, aber angesichts der Einfachheit des Materials möchte ich ihn nicht mit dem Kurs verknüpfen, sondern ihn einfach als Bonusmaterial veröffentlichen, als kleines Tutorial für die Kleinsten. Wenn ich Fragen vorhersage, möchte ich sofort sagen, dass dieser Artikel nicht mit dem Kurs zusammenhängt und nicht vom Lehrer geschrieben wurde. Wenn Sie mehr über den Kurs erfahren möchten, können Sie dies auf der entsprechenden Seite tun .




Hallo alle zusammen! Heute möchte ich darüber sprechen, wie die neuronalen Netze angeordnet sind, aber es ist so einfach, dass selbst Anfänger, die nur die Grundlagen von Python beherrschen, verstehen können.

Was sind neuronale Netze und künstliche Intelligenz im Allgemeinen?


In der Philosophie der KI gibt es zwei Arten künstlicher Intelligenz - starke und schwache. Die Theorie der starken künstlichen Intelligenz legt nahe, dass Computer die Fähigkeit erlangen können, als separate Person zu denken und sich ihrer selbst bewusst zu werden (so etwas wie das, was in Detroit Become Human passiert ist). Die Theorie der schwachen künstlichen Intelligenz legt nahe, dass ein solcher Intellekt nicht oder nur sehr schwer zu konstruieren ist und dass die Wissenschaft neuronale Netze schaffen kann, die die Arbeit neuronaler Netze lebender Wesen nur teilweise wiederholen. Aber Philosophie gilt einfach nicht für die Wissenschaft, weil dort nichts bewiesen werden kann, also werden wir uns nicht darauf konzentrieren. Schwache neuronale Netze nehmen heute eine beherrschende Stellung in der Datenwissenschaft ein und sind weit verbreitet: bei der Erkennung visueller Bilder, beim intelligenten Kauf von Waren,Sogar das OBS-System des Fahrzeugs - daher ist es mehr als relevant, mit dem Erlernen der KI zu beginnen.

Was sind neuronale Netze?


Neuronale Netze sind mathematische Modelle für den Betrieb realer neuronaler Netze von Lebewesen. Es reicht aus, das mathematische Modell einfach in ein Programm zu übertragen (und aus diesem Grund wird Python bei der Programmierung neuronaler Netze so häufig verwendet, dass Lösungen für mathematische Probleme programmiert werden können. Tatsächlich können neuronale Netze in fast jeder Programmiersprache geschrieben werden, die jede Art von Mathematik unterstützt Sogar auf Scratch, das ursprünglich entwickelt wurde, um die Grundlagen des Programmierens für jüngere Schüler zu vermitteln (siehe hier ).

Grundbegriffe neuronaler Netze


Es gibt viele Algorithmen für den Betrieb neuronaler Netze (und jetzt wird die mathematische Seite dieses Problems aktiv entwickelt). Die klassische Lösung für Anfänger ist die Backpropagation-Methode, eine Gradientenberechnungsmethode, mit der die Gewichte eines mehrschichtigen Perzeptrons aktualisiert werden. In der Form, in der es normalerweise von Anfängern untersucht wird (mit einer Sigmoid-Aktivierungsfunktion), ist das neuronale Netzwerk ziemlich langsam, aber relativ genau.

Das Programm, das wir schreiben werden, heißt eine große Strecke des neuronalen Netzwerks.

Bevor wir mit der Beschreibung fortfahren, wollen wir diskutieren, was neuronale Netze im Allgemeinen tun.

Was machen neuronale Netze, wenn sie vereinfacht werden?


Wenn wir das Konzept der neuronalen Netze ein wenig vereinfachen, kann ein neuronales Netz, das nach dem Prinzip des Lernens mit einem Lehrer unterrichtet wird, nach dem Training nach dem Prinzip der „Reizreaktion“ unter Angabe der richtigen Antworten mit Fremden zusammenarbeitenDaten. Mit anderen Worten, wenn Sie dem eingegebenen neuronalen Netzwerk einen bestimmten Satz von Wörtern vorgeschlagen haben (z. B. einen Satz von Bewertungen zur Filmsuche, positiv und negativ, in einem beliebigen Format, mindestens txt, mindestens json, ist die Frage nur im Programm zur Verarbeitung dieser Daten enthalten). Um ein neuronales Netzwerk erfolgreich zu erstellen, benötigen Sie zwei Datensätze: einen Testsatz, mit dem Sie die Leistung des erstellten neuronalen Netzwerks bewerten können, und einen Trainingssatz, in dem die Daten für positiv / negativ markiert sind (und dies wirft das Problem auf, Big Data zu klassifizieren, weil es lang ist und trostlose Besetzung). Nach dem Training des neuronalen Netzwerks (das abhängig von der Dimension der Daten, ihrer Verarbeitung und meistens den wichtigsten verwendeten Algorithmen viel Zeit und Computerressourcen in Anspruch nehmen kann) kann es versuchenUm mit einiger Genauigkeit vorherzusagen, kam eine positive oder negative Bewertung zu ihrem Beitrag. Neuronale Netze (sowie eine reale Person) weisen jedoch einen bestimmten Prozentsatz an Fehlern auf. Die Aufgabe der Optimierung besteht darin, sie minimal zu halten, aber die Frage der Bewertung der Qualität neuronaler Netze wird wahrscheinlich niemals irgendwohin führen. Zum Beispiel geben sie Ihnen ein Foto von einem Hot Dog und Sie sagen sicher, dass es ein Hot Dog ist. Aber was ist, wenn das Foto verschwommen ist? Schwarz und weiß? Bei schlechten Sichtverhältnissen gefilmt? Hier können Sie bereits mit einer gewissen Wahrscheinlichkeit bestätigen, auch wenn Sie in Ihrem Leben viele Hot Dogs zubereitet oder gegessen haben.



Erste Schritte mit der Programmierung unseres neuronalen Spielzeugnetzwerks


OK los geht's. Es werden keine Test- und Trainingsdaten in unserem neuronalen Spielzeugnetzwerk vorhanden sein. Unser neuronales Spielzeugnetzwerk wird versuchen, das Verhältnis des Verhältnisses zwischen Daten zu ermitteln.

Halt. Und worum geht es? Das gleiche findet sich in einem einfachen mathematischen Ausdruck.
Ohne Zweifel. Ich habe diesen Ausdruck jetzt jedoch verwendet, um den Prozess des Lernens eines neuronalen Netzwerks zu zeigen. Angenommen, wir stehen vor der Aufgabe, herauszufinden, wie hoch der Umrechnungsfaktor zwischen Zoll und Zentimeter ist. Wie viele Zentimeter braucht ein Zoll? Für eine Person, die mindestens die fünfte Klasse (oder noch früher) in Mathematik kennt, ist es nicht schwer, sich daran zu erinnern, welcher Übersetzungskoeffizient 2,54 beträgt.

Aber jetzt werden wir dies für eine Weile vergessen und uns vorstellen, dass wir einen einfachen Algorithmus erstellen müssen, der diesen Parameter universell berechnet. Der Haken ist jedoch auch, dass neuronale Netze keine Konstanten mit vorgefertigten Koeffizientenwerten sind, da sie sonst kein "Live" -Training hätten.

Insgesamt sind wir in der Position eines Kindes, das sich gerade vor einen Satz Würfel gesetzt hat und sie zum ersten Mal selbst in die Hand nehmen und den ersten Turm in seinem Leben bauen wird. Er weiß nur ungefähr, wie die Physik von Objekten funktioniert, er weiß genau wie wir, dass ein bestimmtes spezifisches Verhältnis existiert (in seinem Fall ist es die Schwerkraft). Was wird das Kind also tun?

Er wird zufällig einige Würfel nehmen und legen. Auf die gleiche Weise können wir nur zufällig erraten, welchen Koeffizienten wir haben werden (und echte erwachsene neuronale Netze tun dies auch, normalerweise nur geleitet von der Erzeugung von Zahlen in einer Normalverteilung).
Nehmen wir zufällig an, dass der Kopplungskoeffizient von Zoll und Zentimetern (nennen wir es Gewicht , wie in neuronalen Netzen für Erwachsene) beispielsweise 2,4 beträgt . Dann erhalten wir den kompliziertesten mathematischen Ausdruck:

1 * 2.4 = 2.4

Großartig, haben wir fast erraten, und wir haben ein Ergebnis. Aber es ist falsch und was für den Lernprozess normal ist, wir haben einen Fehler. Wie im Nervensystem mit Feedback müssen wir irgendwie auf den Fehler reagieren. Aber zuerst müssen Sie seine Größe verstehen. Wie ich bereits sagte, werden beim Training neuronaler Netze mit einem Lehrer die Daten zuerst mit markierten Daten ausgeführt und erst dann für ähnliche, aber nicht markierte Daten an die Klassifizierung gesendet. Wir wissen auch, was wir das richtige Ergebnis bekommen sollen, dementsprechend kann ich den Fehler berechnen:

t_target = 2.54
t_now = 2.40
e = t_target - t_now
//  ,   0.14

Jetzt wissen wir, wie falsch. Aber was soll man machen? Natürlich sollte unser Spielzeug-Neuronales Netzwerk die Daten so niedrig wie möglich lesen. Und dies ist ein weiteres Unterwassermerkmal neuronaler Netze, das sich manifestiert. Meistens haben sie während des Trainings einen Verlustfaktor. Der als Optimierung bezeichnete Teil von Data Science befasst sich mit der Minimierung des Fehlers .

Aber jetzt geht es nicht darum. Ohne Zweifel müssen wir den Kopplungskoeffizienten schrittweise ändern, aber um was? Natürlich müssen Sie nicht zu groß sein, sonst wird unser Kommunikationskoeffizient ungenau und nicht zu klein, sonst müssen wir das neuronale Netzwerk für einige Zeit trainieren. Es gibt keine 100% korrekte Option, um diesen Schritt zu finden. Meistens werden diese Parameter in einem realen neuronalen Netzwerk intuitiver ausgewählt als auf der Grundlage einer Formel oder eines Algorithmus (obwohl dies auch möglich ist). Jetzt können wir den Wert unseres Schritts zufällig auswählen (in der Sprache der neuronalen Netze heißt unser Schritt learning_rate). Der Wert 0,05 funktioniert beispielsweise optimal genug. Darüber hinaus müssen Sie festlegen, wie oft die Einrückung bei der Lernrate erfolgen soll.. Die Anzahl dieser Einrückungen wird Epochen genannt, wie in erwachsenen neuronalen Netzen. Mit all diesem Wissen können Sie nun versuchen, ein kleines Python-Programm zu schreiben, mit dem unser neuronales Spielzeug-Netzwerkprogramm ausgeführt wird.

import random

#    Python  random,        

inches = 40  #    40    101, 6 
centimetre = 101.6

#  ,        , learning rate  

def kid_neuro(epoch, lr, accur):
    W_coef = random.uniform(0, 2)  #     
    print("    : ", W_coef)
    for i in range(epoch):  #    
        Error = centimetre - (inches * W_coef)
        print("  ", Error)  #      
        if Error > 0:
            W_coef += lr  #    ,    

        if Error < 0:
            W_coef -= lr  #   ,    

        if Error < accur:
            print("  ", W_coef)
            return  #  ,      

epoch = int(input("epoch: "))  #      ""
lr = float(input("enter learning rate: "))  #   
accur = float(input("enter accurancy:  "))  #   ,     ,         

kid_neuro(epoch, lr, accur)  #    -

Ich überlasse es dem Leser, zu versuchen, das neuronale Netzwerk dieses Kindes mit verschiedenen Parametern selbst zu betreiben. Es stellt sich ziemlich gut bei Epoche = 100-, Lernrate = 0,01, Genauigkeit = 0,1 heraus.

Trotz der scheinbaren Nutzlosigkeit dieses Programms haben wir mit Ihnen die Arbeit und die Grundkonzepte neuronaler Netze besprochen, die auch beim Aufbau realer großer neuronaler Netze verwendet werden, beispielsweise im Backprogation-Algorithmus.

Kurz gesagt, diese Grundkonzepte:

  • W — . - , . — , ,
  • lr — learning rate, .
  • epoch ,

In der Praxis können Sie versuchen, das neuronale Netz Ihrer eigenen Kinder zu schreiben, das beispielsweise Kilometer in Meilen übersetzt. Mit dem in diesem Artikel gewonnenen Wissen können Sie beispielsweise problemlos hierher kommen und bereits versuchen, das neuronale Netzwerk sinnvoller zu starten.

Einige nützliche Links, zu denen Sie gehen können, wenn Sie weiter über neuronale Netze lernen möchten:


All Articles