Matroids Matheplanet Forum Index
Moderiert von matroid
Informatik » Algorithmen / Datenstrukturen » Thema: Backpropagation
Thema eröffnet 2021-08-12 23:53 von Wunderkind89
Seite 2   [1 2]   2 Seiten
Autor
Universität/Hochschule Thema: Backpropagation
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.40, vom Themenstarter, eingetragen 2021-09-04

(1) Ne, also ich will ja die Ableitung von einem Vektor a nach einer Gewichtsmatrix W umgehen und stattdessen Vektor a nach einem Gewichtsvektor w betrachten. Wenn ich aber Gewichtsvektoren w betrachte, dann muss ich den Vektor a so oft nach meinen Gewichtsvektoren differenzieren, wie meine Gewichtsmatrix Zeilen hat. Da muss ich dann aber hoffentlich keine gesonderten Schreibweisen nehmen da ich ja Vektor nach Vektor differenziere. Wie würde man so etwas math. aufschreiben? (2) Was mich auch bisschen wundert ist, dass der Autor bei der Ableitung seiner Cross Entropy weder nach den Gewichten noch nach Bias ableitet. Er Betrachtet (hoffe richtig geschrieben): cross = -sum(y_i*ln(s_i),i=1,C) Diese Funktion leitet er folgendermaßen ab: pdiff(Cross,Z_j)= pdiff(Cross,S_i)*pdiff(S_i,Z_j) Es müsste aber doch so aussehen: pdiff(Cross,Z_j)= pdiff(Cross,S_i)*pdiff(S_i,Z_j)*pdiff(z_j,w_i)


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2657
  Beitrag No.41, eingetragen 2021-09-04

\quoteon(2021-09-04 14:08 - Wunderkind89 in Beitrag No. 40) Da muss ich dann aber hoffentlich keine gesonderten Schreibweisen nehmen da ich ja Vektor nach Vektor differenziere. \quoteoff Dass auch das seine Tücken hat, hast du doch zu Beginn dieses Threads gesehen. Daher würde ich wirklich dazu raten, dem Beispiel des Autors der in Beitrag Nr. 32 verlinkten Seite zu folgen und ersteinmal komponenentenweise zu rechnen und danach zusammenzufassen. \quoteon(2021-09-04 14:08 - Wunderkind89 in Beitrag No. 40) Was mich auch bisschen wundert ist, dass der Autor bei der Ableitung seiner Cross Entropy weder nach den Gewichten noch nach Bias ableitet. \quoteoff Er betrachtet nur die Abhängigkeiten, die spezifisch für die Kombination Softmax-Funktion + Kreuzentropie sind, und die beginnen erst nach dem Output-Layer. Die Abhängigkeit der Ergebnisse des Output-Layers von den Parametern des Netzes sehen ja aus "wie immer".


   Profil
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1753
  Beitrag No.42, eingetragen 2021-09-05

Hallo, wie sieht momentan die Programmierung aus? Man könnte beginnen mit 2 Datensätzen und 2 Zielen und einem ganz simplen Abstiegsverfahren. Später 10 Datensätze und 10 Ziele. Viele Grüße Ronald


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.43, vom Themenstarter, eingetragen 2021-09-06

----


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.44, vom Themenstarter, eingetragen 2021-09-06

@Delastelle Die Programmierung mache ich zwar nebenbei, aber vorerst muss die Theorie sitzen und ich brauche die Endformeln. Weil zu programmieren ohne wirklichen Plan bringt leider nichts und ist ein reines drauflos-programmieren. Anspruch an meine Bachelorarbeit: Ich muss die Formeln herleiten und diese auch bei der Programmierung umsetzen. Es wäre nicht gut, wenn ich vorgefertigte Funktionen bzw. Bibliotheken aus Keras/TensorFlow für mein Backpropagation nutze (das hat mein Betreuer gesagt). Grüße


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.45, vom Themenstarter, eingetragen 2021-09-08

----


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.46, vom Themenstarter, eingetragen 2021-09-08

