Rekurrente Neuronale Netze

Unzählige Lernaufgaben erfordern den Umgang mit sequentiellen Daten. Bilderkennung, Sprachsynthese und Musikerzeugung benötigen alle ein Sequenz-Modell. Rekurrente (wiederkehrende) neuronale Netze (RNNs) speichern und lernen die Dynamik von Sequenzen mittels Zyklen in einem Netzwerk von Knoten.

Dieser Abschnitt stellt eine formale Notation vor und beschreibt Neuronale Netze im Allgemeinen.

Sequenzen

Die Eingabe zu einem RNN ist eine Sequenz und / oder sein Ergebnis ist eine Sequenz. Eine Eingangs-Sequenz (ein Eingangs-Vektor) kann mit x (1), x (2), …, x (T) bezeichnet werden, wobei jeder Datenpunkt x (t) ein reeller Wert ist. In ähnlicher Weise kann eine Zielsequenz (y (1), y (2),…,y (T)) bezeichnet werden. Ein Trainingssatz ist typischerweise ein Satz von Beispielen, bei denen jedes Beispiel ein (Eingabesequenz, Zielsequenz) Paar ist. Die Eingabe oder die Ausgabe kann auch ein einzelner Datenpunkt sein. Der maximale Zeitindex der Sequenz wird T genannt.

Es werden nachfolgend Hochzeiger mit Klammern für Zeit-Informationen verwendet, um Verwechslungen zwischen Sequenzschritten und Indizes der Knoten zu verhindern. Eine Eingabesequenz besteht somit aus Datenpunkten Latex formula die sich als diskrete Sequenz von durch t indizierten Zeitschritten zusammensetzt. Eine Zielsequenz besteht aus Datenpunkten Latex formula.
Wenn ein Modell vorhergesagte Datenpunkte erzeugt, werden diese markiert Latex formula dargestellt.

Neuronale Netzwerke

Neuronale Netze sind biologisch inspirierte Berechnungsmodelle. Ein neuronales Netzwerk besteht aus einem Satz von künstlichen Neuronen, als Knoten oder Einheiten und eine Reihe von gerichteten Kanten zwischen ihnen, die intuitiv die Synapsen in einem biologischen neuronalen Netzwerk repräsentieren.

Mit jedem verbunden Neuron j ist eine Aktivierungsfunktion Latex formula verknüpft, die manchmal auch als Link-Funktion bezeichnet wird. Es wird die Notation Latex formula und nicht Latex formula verwendet, dieses im Gegensatz zu einigen anderen Darstellungen, um die Aktivierungsfunktion aus den Werten der verborgenen Knoten in einem Netzwerk zu unterscheiden (in der Literatur auch allgemein mit h bezeichnet).

Jedem Knoten j‘ bis j ist ein Gewicht Latex formula zugeordnet. Gemäß mehreren Grundlagenpapieren [Hochreiter und Schmidhuber, 1997, Gers et al., 2000, Gers, 2001, Sutskever et al., 2011] indexieren wir auch hier Neuronen mit j und j‘ und Latex formula das dazu korrespondierende Gewicht, als die gerichtete Verbindung zum Knoten j vom Knoten j‘. Es ist wichtig zu beachten, dass in vielen Referenzen die Indizes getauscht sind, d.h. Latex formula bezeichnet hier das Gewicht von-bis auf der gerichteten Kante vom Knoten j‘ zum Knoten j, wie in den Unterlagen von Elkan[2015] und in Wikipedia [2015].

Der Wert Latex formula jedes Neurons j wird durch Anwenden seiner Aktivierungsfunktion zu einer gewichteten Summe der Werte seiner Eingangsknoten berechnet:

Latex formula

Zur Vereinfachung nennen wir die gewichtete Summe innerhalb der Klammern als eingehende Aktivierung und bezeichnen dieses auch als Latex formula:

Latex formula

In Diagrammen sind Neuronen als Kreise und Übergänge als verbindende Pfeile dargestellt.

Häufige Optionen für die Aktivierungsfunktion ist die Sigmoid-Funktion:

Latex formula

und die tanh-Funktion:

Latex formula

Die Aktivierungsfunktion an den Ausgangsknoten hängt von der Aufgabe ab. Für Mehr-Klassen-Klassifizierung mit K alternativen Klassen, wenden wir eine Softmax-Nichtlinearität in einer Ausgangsschicht von K Knoten an. Die Softmax-Funktion wird wie folgt berechnet:

Latex formula

