{"id":191,"date":"2016-12-27T01:10:59","date_gmt":"2016-12-27T01:10:59","guid":{"rendered":"http:\/\/www.riemerundco.de\/bl\/?p=191"},"modified":"2022-10-24T07:59:55","modified_gmt":"2022-10-24T07:59:55","slug":"rekurrente-neuronale-netze","status":"publish","type":"post","link":"http:\/\/www.riemerundco.de\/bl\/?p=191","title":{"rendered":"Rekurrente Neuronale Netze"},"content":{"rendered":"<div id=\"content\" class=\"pad\">\n<div id=\"post-1936\" class=\"post-1936 post type-post status-publish format-standard hentry category-uncategorized\">\n<div class=\"entry clear\">\n<p><span class=\"notranslate\">Quelle: &#8211; <a href=\"http:\/\/arxiv.org\/abs\/1506.00019\">A Critical Review of Recurrent Neural Networks for Sequence Learning<\/a>, Lipton et al.<\/span> <span class=\"notranslate\"> 2015<br \/>\n<\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><span id=\"result_box\">Unz\u00e4hlige Lernaufgaben erfordern den Umgang mit sequentiellen Daten. Bilderkennung, Sprachsynthese und Musikerzeugung ben\u00f6tigen alle ein Sequenz-Modell. Rekurrente (wiederkehrende) neuronale Netze (RNNs) speichern und lernen die Dynamik von Sequenzen mittels Zyklen in einem Netzwerk von Knoten.<\/span><\/p>\n<p><span id=\"result_box\">Dieser Abschnitt stellt eine formale Notation vor und beschreibt Neuronale Netze im Allgemeinen.<\/span><\/p>\n<h2>Sequenzen<\/h2>\n<p><span id=\"result_box\">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), &#8230;, x (T) bezeichnet werden, wobei jeder Datenpunkt x (t) ein reeller <\/span><span id=\"result_box\">Wert<\/span><span id=\"result_box\"><\/span><span id=\"result_box\"><\/span><span id=\"result_box\"> ist. In \u00e4hnlicher Weise kann eine Zielsequenz (y (1), y (2),&#8230;,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. <span id=\"result_box\" class=\"short_text\" lang=\"de\">Der maximale Zeitindex der Sequenz wird T genannt<\/span>.<br \/>\n<\/span><\/p>\n<p><span id=\"result_box\">Es werden nachfolgend Hochzeiger mit Klammern f\u00fcr Zeit-Informationen verwendet, um Verwechslungen zwischen Sequenzschritten und Indizes der Knoten zu verhindern. <\/span><span id=\"result_box\">Eine Eingabesequenz besteht somit aus Datenpunkten [latex ]\\chi^{(t)}[\/latex] die sich als diskrete Sequenz von durch t indizierten Zeitschritten zusammensetzt. Eine Zielsequenz besteht aus Datenpunkten [latex ]y^{(t)}[\/latex].<br \/>\nWenn ein Modell vorhergesagte Datenpunkte erzeugt, werden diese markiert [latex ]\\hat{y}^{(t)}[\/latex] dargestellt.<br \/>\n<\/span><\/p>\n<h2>Neuronale Netzwerke<\/h2>\n<p><span id=\"result_box\">Neuronale Netze sind biologisch inspirierte Berechnungsmodelle. Ein neuronales Netzwerk besteht aus einem Satz von k\u00fcnstlichen Neuronen, als Knoten oder Einheiten und eine Reihe von gerichteten Kanten zwischen ihnen, die intuitiv die Synapsen in einem biologischen neuronalen Netzwerk<\/span><span id=\"result_box\"> repr\u00e4sentieren<\/span><span id=\"result_box\">.<\/span><\/p>\n<div id=\"gt-res-content\">\n<p dir=\"ltr\"><span id=\"result_box\">Mit jedem verbunden Neuron j ist eine Aktivierungsfunktion [latex ]l_j \\bigodot[\/latex] verkn\u00fcpft, die manchmal auch als Link-Funktion bezeichnet wird. Es wird die Notation [latex ]l_j [\/latex] und nicht [latex ]h_j [\/latex] verwendet, dieses im Gegensatz zu einigen anderen Darstellungen, um die Aktivierungsfunktion aus den Werten der verborgenen Knoten in einem Netzwerk <\/span><span id=\"result_box\">zu unterscheiden (<\/span><span id=\"result_box\">in der Literatur auch allgemein mit h bezeichnet).<\/span><\/p>\n<p dir=\"ltr\"><span id=\"result_box\">Jedem Knoten j&#8216; bis j ist ein Gewicht [latex ]w_{jj^{\\prime}}[\/latex] zugeordnet. Gem\u00e4\u00df 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&#8216; und [latex ]w_{jj^{\\prime}}[\/latex] das dazu korrespondierende Gewicht, als die gerichtete Verbindung zum Knoten j vom Knoten j&#8216;. Es ist wichtig zu beachten, dass in vielen Referenzen die Indizes getauscht sind, d.h. [latex ]w_{jj^{\\prime}}{\\neq}w_{j^{\\prime}j}[\/latex] bezeichnet hier das Gewicht von-bis auf der gerichteten Kante vom Knoten j&#8216; zum Knoten j, wie in den Unterlagen von Elkan[2015] und in Wikipedia [2015].<\/span><\/p>\n<p dir=\"ltr\"><span id=\"result_box\">Der Wert [latex ]v_j[\/latex] jedes Neurons j wird durch Anwenden seiner Aktivierungsfunktion zu einer gewichteten Summe der Werte seiner Eingangsknoten <\/span><span id=\"result_box\">berechnet:<\/span><\/p>\n<p dir=\"ltr\"><span id=\"result_box\">[latex ]v_j = l_j \\left( \\sum_{\\substack{j^{\\prime}}} w_{jj^{\\prime}} \\cdot v_{j^{\\prime}}\\right)[\/latex]<\/span><\/p>\n<\/div>\n<p>Zur Vereinfachung nennen wir die gewichtete Summe innerhalb der Klammern als eingehende Aktivierung und bezeichnen dieses auch als [latex ]a_j[\/latex]:<\/p>\n<p><span id=\"result_box\">[latex ]a_j = \\sum_{\\substack{j^{\\prime}}} w_{jj^{\\prime}} \\cdot v_{j^{\\prime}}[\/latex]<\/span><\/p>\n<p>In Diagrammen sind Neuronen als Kreise und \u00dcberg\u00e4nge als verbindende Pfeile dargestellt.<\/p>\n<p><span id=\"result_box\">H\u00e4ufige Optionen f\u00fcr die Aktivierungsfunktion ist die <a href=\"https:\/\/de.wikipedia.org\/wiki\/Sigmoidfunktion\">Sigmoid-Funktion<\/a>:<\/span><\/p>\n<p><span id=\"result_box\">[latex ]\\sigma (a_j) = 1\/(1 + \\mathrm{e}^{-a_j})[\/latex]<\/span><\/p>\n<p>und die <a href=\"https:\/\/de.wikipedia.org\/wiki\/Tangens_Hyperbolicus_und_Kotangens_Hyperbolicus\">tanh-Funktion<\/a>:<\/p>\n<p>[latex ]\\phi (a_j) = (\\mathrm{e}^{a_j} &#8211; \\mathrm{e}^{-a_j})\/(\\mathrm{e}^{a_j} + \\mathrm{e}^{-a_j})[\/latex]<\/p>\n<p><a href=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-224 aligncenter\" src=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN1-300x209.png\" alt=\"\" width=\"300\" height=\"209\" srcset=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN1-300x209.png 300w, http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN1.png 434w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><span id=\"result_box\">Die Aktivierungsfunktion an den Ausgangsknoten h\u00e4ngt von der Aufgabe ab. F\u00fcr Mehr-Klassen-Klassifizierung mit K alternativen Klassen, wenden wir eine Softmax-Nichtlinearit\u00e4t in einer Ausgangsschicht von K Knoten an. Die Softmax-Funktion wird wie folgt berechnet:<\/span><\/p>\n<p><span id=\"result_box\">[latex ]\\hat y_k = \\mathrm{e}^{a_k} \/ \\sum_{\\substack{ \\\\<br \/>\nK \\\\<br \/>\nk^{\\prime}=1<br \/>\n}} \\mathrm{e}^{a_{k^{\\prime}}}[\/latex]<\/span><\/p>\n<p><span id=\"result_box\">Der Nenner der Softmax-Funktion ist ein Normalisierungsbegriff, der aus der Summe der Z\u00e4hler besteht, so dass sich die Ausg\u00e4nge aller Knoten zu eins addieren. <\/span><\/p>\n<h2>Feedforward-Netzwerke und Backpropagation<\/h2>\n<p>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.<\/p>\n<p>Feedforward-Netzwerke sind eine eingeschr\u00e4nkte Klasse von Netzwerken, die sich mit diesem Problem besch\u00e4ftigen, indem sie Zyklen verbieten. Angesichts der Abwesenheit von Zyklen k\u00f6nnen alle Knoten angeordnet werden und die Ausg\u00e4nge in jeder Schicht k\u00f6nnen mit den Ausg\u00e4ngen von berechnet Knoten aus unteren Schichten bestimmt werden.<\/p>\n<p>Der Eingang x zu einem Feedforward &#8211; Netzwerk ist die unterste Schicht. Jede h\u00f6here Schicht wird dann sukzessive bis zur Ausgabe berechnet. An der obersten Schicht wird<br \/>\n[latex ]\\hat{y}[\/latex] erzeugt. Feedforward-Netzwerke werden h\u00e4ufig f\u00fcr \u00fcberwachte 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 ]\\hat{y}[\/latex] und dem Ziel y kennzeichnet.<\/p>\n<p><span id=\"result_box\">Der erfolgreichste Algorithmus f\u00fcr das Training neuronaler Netze ist die Backpropagation, eingef\u00fchrt von Rumelhart et al. [1985]. Backpropagation verwendet die Kettenregel. Das Training ist aber nicht einfach, da in einem neuronalen Netzwerk mit sigmoidalen oder tanh &#8211; Aktivierungsfunktionen der Knoten in jeder Ebene niemals den Wert Null annehmen k\u00f6nnen. <\/span><\/p>\n<h2>Rekurrente Neuronale Netze<\/h2>\n<p><span id=\"result_box\">Rekurrente Neuronale Netze (RNN) sind Feedforward Neuronale Netze, die durch die Einbeziehung von \u00dcberg\u00e4ngen, die aneinander angrenzende Zeitschritte \u00fcberspannen und einen Zeitablauf einf\u00fchren. Wie Feedforward-Netzwerke haben RNNs keine Zyklen. Jedoch \u00dcberg\u00e4nge, die angrenzende Zeitschritte verbinden und eine Ablauffolge definieren<\/span><span id=\"result_box\"><\/span><span id=\"result_box\">. Diese k\u00f6nnen auch Zyklen bilden, einschlie\u00dflich Zyklen der L\u00e4nge eins, die Selbstverbindungen durch Anreihung des immer wieder gleichen Knotens sind. <\/span><\/p>\n<h2>Training rekurrenter Neuronaler Netze<\/h2>\n<p>Das Training wiederkehrenden Netzwerken ist lange Zeit als schwierig erachtet worden. Insbsondere Aufgrund der Schwierigkeit des Erlernens von weitreichenden Abh\u00e4ngigkeiten, 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 \u00fcber viele Zeitschritte \u00fcbertragen 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 \u00fcbergeben 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 \u00fcber Zeitschritte bedeutet, dass die wiederkehrenden \u00dcberg\u00e4nge 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\u00df wird. Daher wird die Ableitung des Fehlers in Bezug auf die Eingabe entweder explodieren oder verschwinden.<\/p>\n<p><span id=\"result_box\">Welche der beiden Ph\u00e4nomene auftritt h\u00e4ngt davon ab, ob das Gewicht der rekurrierenden \u00dcberg\u00e4nge [latex ]w_{jj} &gt; 1[\/latex]\u00a0 oder\u00a0 [latex ]w_{jj} &lt; 1[\/latex] und wie die Aktivierungsfunktion im verborgenen Knoten ausgelegt ist. Bei einer sigmoidalen Aktivierungsfunktion ist das Problem des Verschwindens des Gradienten st\u00e4rker, aber mit einer gleichgerichteten Lineareinheit max(0; x) ist es einfacher, den explodierenden Gradienten vorzustellen. Pascanu et al. [2012] gibt eine gr\u00fcndliche mathematische Behandlung der verschwindenden und explodierenden Gradientenprobleme, die die genauen Bedingungen charakterisieren, unter denen diese Probleme auftreten k\u00f6nnen. Angesichts dieser Bedingungen schlagen sie einen Ansatz zur Ausbildung \u00fcber einen Regularisierungsausdruck vor, der die Gewichte zu Werten zwingt, bei denen der Gradient weder verschwindet noch explodiert.<\/span><\/p>\n<p><span id=\"result_box\">Truncated backpropagation through time (TBPTT) ist eine L\u00f6sung f\u00fcr das explodierende Gradientenproblem f\u00fcr kontinuierlich laufende Netzwerke [Williams und Zipser, 1989]. Bei TBPTT wird eine maximale Anzahl von Zeitschritten festgelegt, entlang derer Fehler \u00fcbertragen werden d\u00fcrfen. W\u00e4hrend TBPTT mit einem kleinen Cutoff verwendet werden kann, um das explodierende Gradientenproblem zu lindern, erfordert es das Opfer der F\u00e4higkeit Long-Range-Abh\u00e4ngigkeiten lernen zu k\u00f6nnen. Die sp\u00e4ter beschriebene LSTM-Architektur verwendet sorgf\u00e4ltig konstruierte Knoten mit wiederkehrenden Kanten mit festem Einheitsgewicht als L\u00f6sung f\u00fcr das Problem des Verschwindens des Gradienten.<\/span><\/p>\n<h2>RNN Netzwerkdesign<\/h2>\n<p>Die Grundlagenforschung \u00fcber RNN Netzwerke fand in den 1980er Jahren statt. In 1982 f\u00fchrte Hopfeld eine Familie RNN Netze ein. Sie wurden durch Gewichte zwischen den Knoten und Verkn\u00fcpfungsfunktionen mit einfachen Schwellenwerten definiert. Diese Hopfeld-Netzwerke sind n\u00fctzlich f\u00fcr das Wiedererkennen eines gespeicherten Musters und sind die Vorl\u00e4ufer von Auto-Encodern.<\/p>\n<p>Die Architektur von Elman [1990] verwendet zus\u00e4tzlich verdeckte Knoten. Die<br \/>\nArchitektur 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<br \/>\nLSTM-Netzwerke [Hochreiter und Schmidhuber, 1997] dann grundlegend f\u00fcr weitere Verbesserungen.<\/p>\n<p>Das Lernen mit RNN Netzwerken war anfangs schwierig. Die erfolgreichsten RNN-Architekturen f\u00fcr das Sequenzlernen stammen aus zwei Beitr\u00e4gen Ver\u00f6ffentlicht 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\u00e4chtniszellen sind die Netzwerke in der Lage die Lernschwierigkeiten zu \u00fcberwinden.<\/p>\n<p>Das zweite Papier, Bidirektionale RNN (BRNN) von Schuster und Paliwal [1997], f\u00fchrt 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.<\/p>\n<p>Im n\u00e4chsten Abschnitt erl\u00e4utern wir die LSTM und BRNN und beschreiben die neuronale Turingmaschine (NTM), die RNNs mit einem adressierbaren externen Speicher erweitert [Graves et al., 2014].<\/p>\n<h2>Long Short-Term Memory (LSTM)<\/h2>\n<p><span id=\"result_box\"><a href=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-232 size-full\" src=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN2.png\" width=\"584\" height=\"415\" srcset=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN2.png 584w, http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN2-300x213.png 300w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/span><span id=\"result_box\">LSTM-Modelle helfen in erster Linie, das Proble<\/span><span id=\"result_box\">m das Verschwinden von Gradienten zu \u00fcberwinden. Dieses Modell \u00e4hnelt einem herk\u00f6mmlichen, wiederkehrenden neuronalen Netz mit einer verborgenen Schicht, wobei jedoch jeder gew\u00f6hnliche Knoten in der verborgenen Schicht durch eine Speicherzelle ersetzt wird.<br \/>\nJede Speicherzelle enth\u00e4lt einen Knoten mit einer selbstverbundenen wiederkehrenden Kante von festem Gewicht 1, wodurch sichergestellt wird, dass der Gradient \u00fcber viele Zeitschritte hinweggehen kann, ohne verschwinden oder explodieren zu m\u00fcssen. Um Referenzen auf eine Speicherzelle und nicht auf einen gew\u00f6hnlichen Knoten zu unterscheiden, benutzen wir den Index c.<\/span><\/p>\n<p><span id=\"result_box\">Der Begriff LSTM &#8222;langes Kurzzeitged\u00e4chtnis&#8220; kommt aus der Intuition, dass<br \/>\neinfache wiederkehrende neuronale Netze ein Langzeitged\u00e4chtnis in Form von Gewichten <\/span><span id=\"result_box\">haben<\/span><span id=\"result_box\">. Die Gewichte \u00e4ndern sich w\u00e4hrend des Trainings langsam und verschl\u00fcsseln das allgemeine Wissen \u00fcber die Daten. Sie haben auch Kurzzeitged\u00e4chtnis in Form von kurzlebigen Aktivierungen, die von jedem Knoten zu aufeinanderfolgenden Knoten \u00fcbergehen. Das LSTM-Modell f\u00fchrt einen Zwischenspeichertyp \u00fcber die Speicherzelle ein. Eine Speicherzelle ist eine zusammengesetzte Einheit, die aus einfacheren Knoten in einem spezifischen Konnektivit\u00e4tsmuster aufgebaut ist, die in Diagrammen durch den Buchstaben [latex ]\\Pi[\/latex] dargestellt sind. Nachstehend werden alle Elemente der LSTM-Zelle aufgez\u00e4hlt und beschrieben.<\/span><\/p>\n<p><span id=\"result_box\">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 ]s_c [\/latex] an jeder Speicherzelle c in einer Schicht enth\u00e4lt. Der Index c <\/span><span id=\"result_box\">indiziert<\/span><span id=\"result_box\"> eine einzelne Speicherzelle. Ein LSTM-Block besteht aus:<br \/>\n<\/span><\/p>\n<ul>\n<li><span id=\"result_box\"><strong>Eingangsknoten<\/strong>: Diese mit [latex ]g_c [\/latex] bezeichnete Knoten erhalten ihre Aktivit\u00e4t vom Eingang [latex ]\\chi^{(t)} [\/latex] zum Zeitpunkt t von den verborgenen Konten des vorherigen Zeitpunkts [latex ]h^{(t-1)} [\/latex].<br \/>\nTypischerweise wird die summierte gewichtete Eingabe durch eine tanh-Aktivierungsfunktion ausgef\u00fchrt, obwohl in dem urspr\u00fcnglichen LSTM-Papier die Aktivierungsfunktion ein Sigmoid-Funktion ist.<\/span><\/li>\n<li><span id=\"result_box\"><strong>Gateknoten<\/strong>: Gates sind eine Besonderheit des LSTM-Ansatzes. Ein Gate ist eine sigmoidale Einheit, die wie der Eingangsknoten von dem aktuellen Datenpunkt [latex ]\\chi^{(t)} [\/latex] 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\u00df 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 ]i_c [\/latex] multipliziert den Wert des Eingangsknotens.<\/span><\/li>\n<li><span id=\"result_box\"><strong>Interner Zustand<\/strong>: Im Herzen jeder Speicherzelle befindet sich ein Knoten [latex ]s_c [\/latex] mit linearer Aktivierung, der im Original als &#8222;interner Zustand&#8220; der Zelle bezeichnet wird. Der interne Zustand [latex ]s_c [\/latex] hat einen selbst verbundenen wiederkehrenden \u00dcbergang (edge) mit festem Einheitsgewicht. Da dieser \u00dcbergang benachbarte Zeitschritte mit konstantem Gewicht \u00fcberspannt, k\u00f6nnen Fehler \u00fcber Zeitschritte flie\u00dfen ohne verschwinden oder explodieren zu m\u00fcssen. Dieser \u00dcbergang wird oft als konstantes Fehlerkarussell bezeichnet. In der Vektornotation ist die Aktualisierung f\u00fcr den internen Zustand [latex ]s^{(t)} = g^{(t)} \\odot i^{(t)} + s^{(t-1)} [\/latex] wobei [latex ]\\odot[\/latex] eine punktweise Multiplikation ist.<\/span><\/li>\n<li><strong>L\u00f6schknoten<\/strong>: <span id=\"result_box\">Diese Gate [latex ]f_c [\/latex] wurden von Gers et al. [2000] eingef\u00fchrt. Es stellt eine Methode zur Verf\u00fcgung, mit der das Netzwerk lernen kann, den Inhalt des internen Zustands zu entfernen. Dies ist insbesondere bei kontinuierlich laufenden Netzwerken von Vorteil. Bei L\u00f6sch-Gates ist die Gleichung zum Berechnen des internen Zustands: [latex ]s^{(t)} = g^{(t)} \\odot i^{(t)} + f^{(t)} \\odot s^{(t-1)} [\/latex].<\/span><\/li>\n<li><span id=\"result_box\"><strong>Ausgangsknoten<\/strong>: Der letztendlich durch eine Speicherzelle erzeugte Wert [latex ]v_c [\/latex] ist der Wert des internen Zustands [latex ]s_c [\/latex] multipliziert mit dem Wert des Ausgangsgates [latex ]o_c [\/latex]. Es ist \u00fcblich, dass der interne Zustand zuerst durch eine tanh-Aktivierungsfunktion geleitet wird, da dadurch der Ausgang jeder Zelle den gleichen dynamischen Bereich wie eine gew\u00f6hnliche tanh-verborgene Einheit erh\u00e4lt. <a href=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-240\" src=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN3.png\" alt=\"\" width=\"584\" height=\"434\" srcset=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN3.png 584w, http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN3-300x223.png 300w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/span><span id=\"result_box\"><\/span><\/li>\n<\/ul>\n<p><span id=\"result_box\">Als das urspr\u00fcngliche LSTM eingef\u00fchrt wurde, wurden verschiedene Variationen vorgeschlagen. Die L\u00f6schknoten wurden im Jahr 2000 vorgeschlagen und waren nicht Teil des urspr\u00fcnglichen LSTM-Design. Sie haben sich jedoch bew\u00e4hrt 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 \u00fcbergehen, ohne vorher vom Ausgangsknoten moduliert werden zu m\u00fcssen. Sie berichten, dass diese Verbindungen die Leistung bei Timing-Aufgaben verbessern, in denen das Netzwerk lernen muss, pr\u00e4zise 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\u00e4hlen und eine gew\u00fcnschte Ausgabe zu erzeugen, wenn n Objekte gesehen worden sind. Das Netzwerk k\u00f6nnte lernen, einige feste Menge an Aktivierung in den internen Zustand zu lassen, nachdem die Objekte registriert wurden. Diese Aktivierung wird im internen Zustand [latex ]s_c [\/latex] 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 ]s_c [\/latex]<\/span> auswerten, so dass es die Ausgabe beeinflussen kann. Um dies zu erreichen, mu\u00df das Ausgangsknoten [latex ]o_c [\/latex] den Inhalt des internen Zustands [latex ]s_c [\/latex] kennen. Somit sollte [latex ]s_c [\/latex] eine Eingabe f\u00fcr [latex ]o_c [\/latex] haben.<\/p>\n<p><span id=\"result_box\">Die Berechnung im LSTM-Modell erfolgt gem\u00e4\u00df den folgenden Gleichungen, die bei jedem Schritt durchgef\u00fchrt werden. Diese Gleichungen benennen den vollst\u00e4ndigen Algorithmus f\u00fcr ein modernes LSTM mit L\u00f6schknoten:<\/span><\/p>\n<p><span id=\"result_box\">Eingangsknoten: <\/span><span id=\"result_box\">[latex ]g^{(t)} = \\phi \\left(W^{gx} \\chi^{(t)} + W^{gh} h^{(t-1)} + b_g \\right) [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">Gate-Eingangsknoten: <\/span><span id=\"result_box\">[latex ]i^{(t)} = \\sigma \\left(W^{ix} \\chi^{(t)} + W^{ih} h^{(t-1)} + b_i \\right) [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">L\u00f6schknoten: <\/span><span id=\"result_box\">[latex ]f^{(t)} = \\sigma \\left(W^{fx} \\chi^{(t)} + W^{fh} h^{(t-1)} + b_f \\right) [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">Gate-Ausgangsknoten: [latex ]o^{(t)} = \\sigma \\left(W^{ox} \\chi^{(t)} + W^{oh} h^{(t-1)} + b_o \\right) [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">Interner Zustand: [latex ]s^{(t)} = g^{(t)} \\odot i^{(t)} + f^{(t)} \\odot s^{(t-1)} [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">Verdeckter Zustand: [latex ]h^{(t)} = \\phi \\left(s^{(t)}\\right) \\odot o^{(t)} [\/latex]<\/span><\/p>\n<p>Ausgangsknoten: <span id=\"result_box\"> [latex ]v^{(t)} = s^{(t)} \\odot o^{(t)} [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">Hierbei gehen in die Berechnung die zur Zeit t empfangene Knoten vom aktuellen Datenpunkt [latex ]\\chi^{(t)}[\/latex] und auch verdeckte Knotenwerte [latex ]h^{(t-1)}[\/latex] im vorherigen Zustand, d.h. zum Zeitpunkt t-1 des Netzwerks ein. Der <\/span><span id=\"result_box\">aktuelle verdeckte Zustand ist mit [latex ]h^{(t)}[\/latex] definiert.<\/span><\/p>\n<p><span id=\"result_box\">Erg\u00e4nzend sind [latex ]W^{gx}, W^{ix}, W^{fx}, W^{ox}[\/latex] die Matrizen der konventionellen Gewichte zwischen den Eingangswerten und den Gates und [latex ]W^{gh}, W^{ih}, W^{fh}, W^{oh}[\/latex] die Matrizen der Gewichte zwischen der verborgenen Schicht des Gates und verborgenen Knoten im zur\u00fcckliegenden Zeitschritt. Die Vektorn [latex ]b_g, b_i, b_f, b_o[\/latex] sind Biasparameter, die es erm\u00f6glichen einen Offset zu lernen.<\/span><\/p>\n<p><span id=\"result_box\">Diese Gleichungen schlie\u00dfen L\u00f6schknoten mit ein, aber nicht die Gucklochverbindungen.<\/span> Die Berechnungen f\u00fcr das einfachere LSTM ohne L\u00f6schknoten werden durch Einstellen von [latex ]f ^{(t)} = 1[\/latex] f\u00fcr alle t erhalten. Es wird die tanh-Funktion [latex ]\\phi[\/latex] f\u00fcr den Eingangsknoten g nach dem Stand der Technik von Zaremba und Sutskever [2014] verwendet. Im urspr\u00fcnglichen LSTM-Papier ist jedoch die Aktivierungsfunktion f\u00fcr g die Sigmoide [latex ]\\sigma[\/latex]<\/p>\n<p><span id=\"result_box\">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\u00fcckw\u00e4rtslauf erm\u00f6glicht dieses, dass sich der Gradient \u00fcber viele Zeitschritte ver\u00e4ndert und weder explodiert noch verschwindet. In der Praxis hat das LSTM eine \u00fcberlegene F\u00e4higkeit gezeigt, langzeitige Abh\u00e4ngigkeiten zu erlernen. Demzufolge wird in der Mehrzahl heute das LSTM-Modell verwendet.<\/span><\/p>\n<p><a href=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/LSTM2-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-266\" src=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/LSTM2-1.png\" alt=\"\" width=\"584\" height=\"353\" srcset=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/LSTM2-1.png 584w, http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/LSTM2-1-300x181.png 300w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a>Dieses weitere \u00dcbersichtsbild 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.<\/p>\n<h2>Bidirektionale RNN<\/h2>\n<p><span id=\"result_box\">Zusammen mit dem LSTM ist eine der am h\u00e4ufigsten verwendeten RNN-Architekturen das bidirektionale Neuronennetzwerk (BRNN), das zuerst von Schuster und Paliwal [1997] beschrieben wurde.<a href=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-247\" src=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN4.png\" alt=\"\" width=\"504\" height=\"393\" srcset=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN4.png 504w, http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/SLSTN4-300x234.png 300w\" sizes=\"auto, (max-width: 504px) 100vw, 504px\" \/><\/a> <\/span><\/p>\n<p><span id=\"result_box\">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\u00e4hrend in der zweiten die Richtung der wiederkehrenden Verbindungen auf den n\u00e4chsten Schritt zeigt. Die Aktivierung erfolgt r\u00fcckw\u00e4rts entlang der Folge. Bei einer Eingangssequenz und einer Zielsequenz kann das BRNN durch eine normale Backpropagation nach dem Entfalten \u00fcber die Zeit trainiert werden. Die folgenden drei Gleichungen beschreiben erg\u00e4nzend einen BRNN:<\/span><\/p>\n<p><span id=\"result_box\">Verdeckter Zustand Vorw\u00e4rts: [latex ]h^{(t)} = \\sigma \\left(W^{hx} \\chi^{(t)} + W^{hh} h^{(t-1)} + b_h\\right) [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">Verdeckter Zustand R\u00fcckw\u00e4rts: [latex ]h^{(t)} = \\sigma \\left(W^{zx} \\chi^{(t)} + W^{zz} h^{(t-1)} + b_z\\right) [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">Ausgabeknoten: [latex ]\\hat y^{(t)} = softmax\\left(W^{yh} h^{(t)} + W^{yz} z^{(t)} + b_y\\right) [\/latex]<\/span><\/p>\n<p><span id=\"result_box\">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\u00fcr 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\u00fcr die Vorhersage \u00fcber eine zuk\u00fcnftig m\u00f6gliche Folge ist es oft sinnvoll, sowohl Vergangenheit als auch zuk\u00fcnftige Sequenzelemente zu ber\u00fccksichtigen. Deshalb findet er insbesondere zur Auswertung nat\u00fcrlicher Sprache eine Anwendung, wenn noch nicht ausgesprochene S\u00e4tze vorab betrachtet werden sollen.<\/span><\/p>\n<p><span id=\"result_box\">Die LSTM und BRNN sind in der Tat kompatible Ideen. Das erstere f\u00fchrt eine neue Grundeinheit ein, aus der eine verborgene Schicht zu bilden ist, w\u00e4hrend die letztere die Verdrahtung der verborgenen Schichten betrifft, unabh\u00e4ngig 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].<\/span><\/p>\n<h2>Neuronale Turing Maschinen<\/h2>\n<p><span id=\"result_box\">Die neuronale Turingmaschine (NTM) erweitert rekurrierende neuronale Netze mit einem adressierbaren externen Speicher [Graves et al., 2014]. Diese Arbeit verbessert die F\u00e4higkeit von RNNs, komplexe algorithmische Aufgaben wie das Sortieren durchzuf\u00fchren. Die Autoren nehmen Anregungen aus Theorien der Kognitionswissenschaft, die darauf hindeuten, dass die Menschen eine &#8222;zentrale Exekutive&#8220; besitzen, die mit einem Ged\u00e4chtnispuffer interagiert [Baddeley et al., 1996]. In Analogie zu einer Turingmaschine, bei der ein Programm Lesek\u00f6pfe und Schreibk\u00f6pfe lenkt, um mit einem externen Speicher in Form eines Bandes zu interagieren, wird das Modell als Neural-Turingmaschine bezeichnet. <\/span><\/p>\n<p><a href=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/NTM-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-270\" src=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/NTM-2.png\" alt=\"\" width=\"739\" height=\"281\" srcset=\"http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/NTM-2.png 739w, http:\/\/www.riemerundco.de\/bl\/wp-content\/uploads\/2016\/12\/NTM-2-300x114.png 300w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/a>NTM k\u00f6nnen den Ort, an dem sie lesen oder schreiben, differenzierbar machen und sie k\u00f6nnen 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.<\/p>\n<p><span id=\"result_box\">Die beiden Hauptkomponenten eines NTM sind eine Controller- und Memory-Matrix. Der Controller, der ein wiederkehrendes oder vorw\u00e4rts gerichtetes neuronales Netzwerk sein kann, verarbeitet Eingang und Ausgang zur Au\u00dfenwelt, sowie die \u00dcbergabe von Schreib- und Lesen-Befehlen an den Speicher. Der Speicher wird durch eine gro\u00dfe Matrix von N Speicherpl\u00e4tzen repr\u00e4sentiert, von denen jeder ein Vektor der Dimension M ist. Zus\u00e4tzlich erleichtert eine Anzahl von Lese- und Schreibk\u00f6pfen die Interaktion zwischen dem Controller und der Speichermatrix. Trotz dieser zus\u00e4tzlichen F\u00e4higkeiten ist das NTM differenzierbar von Ende zu Ende und kann durch Varianten der stochastischen Gradientenabsenkung mit BPTT trainiert werden.<\/span><\/p>\n<p><span id=\"result_box\">Graves et al. [2014] w\u00e4hlen algorithmische Aufgaben aus, um die Leistung des NTM-Modells zu testen. Unter Algorithmik verstehen wir, dass f\u00fcr jede Aufgabe die Zielausgabe f\u00fcr 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\u00e4rer Bin\u00e4rvektorknoten mit fester L\u00e4nge ist, gefolgt von einem Delimitersymbol. Die Ziel-Ausgabe ist eine Kopie der Eingabesequenz.<br \/>\n<\/span><span id=\"result_box\">Bei einer anderen Task-Priority-Sortierung besteht eine Eingabe aus einer Sequenz von bin\u00e4ren Vektoren zusammen mit einem bestimmten skalaren Priorit\u00e4tswert f\u00fcr jeden Vektor. Die Ziel-Ausgabe ist die Folge von Vektoren, sortiert nach Priorit\u00e4t.<br \/>\nDie 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\u00f6sungen einigerma\u00dfen gut zu den Eing\u00e4ngen, die l\u00e4nger sind als die im Trainingsset dargestellten. Im Gegensatz dazu verl\u00e4uft das LSTM ohne externen Speicher nicht gut zu l\u00e4ngeren Eing\u00e4ngen. Die Autoren vergleichen drei verschiedene Architekturen, n\u00e4mlich ein LSTM RNN, ein NTM mit einem Feedforward Controller und ein NTM mit einem LSTM Controller. Bei jeder Aufgabe \u00fcbertreffen beide NTM-Architekturen den LSTM RNN signifikant sowohl in der Trainingsmenge als auch in der Generalisierung auf Testdaten.<\/span><\/p>\n<p>Weitere Details und Betrachtungen zu NTM folgen in einem nachfolgenden Artikel.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quelle: &#8211; A Critical Review of Recurrent Neural Networks for Sequence Learning, Lipton et al. 2015 Unz\u00e4hlige Lernaufgaben erfordern den Umgang mit sequentiellen Daten. Bilderkennung, Sprachsynthese und Musikerzeugung ben\u00f6tigen alle ein Sequenz-Modell. Rekurrente (wiederkehrende) neuronale Netze (RNNs) speichern und lernen &hellip; <a href=\"http:\/\/www.riemerundco.de\/bl\/?p=191\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40],"tags":[43,41,44,45,42],"class_list":["post-191","post","type-post","status-publish","format-standard","hentry","category-deepmind","tag-lstm","tag-neurale-netzwerke","tag-neuronale-turing-maschinen","tag-ntm","tag-rnn"],"_links":{"self":[{"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=\/wp\/v2\/posts\/191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=191"}],"version-history":[{"count":73,"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=\/wp\/v2\/posts\/191\/revisions"}],"predecessor-version":[{"id":276,"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=\/wp\/v2\/posts\/191\/revisions\/276"}],"wp:attachment":[{"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=191"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.riemerundco.de\/bl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}