kann mir einer bei der Ableitung von Backpropagation nach Gewichten helfen? Da habe ich meine Probleme, weil die Dimensionen irgendwie nicht passen: https://matheplanet.de/matheplanet/nuke/html/uploads/b/49722_Screenshot_414_.png 1. Die Ableitung der Softmax ist bei mir eine Matrix. Vorschlag: ich schreibe die Ableitung meiner Softmax nach einem Vektor, sodass ich ein Vektor rauskriege (bei Matrix werden sonst die Dimensionen nicht passen), daher ich betrachte die einzelnen Zeilen der Softmax als Vektoren. 2. Der zweite Term ist ein Vektor 3. Der Dritte Term ist eine Aktivierungsfunktion (LReLU) nach s, also ein Skalar 4. der letzte Term ist bei mir wieder ein Vektor. Davor hatte ich den zweiten und letzten Term als Matrix aufgefasst, damit es Multiplikationstechnisch zu Matrix meiner softmax passt und wollte so alle Neuronen eines layers berechnen und dann die Überraschung: die Dimensionen passen nicht. Wie würdet ihr das aufschreiben in Matrix/Vektor schreibweise. Wäre euch sehr dankbar, weil das ist derzeit die größte Schwierigkeit bei mir + Implementierung. Grüße


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.47, vom Themenstarter, eingetragen 2021-09-15

Update: mein Betreuer hat mir geraten Binary Cross Entropy zu nutzen und da hätte ich auch eine Frage: binary Crossentropy und Cross entropy nutzen beide log. Bei Crosssetropy habe ich aber statt log auch mal ln gesehen. Also gehe ich davon aus, dass hier log zu Basis e gemeint ist. Ich hab auch schon Ableitung von Cross entropy gesehen, wo zwar log abgeleitet wurde aber dieses log bei der Ableitung wie ln behandelt wurde. Hier zum Beispiel: https://towardsdatascience.com/derivative-of-the-softmax-function-and-the-categorical-cross-entropy-loss-ffceefc081d1 Jetzt frage ich mich 1. Warum schreibt man log statt ln? 2. ist bei meiner Binary Cross Entropy auch davon auszugehen dass hier log als ln gemeint ist bzw. log zu basis e? Weil das ist komisch, denn wenn man bei log keine Baisis schreibt, dann geht man automatisch von Basis 10 aus und das machen die Autoren nirgendwo klar. Und außerdem frage ich mich, warum ich Binary Crossentropy nehmen soll, denn ich hab schon gesehen, dass mit normaler/allgemeiner Crossentropy man auch Backpropagation trainieren kann. Mein Betreuer meinte, dass Binary wegen 1,0 bzw. wahr/falsch auf meinen Fall gut zutrifft, denn entweder entspricht eine Ziffer meinem Layer oder halt nicht. Das ist aber doch kein Argument die allgemeine Crossentropy nicht zu nehmen oder was meint ihr? Mit allgemeiner Crossentropy meine ich die Funktion, die auf der von mir verlinkten Seite abgeleitet wird. Grüße


   Profil
Brayn
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 07.09.2014
Mitteilungen: 262
Wohnort: Kaiserslautern
  Beitrag No.48, eingetragen 2021-09-15