Der Nenner der Softmax-Funktion ist ein Normalisierungsbegriff, der aus der Summe der Zähler besteht, so dass sich die Ausgänge aller Knoten zu eins addieren.

Feedforward-Netzwerke und Backpropagation

In einem neuronalen Modell muss man die Reihenfolge der Berechnung bestimmen. Sollen nur einzelne Knoten zu einem Zeitpunkt abgetastet und aktualisiert werden, oder sollen die Werte aller Knoten auf einmal berechnet werden und dann alle Aktualisierungen gleichzeitig angewendet werden.

Feedforward-Netzwerke sind eine eingeschränkte Klasse von Netzwerken, die sich mit diesem Problem beschäftigen, indem sie Zyklen verbieten. Angesichts der Abwesenheit von Zyklen können alle Knoten angeordnet werden und die Ausgänge in jeder Schicht können mit den Ausgängen von berechnet Knoten aus unteren Schichten bestimmt werden.

Der Eingang x zu einem Feedforward – Netzwerk ist die unterste Schicht. Jede höhere Schicht wird dann sukzessive bis zur Ausgabe berechnet. An der obersten Schicht wird
Latex formula erzeugt. Feedforward-Netzwerke werden häufig für überwachte Lernaufgaben verwendet, wie Klassifikation und Regression. Das Lernen wird durch iteratives Aktualisieren jedes der Gewichte erreicht. Hierbei wird die Differenz minimiert, die den Abstand zwischen dem Ausgangssignal Latex formula und dem Ziel y kennzeichnet.

Der erfolgreichste Algorithmus für das Training neuronaler Netze ist die Backpropagation, eingeführt von Rumelhart et al. [1985]. Backpropagation verwendet die Kettenregel. Das Training ist aber nicht einfach, da in einem neuronalen Netzwerk mit sigmoidalen oder tanh – Aktivierungsfunktionen der Knoten in jeder Ebene niemals den Wert Null annehmen können.

Rekurrente Neuronale Netze

Rekurrente Neuronale Netze (RNN) sind Feedforward Neuronale Netze, die durch die Einbeziehung von Übergängen, die aneinander angrenzende Zeitschritte überspannen und einen Zeitablauf einführen. Wie Feedforward-Netzwerke haben RNNs keine Zyklen. Jedoch Übergänge, die angrenzende Zeitschritte verbinden und eine Ablauffolge definieren. Diese können auch Zyklen bilden, einschließlich Zyklen der Länge eins, die Selbstverbindungen durch Anreihung des immer wieder gleichen Knotens sind.

Training rekurrenter Neuronaler Netze

Das Training wiederkehrenden Netzwerken ist lange Zeit als schwierig erachtet worden. Insbsondere Aufgrund der Schwierigkeit des Erlernens von weitreichenden Abhängigkeiten, wie von Bengio et al.[1994] und erweitert von Hochreiter et al. [2001] betrachtet. Die Probleme von verschwindenden und explodierden Gradienten treten auf, wenn die Fehler über viele Zeitschritte übertragen werden. Als kleines Beispiel betrachten wir ein Netzwerk mit einem einzigen Eingangsknoten, einem einzelnen Ausgangsknoten und einem einzigen wiederkehrenden verdeckten Knoten. Man betrachte nun einen Eingang, der zum Zeitpunkt t1 an das Netzwerk übergeben wird, und einen Fehler, der zum Zeitpunkt t2 berechnet wird, wobei die Eingabe von Null in den dazwischenliegenden Zeitschritten vorausgesetzt wird. Das Binden von Gewichten über Zeitschritte bedeutet, dass die wiederkehrenden Übergänge am versteckten Knoten j immer das gleiche Gewicht haben. Daher wird der Beitrag der Eingabe zum Zeitpunkt t zum Ausgang zum Zeitpunkt t1 entweder explosionsartig oder exponentiell schnell null, wenn t2-t1 groß wird. Daher wird die Ableitung des Fehlers in Bezug auf die Eingabe entweder explodieren oder verschwinden.

