Neuronale Netze für Anfänger - ein neuronales Netz für Dummies. Wie ein neuronales Netzwerk funktioniert: Algorithmen, Training, Aktivierung und Verlustfunktionen Wie man ein neuronales Netzwerk für ein Spiel erstellt

In letzter Zeit sprechen sie immer öfter von den sogenannten neuronalen Netzen, sagen sie, bald werden sie aktiv in der Robotik und im Maschinenbau und in vielen anderen Bereichen der menschlichen Tätigkeit eingesetzt, aber die Algorithmen von Suchmaschinen, die gleichen Google, fangen schon langsam an, sie zu benutzen. Was sind diese neuronalen Netze, wie funktionieren sie, was sind ihre Anwendungen und wie sie für uns nützlich sein können, lesen Sie weiter.

Was sind neuronale Netze

Neuronale Netze sind eines der Gebiete der wissenschaftlichen Forschung auf dem Gebiet der Schaffung künstlicher Intelligenz (KI), die auf dem Wunsch basiert, das menschliche Nervensystem zu imitieren. Einschließlich ihrer (Nervensystem-)Fähigkeit, Fehler zu korrigieren und selbst zu lernen. All dies, obwohl etwas grob, sollte es uns ermöglichen, die Arbeit des menschlichen Gehirns zu simulieren.

Biologische neuronale Netze

Aber diese Definition im obigen Absatz ist rein technisch, aber in der Sprache der Biologie ist das neuronale Netzwerk das menschliche Nervensystem, die Gruppe von Neuronen in unserem Gehirn, dank derer wir denken, bestimmte Entscheidungen treffen und die Welt um uns herum wahrnehmen uns.

Ein biologisches Neuron ist eine spezielle Zelle, die aus einem Kern, einem Körper und Prozessen besteht und darüber hinaus in enger Beziehung zu Tausenden anderer Neuronen steht. Durch diese Verbindung werden ständig elektrochemische Impulse übertragen, die das gesamte neuronale Netzwerk in einen Aufregungszustand versetzen oder umgekehrt. Zum Beispiel wird ein angenehmes und gleichzeitig aufregendes Ereignis (einen geliebten Menschen treffen, einen Wettbewerb gewinnen usw.) einen elektrochemischen Impuls im neuronalen Netzwerk in unserem Kopf erzeugen, der zu seiner Erregung führt. Infolgedessen überträgt das neuronale Netzwerk in unserem Gehirn seine Erregung auf andere Organe unseres Körpers und führt zu einer erhöhten Herzfrequenz, häufigerem Blinzeln der Augen usw.

Hier im Bild ist ein stark vereinfachtes Modell des biologischen neuronalen Netzwerks des Gehirns. Wir sehen, dass ein Neuron aus einem Zellkörper und einem Zellkern besteht, der Zellkörper wiederum hat viele verzweigte Fasern, die Dendriten genannt werden. Lange Dendriten werden Axone genannt und haben eine viel größere Länge als in dieser Abbildung gezeigt. Durch Axone erfolgt die Kommunikation zwischen Neuronen, dank ihnen funktioniert das biologische neuronale Netzwerk in unseren Köpfen.

Geschichte der neuronalen Netze

Wie ist die Geschichte der Entwicklung neuronaler Netze in Wissenschaft und Technik? Sie entstand mit dem Aufkommen der ersten Computer oder Computer (elektronische Computer), wie sie damals genannt wurden. So entwickelte Ende der 1940er Jahre ein gewisser Donald Hebb einen neuronalen Netzwerkmechanismus, der die Regeln für das Unterrichten von Computern, diesen „Protocomputern“, festlegte.

Die weitere Chronologie der Ereignisse war wie folgt:

  • 1954 erfolgt der erste praktische Einsatz neuronaler Netze beim Betrieb von Computern.
  • 1958 entwickelte Frank Rosenblatt einen Algorithmus zur Mustererkennung und eine mathematische Annotation dafür.
  • In den 1960er Jahren ließ das Interesse an der Entwicklung neuronaler Netze aufgrund der damals schwachen Rechenleistung etwas nach.
  • Und es wurde bereits in den 1980er Jahren wiederbelebt, in dieser Zeit tauchte ein System mit einem Feedback-Mechanismus auf, selbstlernende Algorithmen wurden entwickelt.
  • Bis zum Jahr 2000 war die Leistung von Computern so stark gewachsen, dass sie die kühnsten Träume von Wissenschaftlern der Vergangenheit verwirklichen konnten. Zu dieser Zeit erschienen Programme für Spracherkennung, Computer Vision und vieles mehr.

Künstliche neurale Netzwerke

Künstliche neuronale Netze werden allgemein als Computersysteme verstanden, die die Fähigkeit haben, selbst zu lernen und ihre Leistung schrittweise zu steigern. Die Hauptelemente der neuronalen Netzwerkstruktur sind:

  • Künstliche Neuronen, die elementare miteinander verbundene Einheiten sind.
  • ist eine Verbindung, die zum Senden und Empfangen von Informationen zwischen Neuronen verwendet wird.
  • Ein Signal ist die eigentlich zu übertragende Information.

Anwendung neuronaler Netze

Der Anwendungsbereich künstlicher neuronaler Netze erweitert sich von Jahr zu Jahr, heute werden sie in folgenden Bereichen eingesetzt:

  • Maschinelles Lernen ist eine Art von künstlicher Intelligenz. Es basiert auf KI-Training am Beispiel von Millionen gleichartiger Aufgaben. Heutzutage wird maschinelles Lernen aktiv von den Suchmaschinen Google, Yandex, Bing, Baidu implementiert. Basierend auf den Millionen von Suchanfragen, die wir alle täglich bei Google eingeben, lernen die Algorithmen, uns die relevantesten Ergebnisse anzuzeigen, damit wir genau das finden, wonach wir suchen.
  • In der Robotik werden neuronale Netze bei der Entwicklung zahlreicher Algorithmen für das eiserne „Gehirn“ von Robotern eingesetzt.
  • Computersystemarchitekten verwenden neuronale Netze, um das Problem des parallelen Rechnens zu lösen.
  • Mit Hilfe neuronaler Netze können Mathematiker verschiedene komplexe mathematische Probleme lösen.

Arten von neuronalen Netzen

Im Allgemeinen werden verschiedene Arten und Arten von neuronalen Netzen für unterschiedliche Aufgaben verwendet, zwischen denen wir unterscheiden können:

  • Convolutional Neural Networks,
  • wiederkehrende neuronale Netze,
  • Neurales Hopfield-Netzwerk.

Faltungsneuronale Netze

Faltungsnetze sind eine der beliebtesten Arten von künstlichen neuronalen Netzen. So bewiesen sie ihre Leistungsfähigkeit bei visueller Mustererkennung (Video und Bilder), Empfehlungssystemen und Sprachverarbeitung.

  • Convolutional Neural Networks sind hochgradig skalierbar und können für die Mustererkennung mit jeder großen Auflösung verwendet werden.
  • Diese Netzwerke verwenden volumetrische dreidimensionale Neuronen. Innerhalb einer Schicht sind Neuronen nur durch ein kleines Feld verbunden, das als rezeptive Schicht bezeichnet wird.
  • Die Neuronen benachbarter Schichten sind durch den Mechanismus der räumlichen Lokalisierung verbunden. Die Arbeit vieler solcher Ebenen übernehmen spezielle nichtlineare Filter, die auf eine zunehmende Anzahl von Pixeln reagieren.

Wiederkehrende neuronale Netze

Solche neuronalen Netze werden als rekurrent bezeichnet, deren Verbindungen zwischen den Neuronen einen indikativen Zyklus bilden. Hat folgende Eigenschaften:

  • Jede Verbindung hat ihr eigenes Gewicht, das ebenfalls Priorität hat.
  • Knoten werden in zwei Typen unterteilt, einleitende Knoten und versteckte Knoten.
  • Informationen in einem rekurrenten neuronalen Netz werden nicht nur geradlinig, Schicht für Schicht, sondern auch zwischen den Neuronen selbst übertragen.
  • Ein wichtiges Unterscheidungsmerkmal eines rekurrenten neuronalen Netzes ist das Vorhandensein des sogenannten „Aufmerksamkeitsbereichs“, in dem der Maschine bestimmte Daten übermittelt werden können, die eine verbesserte Verarbeitung erfordern.

Wiederkehrende neuronale Netze werden bei der Erkennung und Verarbeitung von Textdaten verwendet (in der Häufigkeit basieren sie auf dem Google-Übersetzer, dem Yandex-Palekh-Algorithmus und dem Apple-Siri-Sprachassistenten).

Neuronale Netze, Video

Und zum Schluss noch ein interessantes Video über neuronale Netze.


Beim Schreiben des Artikels habe ich versucht, ihn so interessant, nützlich und qualitativ hochwertig wie möglich zu gestalten. Für Feedback und konstruktive Kritik in Form von Kommentaren zum Artikel wäre ich dankbar. Sie können mir auch gerne Ihren Wunsch / Ihre Frage / Anregung an meine Mail schreiben [E-Mail geschützt] oder auf Facebook, mit Respekt, der Autor.

Wenn Sie ein erfahrener Footballspieler sind, der Defensivcharts so leicht lesen kann wie Straßenschilder, oder ein Filmstar, dessen Name allein an der Kinokasse landen kann, oder ein Börsenmakler, der sich besser auskennt als Warren Buffett, dann herzlichen Glückwunsch: Sie werden es tun genauso geschätzt werden wie ein Data Scientist oder Machine Learning Engineer mit einem PhD von Stanford, MIT oder der Carnegie Mellon University. Jedes Unternehmen im Silicon Valley – und immer mehr Unternehmen in anderen Regionen – sucht solche Spezialisten, die an einer Art Flaggenspiel teilnehmen, nur in der Personalpolitik. Unternehmen erkennen zunehmend, dass ihre Wettbewerbsfähigkeit vom Einsatz maschinellen Lernens abhängt, und die Zahl der offenen Stellen für Spezialisten in diesen Bereichen übersteigt bei weitem den Bedarf anderer Supermächte.

Aber was wäre, wenn Sie die Vorteile der KI nutzen könnten, ohne diese seltenen und teuren Talente einstellen zu müssen? Was wäre, wenn sich diese Eintrittsschwelle mit smarter Software senken lässt? Kann Deep Learning mit einer weniger vielfältigen Belegschaft eingesetzt werden?

Ein Startup namens Bonsai und eine ganze Gruppe ähnlicher Unternehmen beantworten diese Frage mit Ja. Machen Sie sich bereit, künstliche Intelligenz zu demokratisieren. Eines Tages könnte diese Bewegung Millionen, wenn nicht Milliarden von Menschen unter ihrem Banner vereinen.

Auf der O'Reilly AI Developers Conference in New York hielt Bonsai-CEO Mark Hammond eine Präsentation seines Unternehmens. (Er kündigte auch eine Investitionsrunde von 6 Millionen US-Dollar an – nicht so viel Geld, wenn man bedenkt, dass die AI VC-Investition in diesem Jahr bereits 1,5 Milliarden US-Dollar beträgt.) Die Präsentation beinhaltete eine Wiederholung einer der berühmtesten Errungenschaften von Elite-Deep-Learning-Entwicklern: die Ausführung des DeepMind-Algorithmus von alten Spielen für Atari-Computer in Echtzeit. Insbesondere ein Spiel namens Breakout („Tennis“), bei dem die Plattform einen quadratischen „Ball“ trifft, der flackernde Blöcke zerbricht. (Das 1976 veröffentlichte Spiel war für seine Zeit ein Durchbruch - er hat selbst daran gearbeitet)

37 Codezeilen - die gesamte Struktur des neuronalen Netzes, das durch das klassische Atari-Spiel trainiert wird. Quelle: Bonsai

Die DeepMind-Variante wurde von den weltbesten KI-Experten entwickelt, die dem neuronalen Netzwerk die Grundlagen von Atari-Spielen beibrachten, und das Ergebnis ihrer Arbeit war wissenschaftlichen Veröffentlichungen von Weltrang würdig. Die Bonsai-Version ist eine Vereinfachung. Alles beginnt mit einem Entwicklungssystem, das in die Cloud hochgeladen wird. Nur ein Programmierer, selbst einer, der sich überhaupt nicht mit den Grundlagen der KI befasst hat, kann das Spiel allgemein beschreiben, und das System wählt selbst den geeigneten Lernalgorithmus für die Verwendung des neuronalen Netzwerks. (Die armen Doktoranden bei DeepMind mussten diese Algorithmen selbst schreiben.) In dieser Phase muss der Programmierer in wenigen Minuten nur die Grundprinzipien des Spiels festlegen - zum Beispiel "den Ball auf der Plattform fangen" - und dann entwickelt Bonsai selbst das neuronale Netzwerk und optimiert es optimal Ergebnis. Und das neuronale Netz am Ausgang wird schon selbst „Tennis“ spielen.

Die von Bonsai geschriebene Version des Spiels umfasst nur 37 Codezeilen. Doch diese Einfachheit täuscht. Wenn Hammond erklärt, was das Herzstück des Algorithmus ist, zeigt er eine Zeichnung, die zeigt, wie sein System ein neuronales Netzwerk aufbaut, das mit einer der besten Kreationen von Google konkurrieren kann. Der Programmierer selbst musste sich nicht einmal in die Feinheiten des maschinellen Lernens vertiefen. Schau, Mama, ich kann auf die Hände eines Doktors verzichten!


So spielt ein vom Bonsai-System trainiertes neuronales Netz Tennis. Quelle: Bonsai

Beeindruckender Trick. „Normalerweise ist es schwer, mich mit einer Demo zu beeindrucken“, sagt George Williams, wissenschaftlicher Mitarbeiter am Courant Institute for Mathematics an der New York University. - Was Mark mir jedoch zeigte, war ziemlich real und gleichzeitig erstaunlich. Er nahm alle Errungenschaften der maschinellen Intelligenz und schuf die Werkzeuge, die die Entwicklung einer neuen Generation von KI-Systemen ermöglichen werden.“

Es ist noch nicht klar, ob Bonsai der Anführer dieser Bewegung bleiben wird. Aber Williams hat Recht. Der nächste Schritt in der unvermeidlichen Entstehung immer intelligenterer Computer wird die Entwicklung von maschinellen Lernwerkzeugen für (relative) Dummies sein.