Hallo, \quoteon(2021-09-15 16:41 - Wunderkind89 in Beitrag No. 47) Jetzt frage ich mich 1. Warum schreibt man log statt ln? \quoteoff Keine Ahnung, hat mich anfangs auch verwirrt. Wenn du bei Wolfram Alpha log(x) eingibst wird das auch als natürlicher Logarithmus verstanden (steht unten rechts im Eck). Vielleicht hat das was mit englischer Notation zu tun. \quoteon(2021-09-15 16:41 - Wunderkind89 in Beitrag No. 47) 2. ist bei meiner Binary Cross Entropy auch davon auszugehen dass hier log als ln gemeint ist bzw. log zu basis e? \quoteoff Lösen wir das Problem mal anders. Wieso wird überhaupt ln verwendet? Sehen wir uns dazu mal die Definition von CrossEntropy in Pytorch an (dort stehts nämlich schon 😉): https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html Du siehst, der natürliche Logarithmus harmoniert hier sehr schön mit der e-Funktion. Der Bruch im Logarithmus lässt sich als Differenz schreiben. Kennst du vielleicht noch aus der Schule. Siehe auch hier: https://de.wikipedia.org/wiki/Logarithmus#Quotienten \quoteon(2021-09-15 16:41 - Wunderkind89 in Beitrag No. 47) Und außerdem frage ich mich, warum ich Binary Crossentropy nehmen soll \quoteoff Da fragst du am besten deinen Betreuer, was der sich dabei gedacht hat. Wir können nur spekulieren. Meine Vermutung wäre, dass er dachte es sei für den Anfang einfacher. \quoteon(2021-09-15 16:41 - Wunderkind89 in Beitrag No. 47) denn ich hab schon gesehen, dass mit normaler/allgemeiner Crossentropy man auch Backpropagation trainieren kann. \quoteoff Beide Fehlerfunktionen sind differenzierbar, also darum ging es deinem Betreuer nicht. \quoteon(2021-09-15 16:41 - Wunderkind89 in Beitrag No. 47) Mein Betreuer meinte, dass Binary wegen 1,0 bzw. wahr/falsch auf meinen Fall gut zutrifft, denn entweder entspricht eine Ziffer meinem Layer oder halt nicht. Das ist aber doch kein Argument die allgemeine Crossentropy nicht zu nehmen oder was meint ihr? \quoteoff Das Prinzip ist auch bekannt als "One vs Rest" oder "One vs All". Das Gegenstück dazu nennt sich "One vs One", also das was du mit CrossEntropy ursprünglich vor hattest. Im "One vs Rest" Fall hättest du 10 verschiedene Confusion Matrices jeweils 2x2 groß. Da du für jede Zahl i fragen kannst ob sie tatsächlich so erkannt wurde oder eben nicht. In dem Fall, dass sie nicht als solche erkannt wurde, hast du keine weiteren Informationen. Für den "One vs One" Fall, hättest du eine Confusion Matrix von der Größe 10x10. Hier weißt du nicht nur ob eine Zahl i als solche erkannt wurde oder nicht, sondern du weißt genau zu welcher Zahl j sie zugeordnert wurde, daher die 10 Spalten. \quoteon(2021-09-15 16:41 - Wunderkind89 in Beitrag No. 47) denn entweder entspricht eine Ziffer meinem Layer oder halt nicht. \quoteoff Vielleicht nur ein Schreibfehler, falls nicht, würde ich dir empfehlen, schau dir noch mal an, was man unter einem Layer versteht. Liebe Grüße, Matthias


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.49, vom Themenstarter, eingetragen 2021-10-02 00:11

Hey ich melde mich wieder ;) Kann mir einer kurz und knackig sagen, ob Leaky ReLU oder sigmoid als Aktivierungsfunktion für die Hiddenschichten die "bessere" Funktion ist bzw. speziell in meinem Fall von handgeschriebenen Ziffern, wo ich softmax für die letzte Schicht und categorical cross entropy als Kostenfunktion nutze? Bei sigmoid(s) fällt auf: Diese Funktion ist immer positiv, denn sie läuft für s gegen minus unendlich gegen 0 und für s gegen plus unendlich gegen 1. Das bedeutet: für sehr große oder kleine Werte liegt der Gradient bei 0 und was passiert wenn der Gradient nahezu bei 0 liegt? Ich denke das bedeutet, dass das neuronale Netz nichts lernen wird, denn sehr große, als auch sehr kleine Gewichte bleiben unverändert. Und welchen Einfluss hat das jetzt, dass diese Funktion zusätzlich immer positiv ist? Die Alternative dazu wäre tanh(s) die von -1 bis 1 läuft, nur ist diese besser und wenn ja warum? Zu Leaky ReLU Da wird eine Steigung im negativen festgelegt um ein "aussterben" der Neuronen zu verhindern. Im positiven hingegen ist diese Funktion eine gerade und wird für große s nicht gesättigt, wie sigmoid oder tanh. Was heißt das jetzt genau für mich? Das eventuell große Gewichte auch stark verändert werden? Das ist doch gut oder etwa nicht? Das nachzuvollziehen scheint gerade komplex zu sein, denn falls ich mich für eine Funktion entschieden habe, dann muss ich auch gut begründen, warum ich diese Funktion genommen habe und nicht eine andere. Könnt ihr mir da weiter helfen? Ich wäre euch sehr dankbar. Grüße


   Profil
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1753
  Beitrag No.50, eingetragen 2021-10-02 01:38

Hallo, ich habe bei bestimmten Neuronalen Netzen als Aktivierungsfunktion tanh (Tangenshyperbolikus) bzw. atan (Arcustangens) benutzt. atan war etwas schneller zu berechnen als tanh. Viele Grüße Ronald


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.51, vom Themenstarter, eingetragen 2021-10-02 02:34