Welche der beiden Phänomene auftritt hängt davon ab, ob das Gewicht der rekurrierenden Übergänge Latex formula  oder  Latex formula und wie die Aktivierungsfunktion im verborgenen Knoten ausgelegt ist. Bei einer sigmoidalen Aktivierungsfunktion ist das Problem des Verschwindens des Gradienten stärker, aber mit einer gleichgerichteten Lineareinheit max(0; x) ist es einfacher, den explodierenden Gradienten vorzustellen. Pascanu et al. [2012] gibt eine gründliche mathematische Behandlung der verschwindenden und explodierenden Gradientenprobleme, die die genauen Bedingungen charakterisieren, unter denen diese Probleme auftreten können. Angesichts dieser Bedingungen schlagen sie einen Ansatz zur Ausbildung über einen Regularisierungsausdruck vor, der die Gewichte zu Werten zwingt, bei denen der Gradient weder verschwindet noch explodiert.

Truncated backpropagation through time (TBPTT) ist eine Lösung für das explodierende Gradientenproblem für kontinuierlich laufende Netzwerke [Williams und Zipser, 1989]. Bei TBPTT wird eine maximale Anzahl von Zeitschritten festgelegt, entlang derer Fehler übertragen werden dürfen. Während TBPTT mit einem kleinen Cutoff verwendet werden kann, um das explodierende Gradientenproblem zu lindern, erfordert es das Opfer der Fähigkeit Long-Range-Abhängigkeiten lernen zu können. Die später beschriebene LSTM-Architektur verwendet sorgfältig konstruierte Knoten mit wiederkehrenden Kanten mit festem Einheitsgewicht als Lösung für das Problem des Verschwindens des Gradienten.

RNN Netzwerkdesign

Die Grundlagenforschung über RNN Netzwerke fand in den 1980er Jahren statt. In 1982 führte Hopfeld eine Familie RNN Netze ein. Sie wurden durch Gewichte zwischen den Knoten und Verknüpfungsfunktionen mit einfachen Schwellenwerten definiert. Diese Hopfeld-Netzwerke sind nützlich für das Wiedererkennen eines gespeicherten Musters und sind die Vorläufer von Auto-Encodern.

Die Architektur von Elman [1990] verwendet zusätzlich verdeckte Knoten. Die
Architektur entspricht einem einfachen RNN, in dem jedem verdeckten Knoten eine einzelne selbst verbundene wiederkehrende Kante ist. Die Idee der gewichteten wiederkehrenden Kanten, bei denen versteckte Knoten verbunden sind, war in der Arbeit
LSTM-Netzwerke [Hochreiter und Schmidhuber, 1997] dann grundlegend für weitere Verbesserungen.

Das Lernen mit RNN Netzwerken war anfangs schwierig. Die erfolgreichsten RNN-Architekturen für das Sequenzlernen stammen aus zwei Beiträgen Veröffentlicht im Jahr 1997. Die erste Papier, Long Short-Term Memory von Hochreiter und Schmidhuber [1997], setzt eine Speicherzelle vor die traditionellen Knoten in der verborgenen Schicht eines Netzwerks. Mit diesen Gedächtniszellen sind die Netzwerke in der Lage die Lernschwierigkeiten zu überwinden.

Das zweite Papier, Bidirektionale RNN (BRNN) von Schuster und Paliwal [1997], führt eine Architektur ein, in der Informationen aus der Zukunft und der Vergangenheit verwendet werden, um die Ausgabe an jedem Punkt in der Sequenz zu bestimmen. Dies steht im Gegensatz zu bisherigen Netzen, in denen nur die vergangene Eingabe die Ausgabe beeinflussen kann.

Im nächsten Abschnitt erläutern wir die LSTM und BRNN und beschreiben die neuronale Turingmaschine (NTM), die RNNs mit einem adressierbaren externen Speicher erweitert [Graves et al., 2014].

Long Short-Term Memory (LSTM)

LSTM-Modelle helfen in erster Linie, das Problem das Verschwinden von Gradienten zu überwinden. Dieses Modell ähnelt einem herkömmlichen, wiederkehrenden neuronalen Netz mit einer verborgenen Schicht, wobei jedoch jeder gewöhnliche Knoten in der verborgenen Schicht durch eine Speicherzelle ersetzt wird.
Jede Speicherzelle enthält einen Knoten mit einer selbstverbundenen wiederkehrenden Kante von festem Gewicht 1, wodurch sichergestellt wird, dass der Gradient über viele Zeitschritte hinweggehen kann, ohne verschwinden oder explodieren zu müssen. Um Referenzen auf eine Speicherzelle und nicht auf einen gewöhnlichen Knoten zu unterscheiden, benutzen wir den Index c.