Bonsai wurde am Strand geboren. Hammond, ein ehemaliger Software-Ingenieur und Evangelist, denkt schon seit einiger Zeit über die Möglichkeiten der künstlichen Intelligenz nach. Nachdem er Microsoft im Jahr 2004 verlassen hatte, wechselte er in die Neurowissenschaften nach Yale und hatte dann 2010 eine kurze Zeit bei Numenta, einem KI-Startup im Besitz von Jeff Hawkins (Mitbegründer von Palm, dem PDA-Hersteller). Hammond eröffnete dann ein weiteres Unternehmen in einem ganz anderen Bereich, das er dann verkaufte.

Dann, im Jahr 2012, kam Hammond nach Südkalifornien, um Freunde zu besuchen. Sein kleiner Sohn war müde und alle gingen zurück zum Auto. Während Hammonds Frau mit Freunden plauderte und sein Sohn in seinen Armen einschlief, führte er ein Gedankenexperiment durch. Im Mittelpunkt dieses Experiments stand ein beliebtes Meme aus der Welt der KI – das Konzept des „Master-Algorithmus“. Professor Pedro Dominguez von der University of Washington schrieb in einem gleichnamigen Buch, dass dieser noch zu entwickelnde Algorithmus ein Allheilmittel für alle Probleme der Branche sein könnte. Theoretisch, wenn dieser Algorithmus noch erfunden ist, wird es mit seiner Hilfe möglich sein, KI-Systeme überall methodisch einzuführen.

Hammond kam zu dem Schluss, dass wir ein System schaffen müssen, das es selbst dem gewöhnlichsten Entwickler ermöglicht, KI-Tools zu verwenden. Aber Hammond sah einen Fehler in dieser Idee. „Angenommen, wir finden diesen Meisteralgorithmus“, sagte er zu sich selbst, als sein 18 Monate alter Sohn in seinen Armen döste, „wer würde ihn in unzähligen möglichen Szenarien implementieren?“ Im Moment können nur echte Experten des maschinellen Lernens solche Tools verwenden. Die Möglichkeiten für den Einsatz von KI werden für eine begrenzte Anzahl dieser Menschen zu vielfältig sein. Also kam er zu dem Schluss, dass er ein System schaffen musste, das die Eintrittsbarriere senkte und es selbst dem mittelmäßigsten Entwickler ermöglichte, diese Tools zu verwenden. Ein solches System benötigt keine hochspezialisierten Ingenieure, um neuronale Netze zu trainieren. Programmierer können sie selbst trainieren, um das gewünschte Ergebnis zu erzielen.

Als Hammond über seine Ideen nachdachte, zog er Analogien zur Geschichte der Programmierung. Anfangs mussten Computerbediener den Code, der die Geräte zum Laufen brachte, mühsam schreiben. Dann übernahmen die Programmierer eine Reihe von Standardanweisungen, die als Assemblersprache bezeichnet wurden, und beschleunigten den Prozess – aber man musste immer noch ein sehr hohes Maß an Training haben, um es richtig zu machen. Der Durchbruch gelang, als Ingenieure einen Compiler erstellten – ein Programm, das Code in bequemeren, sogenannten „High-Level“-Sprachen (vom allerersten BASIC und LISP bis zum aktuellen Python und C) in Assemblersprachcode umwandelte . Erst danach wurde die Erstellung leistungsstarker Anwendungen auch für relativ anspruchslose Fachleute zugänglich. Hammond glaubt, dass KI-Systeme dank Tools wie TensorFlow von Google jetzt das Niveau der Assemblersprache erreicht haben, das heißt, es wird für Ingenieure bereits einfacher, neuronale Netze zu erstellen, aber es bleibt immer noch für diejenigen zugänglich, die wirklich verstehen, wie sie funktionieren . Hammond wollte ein Compiler-Analogon erstellen, um die Dinge noch weiter zu vereinfachen.

Er stellte die Idee Kean Brown vor, einem ehemaligen Microsoft-Kollegen, der kürzlich sein Gaming-Startup an ein chinesisches Internetunternehmen verkauft hatte. Ihm gefiel die Idee, weil er zu dieser Zeit nur versuchte, maschinelles Lernen mit den damals verfügbaren Tools durchzuführen. „Generell bin ich kein Dummkopf“, sagt Brown, „ich kam nach China und lernte ihre Sprache, arbeitete als Programmierer bei Microsoft, aber selbst mir war das zu viel.“ Er erklärte sich bereit, Bonsai mitzubegründen. (Der Name wurde gewählt, weil diese japanische Kunst ein perfektes Gleichgewicht zwischen dem Natürlichen und dem Künstlichen herstellt. Ein weiterer Vorteil ergab sich, als die Internet-Domain-Eigentümer dem jungen Unternehmen erlaubten, ihre Website bei bons.ai zu registrieren.)

Bonsai ist nicht das einzige Unternehmen, das daran arbeitet, den Mangel an qualifizierten KI-Experten zu beheben. Einige der größeren Unternehmen erkannten die Notwendigkeit, ihre eigenen Arbeitskräfte zu schulen und gewöhnliche Programmierer auszubilden, um Meister neuronaler Netzwerke zu werden: Google erstellte eine ganze Reihe interner Programme, und Apple begann, auf die Fähigkeiten und persönlichen Qualitäten von Programmierern zu achten, die ihnen helfen würden schnell die erforderlichen Fähigkeiten beherrschen. Wie oben erwähnt, hat Google auch das TensorFlow-Programm für die Öffentlichkeit freigegeben, dank dessen es seinen Ingenieuren einfacher ist, neuronale Netze zu erstellen. Andere KI-Toolkits sind bereits verfügbar, und es wird zweifellos weitere solcher Tools geben.

"Wir eröffnen neue Möglichkeiten für diejenigen, die keine Wissenschaftler oder Programmierer sind" Gleichzeitig arbeiten auch andere Startups daran, KI zu demokratisieren. Bottlenose adressiert den Wissenschaftlermangel, allerdings für eine andere Zielgruppe: Während Bonsai sein Produkt in erster Linie für Softwareentwickler herstellt, will Bottlenose Business Analysten das Leben erleichtern. Die Motive sind jedoch die gleichen. „Wir eröffnen neue Möglichkeiten für diejenigen, die keine Wissenschaftler oder Programmierer sind“, sagt CEO Nova Spivak. Einige Startups werden noch mehr Nutzer erreichen: Clarifais Präsentation auf der O'Reilly-Konferenz hieß "How to make sure that every person on the planet can teach and use AI".

Während Bonsai also zur richtigen Zeit am richtigen Ort gekommen zu sein scheint, boomt die KI-Branche derzeit so sehr, dass es Hammonds Startup schwer fallen könnte, auf sich aufmerksam zu machen. Adam Cheyer, ein KI-Spezialist, der an der Entwicklung mitgewirkt hat und jetzt Chefingenieur ist, hat das Bonsai-Produkt bereits gesehen und war sehr beeindruckt. Aber er stellt fest, dass Bonsai zwar KI auch Anfängern zugänglich macht, die Menschen sich aber dennoch geistig anstrengen müssen, um ihre Programmiersprache und das Gesamtdesign des Systems herauszufinden. „Wenn ein großes Unternehmen wie Google ein neues Produkt auf den Markt bringt, stürzen sich die Leute darauf, es auszuprobieren. Aber wenn ein Startup das gleiche Produkt herstellt, ist es viel schwieriger, Leute dafür zu gewinnen. Werden sie stark genug sein, um genug Benutzer zu gewinnen, um ihr Tool populär zu machen? Ob Bonsai erfolgreich sein wird oder nicht, ist derzeit schwer zu sagen.“

Das Unternehmen hat ein System mit mehreren Komponenten aufgebaut, darunter Brain, ein Cloud-basiertes System zum Aufbau neuronaler Netze, eine Skriptsprache namens Inkling und Mastermind, eine „integrierte Entwicklungsumgebung“, die Programmierern alle benötigten Tools an einem Ort zur Verfügung stellt . („Eine App zum Erstellen von Apps“, erklärt Brown). Das Bonsai-System steht für Beta-Tests zur Verfügung.

Mark Hammond in der Bonsai-Zentrale in der Innenstadt von Berkeley. Foto: Backchannel

Wie Hammond erklärt, unterscheidet sich der Aufbau eines neuronalen Netzwerks mit Bonsai in mehreren wichtigen Punkten von der Vorgehensweise der Profis. Heutzutage müssen Sie entscheiden, welche Tools am besten zur Lösung eines Problems geeignet sind, und diese Lösung erfordert Wissen und Erfahrung. Laut Hammond erledigt Bonsai das für Sie. Alles, was Sie tun müssen, ist, die Grundlagen dessen festzulegen, was Sie dem System beibringen möchten.

Während erfahrene KI-Systemingenieure das Netzwerk „trainieren“, indem sie die Ausgabe mit dem gewünschten Ergebnis vergleichen (z. B. dem Netzwerk Fotos von Hunden zeigen und es mit der Ausgabe geeigneter Merkmale belohnen), können Sie mit Bonsai das System „lehren“. einfach den gesamten Prozess in Grundprinzipien herunterbrechen. Um mit dem Hundebeispiel fortzufahren, könnten Sie Dinge wie vier Beine, eine Schnauze und eine aus dem Mund hängende Zunge erwähnen. Sie stellen nur die notwendige Basis bereit, und Bonsais Cloud-basierte „Smart Engine“, zu der auch das „Gehirn“ gehört, bringt die Sache zum Abschluss.

Dieser Ansatz hat einen indirekten positiven Effekt: Wissenschaftler, die ein herkömmliches neuronales Netz trainiert haben, haben oft keine Ahnung, wie genau die Magie funktioniert, weil solche Netze sich im Grunde selbst neu konfigurieren und alles so organisieren, dass nur sie es verstehen können. Im Fall von Bonsai können Sie die Prinzipien des Netzwerkdenkens nach den Regeln verstehen, die der Benutzer festgelegt hat. „Software sollte keine Black Box sein“, sagt Hammond. Wenn Sie beispielsweise ein Programm für ein unbemanntes Fahrzeug erstellen und es nicht im richtigen Moment angehalten hat, sollten Sie in der Lage sein, nachzuvollziehen und zu verstehen, warum das System eine solche Entscheidung getroffen hat. In ähnlicher Weise erklärt Amazon, warum dieses oder jenes Buch in Ihren Empfehlungen auftaucht.

Eine große Frage zum Bonsai-Ansatz ist, ob all diese abstrakten Dinge die Leistung und Effizienz beeinträchtigen. Das passiert normalerweise bei der Verwendung von Compilern: Programme, die damit geschrieben werden, arbeiten nicht so schnell und effizient wie solche, die in Assemblersprache geschrieben und direkt auf die Hardware übertragen werden. Außerdem wäre es eine klare Übertreibung zu sagen, dass ein System, das selbst ein Werkzeug für den Einsatz auswählt, es besser macht als die Professoren, die anscheinend keine neuronalen Netze mehr bauen müssen.

„Ich denke, man muss immer Kompromisse eingehen“, sagt Laila Tretikov, eine KI-Spezialistin, die zuvor als Leiterin der Wikimedia Foundation fungierte und Bonsai beriet. - Die Ergebnisse werden nicht genau die gleichen sein, als wenn Sie eine Gruppe von Wissenschaftlern einbeziehen würden. Aber ich bin mir nicht sicher, was wichtiger ist: die Qualität oder die Fähigkeit, es selbst zu tun.“ Adam Cheyer von Viv weist auch darauf hin, dass Bonsai-Code möglicherweise nicht so effizient funktioniert wie Software, die für eine bestimmte Aufgabe optimiert ist. „Aber es ist immer noch verdammt guter Code, und er hält Sie davon ab, in unnötige Details zu geraten“, fügt er hinzu. Cheyer sagt auch, dass sein Unternehmen, in dem solch wertvolle KI-Spezialisten arbeiten, Bonsai wahrscheinlich nicht verwenden wird – außer um eine der Ideen zu prototypisieren, bevor er sie auf die altbewährte Weise umsetzt.

Bonsai hilft der Bewegung, KI den Untrainierten nahe zu bringen Hammond wiederum versichert, dass der Qualitätsverlust bei der Verwendung von Bonsai gar nicht so groß sei. „Die Produktivität steigt mit der Zeit“, sagt er, „man muss es nur glauben.“ Eines Tages wird es möglich sein, es nicht nur zu glauben, sondern auch zu überprüfen.

Bonsai hat große Pläne für die nächsten Monate. In Kürze wird das Unternehmen eine Partnerschaft mit dem Komponentenhersteller Nvidia bekannt geben, und Bonsai-Kunden können bessere Ergebnisse erzielen, wenn sie Geräte dieser Marke verwenden. Das Unternehmen wird auch Informationen über seine Vereinbarung mit dem Siemens TTB-Zentrum veröffentlichen, das das Bonsai-System in den letzten Monaten im Bereich Automatisierung und Produktionssteuerung getestet hat.

Bonsai versucht, Probleme zu lösen, die selbst die mächtigsten Unternehmen nicht lösen konnten. „Wir arbeiten an vielen Spielen“, fügt Hammond hinzu und erklärt, dass die Spiele Schlüsselprobleme lösen, die Bonsai zu lösen plant. „Einige Spiele eignen sich nicht einmal für DeepMind. Obwohl sie ihrem Algorithmus beigebracht haben, viele Spiele neben Tennis zu spielen, ist ihr System noch nicht in der Lage, Pac-Man zu spielen.

Aber noch wichtiger ist, wie Bonsai der Bewegung hilft, KI zu Ungeübten zu bringen. Im Laufe der Zeit werden High-Level-Tools leistungsfähiger und schließlich allgegenwärtig. Werden wir den Punkt erreichen, an dem jeder Künstliche Intelligenz trainieren und nutzen kann? Sagen wir mal so: Gerade auf dieses Szenario wurde viel Geld gesetzt.

Ein künstliches neuronales Netz ist eine Ansammlung von Neuronen, die miteinander interagieren. Sie sind in der Lage, Daten zu empfangen, zu verarbeiten und zu erstellen. Es ist so schwer vorstellbar wie die Arbeit des menschlichen Gehirns. Das neuronale Netzwerk in unserem Gehirn arbeitet, damit Sie das jetzt lesen können: Unsere Neuronen erkennen die Buchstaben und setzen sie in Wörter um.