Das muss doch in einer wissenschaftlichen Arbeit gut begründet sein und mit gut meine ich mathematisch bzw. logisch korrekt nachvollziehbar? Grüße


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2657
  Beitrag No.52, eingetragen 2021-10-02 10:46

\quoteon(2021-10-02 02:34 - Wunderkind89 in Beitrag No. 51) Das muss doch in einer wissenschaftlichen Arbeit gut begründet sein und mit gut meine ich mathematisch bzw. logisch korrekt nachvollziehbar? \quoteoff Die Aktivierungsfunktion gehört genauso wie Anzahl und Größe der Hidden Layer und vieles andere zu den Hyperparametern eines neuronalen Netzes. Für die Wahl dieser Hyperparameter gibt es zwar bestimmte Heuristiken (zu denen dir Google mehr als ausreichend viele Informationen liefern kann), aber sinnvoller und auch State of the Art ist es, diese systematisch zu optimieren.


   Profil
Elli_2001
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 18.09.2021
Mitteilungen: 7
  Beitrag No.53, eingetragen 2021-10-06 19:03

Hey, ich glaube wir haben ein ähnliches Ziel ;) Ich habe den Code schon fertig und schreibe gerade ein Skript für meine Übungen. Mir fehlen noch ein paar Details zur Theorie (siehe meine Frage auch in diesem Forum). \quoteon(2021-10-02 00:11 - Wunderkind89 in Beitrag No. 49) Bei sigmoid(s) fällt auf: [...] Das bedeutet: für sehr große oder kleine Werte liegt der Gradient bei 0 und was passiert wenn der Gradient nahezu bei 0 liegt? Ich denke das bedeutet, dass das neuronale Netz nichts lernen wird, denn sehr große, als auch sehr kleine Gewichte bleiben unverändert. \quoteoff Besser hätte ich es auch nicht erklären können. Genau richtig. Wenn du jetzt noch wissen bzw. begründen möchtest wieso das so ist, dann schau dir mal die Updateregel von GD an: $$w^{(k+1)} := w^{(k)} - \eta \nabla f(w^{(k)})$$ mit Lernrate $\eta$ und Gradient $\nabla f(w^{(k)})$. Ich schreibe $w^{(k)}$ für die Gewichte aus der $k.$ Iteration. Wenn der Gradient also 0 ist, dann ist $w^{(k+1)} = w^{(k)}$ und damit ändern sich deine Gewichte zwischen zwei Iterationen nicht. \quoteon(2021-10-02 00:11 - Wunderkind89 in Beitrag No. 49) Und welchen Einfluss hat das jetzt, dass diese Funktion zusätzlich immer positiv ist? \quoteoff Mir ist dazu nichts bekannt. Du kannst auch tanh(x) um +1 nach oben shiften und diese Funktion dann my_tanh(x) nennen, aber der Gradient ändert sich dadruch trotzdem nicht. Heutzutage verwendet kaum noch jemand sigmoid als Aktivierungsfunktiong, aus genau dem Grund den du schon genannt hast. Insbesondere in tiefen Netzen (und z.B. RNNs) ergibt das keinen Sinn (siehe auch Vanishing Gradient Problem). Mein selbst implementiertes Modell für MNIST hat einen Hidden-Layer mit 64 Neuronen, der Hidden-Layer nutzt Relu und im Output-Layer verwende ich Softmax als Aktivierungsfunktion. Damit bekomme ich nach nur einer Epoche schon einen $F_1$ Score von über $90%$. An dieser Stelle schon mal der Hinweis: Die Gewichtsbelegung zu Beginn ist extrem wichtig. Begonnen habe ich naiv mit einer Gaußverteilung mit Mittelwert 1 und Standardabweiung 1 (ich dachte, der Rest erledigt sich durchs Training). Irgendwann habe ich festgestellt, dass das Training zu Beginn sehr lange dauert, je nachdem wie ich die seeds wähle. Übrigens auch sinnvoll für dich: Verwende manuell gesetzte seeds, z.B. in Python mit numpy z.B. numpy.random.seed(1). Dadurch werden deine Ergebnisse reproduzierbar. Dann habe ich nach Paper gesucht und wurde auch fündig. Es gibt viele Paper zu diesem Thema, aber für die Übungen möchte ich es natürlich auch einfach halten und habe mich dann für ein älteres Paper entschieden. Ich will das Thema nicht unnötig in die Länge ziehen und stimme zippy absolut zu. Am besten implementierst du dir ein paar Aktivierungsfunktionen: sigmoid, Relu, Leky-Relu, elu und berechnest deren Ableitungen. Dann könntest du dir eine Liste mit diesen Funktionen speichern z.B. akt_list = [self.sigmoid, self.relu] und verwendest zum Schluss eine Grid-Search. Dabei schreibst du so viele ineinander geschachtelte for-Schleifen wie du auch Hyperparameter hast. Im obigen Beispiel könnte eine for-Schleife also von 0 bis 1 laufen und dein Modell initialisierst du dann mit MLP(akt_fkt=[akt_list[i], akt_list[j]]). Hierbei sind i und j zwei Laufvariablen aus zwei verschiedenen for-Schleifen. Ich habe den Konstruktor meiner MLP Klasse mit folgenden Parametern ausgestattet: 1. input_size=784 2. hidden_layer=[64] 3. aktivierungsfunktionen=["relu", "softmax"] 4. learning_rate=0.0001 Im Konstruktor werden die Strings "relu" und "softmax" wie oben beschrieben in eine Liste von Methoden überführt. Viel Erfolg bei deiner Bachelorarbeit, Elli


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.54, vom Themenstarter, eingetragen 2021-10-14 17:55