Der Begriff LSTM „langes Kurzzeitgedächtnis“ kommt aus der Intuition, dass
einfache wiederkehrende neuronale Netze ein Langzeitgedächtnis in Form von Gewichten
haben. Die Gewichte ändern sich während des Trainings langsam und verschlüsseln das allgemeine Wissen über die Daten. Sie haben auch Kurzzeitgedächtnis in Form von kurzlebigen Aktivierungen, die von jedem Knoten zu aufeinanderfolgenden Knoten übergehen. Das LSTM-Modell führt einen Zwischenspeichertyp über die Speicherzelle ein. Eine Speicherzelle ist eine zusammengesetzte Einheit, die aus einfacheren Knoten in einem spezifischen Konnektivitätsmuster aufgebaut ist, die in Diagrammen durch den Buchstaben Latex formula dargestellt sind. Nachstehend werden alle Elemente der LSTM-Zelle aufgezählt und beschrieben.

Die nachfolgende Vektor-Notation bezieht sich auf die Werte der Knoten in einer ganzen Schicht von Zellen. Beispielsweise ist s ein Vektor, der den Wert von Latex formula an jeder Speicherzelle c in einer Schicht enthält. Der Index c indiziert eine einzelne Speicherzelle. Ein LSTM-Block besteht aus:

  • Eingangsknoten: Diese mit Latex formula bezeichnete Knoten erhalten ihre Aktivität vom Eingang Latex formula zum Zeitpunkt t von den verborgenen Konten des vorherigen Zeitpunkts Latex formula.
    Typischerweise wird die summierte gewichtete Eingabe durch eine tanh-Aktivierungsfunktion ausgeführt, obwohl in dem ursprünglichen LSTM-Papier die Aktivierungsfunktion ein Sigmoid-Funktion ist.
  • Gateknoten: Gates sind eine Besonderheit des LSTM-Ansatzes. Ein Gate ist eine sigmoidale Einheit, die wie der Eingangsknoten von dem aktuellen Datenpunkt Latex formula sowie von der verborgenen Schicht im vorherigen Zeitschritt aktiviert wird. Ein Gate ist so genannt, weil sein Wert mit einem anderen Knotenwert multipliziert wird. Es ist ein Gate in dem Sinne, daß wenn sein Wert null ist, dann der Fluss des anderen Knoten abgeschnitten wird. Wenn der Wert des Gatters eins ist, wird alles durchgelassen. Der Wert des Eingangsknotens Latex formula multipliziert den Wert des Eingangsknotens.
  • Interner Zustand: Im Herzen jeder Speicherzelle befindet sich ein Knoten Latex formula mit linearer Aktivierung, der im Original als „interner Zustand“ der Zelle bezeichnet wird. Der interne Zustand Latex formula hat einen selbst verbundenen wiederkehrenden Übergang (edge) mit festem Einheitsgewicht. Da dieser Übergang benachbarte Zeitschritte mit konstantem Gewicht überspannt, können Fehler über Zeitschritte fließen ohne verschwinden oder explodieren zu müssen. Dieser Übergang wird oft als konstantes Fehlerkarussell bezeichnet. In der Vektornotation ist die Aktualisierung für den internen Zustand Latex formula wobei Latex formula eine punktweise Multiplikation ist.
  • Löschknoten: Diese Gate Latex formula wurden von Gers et al. [2000] eingeführt. Es stellt eine Methode zur Verfügung, mit der das Netzwerk lernen kann, den Inhalt des internen Zustands zu entfernen. Dies ist insbesondere bei kontinuierlich laufenden Netzwerken von Vorteil. Bei Lösch-Gates ist die Gleichung zum Berechnen des internen Zustands: Latex formula.
  • Ausgangsknoten: Der letztendlich durch eine Speicherzelle erzeugte Wert Latex formula ist der Wert des internen Zustands Latex formula multipliziert mit dem Wert des Ausgangsgates Latex formula. Es ist üblich, dass der interne Zustand zuerst durch eine tanh-Aktivierungsfunktion geleitet wird, da dadurch der Ausgang jeder Zelle den gleichen dynamischen Bereich wie eine gewöhnliche tanh-verborgene Einheit erhält.