Ein künstliches neuronales Netz ist wie ein Gehirn. Es wurde ursprünglich programmiert, um einige komplexe Rechenprozesse zu vereinfachen. Heutzutage haben neuronale Netze viel mehr Möglichkeiten. Einige davon befinden sich auf Ihrem Smartphone. Ein anderer Teil hat bereits in seiner Datenbank vermerkt, dass Sie diesen Artikel geöffnet haben. Wie das alles passiert und warum, lesen Sie weiter.

Wie alles begann

Die Leute wollten wirklich verstehen, woher der Verstand eines Menschen kommt und wie das Gehirn funktioniert. Mitte des letzten Jahrhunderts verstand das der kanadische Neuropsychologe Donald Hebb. Hebb untersuchte die Interaktion von Neuronen untereinander, untersuchte das Prinzip, nach dem sie in Gruppen (wissenschaftlich - Ensembles) zusammengefasst werden, und schlug den ersten Algorithmus in der Wissenschaft zum Trainieren neuronaler Netze vor.

Ein paar Jahre später modellierte eine Gruppe amerikanischer Wissenschaftler ein künstliches neuronales Netzwerk, das quadratische Formen von anderen Formen unterscheiden konnte.

Wie funktioniert ein neuronales Netz?

Die Forscher fanden heraus, dass ein neuronales Netzwerk eine Ansammlung von Schichten von Neuronen ist, von denen jede dafür verantwortlich ist, ein bestimmtes Kriterium zu erkennen: Form, Farbe, Größe, Textur, Klang, Lautstärke usw. Jahr für Jahr, als Ergebnis von Millionen von Experimenten und unzähligen Berechnungen wurden dem einfachsten Netzwerk neue und neue Schichten von Neuronen hinzugefügt. Sie arbeiten abwechselnd. Zum Beispiel bestimmt der erste, ob ein Quadrat ein Quadrat ist oder nicht, der zweite versteht, ob das Quadrat rot ist oder nicht, der dritte berechnet die Größe des Quadrats und so weiter. Keine Quadrate, keine roten und unangemessen großen Figuren fallen in neue Gruppen von Neuronen und werden von ihnen untersucht.

Was sind neuronale Netze und was können sie?

Wissenschaftler haben neuronale Netze entwickelt, damit sie gelernt haben, zwischen komplexen Bildern, Videos, Texten und Sprache zu unterscheiden. Heutzutage gibt es viele Arten von neuronalen Netzen. Sie werden je nach Architektur klassifiziert - Sätze von Datenparametern und das Gewicht dieser Parameter, eine bestimmte Priorität. Nachfolgend sind einige davon aufgeführt.

Faltungsneuronale Netze

Neuronen werden in Gruppen eingeteilt, jede Gruppe berechnet die ihr gegebene Eigenschaft. 1993 zeigte der französische Wissenschaftler Jan LeCun der Welt LeNet 1, das erste konvolutionelle neuronale Netzwerk, das handschriftlich auf Papier geschriebene Zahlen schnell und genau erkennen konnte. Überzeugen Sie sich selbst:

Convolutional Neural Networks werden heute vor allem für Multimedia-Zwecke eingesetzt: Sie arbeiten mit Grafik, Audio und Video.

Wiederkehrende neuronale Netze

Neuronen merken sich ständig Informationen und bauen auf der Grundlage dieser Daten weitere Aktionen auf. 1997 modifizierten deutsche Wissenschaftler die einfachsten rekurrenten Netzwerke zu Netzwerken mit langem Kurzzeitgedächtnis. Darauf aufbauend wurden dann Netzwerke mit kontrolliert rekurrenten Neuronen entwickelt.

Heute werden mit Hilfe solcher Netzwerke Texte geschrieben und übersetzt, Bots programmiert, die sinnvolle Dialoge mit einem Menschen führen, Codes für Seiten und Programme erstellt.

Die Verwendung dieser Art von neuronalen Netzen ist die Fähigkeit, Daten zu analysieren und zu generieren, Datenbanken zusammenzustellen und sogar Vorhersagen zu treffen.

Im Jahr 2015 veröffentlichte SwiftKey die weltweit erste Tastatur, die von einem rekurrenten neuronalen Netzwerk mit kontrollierten Neuronen angetrieben wird. Dann gab das System Hinweise beim Tippen basierend auf den zuletzt eingegebenen Wörtern. Letztes Jahr trainierten die Entwickler das neuronale Netzwerk darauf, den Kontext des getippten Textes zu lernen, und die Hinweise wurden sinnvoll und nützlich:

Kombinierte neuronale Netze (faltend + rekurrent)

Solche neuronalen Netze sind in der Lage zu verstehen, was auf dem Bild zu sehen ist, und es zu beschreiben. Und umgekehrt: Zeichnen Sie Bilder gemäß der Beschreibung. Das deutlichste Beispiel wurde von Kyle Macdonald demonstriert, der mit einem neuronalen Netzwerk in Amsterdam spazieren ging. Das Netzwerk erkannte sofort, was sich davor befand. Und fast immer genau:

Neuronale Netze sind ständig selbstlernend. Durch diesen Prozess:

1. Skype hat die Möglichkeit der Simultanübersetzung für 10 Sprachen eingeführt. Darunter sind für einen Moment Russisch und Japanisch - eine der schwierigsten der Welt. Natürlich muss die Qualität der Übersetzung ernsthaft verbessert werden, aber die Tatsache, dass Sie sich bereits jetzt mit Kollegen aus Japan auf Russisch verständigen und sicher sein können, dass Sie verstanden werden, ist inspirierend.

2. Yandex hat zwei auf neuronalen Netzen basierende Suchalgorithmen entwickelt: Palekh und Korolev. Die erste half dabei, die relevantesten Websites für Suchanfragen mit geringer Häufigkeit zu finden. "Palekh" studierte die Titel der Seiten und verglich ihre Bedeutung mit der Bedeutung von Anfragen. Auf der Grundlage von Palekh erschien Korolev. Dieser Algorithmus wertet nicht nur den Titel, sondern den gesamten Textinhalt der Seite aus. Die Suche wird immer genauer und Website-Besitzer beginnen, intelligenter mit den Inhalten der Seiten umzugehen.

3. Kollegen von SEO-Spezialisten von Yandex haben ein musikalisches neuronales Netzwerk geschaffen: Es komponiert Gedichte und schreibt Musik. Die Neurogroup heißt symbolisch Neurona, und sie haben bereits ihr erstes Album:

4. Google Inbox verwendet neuronale Netzwerke, um auf eine Nachricht zu antworten. Die technologische Entwicklung ist in vollem Gange, und schon heute studiert das Netzwerk Korrespondenzen und generiert mögliche Antworten. Sie können keine Zeit mit Tippen verschwenden und keine Angst haben, eine wichtige Vereinbarung zu vergessen.

5. YouTube verwendet neuronale Netzwerke, um Videos zu ranken, und zwar nach zwei Prinzipien gleichzeitig: Ein neuronales Netzwerk untersucht Videos und die Reaktionen des Publikums darauf, das andere recherchiert über Benutzer und ihre Vorlieben. Deshalb sind YouTube-Empfehlungen immer ein Thema.

6. Facebook arbeitet aktiv an DeepText AI – einem Kommunikationsprogramm, das Jargon versteht und Chats von obszönem Vokabular befreit.

7. Anwendungen wie Prisma und Fabby, die auf neuronalen Netzen aufbauen, erstellen Bilder und Videos:

Colorize stellt Farbe auf Schwarz-Weiß-Fotos wieder her (Oma überraschen!).

MakeUp Plus wählt den perfekten Lippenstift für Mädchen aus einer echten Auswahl an echten Marken aus: Bobbi Brown, Clinique, Lancome und YSL sind bereits im Geschäft.


8.
Apple und Microsoft aktualisieren ständig ihre neuronalen Systeme Siri und Contana. Bisher folgen sie nur unseren Befehlen, aber in naher Zukunft werden sie beginnen, die Initiative zu ergreifen: Empfehlungen zu geben und unsere Wünsche zu antizipieren.

Und was erwartet uns in Zukunft noch?

Selbstlernende neuronale Netze können Menschen ersetzen: Sie werden mit Textern und Korrektoren beginnen. Roboter erstellen bereits Texte mit Bedeutung und ohne Fehler. Und sie tun es viel schneller als Menschen. Sie werden mit Mitarbeitern von Call Centern, technischem Support, Moderatoren und Administratoren von Öffentlichkeiten in sozialen Netzwerken fortgesetzt. Neuronale Netze wissen bereits, wie man das Skript lernt und es mit Ihrer Stimme spielt. Wie sieht es in anderen Bereichen aus?

Landwirtschaftssektor

Das neuronale Netz wird in speziellen Geräten implementiert. Mähdrescher werden automatisch steuern, Pflanzen scannen und den Boden untersuchen und Daten an das neuronale Netzwerk übertragen. Sie wird entscheiden - zu gießen, zu düngen oder von Schädlingen zu besprühen. Statt ein paar Dutzend Arbeitern werden höchstens zwei Spezialisten benötigt: ein aufsichtsführender und ein technischer.

Die Medizin

Microsoft arbeitet jetzt aktiv an der Schaffung eines Heilmittels für Krebs. Wissenschaftler beschäftigen sich mit Bioprogrammierung - sie versuchen, den Prozess der Entstehung und Entwicklung von Tumoren zu digitalisieren. Wenn alles klappt, werden Programmierer einen Weg finden, einen solchen Prozess zu blockieren, analog dazu wird ein Medikament erstellt.

Marketing

Marketing ist hochgradig personalisiert. Bereits jetzt können neuronale Netze in Sekundenschnelle bestimmen, welcher Nutzer, welche Inhalte und zu welchem ​​Preis angezeigt werden sollen. Künftig wird die Beteiligung des Vermarkters am Prozess auf ein Minimum reduziert: Neuronale Netze werden auf Basis von Daten über das Nutzerverhalten Anfragen vorhersagen, den Markt scannen und die passendsten Angebote ausgeben, wenn eine Person an den Kauf denkt.

E-Commerce

E-Commerce wird überall eingeführt. Sie müssen nicht mehr über den Link zum Online-Shop gehen: Sie können alles mit einem Klick kaufen, wo Sie es sehen. Zum Beispiel lesen Sie diesen Artikel ein paar Jahre später. Der Lippenstift auf dem Bildschirm der MakeUp Plus App (siehe oben) gefällt dir sehr gut. Sie klicken darauf und gelangen direkt zum Warenkorb. Oder sehen Sie sich ein Video über die neueste Hololens (Mixed-Reality-Brille) an und bestellen Sie direkt bei YouTube.

In fast allen Bereichen werden Spezialisten mit Kenntnissen oder zumindest einem Verständnis der Struktur von neuronalen Netzen, maschinellem Lernen und Systemen der künstlichen Intelligenz geschätzt. Wir werden Seite an Seite mit Robotern existieren. Und je mehr wir über sie wissen, desto ruhiger werden wir leben.

P.S. Zinaida Falls ist ein neuronales Netzwerk von Yandex, das Gedichte schreibt. Bewerten Sie die Arbeit, die die Maschine geschrieben hat, nachdem Sie von Mayakovsky gelernt haben (Rechtschreibung und Zeichensetzung beibehalten):

« Das»

Das
gerade
etwas
in der Zukunft
und Macht
diese Person
ist alles da oder nicht
Es ist überall Blut
handeln
wird fett
Herrlichkeit bei
Land
mit einem Riss im Schnabel

Beeindruckend, oder?


Viele der Begriffe in neuronalen Netzen haben einen Bezug zur Biologie, also fangen wir von vorne an:

Das Gehirn ist eine komplexe Sache, aber es kann auch in mehrere Hauptteile und Operationen unterteilt werden:

Der Erreger kann sein intern(zum Beispiel ein Bild oder eine Idee):

Schauen wir uns nun die grundlegenden und vereinfachten an Teile Gehirn:

Das Gehirn ist wie ein Kabelnetz.

Neuron- die Hauptrecheneinheit im Gehirn, sie empfängt und verarbeitet die chemischen Signale anderer Neuronen und macht abhängig von einer Reihe von Faktoren entweder nichts oder erzeugt einen elektrischen Impuls oder ein Aktionspotential, das dann Signale an benachbarte Neuronen sendet durch Synapsen verbunden Neuronen:

Träume, Erinnerungen, selbstregulierende Bewegungen, Reflexe und eigentlich alles, was Sie denken oder tun – alles geschieht dank dieses Prozesses: Millionen oder sogar Milliarden von Neuronen arbeiten auf verschiedenen Ebenen und schaffen Verbindungen, die verschiedene parallele Subsysteme schaffen und ein biologisches darstellen neurales Netzwerk. Netz.

Natürlich sind dies alles Vereinfachungen und Verallgemeinerungen, aber dank ihnen können wir ein einfaches beschreiben
neurales Netzwerk:

Und beschreiben Sie es formalisiert mit einem Diagramm:

Hier bedarf es einiger Erklärung. Kreise sind Neuronen und Linien sind Verbindungen zwischen ihnen,
und um es an dieser Stelle nicht zu verkomplizieren, Verbindungen stellen einen direkten Informationsfluss dar von links nach rechts. Das erste Neuron ist gerade aktiv und grau hinterlegt. Wir haben ihm auch eine Nummer zugewiesen (1 wenn es funktioniert, 0 wenn es nicht funktioniert). Zahlen zwischen Neuronen zeigen Gewicht Verbindungen.

Die obigen Grafiken zeigen die Zeit des Netzwerks, für eine genauere Anzeige müssen Sie sie in Zeitintervalle unterteilen:

Um Ihr eigenes neuronales Netzwerk zu erstellen, müssen Sie verstehen, wie Gewichtungen Neuronen beeinflussen und wie Neuronen lernen. Nehmen wir als Beispiel ein Kaninchen (Testkaninchen) und setzen es unter die Bedingungen eines klassischen Experiments.

Wenn ein sicherer Luftstrom auf sie gerichtet wird, blinzeln Kaninchen wie Menschen:

Dieses Verhaltensmodell kann mit Graphen gezeichnet werden:

Wie im vorherigen Diagramm zeigen diese Diagramme nur den Moment, in dem das Kaninchen einen Atemzug spürt, und wir somit kodieren puff als boolescher Wert. Außerdem berechnen wir anhand des Gewichtswerts, ob das zweite Neuron feuert. Wenn es gleich 1 ist, dann feuert das sensorische Neuron, wir blinken; wenn das Gewicht kleiner als 1 ist, blinzeln wir nicht: das zweite Neuron Grenze- 1.

Lassen Sie uns ein weiteres Element einführen - ein sicheres Tonsignal:

Wir können das Kanincheninteresse wie folgt modellieren:

Der Hauptunterschied ist, dass jetzt das Gewicht ist Null, also haben wir kein blinkendes Kaninchen bekommen, naja, zumindest noch nicht. Jetzt werden wir dem Kaninchen beibringen, auf Befehl zu blinzeln und zu mischen
Reizstoffe (Piep und Atem):

Es ist wichtig, dass diese Ereignisse zu unterschiedlichen Zeiten stattfinden Epoche, in Diagrammen sieht es so aus:

Der Ton selbst macht nichts, aber der Luftstrom lässt das Kaninchen immer noch blinzeln, und wir zeigen dies durch die Gewichte mal die Reize (in Rot).

Bildung Komplexes Verhalten kann als allmähliche Gewichtsänderung zwischen verbundenen Neuronen im Laufe der Zeit vereinfacht werden.

Um ein Kaninchen zu trainieren, wiederholen Sie die Schritte:

Für die ersten drei Versuche sehen die Diagramme so aus:

Bitte beachten Sie, dass die Gewichtung für den Klangreiz nach jeder Wiederholung zunimmt (rot hervorgehoben), dieser Wert ist jetzt willkürlich - wir haben 0,30 gewählt, aber die Zahl kann alles sein, sogar negativ. Nach der dritten Wiederholung werden Sie keine Änderung im Verhalten des Kaninchens bemerken, aber nach der vierten Wiederholung wird etwas Erstaunliches passieren - das Verhalten wird sich ändern.

Wir haben die Lufteinwirkung entfernt, aber das Kaninchen blinzelt immer noch, wenn es den Piepton hört! Unser letztes Schema kann dieses Verhalten erklären:

Wir haben dem Kaninchen beigebracht, auf Geräusche mit Blinzeln zu reagieren.

Bei einem realen Experiment dieser Art können mehr als 60 Wiederholungen erforderlich sein, um ein Ergebnis zu erzielen.

Jetzt werden wir die biologische Welt des Gehirns und der Kaninchen verlassen und versuchen, alles dem anzupassen
gelernt, ein künstliches neuronales Netz zu erstellen. Lassen Sie uns zunächst versuchen, eine einfache Aufgabe zu erledigen.

Nehmen wir an, wir haben eine Maschine mit vier Knöpfen, die Essen ausgibt, wenn der richtige gedrückt wird.
Schaltflächen (na ja, oder Energie, wenn Sie ein Roboter sind). Die Aufgabe besteht darin, herauszufinden, welcher Knopf eine Belohnung ausgibt:

Wir können (schematisch) darstellen, was eine Taste tut, wenn sie so gedrückt wird:

Es ist besser, ein solches Problem als Ganzes zu lösen, also schauen wir uns alle möglichen Ergebnisse an, einschließlich des richtigen:

Klicken Sie auf die dritte Schaltfläche, um Ihr Abendessen zu erhalten.

Um ein neuronales Netzwerk im Code zu reproduzieren, müssen wir zuerst ein Modell oder einen Graphen erstellen, auf den das Netzwerk abgebildet werden kann. Hier ist eine geeignete Grafik für die Aufgabe, außerdem zeigt sie ihr biologisches Gegenstück gut:

Dieses neuronale Netz erhält lediglich Eingaben – in diesem Fall die Wahrnehmung, welche Taste gedrückt wurde. Als nächstes ersetzt das Netzwerk die Eingabeinformationen durch Gewichtungen und zieht eine Schlussfolgerung basierend auf der Hinzufügung der Schicht. Es klingt ein wenig verwirrend, aber sehen wir uns an, wie die Schaltfläche in unserem Modell dargestellt wird:

Beachten Sie, dass alle Gewichtungen 0 sind, sodass das neuronale Netzwerk wie ein Baby vollständig leer, aber vollständig miteinander verbunden ist.

Wir gleichen also ein externes Ereignis mit der Eingabeschicht des neuronalen Netzes ab und berechnen den Wert an seinem Ausgang. Es kann mit der Realität übereinstimmen oder auch nicht, aber wir werden dies vorerst ignorieren und beginnen, die Aufgabe auf eine für den Computer verständliche Weise zu beschreiben. Beginnen wir mit der Eingabe der Gewichte (wir verwenden JavaScript):

Var-Eingänge = ; var Gewichte = ; // Der Einfachheit halber können diese Vektoren aufgerufen werden
Der nächste Schritt besteht darin, eine Funktion zu erstellen, die die Eingabewerte und Gewichte sammelt und den Ausgabewert berechnet:

Funktion auswertenNeuralNetzwerk(Eingabevektor, Gewichtsvektor)( var result = 0; inputVector.forEach(function(inputValue, weightIndex) ( layerValue = inputValue*weightVector; result += layerValue; )); return (result.toFixed(2)); ) / / Mag komplex erscheinen, aber alles, was es tut, ist, die Gewichts-/Eingabepaare abzugleichen und das Ergebnis zu addieren
Wenn wir diesen Code ausführen, erhalten wir wie erwartet das gleiche Ergebnis wie in unserem Modell oder Diagramm …

EvaluateNeuralNetwork(Eingaben, Gewichte); // 0.00
Live-Beispiel: Neuronales Netz 001.

Der nächste Schritt zur Verbesserung unseres neuronalen Netzes wird eine Möglichkeit sein, die eigene Ausgabe oder resultierende Werte vergleichbar mit der realen Situation zu überprüfen.
Lassen Sie uns zuerst diese bestimmte Realität in eine Variable codieren:

Um Inkonsistenzen (und wie viele) zu erkennen, fügen wir eine Fehlerfunktion hinzu:

Fehler = Realität - Ausgabe des neuronalen Netzes
Damit können wir die Leistung unseres neuronalen Netzes auswerten:

Aber was noch wichtiger ist - was ist mit Situationen, in denen die Realität ein positives Ergebnis liefert?

Jetzt wissen wir, dass unser neuronales Netzwerkmodell nicht funktioniert (und wir wissen wie), großartig! Und das ist großartig, denn jetzt können wir die Fehlerfunktion verwenden, um unser Training zu steuern. Aber es macht alles Sinn, wenn wir die Fehlerfunktion wie folgt neu definieren:

Fehler= Gewünschte Ausgabe- Ausgang des neuronalen Netzes
Eine subtile, aber wichtige Abweichung, die stillschweigend darauf hinweist, dass wir es tun werden
Verwenden Sie frühere Ergebnisse, um sie mit zukünftigen Aktionen zu vergleichen
(und zum Lernen, wie wir später sehen werden). Das gibt es auch im wirklichen Leben, komplett
sich wiederholende Muster, sodass es zu einer evolutionären Strategie werden kann (na ja, in
meiste Fälle).

Var-Eingabe = ; var Gewichte = ; vardesiredResult = 1;
Und eine neue Funktion:

Funktion auswertenNeuralNetError(gewünscht,aktuell) ( return (gewünscht - aktuell); ) // Nach Auswertung sowohl des Netzwerks als auch des Fehlers würden wir erhalten: // "Neural Net output: 0.00 Error: 1"
Live-Beispiel: Neuronales Netz 002.

Fassen wir zusammen. Wir begannen mit einer Aufgabe, erstellten ein einfaches Modell davon in Form eines biologischen neuronalen Netzwerks und fanden eine Möglichkeit, ihre Leistung im Vergleich zur Realität oder zum gewünschten Ergebnis zu messen. Jetzt müssen wir einen Weg finden, die Inkonsistenz zu korrigieren – ein Prozess, der sowohl für Computer als auch für Menschen als Lernen betrachtet werden kann.

Wie trainiere ich ein neuronales Netz?

Die Basis des Trainings sowohl biologischer als auch künstlicher neuronaler Netze ist die Wiederholung
Und Lernalgorithmen, also werden wir mit ihnen separat arbeiten. Lass uns beginnen mit
Lernalgorithmen.

In der Natur versteht man unter Lernalgorithmen physikalische oder chemische Veränderungen
Eigenschaften von Neuronen nach den Experimenten:

Die dramatische Darstellung, wie sich zwei Neuronen im Code im Laufe der Zeit verändern, und unser „Lernalgorithmus“-Modell bedeuten, dass wir die Dinge im Laufe der Zeit einfach ändern werden, um unser Leben einfacher zu machen. Fügen wir also eine Variable hinzu, um anzuzeigen, wie viel einfacher das Leben ist:

Var Lernrate = 0,20; // Je größer der Wert, desto schneller wird der Lernprozess :)
Und was wird es ändern?

Dies ändert die Gewichte (genau wie ein Kaninchen!), insbesondere das Gewicht der Ausgabe, die wir erhalten möchten:

Wie man einen solchen Algorithmus codiert, ist Ihre Wahl, der Einfachheit halber füge ich dem Gewicht den Lernfaktor hinzu, hier in Form einer Funktion:

Function learn(inputVector, weightVector) ( weightVector.forEach(function(weight, index, weights) ( if (inputVector > 0) ( weights = weight + learningRate; ) )); )
Bei Verwendung addiert diese Trainingsfunktion einfach unsere Lernrate zum Gewichtsvektor aktives Neuron, vor und nach dem Trainingszirkel (oder der Wiederholung), sind die Ergebnisse wie folgt:

// Ursprünglicher Gewichtsvektor: // Ausgabe des neuronalen Netzes: 0,00 Fehler: 1 Learn (Eingabe, Gewichte); // Neuer Gewichtsvektor: // Ausgabe des neuronalen Netzes: 0,20 Fehler: 0,8 // Wenn es nicht offensichtlich ist, liegt die Ausgabe des neuronalen Netzwerks nahe bei 1 (Hühnerausgabe) - was wir wollten, also können wir daraus schließen, dass wir bewegen sich in die richtige Richtung
Live-Beispiel: Neuronales Netz 003.

Okay, jetzt, wo wir uns in die richtige Richtung bewegen, wird das letzte Stück dieses Puzzles die Implementierung sein Wiederholungen.

Es ist nicht so schwer, in der Natur machen wir einfach immer wieder dasselbe, aber im Code geben wir nur die Anzahl der Wiederholungen an:

Var-Versuche = 6;
Und die Einführung der Anzahl der Wiederholungen in unser neuronales Trainingsnetzwerk sieht folgendermaßen aus:

Funktion train(trials) ( for (i = 0; i< trials; i++) { neuralNetResult = evaluateNeuralNetwork(input, weights); learn(input, weights); } }
Und hier unser Abschlussbericht:

Ausgang des neuronalen Netzes: 0,00 Fehler: 1,00 Gewichtungsvektor: Ausgang des neuronalen Netzes: 0,20 Fehler: 0,80 Gewichtungsvektor: Ausgang des neuronalen Netzes: 0,40 Fehler: 0,60 Gewichtungsvektor: Ausgang des neuronalen Netzes: 0,60 Fehler: 0,40 Gewichtungsvektor: Ausgang des neuronalen Netzes: 0,80 Fehler : 0,20 Gewichtsvektor: Neuronale Netzausgabe: 1,00 Fehler: 0,00 Gewichtsvektor: // Chicken Dinner !
Live-Beispiel: Neuronales Netz 004.

Jetzt haben wir einen Gewichtsvektor, der nur dann ein Ergebnis liefert (Huhn zum Abendessen), wenn der Eingabevektor mit der Realität übereinstimmt (Drücken der dritten Taste).

Also, was ist das Coole, was wir gerade gemacht haben?

In diesem speziellen Fall kann unser neuronales Netzwerk (nach dem Training) die Eingabe erkennen und sagen, was zum gewünschten Ergebnis führt (wir müssen noch bestimmte Situationen programmieren):

Darüber hinaus ist es ein skalierbares Modell, ein Spielzeug und ein Werkzeug für unser Lernen mit Ihnen. Wir konnten etwas Neues über maschinelles Lernen, neuronale Netze und künstliche Intelligenz lernen.

Achtung für Benutzer:

  • Der Mechanismus zum Speichern der gelernten Gewichte ist nicht vorgesehen, sodass dieses neuronale Netzwerk alles vergisst, was es weiß. Wenn Sie den Code aktualisieren oder erneut ausführen, benötigen Sie mindestens sechs erfolgreiche Wiederholungen, damit das Netzwerk vollständig trainiert, wenn Sie glauben, dass eine Person oder eine Maschine die Tasten in zufälliger Reihenfolge drückt ... Dies wird einige Zeit dauern.
  • Biologische Netzwerke zum Lernen wichtiger Dinge haben eine Lernrate von 1, also wird nur eine erfolgreiche Wiederholung benötigt.
  • Es gibt einen Lernalgorithmus, der biologischen Neuronen sehr ähnlich ist, er hat einen einprägsamen Namen: Widroff-Hoff-Regel, oder widroff-hoff training.
  • Neuronale Schwellen (1 in unserem Beispiel) und Overfitting-Effekte (bei einer großen Anzahl von Wiederholungen wird das Ergebnis größer als 1 sein) werden nicht berücksichtigt, aber sie sind sehr wichtig in der Natur und verantwortlich für große und komplexe Blöcke von Verhaltensreaktionen . Ebenso negative Gewichte.

Anmerkungen und Literaturverzeichnis zum Weiterlesen

Ich habe versucht, die Mathematik und die strengen Begriffe zu vermeiden, aber falls Sie sich fragen, wir haben ein Perzeptron gebaut, das als überwachter Lernalgorithmus (überwachtes Lernen) von dualen Klassifikatoren definiert ist - schweres Zeug.