Hey ich melde mich wieder, erstmal danke für eure Antworten. Ich würde gern auf eure Antworten detailliert eingehen aber mangels Zeit kann ich es leider nicht ^^ Es gibt eine andere Sache, die ich noch nicht so ganz verstanden habe und zwar geht es um die Bias Unit. Erstmal der Link dazu (ganz unten wird diese kurz erklärt): http://www.neuronalesnetz.de/aktivitaet.html Die Bias Unit steht ja in der Summe, wenn man ein Neuron berechnen möchte (wenn ihr wisst, was ich meine). Diese Bias Unit finde ich aber in keiner Literatur, wo sie zusätzlich mit einem Gewicht multipliziert wird. 1. Warum zum Teufel wird auf dieser Seite von einem Gewicht gesprochen, der von der Bias Unit ausgeht? Zitat: "Das Gewicht von der Bias-Unit zu einer anderen Unit kann positiv oder negativ sein". Wenn ich jetzt an die Summe denke, dann hab ich immer w*a + b und nicht Summe w*a + w*b. Und wenn wir schon dabei sind: Wenn Bias = 1 ist dann steht da Summe w*a + w*1 und w*1 ist w also schreibe ich da ein w statt b. So, wie ich verstanden habe, trainiert man das neuronale Netz, indem man die Gewichte UND den Bias optimiert. Die Bias kann ich aber nur über die Gewichte ändern, also hat die Bias Unit doch Gewichte? 2. Auf der Seite steht Zitat " Bei negativem Gewicht sorgt die Bias-Einheit hingegen dafür, dass die Unit in ihrem inaktiven Zustand verharrt". Von welcher Unit reden die da? Ich nehme an da wo die Bias Unit reingeht? Das würde aber keinen Sinn machen, denn auch andere Neuronen mit ihren Gewichten beeinflussen eine Unit. Also gehe ich stark davon aus, dass sie folgendes sagen wollen: wenn gewichte der Bias Unit Negativ, dann ist die Bias Unit 0? Ich hoffe Ihr könnt mir da etwas Licht ins Dunkle bringen. Achja: Implementiertechnisch musste ich das Ganze doch nach Hadamard machen bzw. Matrizen nach Hadamard verrechnen, weil mit einer for Schleife der Lernprozess unbrauchbar wäre und es ca. 10 Tage dauern würde bis ich ein Ergebnis habe. Grüße


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2657
  Beitrag No.55, eingetragen 2021-10-14 19:14