Als das ursprüngliche LSTM eingeführt wurde, wurden verschiedene Variationen vorgeschlagen. Die Löschknoten wurden im Jahr 2000 vorgeschlagen und waren nicht Teil des ursprünglichen LSTM-Design. Sie haben sich jedoch bewährt und sind in den meisten modernen Implementierungen Standard. Im selben Jahr haben Gers und Schmidhuber [2000] Gucklochverbindungen vorgeschlagen, die vom internen Zustand direkt zu den Eingangs- und Ausgangsknoten desselben Knotens übergehen, ohne vorher vom Ausgangsknoten moduliert werden zu müssen. Sie berichten, dass diese Verbindungen die Leistung bei Timing-Aufgaben verbessern, in denen das Netzwerk lernen muss, präzise Intervalle zwischen Ereignissen zu messen. Die Intuition der Guckloch-Verbindung kann durch folgendes Beispiel erfasst werden. Betrachten Sie ein Netzwerk, das lernen muss, Objekte zu zählen und eine gewünschte Ausgabe zu erzeugen, wenn n Objekte gesehen worden sind. Das Netzwerk könnte lernen, einige feste Menge an Aktivierung in den internen Zustand zu lassen, nachdem die Objekte registriert wurden. Diese Aktivierung wird im internen Zustand Latex formula durch das konstante Fehlerkarussell eingefangen und iterativ jedes Mal inkrementiert, wenn ein anderes Objekt gesehen wird. Wenn das n-te Objekt sichtbar ist, muss das Netzwerk Inhalte aus dem internen Zustand Latex formula auswerten, so dass es die Ausgabe beeinflussen kann. Um dies zu erreichen, muß das Ausgangsknoten Latex formula den Inhalt des internen Zustands Latex formula kennen. Somit sollte Latex formula eine Eingabe für Latex formula haben.

Die Berechnung im LSTM-Modell erfolgt gemäß den folgenden Gleichungen, die bei jedem Schritt durchgeführt werden. Diese Gleichungen benennen den vollständigen Algorithmus für ein modernes LSTM mit Löschknoten:

Eingangsknoten: Latex formula

Gate-Eingangsknoten: Latex formula

Löschknoten: Latex formula

Gate-Ausgangsknoten: Latex formula

Interner Zustand: Latex formula

Verdeckter Zustand: Latex formula

Ausgangsknoten: Latex formula

Hierbei gehen in die Berechnung die zur Zeit t empfangene Knoten vom aktuellen Datenpunkt Latex formula und auch verdeckte Knotenwerte Latex formula im vorherigen Zustand, d.h. zum Zeitpunkt t-1 des Netzwerks ein. Der aktuelle verdeckte Zustand ist mit Latex formula definiert.

Ergänzend sind Latex formula die Matrizen der konventionellen Gewichte zwischen den Eingangswerten und den Gates und Latex formula die Matrizen der Gewichte zwischen der verborgenen Schicht des Gates und verborgenen Knoten im zurückliegenden Zeitschritt. Die Vektorn Latex formula sind Biasparameter, die es ermöglichen einen Offset zu lernen.

Diese Gleichungen schließen Löschknoten mit ein, aber nicht die Gucklochverbindungen. Die Berechnungen für das einfachere LSTM ohne Löschknoten werden durch Einstellen von Latex formula für alle t erhalten. Es wird die tanh-Funktion Latex formula für den Eingangsknoten g nach dem Stand der Technik von Zaremba und Sutskever [2014] verwendet. Im ursprünglichen LSTM-Papier ist jedoch die Aktivierungsfunktion für g die Sigmoide Latex formula

Intuitiv kann der LSTM-Block im Hinblick auf den Forward-Pass lernen, wann es in den internen Zustand gehen soll. Solange der Ausgangs-Gateknoten den Wert Null annimmt, kann keine Aktivierung eingegangen werden. Wenn beide Gateknoten geschlossen sind, wird die Aktivierung in der Speicherzelle eingeschlossen, weder wachsend noch schrumpfend, noch beeinflusst der Block den Ausgang bei Zwischenzeitschritten. Im Hinblick auf den Rückwärtslauf ermöglicht dieses, dass sich der Gradient über viele Zeitschritte verändert und weder explodiert noch verschwindet. In der Praxis hat das LSTM eine überlegene Fähigkeit gezeigt, langzeitige Abhängigkeiten zu erlernen. Demzufolge wird in der Mehrzahl heute das LSTM-Modell verwendet.

Dieses weitere Übersichtsbild zeigt noch anschaulicher den verdeckten Knoten h. Es ist ebenfalls dargestellt, dass die Speicherzellen des LSTM-Block in der Transformation des Eingangs die unterschiedlichen Funktionen zur Addition und Multiplikation bieten. In diesem Bild hat der Ausgangsknoten die Bezeichnung y, oben wurde v verwendet. Das zentrale Pluszeichen ist im Wesentlichen das Geheimnis des LSTMs. Statt den nachfolgenden Zellzustand durch Multiplikation seines aktuellen Zustands mit neuem Eingang zu bestimmen, addieren sich die beiden und das macht die Besonderheit aus.