Der biologische Aufbau des Gehirns ist kein einfaches Thema, teils wegen Ungenauigkeiten, teils wegen seiner Komplexität. Beginnen Sie besser mit Neurowissenschaften (Purves) und kognitiven Neurowissenschaften (Gazzaniga). Ich habe das Hasenbeispiel aus Gateway to Memory (Gluck) modifiziert und angepasst, das auch ein großartiger Leitfaden für die Welt der Graphen ist.

Eine weitere großartige Ressource, An Introduction to Neural Networks (Gurney), eignet sich hervorragend für alle Ihre KI-Anforderungen.

Und jetzt in Python! Danke an Ilya Andshmidt für die Bereitstellung der Python-Version:

Eingaben = Gewichte = gewünschtes_Ergebnis = 1 Lernrate = 0,2 Versuche = 6 def auswerten_neurales_Netzwerk(Eingabe_Array, Gewicht_Array): Ergebnis = 0 für i in Bereich(Len(Eingabe_Array)): Layer_Wert = Eingabe_Array[i] * Gewicht_Array[i] Ergebnis += Layer_Wert print("evaluate_neural_network: " + str(result)) print("weights: " + str(weights)) return result def evaluate_error(deired, actual): Fehler = erwünscht - aktuell print("evaluate_error: " + str(error) ) Rückgabefehler def learn(input_array, weight_array): print("learning...") for i in range(len(input_array)): if input_array[i] > 0: weight_array[i] += learning_rate def train(trials ): for i in range(trials): neural_net_result = effort_neural_network(inputs, weights) learn(inputs, weights) train(trials)
Und jetzt auf GO! Dank an Kieran Maher für diese Version.

Paket main import ("fmt" "math") func main() ( fmt.Println("Creating input and weights ...") input:= float64(0.00, 0.00, 1.00, 0.00) weights:= float64(0.00, 0.00, 0.00, 0.00) erwünscht:= 1.00 Lernrate:= 0.20 Versuche:= 6 train(Versuche, Eingaben, Gewichte, gewünschte, Lernrate) ) func train(Versuche int, Eingänge float64, Gewichte float64, gewünschte float64, Lernrate float64) ( für i:= 1;i< trials; i++ { weights = learn(inputs, weights, learningRate) output:= evaluate(inputs, weights) errorResult:= evaluateError(desired, output) fmt.Print("Output: ") fmt.Print(math.Round(output*100) / 100) fmt.Print("\nError: ") fmt.Print(math.Round(errorResult*100) / 100) fmt.Print("\n\n") } } func learn(inputVector float64, weightVector float64, learningRate float64) float64 { for index, inputValue:= range inputVector { if inputValue >0.00 ( weightVector = weightVector + learningRate ) ) return weightVector ) funcevaluate(inputVector float64, weightVector float64) float64 ( result:= 0.00 for index, inputValue:= range inputVector ( layerValue:= inputValue * weightVector result = result + layerValue ) return result ) funcvaluateError(gewünschter float64, tatsächlicher float64) float64 (Rückgabe erwünscht - aktuell)

Sie können helfen und etwas Geld für die Entwicklung der Website überweisen

 

Das Lustige an Hightech ist, dass es Tausende von Jahren alt ist! Zum Beispiel wurde die Infinitesimalrechnung unabhängig voneinander vor über 300 Jahren von Newton und Leibniz erfunden. Was einst als Magie galt, ist heute gut verstanden. Und natürlich wissen wir alle, dass die Geometrie vor ein paar tausend Jahren von Euklid erfunden wurde. Der Clou dabei ist, dass es oft Jahre dauert, bis etwas „populär“ wird. Neuronale Netze sind ein hervorragendes Beispiel. Wir alle haben von neuronalen Netzen gehört und was sie versprechen, aber aus irgendeinem Grund sehen wir nicht die üblichen darauf basierenden Programme. Der Grund dafür ist, dass die wahre Natur neuronaler Netze eine äußerst komplexe Mathematik ist und es notwendig ist, komplexe Theoreme, die sie abdecken, zu verstehen und zu beweisen, und vielleicht sind Kenntnisse der Wahrscheinlichkeitstheorie und kombinatorischen Analyse erforderlich, ganz zu schweigen von Physiologie und Neurologie.

Der Anreiz, eine Technologie für eine oder mehrere Personen zu entwickeln, ist die Schaffung eines Killer-Programms mit seiner Hilfe. Wir alle wissen jetzt, wie DOOM funktioniert, d.h. BSP-Bäume verwenden. John Carmack hat sie damals jedoch nicht erfunden, er las darüber in einem Artikel aus dem Jahr 1960. Dieser Artikel beschreibt die Theorie der BSP-Technologie. John unternahm den nächsten Schritt, indem er verstand, wie BSP-Bäume verwendet werden konnten, und DOOM war geboren. Ich vermute, dass neuronale Netze in den nächsten Jahren eine ähnliche Renaissance erleben werden. Computer sind schnell genug, um sie nachzuahmen, VLSI-Designer erstellen sie direkt in Silizium, und es gibt Hunderte von veröffentlichten Büchern zu diesem Thema. Und da neuronale Netze die mathematischste Entität sind, die wir kennen, sind sie nicht an eine physische Darstellung gebunden, und wir können sie mit Software erstellen oder echte Siliziummodelle erstellen. Die Hauptsache ist, dass das Wesen eines neuronalen Netzes ein abstraktes Modell ist.

In vielerlei Hinsicht wurden die Grenzen des digitalen Rechnens bereits erkannt. Natürlich werden wir sie verbessern und noch schneller, kleiner und billiger machen, aber digitale Computer werden immer nur digitale Informationen wahrnehmen können, da sie auf einem binären Rechenmodell basieren. Neuronale Netze basieren jedoch auf anderen Rechenmodellen. Sie basieren auf einem übergeordneten, verteilten, probabilistischen Modell, das nicht erforderlich ist, um eine Lösung für ein Problem zu finden, wie es ein Computerprogramm tut; Es modelliert ein Netzwerk von Zellen, die mögliche Lösungen für ein Problem auf eine "biologischere" Weise finden, identifizieren oder korrelieren können, indem sie das Problem in kleinen Stücken lösen und die Ergebnisse zusammenfügen. Dieser Artikel gibt einen Überblick über die Technologie neuronaler Netze, wobei diese auf mehreren Seiten so detailliert wie möglich zerlegt werden.

biologische Analoga

Neuronale Netze wurden von unserem eigenen Gehirn inspiriert. Buchstäblich - jemandes Gehirn im Kopf von jemandem sagte irgendwie: "Ich interessiere mich dafür, wie ich arbeite?", Und fuhr dann fort, ein einfaches Modell von sich selbst zu erstellen. Seltsam, oder? Das Standard-Neuralknotenmodell, das auf einem vereinfachten Modell des menschlichen Neurons basiert, wurde vor über fünfzig Jahren erfunden. Schauen Sie sich Abbildung 1.0 an. Wie Sie sehen können, gibt es drei Hauptteile eines Neurons:

  • Dentriten (Dendrite) .................... Verantwortlich für das Sammeln eingehender Signale
  • Soma (Soma) ................................ Verantwortlich für die Hauptverarbeitung und Summierung von Signalen
  • Axon (Axon) ............................... Zuständig für die Signalübertragung an andere Dendriten.

Das durchschnittliche menschliche Gehirn enthält etwa 100 Milliarden oder 10 hoch 11 Neuronen, und jedes von ihnen hat bis zu 10.000 Verbindungen durch Dendriten. Die Signalübertragung erfolgt durch elektrochemische Prozesse auf Basis von Natrium, Kalium und Ionen. Signale werden übertragen, indem die durch diese Ionen verursachte Potentialdifferenz aufgebaut wird, aber die Chemie ist hier irrelevant, und die Signale können als einfache elektrische Impulse betrachtet werden, die von Axon zu Dendriten wandern. Die Anheftung eines Dendriten an ein fremdes Axon wird als Synapse bezeichnet, und dies sind die Hauptpunkte der Impulsübertragung.

Wie funktioniert also ein Neuron? Auf diese Frage gibt es keine einfache Antwort, aber die folgende Erklärung wird für unsere Zwecke genügen. Die Dendriten sammeln Signale, die von anderen Neuronen empfangen werden, dann führen die Somas die Summierung und Berechnung von Signalen und Daten durch, und schließlich können sie auf der Grundlage des Verarbeitungsergebnisses den Axonen „befehlen“, das Signal weiterzuleiten. Die Übertragung hängt weiterhin von einer Reihe von Faktoren ab, aber wir können dieses Verhalten als eine Übertragungsfunktion modellieren, die Eingaben entgegennimmt, verarbeitet und die Ausgabe vorbereitet, wenn die Eigenschaften der Übertragungsfunktion erfüllt sind. Außerdem ist die Ausgabe von Daten in echten Neuronen nichtlinear, das heißt, die Signale sind nicht digital, sondern analog. Tatsächlich empfangen und senden Neuronen kontinuierlich Signale und ihr reales Modell hängt von der Frequenz ab und muss in der S-Domäne (Frequenzdomäne) analysiert werden. Die reale Übertragungsfunktion eines einfachen biologischen Neurons wird tatsächlich von uns modelliert.

Jetzt haben wir eine Vorstellung davon, was Neuronen sind und was wir eigentlich zu modellieren versuchen. Lassen Sie uns für einen Moment abschweifen und darüber sprechen, wie wir neuronale Netze in Videospielen einsetzen können.

Spiele

Neuronale Netze scheinen die Antwort auf all unsere Bedürfnisse zu sein. Wenn wir Zeichen und Wörter auf kleine Spielgehirne übertragen könnten, stellen Sie sich vor, wie cool das wäre. Das neuronale Netzwerkmodell gibt uns die grobe Struktur von Neuronen, aber nicht ein hohes Maß an Intelligenz und Deduktionsfähigkeit, zumindest im klassischen Sinne des Wortes. Es erfordert ein wenig Überlegung, Möglichkeiten zur Verwendung der neuronalen Netzwerktechnologie in der Spiel-KI zu finden, aber sobald Sie dies getan haben, können Sie sie in Verbindung mit deterministischen Algorithmen, Fuzzy-Logik und genetischen Algorithmen verwenden, um eine sehr robuste und fortschrittliche KI-Denkweise zu entwickeln Ihre Spiele. Ohne Zweifel wird das Ergebnis besser sein als alles, was Sie mit Hunderten von if-else-Blöcken oder Skripten erreichen können. Neuronale Netze können für Dinge verwendet werden wie:

Scannen und Erkennen der Umgebung Ein neuronales Netzwerk kann Informationen in Form von Sehen oder Hören empfangen. Diese Informationen können dann verwendet werden, um eine Antwort oder Antwort zu bilden oder um das Netzwerk zu trainieren. Diese Antworten können in Echtzeit angezeigt und aktualisiert werden, um die Antworten zu verbessern.

Erinnerung- Ein neuronales Netzwerk kann als Gedächtnisform für Spielfiguren verwendet werden. Neuronale Netze können aus Erfahrungen lernen und den Satz von Antworten und Reaktionen ergänzen.

Verhaltenskontrolle- Die Ausgabe des neuronalen Netzwerks kann verwendet werden, um die Aktionen der Spielfigur zu steuern. Eingaben können verschiedene Variablen der Spiel-Engine sein. Dann wird das Netzwerk in der Lage sein, das Verhalten der Spielfigur zu steuern.

Antwortzuordnung- Neuronale Netze funktionieren wirklich gut mit "Assoziationen", die im Wesentlichen die Bindung eines Raums an einen anderen sind. Eine Assoziation gibt es in zwei Varianten: eine Auto-Assoziation, die eine Eingabe mit sich selbst verknüpft, und eine Hetero-Assoziation, die eine Eingabe mit etwas anderem verknüpft. Die Antwortbindung verwendet neuronale Netze als Back-End oder Ausgabe, um eine weitere Ebene der indirekten Kontrolle über das Verhalten eines Objekts zu schaffen. Typischerweise könnten wir eine Reihe von Kontrollvariablen haben, aber wir haben nur klare Antworten auf eine Reihe spezifischer Kombinationen, auf die wir das Netzwerk trainieren können. Wenn wir jedoch ein neuronales Netzwerk als Ausgabe verwenden, können wir andere Antworten erhalten, die ungefähr im selben Bereich liegen wie unsere wohldefinierten.

Die angeführten Beispiele mögen etwas vage erscheinen, aber sie sind es. Tatsache ist, dass neuronale Netze ein Werkzeug sind, das wir nach Belieben verwenden können. Der Schlüssel hier ist, dass ihre Verwendung die Aufgabe der Erstellung von KI erleichtert und das Verhalten von Spielercharakteren vernünftiger macht.

Neuronale Netze 101

In diesem Abschnitt werden wir die wichtigsten Begriffe und Konzepte untersuchen, die bei der Erörterung neuronaler Netze verwendet werden. Das ist nicht so einfach, denn neuronale Netze sind eigentlich das Produkt mehrerer unterschiedlicher Disziplinen, und jede von ihnen trägt ihr eigenes spezifisches Vokabular. Leider ist das Vokabular in Bezug auf neuronale Netze die Schnittmenge der Wörterbücher all dieser Disziplinen, sodass wir einfach nicht alles berücksichtigen können. Außerdem ist die Theorie der neuronalen Netzwerke voll von redundanter Hardware, was bedeutet, dass viele Menschen das Rad neu erfinden. Dies beeinflusste die Schaffung einer Reihe von neuronalen Netzwerkarchitekturen auf einmal, von denen jede ihren eigenen Namen hat. Ich werde versuchen, allgemeine Begriffe und Situationen zu beschreiben, um mich nicht in der Benennung zu verzetteln. Nun, in diesem Artikel werden wir uns einige Netzwerke ansehen, die unterschiedlich genug sind, um unterschiedliche Namen zu haben. Machen Sie sich beim Lesen keine allzu großen Sorgen, wenn Sie nicht alle Konzepte und Begriffe sofort verstehen können, lesen Sie sie einfach, dann werden wir versuchen, sie im Kontext des Artikels noch einmal zu behandeln. Lasst uns beginnen...