\quoteon(2021-10-14 17:55 - Wunderkind89 in Beitrag No. 54) 1. Warum zum Teufel wird auf dieser Seite von einem Gewicht gesprochen, der von der Bias Unit ausgeht? \quoteoff Weil der einzige Zweck der Bias-Unit darin besteht, einen bestimmten Bias-Wert als Produkt der konstanten Aktivität $1$ der Bias-Unit und einem Gewicht darzustellen. \quoteon(2021-10-14 17:55 - Wunderkind89 in Beitrag No. 54) Das würde aber keinen Sinn machen... \quoteoff Doch, das macht Sinn, nur die Formulierung ist schlecht. Natürlich sorgt ein negativer Bias nicht dafür "dass die Unit in ihrem inaktiven Zustand verharrt". Gemeint ist, dass er die Schwelle erhöht, die überschritten werden muss, damit die Unit aus diesem Zustand herauskommt. Warum gräbst du so eine zweifelhafte über 14 Jahre alte Quelle aus und beschäftigst dich damit? \quoteon(2021-10-14 17:55 - Wunderkind89 in Beitrag No. 54) Also gehe ich stark davon aus, dass sie folgendes sagen wollen: wenn gewichte der Bias Unit Negativ, dann ist die Bias Unit 0? \quoteoff Nein, das wollen sie nicht sagen. --zippy


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.56, vom Themenstarter, eingetragen 2021-10-14 21:37

Zitat: "Weil der einzige Zweck der Bias-Unit darin besteht, einen bestimmten Bias-Wert als Produkt der konstanten Aktivität 1 der Bias-Unit und einem Gewicht darzustellen". Der Sinn und Zweck so einer Unit erschließt sich mir immer noch nicht (vlt. wären 2/3 Beispiele hilfreich). Das, was du sagst ist im Grunde: Bias Wert = 1 * Gewicht 1. Was macht es für ein Sinn die Bias auf 1 zu setzen? 2. Die Frage ist immer noch offen, warum das Gewicht der Bias Unit b nicht in der Summe w * a + b geschrieben wird bzw. da ignoriert wird. 3. Im Grunde ist das ja nichts anderes als f(x + 1) mit x = Summe w * a. Da wird die Funktion für x < 0 nach rechts (Schwelle wird erhöht)) und für x > 0 nach links verschoben (Schwelle wird verkleinert). Für x < 0 wird die Funktion nach rechts verschoben. Bei einer ReLU würde es für x < 0 bedeuten, dass diese Funktion bei der SUmmierung w * a größere Werte braucht, um erst aktiviert zu werden. Und was hat das ganze mir jetzt gebracht? Ist doch eigentlich schlechter, da die Funktion erst später Aktiviert wird. Angenommen ich hab sigmoid(x) und ich kriege sehr hohe Werte durch Summierung w * a. Tja, was bringt mir dann so ein Bias Unit mit 1 * Gewicht? Kaum zu glauben, aber so etwas triviales will einfach nicht in mein Kopf rein.


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2657
  Beitrag No.57, eingetragen 2021-10-14 22:28

\quoteon(2021-10-14 21:37 - Wunderkind89 in Beitrag No. 56) Der Sinn und Zweck so einer Unit erschließt sich mir immer noch nicht \quoteoff Der einzige Zweck ist die Vereinheitlichung der Darstellung: Die Bias-Werte kommen nicht "aus dem Nichts", sondern stammen wie alle anderen Inputs auch von anderen Neuronen. \quoteon(2021-10-14 21:37 - Wunderkind89 in Beitrag No. 56) 1. Was macht es für ein Sinn die Bias auf 1 zu setzen? \quoteoff Niemand setzt einen Bias auf 1. Der Bias ist das Produkt aus Gewicht und Aktivität der Bias-Unit. Diese Aktivität muss irgendeine Konstante $\ne0$ sein. Warum also nicht 1? \quoteon(2021-10-14 21:37 - Wunderkind89 in Beitrag No. 56) 2. Die Frage ist immer noch offen, warum das Gewicht der Bias Unit b nicht in der Summe w * a + b geschrieben wird bzw. da ignoriert wird. \quoteoff $b$ ist doch das Gewicht. Schreib den Ausdruck einfach als $\sum w_i\cdot a_i+b\cdot 1$, um das zu sehen. \quoteon(2021-10-14 21:37 - Wunderkind89 in Beitrag No. 56) Tja, was bringt mir dann so ein Bias Unit mit 1 * Gewicht? \quoteoff Nochmal: Ob du deine Bias-Werte mit Bias-Units darstellst oder nicht, ändert an dem Netz überhaupt nichts. Es ändert nur dessen Darstellung.


   Profil
Wunderkind89
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 15.03.2018
Mitteilungen: 97
  Beitrag No.58, vom Themenstarter, eingetragen 2021-10-16 16:17