Bidirektionale RNN

Zusammen mit dem LSTM ist eine der am häufigsten verwendeten RNN-Architekturen das bidirektionale Neuronennetzwerk (BRNN), das zuerst von Schuster und Paliwal [1997] beschrieben wurde.

In dieser Architektur gibt es zwei Schichten von versteckten Knoten. Beide versteckten Schichten sind mit Eingang und Ausgang verbunden. Die beiden verborgenen Schichten unterscheiden sich dadurch, dass die erste wiederkehrende Verbindungen auf den letzten Zeitschritten weist, während in der zweiten die Richtung der wiederkehrenden Verbindungen auf den nächsten Schritt zeigt. Die Aktivierung erfolgt rückwärts entlang der Folge. Bei einer Eingangssequenz und einer Zielsequenz kann das BRNN durch eine normale Backpropagation nach dem Entfalten über die Zeit trainiert werden. Die folgenden drei Gleichungen beschreiben ergänzend einen BRNN:

Verdeckter Zustand Vorwärts: Latex formula

Verdeckter Zustand Rückwärts: Latex formula

Ausgabeknoten: Latex formula

Eine Begrenzung des BRNN ist, dass er nicht kontinuierlich laufen kann, da er einen festen Endpunkt in der Zukunft und in der Vergangenheit erfordert. Ferner ist er kein geeigneter Maschinellen Lernalgorithmus für die Online-Anwendung, da es nicht plausibel ist, Informationen aus der Zukunft zu empfangen, d.h. vorab Sequenzelemente zu kennen, die noch nicht beobachtet wurden. Aber für die Vorhersage über eine zukünftig mögliche Folge ist es oft sinnvoll, sowohl Vergangenheit als auch zukünftige Sequenzelemente zu berücksichtigen. Deshalb findet er insbesondere zur Auswertung natürlicher Sprache eine Anwendung, wenn noch nicht ausgesprochene Sätze vorab betrachtet werden sollen.

Die LSTM und BRNN sind in der Tat kompatible Ideen. Das erstere führt eine neue Grundeinheit ein, aus der eine verborgene Schicht zu bilden ist, während die letztere die Verdrahtung der verborgenen Schichten betrifft, unabhängig davon, welche Knoten sie enthalten. Ein derartiger Ansatz, der als BLSTM bezeichnet wird, wurde verwendet, um Stand der Technik auf Handschrifterkennung und Phonemklassifikation zu erreichen [Graves and Schmidhuber, 2005, Graves et al., 2009].

Neuronale Turing Maschinen

Die neuronale Turingmaschine (NTM) erweitert rekurrierende neuronale Netze mit einem adressierbaren externen Speicher [Graves et al., 2014]. Diese Arbeit verbessert die Fähigkeit von RNNs, komplexe algorithmische Aufgaben wie das Sortieren durchzuführen. Die Autoren nehmen Anregungen aus Theorien der Kognitionswissenschaft, die darauf hindeuten, dass die Menschen eine „zentrale Exekutive“ besitzen, die mit einem Gedächtnispuffer interagiert [Baddeley et al., 1996]. In Analogie zu einer Turingmaschine, bei der ein Programm Leseköpfe und Schreibköpfe lenkt, um mit einem externen Speicher in Form eines Bandes zu interagieren, wird das Modell als Neural-Turingmaschine bezeichnet.

NTM können den Ort, an dem sie lesen oder schreiben, differenzierbar machen und sie können lernen, wo sie lesen und schreiben sollen. NTMs adressieren dabei in einem neuen Speicherverfahren: In jedem Schritt lesen und schreiben sie in allen Zellen in unterschiedlichem Umfang.

Die beiden Hauptkomponenten eines NTM sind eine Controller- und Memory-Matrix. Der Controller, der ein wiederkehrendes oder vorwärts gerichtetes neuronales Netzwerk sein kann, verarbeitet Eingang und Ausgang zur Außenwelt, sowie die Übergabe von Schreib- und Lesen-Befehlen an den Speicher. Der Speicher wird durch eine große Matrix von N Speicherplätzen repräsentiert, von denen jeder ein Vektor der Dimension M ist. Zusätzlich erleichtert eine Anzahl von Lese- und Schreibköpfen die Interaktion zwischen dem Controller und der Speichermatrix. Trotz dieser zusätzlichen Fähigkeiten ist das NTM differenzierbar von Ende zu Ende und kann durch Varianten der stochastischen Gradientenabsenkung mit BPTT trainiert werden.