Nachdem wir nun die „biologische“ Version des Neurons gesehen haben, wollen wir uns die Grundlagen des künstlichen Neurons ansehen, um die Grundlage für unsere Argumentation zu legen. Reis. 2.0 ist ein grafischer Standard für einen "Neuronode" oder ein künstliches Neuron. Wie Sie sehen können, hat es mehrere Eingänge, die mit X1 - Xn und B bezeichnet sind. Diesen Eingängen ist eine Gewichtung W1-Wn zugeordnet und ein b angehängt. Außerdem gibt es einen Summenanschluss Y und einen Ausgang y. Die Ausgabe y in der Neurode basiert auf der Übertragungsfunktion oder "Aktivierung", die eine Funktion der Eingabe der Neurode in das Netzwerk ist. Eingehende Daten kommen von Xs und von Bs, die mit benachbarten Knoten verbunden sind. Die Idee ist, dass B "Vergangenheit", "Erinnerung" ist. Die grundlegende Operation eines Neuronode ist die folgende: Die Eingabe von X wird mit ihrer zugeordneten Gewichtung multipliziert und summiert. Die Ausgabe der Summierung ist die Eingabe zum Aktivieren von Ya. Die Aktivierung wird dann in die Aktivierungsfunktion fa(x) eingespeist und die endgültige Ausgabe ist y. Die Gleichung für alles lautet:

du. 1.0

n
Ya \u003d B * b + e Xi * wi
ich = 1 UND

y = fa(Ja)

Die verschiedenen Formen von fa(x) werden gleich besprochen.

Bevor wir fortfahren, sollten wir über das einleitende Xi, die Gewichte Wi und ihre jeweiligen Bereiche sprechen. In den meisten Fällen enthalten die Eingänge positive und negative Zahlen im Satz (- ¥, + Eingänge = I). Viele neuronale Netze verwenden jedoch einfache zweiwertige Werte (wie wahr/falsch). Der Grund für die Verwendung eines so einfachen Schemas ist, dass schließlich alle komplexen Daten in eine reine Binärdarstellung konvertiert werden. Darüber hinaus müssen wir in vielen Fällen Computerprobleme wie die Spracherkennung lösen, die für zweiwertige Darstellungen genau richtig sind. Es ist jedoch nicht in Stein gemeißelt. In beiden Fällen sind die im zweiwertigen System verwendeten Werte hauptsächlich 0 und 1 im binären System oder -1 und 1 im bipolaren System. Beide Systeme sind ähnlich, außer dass die bipolare Darstellung mathematisch bequemer ist als die binäre. Die Gewichtungen Wi an jedem Eingang liegen normalerweise zwischen (-½, +½) und werden für positive bzw. negative Werte als "anregend" oder "hemmend" bezeichnet. Zusätzlicher Eingang B, der immer mit 1,0 aufgerufen und mit b multipliziert wird, wobei b sein Gewicht ist.

Wir setzen unsere Analyse fort, nachdem wir das Aktivierungs-Ya für die Neurode gefunden haben, wird es auf die Aktivierungsfunktion angewendet und das Ergebnis kann berechnet werden. Es gibt eine Reihe von Aktivierungsfunktionen mit unterschiedlichen Verwendungszwecken. Fa(x) Hauptaktivierungsfunktionen:

Die Gleichungen für jede sind recht einfach, aber jede passt zu ihrem eigenen Modell oder hat ihren eigenen Satz von Parametern.

Die Schritt-für-Schritt-Funktion wird in einer Reihe von neuronalen Netzwerken und Modellen verwendet, um eine bestimmte Kritikalität des Eingangssignals zu erreichen. Der Zweck des q-Faktors besteht darin, den kritischen Pegel des Eingangssignals zu modellieren, auf den das Neuron reagieren muss.

Die lineare Aktivierungsfunktion wird verwendet, wenn wir möchten, dass die Ausgabe der Neurode der Eingabeaktivierung so genau wie möglich folgt. Eine ähnliche Funktion kann verwendet werden, um lineare Systeme zu erzeugen, wie z. B. eine Bewegung mit konstanter Geschwindigkeit. Schließlich ist die Exponentialfunktion der Schlüssel zu fortschrittlichen neuronalen Netzwerken, der einzigen Möglichkeit, neuronale Netzwerke zu erstellen, die nichtlineare Antworten geben und nichtlineare Prozesse modellieren können. Die exponentielle Aktivierungsfunktion ist eine Abzweigung in der Entwicklung neuronaler Netze, da wir mit schrittweisen und linearen Funktionen niemals ein neuronales Netz erstellen können, das eine nichtlineare Antwort liefert. Wir sind jedoch nicht verpflichtet, diese spezielle Funktion zu nutzen. Abhängig von den gewünschten Netzwerkeigenschaften können auch hyperbolische, logarithmische und transzendente Funktionen verwendet werden. Schließlich können wir alle diese Funktionen verwenden, wenn wir wollen.

Wie Sie sich denken können, wird ein Neuron nicht viel bewirken, also müssen Sie eine Gruppe von Neuronen und eine Schicht von Neuroden erstellen, wie in Abb. 3.0. Die Abbildung zeigt ein kleines einschichtiges neuronales Netzwerk. Das neuronale Netz in Abb. 3.0 enthält eine Reihe von Eingabe- und Ausgabeknoten. Per Konvention ist dies ein einschichtiges neuronales Netzwerk, da die Eingabeschicht wird ignoriert, es sei denn, sie ist die einzige Schicht im Netzwerk. In diesem Fall ist die Eingabeschicht auch die Ausgabeschicht, das Netzwerk ist also einschichtig. Reis. 4.0 zeigt ein zweischichtiges neuronales Netzwerk. Beachten Sie, dass die Eingabeschicht immer noch nicht berücksichtigt wird und die innere Schicht als "versteckt" bezeichnet wird. Die Ausgabeschicht wird als Ausgabe der Antwortschicht bezeichnet. Theoretisch ist die Anzahl der Schichten in einem neuronalen Netz unbegrenzt, es kann jedoch sehr schwierig sein, die Beziehungen der verschiedenen Schichten und akzeptable Lernmethoden zu beschreiben. Der beste Weg, ein mehrschichtiges neuronales Netzwerk zu erstellen, besteht darin, jedes Netzwerk aus einer oder zwei Schichten zu machen und sie dann als Komponenten oder Funktionsblöcke zu verbinden.

Okay, reden wir jetzt über „vorübergehend“ oder das Thema Zeit. Wir alle wissen, dass unser Gehirn im Vergleich zu einem digitalen Computer ziemlich langsam ist. Tatsächlich erzeugt unser Gehirn einen Zyklus im Millisekundenbereich, während die Zeit für einen digitalen Computer in Nanosekunden und fast schon in Sub-Nanosekunden gemessen wird. Das bedeutet, dass der Signalweg von Neuron zu Neuron einige Zeit in Anspruch nimmt. Auch das wird in künstlichen Neuronen in dem Sinne modelliert, dass wir Schicht für Schicht rechnen und die Ergebnisse sequentiell ausgeben. Dies hilft, die in biologischen Systemen wie unserem Gehirn vorhandene Zeitverzögerung zu modellieren.

Wir sind mit der Vorbesprechung fast fertig, lassen Sie uns über einige allgemeine Konzepte sprechen und dann mit ein paar weiteren Begriffen abschließen. Die Frage, die Sie sich stellen sollten, lautet: „Welchen Sinn haben neuronale Netze?“ Das ist eine gute Frage, und es ist schwierig, sie definitiv zu beantworten. Erweiterte Frage - "Was möchten Sie versuchen, neuronale Netze dazu zu bringen?" Grundsätzlich zeigen sie eine Technik, die hilft, einen Raum in Bezug auf einen anderen zu reflektieren. Neuronen sind im Wesentlichen eine Art Gedächtnis. Und wie bei jeder Erinnerung können wir einige geeignete Begriffe anwenden, um sie zu beschreiben. Neuronen haben sowohl STM (Kurzzeitgedächtnis) als auch LTM (Langzeitgedächtnis). STM ist die Fähigkeit eines neuronalen Netzwerks, sich an etwas zu erinnern, das es gerade gelernt hat, und LTM ist die Fähigkeit eines neuronalen Netzwerks, sich an etwas zu erinnern, das es vor einiger Zeit im Lichte der gerade erhaltenen Informationen gelernt hat. Damit kommen wir zum Konzept Plastizität oder mit anderen Worten, auf das Konzept, wie sich das neuronale Netz mit Informationen oder beim Lernen verhalten wird. Kann ein neuronales Netz mehr Informationen lernen und sich an zuvor gelernte Informationen weiterhin korrekt „erinnern“? Wenn dies der Fall ist, werden neuronale Netze instabil, da sie am Ende so viele Informationen enthalten, dass sich die Daten endlos überschneiden und überlappen. Dies bringt uns zu einer weiteren Anforderung – Stabilität. Das Fazit ist, dass wir wollen, dass das neuronale Netzwerk ein gutes LTM, ein gutes STM hat, flexibel und stabil ist. Natürlich sind einige neuronale Netze nicht analog zum Gedächtnis, sie zielen hauptsächlich auf funktionales Mapping ab, und diese Konzepte gelten nicht für sie, aber Sie verstehen die Grundidee. Nachdem wir nun die oben genannten Konzepte im Zusammenhang mit dem Gedächtnis kennen, wollen wir den Überblick über einige mathematische Faktoren vervollständigen, die helfen werden, diese Eigenschaften zu bewerten und zu verstehen.

Eine der Hauptanwendungen neuronaler Netze ist die Erstellung eines Speichermechanismus, der unvollständige oder unscharfe Eingabedaten verarbeiten und ein Ergebnis zurückgeben kann. Das Ergebnis kann die Eingabe selbst (Assoziation) oder eine völlig andere Antwort als die Eingabe sein (Hetero-Assoziation). Es ist auch möglich, den N-dimensionalen Raum dem M-dimensionalen und nichtlinearen Datenladen zu überlagern. Dies bedeutet, dass das neuronale Netzwerk eine Art hyperräumliche Speichereinheit ist, da es ein Eingabe-N-Element mit einem Ausgabe-M-Element verbinden kann, wobei M gleich N sein kann oder nicht.

Was neuronale Netze im Wesentlichen tun, ist, den N-dimensionalen Raum in Regionen zu unterteilen, die Eingaben eindeutig auf Ausgaben abbilden oder Eingaben in verschiedene Klassen klassifizieren. Wenn dann die Werte (Vektoren) des eingehenden Datensatzes (nennen wir es S) zunehmen, folgt logischerweise, dass es für neuronale Netze schwieriger wird, Informationen zu trennen. Und da die neuronalen Netze mit Informationen gefüllt sind, überlappen sich die Eingabewerte, die „erinnert“ werden müssen, da der Eingaberaum nicht alle getrennten Daten in unendlich vielen Dimensionen enthalten kann. Diese Überlappung bedeutet, dass einige Einträge nicht so stark sind, wie sie sein könnten. Obwohl es in einigen Fällen kein Problem darstellt, ist es ein Problem bei der Modellierung von neuronalen Gedächtnisnetzwerken. Nehmen wir zur Veranschaulichung des Konzepts an, wir versuchen, einen N-Satz von Eingabevektoren mit einem Satz von Ausgaben zu verbinden. Der Ausgangssatz ist nicht so problematisch für eine ordnungsgemäße Funktion wie der Ausgangssatz S.

Wenn die Eingabemenge S streng binär ist, dann betrachten wir Folgen der Form 1101010 ... 10110. Nehmen wir an, unsere Eingabedaten haben jeweils nur 3 Bits, also besteht der gesamte Eingaberaum aus Vektoren:

v0 = (0,0,0), v1 = (0,0,1), v2 = (0,1,0), v3 = (0,1,1), v4 = (1,0,0), v5 = (1,0,1), v6 = (1,1,0),

Für mehr Genauigkeit ist die Grundlage für diesen Satz von Vektoren:

v = (1,0,0) * b2 + (0,1,0) * b1 + (0,0,1) * b0, wobei bi die Werte 0 oder 1 annehmen kann.

Wenn wir zum Beispiel annehmen, dass B2=1, B1=0 und B0=1, dann erhalten wir den folgenden Vektor:

v = (1.0.0) * 1 + (0.1.0) * 0 + (0.0.1) * 1 = (1.0.0) + (0.0.0) + (0 ,0,1) = (1,0 ,1), was die Vs unseres möglichen Eingabearrays ist

Eine Basis ist ein spezieller summierter Vektor, der eine Anordnung von Vektoren im Raum beschreibt. V beschreibt also alle Vektoren in unserem Raum. Ohne auf lange Erläuterungen einzugehen: Je orthogonaler die Vektoren im Eingangsarray sind, desto besser breiten sie sich im neuronalen Netzwerk aus und desto besser können sie aufgerufen werden. Orthogonalität bezieht sich auf die Unabhängigkeit von Vektoren, mit anderen Worten, wenn zwei Vektoren orthogonal sind, dann ist ihr Skalarprodukt Null, ihre Projektion aufeinander ist Null und sie können nicht relativ zueinander beschrieben werden. Es gibt viele orthogonale Vektoren im Array v, aber sie kommen in kleinen Gruppen vor, zum Beispiel ist V0 orthogonal zu allen Vektoren, also können wir es immer einschließen. Aber wenn wir V1 in das Array S aufnehmen, dann behalten nur die Vektoren V2 und V4 die Orthogonalität bei:

v0 = (0,0,0), v1 = (0,0,1), v2= (0,1,0), v4 = (1,0,0)

Warum? Weil Vi - Vj für alle i,j von 0...3 gleich Null ist. Mit anderen Worten, das Skalarprodukt aller Vektorpaare ist 0, also müssen sie alle orthogonal sein. Dieses Array eignet sich also sehr gut als Eingangsarray für neuronale Netzwerke. Aber das Array:

v6 = (1,1,0), v7 = (1,1,1)

möglicherweise schlecht, weil Die Eingänge v6-v7 sind ungleich Null, in einem binären System ist es 1. Die nächste Frage ist, können wir diese Orthogonalität messen? Die Antwort ist ja. Im binären Vektorsystem gibt es ein Maß namens Hamming-Distanz. Es wird verwendet, um den N-dimensionalen Abstand zwischen binären Vektoren zu messen. Dies ist einfach die Anzahl der Bits, die sich zwischen den beiden Vektoren unterscheiden. Zum Beispiel Vektoren:

v0 = (0,0,0), v1 = (0,0,1)

