Diskussion:Rekurrentes neuronales Netz
Der Einzelnachweise ist nicht mehr erreichbar + ML Methode
BearbeitenAlternativ könnte man auch das Erlernen durch das Gradientenabstiegsverfahren "backpropagation through time" (BPTT) oder durch Evolutionäre Algorithmen als globale Lernstrategie erwähnen.
Eigenname oder nicht?
Bearbeiten"Beispiele [...] das vollständig verschaltete neuronale Netz" - was soll das sein? -- 194.95.142.180 14:38, 3. Sep. 2012 (CEST)
Link offline
BearbeitenDer Nachweis bzgl. Reservoir-Learning ist leider offline. (nicht signierter Beitrag von 132.231.51.111 (Diskussion) 19:11, 4. Aug. 2015 (CEST))
Verwendung der totalen Ableitung
Bearbeitenist hier ganz gut diskutiert: https://fdsmlhn.github.io/2017/10/22/Derivation%20of%20Back%20Propagation%20Through%20Time%20(BPTT)%20-%20Vanilla%20Recurrent%20Neural%20Network(RNN)/ biggerj1 (Diskussion) 00:39, 2. Jul. 2021 (CEST)
Kurzer Pseudocode
BearbeitenEin kurzer Pseudocode von 4-5 Zeilen, welcher die rekurrente Anwendung des neuronalen Netztes auf eine Seuenz gerordneter Inputs zeigt (wobei jeweils der Hidden State geupdated wird) würde wohl sehr hilfreich für neue Leser sein. Die dabei auftretende Schleife wird in Bibliotheken wie pytorch stark beschleunigt (im Vergleich zu reiben Python). Ich vermisse diesen zentralen Punkt biggerj1 (Diskussion) 19:49, 10. Aug. 2023 (CEST)
- @Maximum 2520: was denkst du?
- Ich stelle mir für die Illustration des Grundprinzipes einen extrem einfachen Pseudocode wie diesen vor.
:h_0 = 0 :N=Length time series :for i in range(N): : y_pred_i,h_(i+1) = NN(x_i, h_i) :return [y_pred_0,...y_pred_N] :
Gerne auch anders --biggerj1 (Diskussion) 20:03, 10. Aug. 2023 (CEST)
- Hallo biggerj1, hast du dafür einen Einzelnachweis oder einen anderen Beleg? Ich bin kein Fan von Pseudocode, weil es dafür keine einheitlichen Standards gibt. Stattdessen würde ich eine allgemein übliche Programmiersprache vorschlagen, in diesem Fall Python. Das Codebeispiel würde ich als Funktion darstellen, zum Beispiel in etwa so:
def xyz(N, NN) h_0 = 0 for i in range(N): y_pred_i, h_(i+1) = NN(x_i, h_i) return [y_pred_0, ..., y_pred_N]
- Im Artikel müsstest du erklären, was die Variablen und Parameter bedeuten. Was hälst du von diesem Vorschlag? Viele Grüße --Maximum 2520 (Diskussion) 23:00, 10. Aug. 2023 (CEST)
- Verstehe, ich finde an dieser Stelle, dass lauffähiger Code das Beispiel eventuell verkompliziert:
def RNN_forward_loop(x, sequence_lenght, neural_network, hidden_size) hidden = torch.zeros(hidden_size) # initialize with zeros y_pred =torch.zeros(sequence_length) for i in range(sequence_length): y_pred[i], hidden = neural_network(x[i], hidden) # overwrite hidden state return y_pred
Was denkst du? Ist das lesbarer? biggerj1 (Diskussion) 23:45, 10. Aug. 2023 (CEST)
- https://books.google.de/books?id=5l56EAAAQBAJ&pg=PT451&dq=pseudo+code+rnn+forward+loop&hl=de&newbks=1&newbks_redir=0&source=gb_mobile_search&ovdme=1&sa=X&ved=2ahUKEwjR68iziNOAAxX6_7sIHSWVBr4Q6AF6BAgKEAM#v=onepage&q=pseudo%20code%20rnn%20forward%20loop&f=false das hier wäre z.B. eine Quelle. Der Autor findet das Konzept auch wichtig biggerj1 (Diskussion) 23:48, 10. Aug. 2023 (CEST)
- @Biggerj1: Ja, das finde ich deutlich lesbarer. Außerdem ist lauffähiger Code deutlich praxisnäher als Pseudocode. Wirklich interessierte und fähige Leser können dann den Code kopieren, eventuell ändern, kompilieren und ausführen.
- Ob das Buch als Quelle geeignet ist, kann ich nicht genau beurteilen. Ich kenne mich mit dem Thema Deep Learning nicht im Detail aus. Sind die Codebeispiele in dem Buch in Pseudocode?
- Ich würde vorschlagen, dass du das Buch - und den Abschnitt im Buch, der zu deinem Codebeispiel passt - als Einzelnachweis angibst. Damit dein Codebeispiel verständlicher ist, wäre ein Text mit weiteren Erklärungen nötig und vielleicht auch weitere Codekommentare. Was ist zum Beispiel die Variable torch? Ich meine, es macht Sinn, die Bedeutung aller Variablen und Parameter zu erklären oder zumindest die, die nicht aus dem Zusammenhang des bisherigen Artikels klar sind. Die Sprachelemente von Python musst du nicht erklären, solltest aber erwähnen, dass es ein Codebeispiel einer Funktion in Python ist.
- Hast du vor, dem Artikel einen neuen Abschnitt hinzuzufügen? Viele Grüße --Maximum 2520 (Diskussion) 22:50, 11. Aug. 2023 (CEST)
- Ich habe Mal einen Abschnitt eingefügt biggerj1 (Diskussion) 14:45, 12. Aug. 2023 (CEST)
- @Biggerj1: Es macht Sinn, dass du mich mit Ping benachrichtigst. Ich verfolge meine Diskussionen bei Wikipedia nicht unbedingt jeden Tag.
- Ich habe Mal einen Abschnitt eingefügt biggerj1 (Diskussion) 14:45, 12. Aug. 2023 (CEST)
- Für den Anfang finde ich den Abschnitt Pseudocode schon mal gut. Das Codebeispiel und die Kommentare können vielleicht erst mal so bleiben. Ob "Pseudocode" die richtige Überschrift für den Abschnitt ist, weiß ich nicht.
- Zwei konkrete Änderungsvorschlage habe ich: Statt "Python (Programmiersprache)" würde ich "die Programmiersprache Python" schreiben und "Rekurrentes neuronales Netz" statt "RNN". Abkürzungen finde ich nur sinnvoll, wenn sie hinreichend bekannt sind wie zum Beispiel HTML. Das ist hier nicht der Fall. Außerdem wurde die Abkürzung im Artikel bisher nicht verwendet.
- Bei deinem Einzelnachweis finde ich die Nummer des Abschnitts besser als die Seitenzahl, weil es zumindest bei mir ein Problem beim Anzeigen der Seiten gibt, wenn ich auf deinen Link klicke. Wahrscheinlich brauche ich einen Google Account, damit die Seiten dann sofort sichtbar sind. Den "Anker" für den Einzelnachweis würde ich am Ende des Abschnitts oder am Ende des Abschnitts vor dem Codebeispiel einfügen, weil er dann besser sichtbar ist als zwischendrin im Text.
- Erklärungen zu den meisten Variablen und Parametern fehlen noch. Du erwähnst nur die Variable hidden. Willst du das noch ergänzen?
- Viele Grüße --Maximum 2520 (Diskussion) 23:55, 12. Aug. 2023 (CEST)
- @Maximum 2520: danke für dein Feedback, ich habe die Beschreibung nochmals etwas überarbeitet biggerj1 (Diskussion) 13:35, 13. Aug. 2023 (CEST)
- Ich glaube, so ist der Abschnitt schon deutlich besser.
- Die Formulierung "angelehnt an Python" statt "angelehnt an die Programmiersprache Python" gefällt mir nicht. Insbesondere für Laien ist die zu recht irritierend ...
- Einen kleinen Verbesserungsvorschlag habe ich noch: Nach meiner Erfahrung ist es bei Wikipedia üblicher, Bezeichner von Variablen, Parameter, Funktionen, Klassen, ... im Text kursiv, z. B. neural_network oder in <code></code>, z. B.
neural_network
statt in Klammern zu schreiben, wie im Artikel Binärbaum oder Zeiger (Informatik). Solche Kleinigkeiten werden manchmal unterschiedlich gemacht. - Ich finde es gut, dass du den neuen Abschnitt hinzugefügt hast, obwohl du am Anfang nicht alle Qualitätskriterien berücksichtigt hast. Zum Thema Informatik habe ich "hier" in den letzten 4 Jahren nur wenige neue substanzielle Artikelbeiträge gesehen. Daher machen auch provisorische Beiträge Sinn, oder?
- Hast du vor, den Abschnitt Pseudocode um weitere Erklärungen zu erweitern? Planst du Erweiterungen in anderen Artikeln im Bereich Deep Learning oder Informatik? Viele Grüße --Maximum 2520 (Diskussion) 22:34, 13. Aug. 2023 (CEST)
- besten Dank für deine Verbesserungsvorschläge! Ich sehe es auch so wie du. Ich finde auch nicht vollkommen geschliffene Beiträge mit neuen Informationen hilfreich :) wenn du Mal in meiner Bearbeitungshistorie schaust, siehst du, dass ich immer Mal wieder neue Artikel im Bereich Machine Learning/Statistik/... anlege wenn sie bisher fehlten oder Infos in bestehende Artikel einfüge. Falls wir Mal wieder zusammen an einem Artikel arbeiten, freue ich mich schon auf dein Feedback :) Liebe Grüße biggerj1 (Diskussion) 08:04, 14. Aug. 2023 (CEST)
- @Biggerj1: Ich glaube, der Abschnitt könnte erst mal so bleiben. Danke für die Änderungen. --Maximum 2520 (Diskussion) 20:44, 14. Aug. 2023 (CEST)
Abschnitt Eigenschaften inhaltlich falsch
BearbeitenDer Abschnitt ist mehr oder weniger eine direkte Übersetzung der Quelle von IBM. Einige der Aussagen sind aber schlichtweg falsch, andere nur irreführend. Ich unterrichte Maschine Learning und hier stellen sich mir die Haare auf ;)
"Ein weiteres Merkmal von rekurrenten Netzen besteht darin, dass sie Parameter über alle Schichten des Netzes hinweg gemeinsam nutzen. Während Feedforward-Netze über jeden Knoten unterschiedliche Gewichtungen haben, teilen sich rekurrente neuronale Netze innerhalb jeder Schicht denselben Gewichtungsparameter."
Das ist falsch! Bei einem RNN bleiben die Gewichte über alle Zeitschritte gleich, aber nicht alle Gewichte einer Schicht sind gleich. Wenn man ein RNN ausrollt, so dass es (fast) wie ein normales Feed-Forward-Netz aussieht, dann könnte man das so sagen. So, wie hier geschrieben, ist es schlichtweg falsch. Quellen:
- "For a given sequence length, the unrolled network is essentially just a feed-forward neural net, although the weights are shared between all time steps." University of Toronto, Lecture 15: Recurrent Neural Nets
- "Suppose that we trained a feedforward network that processes sentences of fixed length. A traditional fully connected feedforward network would have separate parameters for each input feature, so it would need to learn all the rules of the language separately at each position in the sentence. By comparison, a recurrent neural network shares the same weights across several time steps." Goodfellow et al.
Ich kann anbieten, den Abschnitt zu überarbeiten bzw. ihn komplett zu ersetzen, aber bevor ich mir die Mühe mache, wollte ich erst die Diskussion hier starten, ob ihr das ähnlich seht. --TheSentry (Diskussion) 18:53, 15. Jan. 2024 (CET)