Graves et al. [2014] wählen algorithmische Aufgaben aus, um die Leistung des NTM-Modells zu testen. Unter Algorithmik verstehen wir, dass für jede Aufgabe die Zielausgabe für eine gegebene Eingabe nach einem einfachen Programm berechnet werden kann, wie es leicht in einer beliebigen universellen Programmiersprache implementiert werden kann. Ein Beispiel ist die Kopieraufgabe, wobei die Eingabe eine Folge binärer Binärvektorknoten mit fester Länge ist, gefolgt von einem Delimitersymbol. Die Ziel-Ausgabe ist eine Kopie der Eingabesequenz.
Bei einer anderen Task-Priority-Sortierung besteht eine Eingabe aus einer Sequenz von binären Vektoren zusammen mit einem bestimmten skalaren Prioritätswert für jeden Vektor. Die Ziel-Ausgabe ist die Folge von Vektoren, sortiert nach Priorität.
Die Experimente testen, ob ein NTM durch beaufsichtigtes Lernen trainiert werden kann, um diese gemeinsamen Algorithmen korrekt und effizient umzusetzen. Interessanterweise verallgemeinern sich die auf diese Weise gefundenen Lösungen einigermaßen gut zu den Eingängen, die länger sind als die im Trainingsset dargestellten. Im Gegensatz dazu verläuft das LSTM ohne externen Speicher nicht gut zu längeren Eingängen. Die Autoren vergleichen drei verschiedene Architekturen, nämlich ein LSTM RNN, ein NTM mit einem Feedforward Controller und ein NTM mit einem LSTM Controller. Bei jeder Aufgabe übertreffen beide NTM-Architekturen den LSTM RNN signifikant sowohl in der Trainingsmenge als auch in der Generalisierung auf Testdaten.

Weitere Details und Betrachtungen zu NTM folgen in einem nachfolgenden Artikel.

 

 

Veröffentlicht unter DeepMind | Verschlagwortet mit , , , , | Kommentare deaktiviert für Rekurrente Neuronale Netze

TRENDnet Outdoor CAM TV-IP320PI

TV-IP320PI siehe http://www.trendnet.com

Die Outdoor CAM TRENDnet Outdoor CAM TV-IP320PI habe ich nun seit mehreren Wochen im Einsatz und sie zeichnet sich durch sehr gute Bildqualität aus. Die Bewegungserkennung am Tag arbeitet zufriedenstellend, jedoch werden in der Nacht leider sehr viele nicht vorhandene Bewegungen erkannt. Unter anderem auch durch Insekten ausgelöst.

Auch werden leider mit jeder Bewegungserkennung 6 Schnappschüsse archiviert. Um die Dateimenge auf dem FTP-Server zu verrignern, habe ich das folgende PHP Script erstellt. Dieses rufe ich im Zyklus von 10 Minuten auf, um aufzuräumen. Der zyklische Aufruf erfolgt über einen Dienst meines Webservers, auf dem die Bilder angezeigt werden.

Das nachfolgende Script löscht Snapshots und behält die letzten 3 Aufnahmen. Es prüft ob es sich um Nachtbilder mit hohem Grauanteil handelt und löscht dann auf einander folgende Bilder mit hoher Ähnlichkeit. Die unten gekennzeichneten Schwellwerte ggf. anpassen.

<html>
<head>
<meta http-equiv="Content-Language" content="de">
<meta http-equiv="Content-Type" content="text/html; 
      charset=windows-1252">
<title>CAM</title>
</head>
<body>

<?php

function CmpN($a, $b)
{
 return ($a > $b) ? 1 : -1;
}

function CmpR($a, $b)
{
 return ($a > $b) ? -1 : 1;
}

// Aus Rot, Gelb, Blau Grauwert ermitteln
function getGreyValue ($r, $g, $b)
{
 return (0.299 * $r) + (0.587 * $g) + (0.114 * $b);
}

// prüfen auf Nachtbilder, d.h. Farblevel wird hier berechnet
function isnight($img) 
{
 $g=0;
 $w = imagesx($img);
 $h = imagesy($img);
 for ($ih=0;$ih<$h/2;$ih += 10) {
  $rgb = imagecolorat($img, $w/2, $ih);
  $r = ($rgb >> 16) & 0xFF;
  $g = ($rgb >> 8) & 0xFF;
  $b = $rgb & 0xFF;
  $g += ($b - $r)*($b - $r);
 }
 return $g;
}