untereinander einen Hamming-Abstand von 1 haben, und

v2 = (0,1,0), v4 = (1,0,0)

haben eine Hamming-Distanz von 2.

Wir können die Hamming-Distanz als Maß für die Orthogonalität in binären Vektorsystemen verwenden. Und es kann uns dabei helfen festzustellen, ob unsere Eingabedatensätze Schnittmengen aufweisen. Die Bestimmung der Orthogonalität mit gemeinsamen Eingabevektoren ist schwieriger, aber das Prinzip ist das gleiche. Das ist genug Konzepte und Terminologie, lasst uns einen Sprung nach vorne machen und uns die tatsächlichen neuronalen Netze ansehen, die etwas bewirken, und vielleicht können Sie sie am Ende dieses Artikels verwenden, um die KI Ihres Spiels zu verbessern. Wir werden uns neuronale Netze ansehen, die verwendet werden, um logische Funktionen auszuführen, Eingaben zu klassifizieren und sie mit Ausgaben zu verknüpfen.

Reine Logik

Die ersten künstlichen neuronalen Netze wurden 1943 entwickelt. McCulloch und Pitts. Sie bestanden aus mehreren Neuroknoten und dienten hauptsächlich zur Berechnung einfacher logischer Funktionen wie AND, OR, XOR und deren Kombinationen. Reis. 5.0. repräsentiert die Hauptneuronen von McCulloch und Pitts mit zwei Eingängen. Wenn Sie ein Elektroingenieur sind, werden Sie sofort ihre große Ähnlichkeit mit Transistoren erkennen. In jedem Fall haben McCulloch-Pitts-Neuronen keine Verbindungen und die einfache Aktivierungsfunktion Fmp(x) lautet:

fmp (x) = 1, falls xq
0, wennx< q

Der MP (McCulloch-Pitts)-Neuroknoten funktioniert durch Summieren des Produkts der Xi-Eingaben und der Wi-Gewichte und nimmt Ya als Ergebnis für die Fmp(x)-Funktion. Die frühe Forschung von McCulloch-Pitts konzentrierte sich auf den Aufbau komplexer Logikschaltungen mit Neurodenmodellen. Außerdem ist eine der Regeln der Neuroknotenmodellierung, dass die Signalübertragung von Neuron zu Neuron einen Zeitschritt dauert. Dies trägt dazu bei, dem Modell natürlicher Neuronen näher zu kommen. Werfen wir einen Blick auf einige Beispiele für neuronale MP-Netze, die grundlegende Logikfunktionen implementieren. Die boolesche Funktion AND hat die folgende Wahrheitstabelle:

Wir können dies mit zwei Eingabe-MP-neuronalen Netzwerken mit Gewichtungen w1=1, w2=2 und q=2 modellieren. Dieses neuronale Netz ist in Abb. 1 dargestellt. 6.0a. Wie Sie sehen können, funktionieren alle Eingabekombinationen korrekt. Wenn wir zum Beispiel versuchen, die Eingänge X1=0, Y1=1 zu setzen, dann ist die Aktivierung:

X1*w1 + X2*w2 = (1)*(1) + (0)*(1) = 1,0

Wenn wir 1.0 für die Aktivierungsfunktion Fmp(x) anwenden, dann ist das Ergebnis 0, was die richtige Antwort ist. Als weiteres Beispiel, wenn wir versuchen, die Eingänge X1=1, X2=1 zu setzen, dann wird die Aktivierung sein:

X1*w1 + X2*w2 = (1)*(1) + (1)*(1) = 2,0

Wenn wir 2.0 in die Aktivierungsfunktion Fmp(x) eingeben, ist das Ergebnis 1.0, was korrekt ist. In anderen Fällen funktioniert es ähnlich. Die OR-Funktion ist ähnlich, aber die Empfindlichkeit von q wird auf 1,0 statt 2,0 wie bei AND geändert. Sie können versuchen, die Daten selbst durch Wahrheitstabellen laufen zu lassen, um die Ergebnisse zu sehen.

Das XOR-Netzwerk ist etwas anders, da es seitdem tatsächlich 2 Schichten hat die Ergebnisse der Vorverarbeitung werden im Ausgangsneuron weiterverarbeitet. Dies ist ein gutes Beispiel dafür, warum ein neuronales Netzwerk mehr als eine Schicht benötigt, um bestimmte Probleme zu lösen. XOR ist ein allgemeines neuronales Netzwerkproblem, das häufig verwendet wird, um die Leistung eines Netzwerks zu testen. In jedem Fall ist XOR linear untrennbar in eine separate Schicht, es muss in kleinere Stufen zerlegt werden, deren Ergebnisse aufsummiert werden. Die Wahrheitstabelle für XOR sieht so aus:

XOR ist nur wahr, wenn die Eingaben unterschiedlich sind, was ein Problem darstellt, weil beide Eingänge beziehen sich auf denselben Ausgang. XOR ist linear untrennbar, wie in Abb. 7.0. Wie Sie sehen können, gibt es keine Möglichkeit, die richtige Antwort direkt zu trennen. Die Sache ist, wir können die richtige Antwort mit zwei Strichen trennen, und genau das macht die zweite Schicht. Die erste Schicht bereitet die Daten vor oder löst einen Teil des Problems, und die verbleibende Schicht vervollständigt die Berechnung. Unter Bezugnahme auf Abb. 6.0 sehen wir, dass die Gewichtungen Wq=1, W2=-1, W3=1, W4=-1, W5=1, W6=1 sind. Das Netzwerk funktioniert wie folgt: Die Schicht wird berechnet, wenn X1 und X2 Gegensätze sind, die Ergebnisse in den Fällen (0,1) oder (1,0) sind Nahrung für Schicht zwei, die sie summiert und weitergibt, wenn sie wahr sind. Im Wesentlichen haben wir eine boolesche Funktion erstellt:

z = ((X1 UND NICHT X2) ODER (NICHT X1 UND X2))

Wenn Sie mit einfachen McCulloch-Pitts-Neuronen experimentieren möchten, finden Sie in der folgenden Auflistung einen vollständigen Neuroknoten-Stimulator mit zwei Eingängen.

// MCULLOCCH PITTS-SIMULATOR
// ENTHÄLT
/////////////////////////////////////////////////////

#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
#enthalten

// HAUPTSÄCHLICH
/////////////////////////////////////////////////////

leere Haupt(leere)
{
Schwebeschwelle, // dies ist der Theta-Term, der verwendet wird, um die Summierung zu schwellen
w1, w2, // diese enthalten die Gewichte
x1, x2, // Eingaben an die Neurode
y_in, // summierte Eingangsaktivierung
y_out; // endgültige Ausgabe von Neurode

printf ( "nMcCulloch-Pitts Single Neurode Simulator.n") ;
printf("Bitte Schwellenwert eingeben?");
scanf("%f" ,& Schwelle) ;

printf ( "nWert für Gewicht w1 eingeben?") ;
scanf("%f" ,&w1) ;

printf ( "nWert für Gewicht w2 eingeben?") ;
scanf("%f" ,&w2) ;

printf("nnSimulation beginnen:" ) ;

// Eintritt in die Hauptereignisschleife

während (1)
{
printf ( "nnSimulationsparameter: Schwelle=%f, W=(%f,%f) n", Schwelle, w1, w2) ;

// Eingaben vom Benutzer anfordern
printf("nEingabe für X1 eingeben?");
scanf("%f" ,& x1) ;

printf("nEingabe für X2 eingeben?");
scanf("%f" ,& x2) ;

// Aktivierung berechnen
y_ein = x1* w1 + x2* w2;

// Ergebnis in Aktivierungsfunktion eingeben (einfacher binärer Schritt)
if (y_in >= Schwelle)
y_out = (float) 1,0;
anders
y_out = (float) 0,0;

// Ergebnis ausdrucken
printf("nNeurode-Ausgabe ist %fn" , y_out) ;

// versuchen Sie es nochmal
printf ( "Wollen Sie fortfahren J oder N?") ;
Zeichen [ 8 ] ;
scanf("%s" , ans) ;

if (toupper(ans[ 0 ] ) != "Y" )
brechen ;
) // Ende während

printf("nnSimulation Complete.n");
) // Haupt beenden

Damit ist unsere Erörterung der grundlegenden Bausteine ​​eines neuronalen MP-Netzes abgeschlossen. Kommen wir zu komplexeren neuronalen Netzen, wie sie zum Klassifizieren von Eingabevektoren verwendet werden.

Klassifizierung und Erkennung von „Bildern“

Schließlich sind wir bereit, uns echte neuronale Netze anzusehen, die eine gewisse Verwendung gefunden haben! Um zu einer anschließenden Diskussion der neuronalen Netze von Hebb und Hopfield überzugehen, werden wir die allgemeine Struktur neuronaler Netze analysieren, die eine Reihe von Konzepten wie lineare Trennbarkeit, bipolare Darstellungen und Analogien zwischen neuronalen Netzen und Erinnerungen veranschaulichen wird. Werfen wir zunächst einen Blick auf Abb. 8.0, das das grundlegende neuronale Netzwerkmodell darstellt, das wir verwenden werden. Wie Sie sehen können, ist dies ein Ein-Knoten-Netzwerk mit drei Eingängen, einschließlich Offset B, und einem Ausgang. Wir möchten sehen, wie dieses Netzwerk verwendet werden kann, um die logische UND-Operation zu implementieren, die wir so einfach in McCulloch-Pitts-Neuroknoten implementiert haben.

Beginnen wir mit der Verwendung von bipolaren Darstellungen, sodass alle Nullen durch -1 ersetzt werden. Die Wahrheitstabelle für logisches UND bei Verwendung von bipolaren Ein- und Ausgängen ist unten dargestellt:

Und hier ist die fc(x)-Aktivierungsfunktion, die wir verwenden werden:


fc (x) = 1, falls x i q
- 1, wenn x< q

Beachten Sie, dass die Funktion ein Schritt in Richtung einer bipolaren Ausgabe ist. Bevor ich fortfahre, lassen Sie mich Samen in Ihr Gehirn pflanzen: Mischen und Wahrnehmen machen am Ende dasselbe, sie geben uns einen weiteren Freiheitsgrad in unseren Neuronen, der es ihnen ermöglicht, Reaktionen zu erzeugen, die ohne sie nicht erreicht werden können. Sie werden es bald sehen.

Eine einzelne Neurode in Abb. 8.0 versucht eine Klassifizierung für uns vorzunehmen. Es wird uns sagen, ob unsere Eingabe von dieser Klasse ist oder nicht. Zum Beispiel, ob es sich um ein Bild eines Baumes handelt oder nicht. Oder ist es in unserem Fall (einfaches logisches UND) die Klasse +1 oder -1? Dies ist die Grundlage der meisten neuronalen Netze, weshalb ich von linearer Trennbarkeit gesprochen habe. Wir müssen zu einer linearen Trennung des Raums gelangen, die unsere Eingaben und Ausgaben korreliert, so dass es eine solide Trennung des Raums gibt, der sie trennt. Wir müssen also die richtigen Gewichtungs- und Bias-Werte finden, die es für uns tun. Aber wie machen wir das? Ist es nur Versuch und Irrtum oder gibt es eine Methodik? Die Antwort ist, dass es eine Reihe von Methoden zum Trainieren eines neuronalen Netzes gibt. Diese Methoden funktionieren an verschiedenen mathematischen Beispielen und können bewiesen werden, aber im Moment nehmen wir nur Werte, die funktionieren, ohne den Prozess ihrer Gewinnung zu berücksichtigen. Diese Übungen führen uns zu Lernalgorithmen und komplexeren Netzwerken als den hier gezeigten.

Okay, wir versuchen, Gewichte Wi und Bias B zu finden, die das richtige Ergebnis für verschiedene Eingaben mit einer Aktivierungsfunktion Fc(x) liefern. Lassen Sie uns die Summationsaktivierung unseres Neuroknotens schreiben und sehen, ob wir irgendwelche Beziehungen zwischen Gewichtung und Eingabe herstellen können, die uns helfen können. Bei gegebenen Eingaben X1 und X2 mit Gewichten W1 und W2 zusammen mit B=1 und Bias b erhalten wir die folgende Formel:

X1*w1 + X2*w2 + B*b=q

Da B immer 1,0 ist, vereinfacht sich die Formel zu:

X1*w1 + X2*w2 + b=q

X2 = -X1*w1/w2 + (q -b)/w2 (Auflösung nach X2)

Was ist das? Es ist eine Linie! Und wenn die linke Seite größer oder gleich q ist, also (X1*W1+X2*W2+b), dann antwortet die Neurode mit 1, andernfalls liefert sie das Ergebnis -1. Diese. die Linie ist die Grenze der Lösung. Reis. 9.0 veranschaulicht dies. Auf dem Diagramm können Sie sehen, dass die Steigung der Linie -w1/w2 und der X2-Abschnitt (q-b)/w2 ist. Jetzt ist klar, warum wir q loswerden können? Es ist Teil einer Konstante, und wir können b immer skalieren, um einen Verlust zu erzielen, also nehmen wir an, dass Q = 0 ist, und als Ergebnis erhalten wir die Gleichung:

X2 \u003d -X1 * w1 / w2 - s / w

Wir wollen die Gewichte W1 und W2 und den Bias b so finden, dass sie unsere Ausgaben trennen oder sie ohne Überlappung in spezielle Partitionen klassifizieren. Dies ist der Schlüssel zur linearen Trennbarkeit. Reis. 9.0 zeigt die Anzahl der Entscheidungsgrenzen, die ausreichen, sodass Sie jede davon nehmen können. Nehmen wir die einfachsten:

W1=W2=1

Mit diesen Werten wird die Entscheidungsgrenze zu:

X2 = -X1*w1/w2 - b/w2 -> X2 = -1*X1 + 1

Die Steigung ist -1 und der Schnittpunkt X2 = 1. Wenn wir die Eingabevektoren für logisches UND in diese Gleichung einsetzen und die Aktivierung von Fc(x) verwenden, erhalten wir die korrekte Ausgabe. Wenn zum Beispiel X2+X1-1 > 0, dann ist die Antwort der Neurode -1. Versuchen wir es mit unserer UND-Eingabe und sehen, was passiert:

Wie Sie sehen können, lösen neuronale Netze mit der entsprechenden Gewichtung und Vorspannung das Problem perfekt. Darüber hinaus gibt es eine ganze Familie von Gewichten, die dies genauso gut tun (die Entscheidungsgrenzen in eine Richtung senkrecht zu sich selbst verschieben). Es gibt jedoch einen wichtigen Punkt. Ohne Offset oder Empfindlichkeit sind nur direkte Pässe möglich, da Intercept X2 sollte 0 sein. Dies ist sehr wichtig und der Hauptgrund für die Verwendung von Empfindlichkeit oder Offset, daher war dieses Beispiel wichtig, weil es diese Tatsache deutlich zeigt. Also, genauer gesagt - wie findet man die richtigen Gewichtswerte? Ja, wir haben jetzt geometrische Analogien, und das ist der Anfang, einen Algorithmus zu finden.

Hebb-Training

Wir sind jetzt bereit, den ersten Lernalgorithmus und seine Anwendung in einem neuronalen Netzwerk zu sehen. Einer der einfachsten Lernalgorithmen wurde von Donald Hebb erfunden und basiert auf der Verwendung von Eingabevektoren, um die Gewichtung so zu ändern, dass die Gewichtung die bestmögliche lineare Trennung von Eingaben und Ausgaben erzeugt. Leider funktioniert der Algorithmus einwandfrei. Für orthogonale Eingaben funktioniert dies tatsächlich gut, aber für nicht-orthogonale Eingaben fällt der Algorithmus auseinander. Auch wenn der Algorithmus nicht zu korrekten Gewichtungen für alle Eingaben führt, ist er das Herzstück der meisten Lernalgorithmen, also beginnen wir damit.

Bevor Sie den Algorithmus sehen, denken Sie daran, dass er nur für eine Neurode gilt, ein neuronales Netzwerk mit einer einzigen Schicht. Sie können natürlich viele Neuroden in eine Schicht legen, aber sie arbeiten alle parallel und können parallel trainiert werden. Anstatt einen einzelnen Gewichtsvektor zu verwenden, verwenden Multi-Neuronoden eine Gewichtsmatrix. Wie auch immer, der Algorithmus ist einfach, er sieht ungefähr so ​​​​aus:

  • Die Eingabe erfolgt in bipolarer Form I=(-1,1,0,... -1,1) und enthält k Elemente.
  • Es gibt N Eingabevektoren, und wir bezeichnen ihren Satz als ein J-Element, z. Ij.
  • Die Ausgänge werden Yj genannt, und es gibt K Ausgänge, jeder für einen Eingang Ij.
  • Die Gewichte W1-Wk sind in einem Vektor W=(w1, w2,...wk) enthalten

Schritt 1. Initialisiere alle unsere Gewichte auf 0 und lasse sie in einem Vektor W von N Einträgen enthalten sein. Initialisieren Sie auch Offset b auf 0.

Schritt 2. Führen Sie von j=1 bis n Folgendes aus:

b = b + yj (wobei y das gewünschte Ergebnis ist

w = w + Ij * yj (Denken Sie daran, dass dies eine Vektoroperation ist)

Ein Algorithmus ist nichts anderes als eine Art "Akkumulator". Die Verschiebung von Entscheidungsgrenzen basiert auf Änderungen in Input und Output. Das einzige Problem ist, dass sich die Grenze in einigen Fällen nicht schnell genug (oder überhaupt nicht) bewegt und das "Lernen" nicht stattfindet.

Wie nutzen wir also Hebbs Lernen? Die Antwort auf diese Frage ist die gleiche wie beim vorherigen neuronalen Netzwerk, außer dass wir jetzt eine algorithmische Methode zum Trainieren des Netzwerks haben, und dieses Netzwerk heißt Hebbian Net. Nehmen wir als Beispiel unsere gültige boolesche Funktion und sehen, ob der Algorithmus die richtigen Gewichtungs- und Bias-Werte dafür finden kann. Die folgende Summierung entspricht der Ausführung des Algorithmus:

w = + + + = [(-1, -1)*(-1)] + [(-1, 1)*(-1)] + [(1, -1)*(-1)] + [ (1, 1)*(1)] = (2,2)

b = y1 + y2 + y3 + y4 = (-1) + (-1) + (-1) + (1) = -2

Also W1=2, W2=2 und b=2. Dies sind einfach skalierte Versionen der Werte W1=1, W2=2, B=-1, die wir im vorherigen Abschnitt erhalten haben. Mit diesem einfachen Algorithmus können wir ein neuronales Netzwerk (von einer einzelnen Neurode) darauf trainieren, auf eine Reihe von Eingaben zu reagieren oder sie als wahr/falsch oder 1/-1 zu klassifizieren. Und jetzt, wenn wir eine Reihe solcher Neuroknoten hätten, könnten wir ein Netzwerk erstellen, das Eingaben nicht nur als Ja/Nein definiert, sondern auch Eingaben mit bestimmten Mustern verknüpft. Dies ist eine der Grundlagen für die nächste Struktur neuronaler Netze, Hopfield-Netze.

Hopfield-Algorithmen

John Hopfield ist ein Physiker, der gerne mit neuronalen Netzen spielt (was gut für uns ist). Er entwickelte ein einfaches (zumindest vergleichsweise) aber effektives neuronales Netzwerkmodell namens Hopfield Network. Es wird verwendet, um zuzuordnen, wenn Sie einen Vektor x eingeben, erhalten Sie x als Ausgabe (hoffe ich). Das Hopfield-Netzwerk ist in Abbildung 10.0 dargestellt. Dies ist ein einschichtiges Netzwerk mit einer bestimmten Anzahl von Neuroknoten gleich der Anzahl von Eingängen Xi. Das Netzwerk ist vollständig verbunden, was bedeutet, dass jede Neurode mit jeder anderen Neurode verbunden ist und die Eingänge auch die Ausgänge sind. Das mag Ihnen seltsam erscheinen, weil erscheint Rückkopplung. Feedback ist eines der Hauptmerkmale des Hopfield-Netzwerks und eine der grundlegenden Grundlagen für das Erzielen des richtigen Ergebnisses.

Das Hopfield-Netzwerk ist ein iterativer autoassoziativer Speicher. Es kann einen bis mehrere Zyklen dauern, bis das richtige Ergebnis erzielt wird. Lassen Sie mich klarstellen: Ein Hopfield-Netzwerk empfängt Eingaben und gibt sie dann zurück, und die resultierende Ausgabe kann die gewünschte Eingabe sein oder auch nicht. Diese Rückkopplungsschleife kann mehrere Male durchlaufen werden, bevor der Eingangsvektor zurückgegeben wird. Daher der Funktionsablauf des Hopfield-Netzwerks: Bestimmen Sie zuerst das Gewicht unserer Eingaben, die wir assoziieren möchten, geben Sie dann den Eingabevektor an und sehen Sie, was die Aktivierungsfunktion ergibt. Wenn das Ergebnis mit unserer ursprünglichen Eingabe übereinstimmt, hat alles geklappt, wenn nicht, nehmen wir den resultierenden Vektor und speisen ihn in das Netzwerk ein. Sehen wir uns nun die Gewichtsmatrix und den Lernalgorithmus an, die in Hopfield-Netzwerken verwendet werden.

Der Lernalgorithmus für das Hopfield-Netzwerk basiert auf der Hebbschen Regel und summiert einfach das Ergebnis. Da Hopfield-Netzwerke jedoch mehrere Eingabeneuronen haben, ist das Gewicht kein Array von Gewichten mehr, sondern ein Array von Arrays, die kompakt in einer einzigen Matrix enthalten sind. Somit wird die Gewichtsmatrix W für das Hopfield-Netzwerk basierend auf dieser Gleichung erstellt:

  • Die Eingangsvektoren sind in bipolarer Form I = (-1,1,... -1,1) und enthalten k Elemente.
  • Es gibt N Eingabevektoren, und wir werden ihre Menge als j-Element von I bezeichnen, d.h. Ij.
  • Die Ausgänge werden Yj genannt, und es gibt k Ausgänge, jeder für seinen eigenen Eingang Ij.
  • Die Gewichtsmatrix W ist quadratisch und hat seitdem die Dimension kxk wir haben k Eingänge.

k
W (kxk) = eIit x Ii
ich = 1

Hinweis: Jedes äußere Produkt hat die Dimensionen K x K, da wir einen Spaltenvektor und einen Zeilenvektor multiplizieren.

Und, Wii = 0 für alle i

Die fh(x)-Aktivierungsfunktion ist unten dargestellt:

fh (x) = 1, falls x i 0
0, wennx< 0

fh (x) ist eine Treppenfunktion mit binärem Ergebnis. Das bedeutet, dass jeder Eingang binär sein muss, aber haben wir schon gesagt, dass die Eingänge bipolar sind? Nun, ja, das ist es, und das ist es nicht. Wenn die Gewichtsmatrix generiert wird, konvertieren wir alle Eingabevektoren in das bipolare Format, aber für normale Operationen verwenden wir die binäre Version der Eingabe und Ausgabe, wie das Hopfield-Netzwerk ist ebenfalls binär. Diese Konvertierung ist optional, erleichtert aber die Netzwerkdiskussion ein wenig. Wie auch immer, schauen wir uns ein Beispiel an. Angenommen, wir möchten 4 Hopfield-Netzwerkknoten erstellen und diese Vektoren aufrufen:

I1=(0,0,1,0), I2=(1,0,0,0), I3=(0,1,0,1) Hinweis: Sie sind orthogonal

Umrechnung in bipolare Werte ergibt:

I1* = (-1, -1,1, -1) , I2* = (1, -1, -1, -1) , I3* = (-1,1, -1,1)

Jetzt müssen wir W1, W2, W3 berechnen, wobei Wi das Produkt der Transposition jeder Eingabe mit sich selbst ist.

W1= [ I1* t x I1* ] = (— 1 , - 1 , 1 , - 1 ) t x (— 1 , — 1 , 1 , — 1 ) =
1 1 — 1 1
1 1 — 1 1
— 1 — 1 1 — 1
1 1 — 1 1 W2 = [ I2* t x I2* ] = (1 , — 1 , — 1 , — 1 ) t x (1 , — 1 , — 1 , — 1 ) =
1 — 1 — 1 — 1
— 1 1 1 1
— 1 1 1 1
— 1 1 1 1

W3 = [ I3* t x I3* ] = (- 1 , 1 , - 1 , 1 ) t x (- 1 , 1 , - 1 , 1 ) =
1 — 1 1 — 1
— 1 1 — 1 1
1 — 1 1 — 1
— 1 1 — 1 1

Das Nullstellen der Hauptdiagonale ergibt die endgültige Gewichtsmatrix:

W=
0 — 1 — 1 — 1
— 1 0 — 1 3
— 1 — 1 0 — 1
— 1 3 — 1 0

Wow, jetzt lass uns tanzen. Lassen Sie uns unsere ursprünglichen Vektoren eingeben und uns die Ergebnisse ansehen. Multiplizieren Sie dazu einfach die Eingänge mit der Matrix und verarbeiten Sie jeden Ausgang mit der Funktion Fh(x). Hier sind die Ergebnisse:

, — 1 ) und fh((0 , — 1 , — 1 , — 1 ) ) = (1 , 0 , 0 , 0 )

I3 x W = (— 2 , 3 , - 2 , 3 ) und fh((— 2 , 3 , — 2 , 3 ) ) = (0 , 1 , 0 , 1 )

Die Eingaben wurden perfekt "erinnert", wie es sein sollte, denn sie sind orthogonal. Als letztes Beispiel nehmen wir an, dass unsere Eingabe (Hören, Sehen usw.) etwas "verrauscht" ist und einen Fehler enthält. Nehmen wir I3=(0,1,0,1) und fügen etwas Rauschen hinzu, d.h. I3-Rauschen = (0,1,1,1). Sehen wir uns nun an, was passiert, wenn wir diesen "verrauschten" Vektor in das Hopfield-Netzwerk einführen:

I3-Rauschen x W = (-3, 2, -2, 2) und Fh ((-3,2, -2, 2)) = (0,1, 0,1)

Überraschenderweise wird der ursprüngliche Vektor "erinnert". Es ist sehr nett. Auf diese Weise haben wir die Möglichkeit, ein "Gedächtnis" zu schaffen, das mit Bitmustern gefüllt ist, die aussehen wie Bäume (Eiche, Trauerweide, Fichte usw.), und wenn wir einen anderen Baum, wie z. B. eine Weide, eingeben, was war nicht im Netzwerk, unser Netzwerk wird (hoffentlich) Informationen darüber ausgeben, wie es "denkt", wie die Weide aussieht. Das ist eine der Stärken des assoziativen Gedächtnisses: Wir müssen das Netzwerk nicht für jeden möglichen Input trainieren, wir brauchen nur so viel, bis das Netzwerk „Assoziationen“ hat. Die "Schließen"-Eingänge werden dann üblicherweise als ursprünglich gelernter Eingang gespeichert. Es ist die Grundlage der Bild- und Spracherkennung. Fragen Sie mich nicht, woher ich die „Baum“-Analogie habe. Auf jeden Fall habe ich am Ende unseres Artikels einen autoassoziativen Hopfield-Netzwerksimulator eingefügt, mit dem Sie Netzwerke mit bis zu 16 Neuroknoten erstellen können.

Hirntot...

Das ist alles, was wir uns heute ansehen werden. Ich hatte gehofft, zu den Preceptron-Netzwerken zu gelangen, aber na ja. Ich hoffe, Sie verstehen zumindest ein wenig, was neuronale Netze sind und wie man Arbeitsprogramme zu ihrer Modellierung erstellt. Wir haben die grundlegenden Begriffe und Konzepte, einige der mathematischen Grundlagen und einige der gebräuchlichsten Netzwerkmodelle behandelt. Es gibt jedoch noch viel mehr Dinge über neuronale Netze zu lernen. Dies sind Perceptrons, Fuzzy-Assoziativspeicher oder FAMs, bidirektionaler Assoziativspeicher oder BAMs, Kohonen-Karten, Netzwerk-Backpropagation-Algorithmus, adaptive Resonanznetzwerktheorie und vieles mehr. Das ist es, mein neuronales Netzwerk ruft mich zum Spielen!