Danke erstmal für deine Erklärung und allen bei allen anderen bedanke ich mich natürlich auch. Die BA ist am 11.10.2021 abgegeben worden und mir fallen jetzt schon paar Sachen auf: 1. die BA ist nicht mit LATEX geschrieben (wirkt nicht professionell). Da hab ich mir gedacht "solange es keine Punkteabzüge gibt, dann will ich mir kurz vor der BA kein LATEX beibringen". Also habe ich die BA in Word geschrieben. Kann man also erstmal so durchgehen lassen (denke ich mal). Nun kommen weitere Dinge: 2. Ich hatte keine Zeit nochmal drüber zu schauen, so dass die Zitate in eckigen Klammern rot geblieben sind. Das hatte ich gemacht, um mich während der Bearbeitung besser zu orientieren aber im nachhinein vergessen sie wieder auf schwarz zu setzen. Dadurch, dass ich keine Zeit hatte nochmal drüber zu schauen steht bei mir (bis jetzt nur) ein Verweis auf ein falsches Bild bzw. Bildnummerierung aus einer alten Version. Die Zeilenabstände zwischen Bildern und Formeln sind nicht immer gleich. Wirkt "unsauber". 3. Ich hab gerade in meiner BA die Stelle mit dem Bias genauer angeschaut und mir ist da direkt ein unangenehmer Fehler aufgefallen: ich hab einmal Bias so definiert, dass dieser bei mir an der Stelle a_1 steht (also an der ersten Stelle im Layer) und direkt danach hab ich Summe benutzt mit w*a + b, wobei die Summe alle Neuronen berücksichtigt, also auch den ersten Neuron. Im Weiteren habe ich bei meinen Gewichtsmatrizen Bias nicht berücksichtigt und da eine ganz normale Matrix mal Vektor Betrachtungsweise herangezogen, so als würde ich alle Neuronen in einem Layer ganz normal berechnen. In meiner Implementation behandle ich Bias so, dass ein wert + 1 zu meinem Shape hinzugefügt wird sprich W*a = (dim,1) => (dim+1,1). Damit meine Matrizen korrekt bleiben und ich die Summe so stehen lassen kann mit summe w*a + b muss ich sagen, dass Definition für Bias falsch ist, wo ich sage, dass der Bias immer an der ersten Stelle im Layer steht, daher a_1 = 1 ansonsten f(s). Ich muss den Bias neu definieren und zwar so: b_0 = (b_0,2 b_0,3 ...)^T mit den Elementen b_0,2 usw. als Bias Gewichte, daher den Bias komplett separat von den Gewichtsmatrizen betrachten. Ich muss natürlich jetzt abgleichen, ob ich so einen Bias-Gewichts-Vektor bringen kann in Anbetracht meiner Arbeit, weil wenn nicht, dann sind alle meine Gewichtsmatrizen nicht korrekt und das wäre nicht gut. Lange Rede kurzer Sinn: ich mach diesen Fehler bereits früh in meiner Bachelorarbeit und muss diesen in meinem Kolloquium klarstellen und auch erwähnen, was da falsch ist. Ich hab 30 Minuten Zeit für die Präsentation und dann gibt es noch 15 Minuten Zeit für eine Diskussion. Ich bin jetzt schon bei Folie 18 und das obwohl ich noch Anfang bin. Also muss ich recht schnell durch die Folien flitzen, damit ich zum wesentlichen komme. Um da eine Diskussion zu vermeiden, werde ich in meinem Kolloquium auf diesen Fehler hinweisen müssen und es klarstellen, wie es richtig sein sollte. Im Nachhinein sind solche Fehler ärgerlich und zieht eine Note natürlich runter (weil Schriftliche Abgabe und Kolloquium werden separat benotet). Bei so viel Aufwand wäre eine Note zwischen 3 und 4 nicht das, was ich erreichen wollte. Wenn ich bereits solche Fehler am Anfang mache, dann denkt man sich als Dozent, was erwartet mich denn im weiteren Verlauf? Also schaut man sich das Ganze nochmal genauer an. Vielleicht mache ich mich gerade zu verrückt aber bei so viel Aufwand will man schon eine möglichst gute Note rausholen. Grüße


   Profil
Wunderkind89 hat die Antworten auf ihre/seine Frage gesehen.
Seite 2Gehe zur Seite: 1 | 2  

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]