// Grauwert-Delta berechnen
function compImg($img1,$img3)
{
 $g=0;
 $w = imagesx($img1);
 $h = imagesy($img1);
 for ($ih=0;$ih<$h;$ih += 25) {
  for ($iw=0;$iw<$w;$iw += 25) {
   $rgb = imagecolorat($img1, $iw, $ih);
   $r1 = ($rgb >> 16) & 0xFF;
   $g1 = ($rgb >> 8) & 0xFF;
   $b1 = $rgb & 0xFF;
   $g1 = getGreyValue($r1,$g1,$b1);
   $rgb = imagecolorat($img3, $iw, $ih);
   $r3 = ($rgb >> 16) & 0xFF;
   $g3 = ($rgb >> 8) & 0xFF;
   $b3 = $rgb & 0xFF;
   $g3 = getGreyValue($r3,$g3,$b3);
   $g += (int)(($g1-$g3)*($g1-$g3));
  }
 }
 return $g;
}

// löscht alte snapshots
function snapshot($p)
{
 print "del snapshot<br>\n";
 $fh = opendir($p); //Verzeichnis 
 $verzeichnisinhalt = array(); 
 while (true == ($file = readdir($fh))) 
 { 
  if (substr($file, -11)=="_TIMING.jpg") 
  //Abfrage nach gültigen Datenformat 
  { 
   $verzeichnisinhalt[] = $file; 
  } 
 }

 usort($verzeichnisinhalt, 'CmpR');
 $c = 0;
 for($i=0;$i<count($verzeichnisinhalt);$i++) 
 { 
   $f = $verzeichnisinhalt[$i];
   $c++;
   if ($c > 2)
   {
    unlink("$p/$f"); 
    print "del $f<br>\n";
   }
 }
}

function nightclean($p)
{
 print "nclean<br>\n";
 $fh = opendir($p); //Verzeichnis 
 $verzeichnisinhalt = array(); 
 while (true == ($file = readdir($fh))) 
 { 
  if (substr(strtolower($file), -3)=="jpg") 
  //Abfrage nach gültigen Datenformat 
  { 
   $verzeichnisinhalt[] = $file; 
  } 
 }
 usort($verzeichnisinhalt, 'CmpR');
 $img3=0;
 for($i=0;$i<count($verzeichnisinhalt);$i++) 
 { 
  $vi = $verzeichnisinhalt[$i];
  $img1 = @imagecreatefromjpeg("$p/$vi"); 
  if ($img1) {
   $g = isnight($img1);
   // level für Nachtbild auf 200 eingestellt, ggf. anpassen
   if ($g < 200)
   {
    if ($img3)
    {
     // vergleich zweier auf einander folgender Bilder
     $g = compImg($img1,$img3);
     print "$vi $g";
     // 100000 ist die Empflindlichkeit für Löschung gleicher Bilder
     // ggf. anpassen
     if ($g < 100000)
     {
      unlink("$p/$vi");
      print " del";
     }
     print "<br>\n";
    }
    $img3 = $img1;
   }
  }
 } 
}

snapshot(".");
nightclean(".");
?>

<br>ready
</body>
</html>
Veröffentlicht unter Allgemein | Verschlagwortet mit , , | Kommentare deaktiviert für TRENDnet Outdoor CAM TV-IP320PI

HTML5 Tag Cloud

HTML5Die bereits mehrfach verwendete 3D Tag Cloud soll nun mit HTML Hilfsmitteln realisiert werden.

Während wp-cumulus und SVG Tag cloud  Flash-Objekt und SVG zur Animation nutzen, verwendet HTML5 Tag Cloud das canvas Objekt. Leider unterstützen auch hier nicht alle Browser den HTML5-Standard. Der IE9 hat wieder ein grundsätzliches Problem mit der Anzeige.  Firefox 7 und Google Chrome V15 zeigen sehr gute Ergebnisse.

Die aktuelle Version der HTML Tag Cloud wird unter  http://code.google.com/p/html5tagcloud/ zum Download bereit gestellt.

Auch hier noch das Beispiel in Aktion (wenn der Browser die Anzeige erlaubt):

HTML5 Tag Cloud

Veröffentlicht unter Allgemein, Tag Cloud, Webdesign | Verschlagwortet mit , , , | Kommentare deaktiviert für HTML5 Tag Cloud