Hilfe bei der Auswahl einer passenden Aktivierungsfunktion für neuronale Netze

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Hey ich melde mich wieder ;)

Kurz etwas vorab:

1) Ich schreibe gerade meine Bachelorarbeit
2) mein Thema: Analyse und Implementierung des Backpropagation Algorithmus für feed forward neuronale Netze zur Erkennung von handgeschriebenen Ziffern


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
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@Wunderkind89
hast Du die Möglichkeit, einfach beides mal "am realen Objekt" auszuprobieren?
Oben stellst Du ja schon eine These auf.
Bei einer wissenschaftlichen Arbeit geht's ja (auch) darum, Thesen aufzustellen und zu überprüfen/diskutieren.
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Mal eine etwas komplexe Frage an euch alle:

ich hab jetzt in meiner Implementierung in den Hiddenlayer sigmoid statt ReLU, ELU, LReLU, PReLU, RReLU oder Hard Sigmoid Funktion genommen.

Grund: Die Sigmoid - Aktivierungsfunktion galt lange Zeit als Standard unter den Aktivierungsfunktionen, z.B. bei den Wahrscheinlichkeitsberechnungen, wo der Output zwischen 0 und 1 liegen muss.

Noch Konkreter auf mein Fall bezogen: da ich durch Softmax in der Outputschicht Werte zwischen 0 und 1 kriege (Wahrscheinlichkeiten), nutze ich in den Hiddenlayer sigmoid als Aktivierungsfunktion, damit es auch zu meinen Ausgaben der softmax passt. Könnte man es als Argument durchgehen lassen?

Ich hab vorher mit ReLU versucht und meine Werte wurden immer größer je tiefer mein NN war.

Jetzt ist natürlich schwierig mathematisch zu erklären, welche Funktion von den beiden die bessere ist, da ich in dieser Hinsicht keine Versuche gemacht habe zwischen sigmoid und anderen Funktionen. Ich hab nur aus Literatur Hyperparameter übernommen und kriegte da eine Accuracy von 97%. Ich hab die Literatur genommen, weil da sigmoid verwendet wurde (auch in der Outputschicht, was bei mir jedoch softmax ist) und das stochastische Gradientenverfahren wurde in der Literatur ebenfalls verwendet.


Mir fehlt also eine konkrete Begründung für die Entscheidung für sigmoid und ob man das, was ich sagte als Argument durchgehen lassen kann (also das ich sigmoid nehme, damit es zu den Ausgaben der Softmax passt). Ich hätte vlt. das durch Experimente ermitteln sollen aber auch da spielt es eine Rolle wie ich meine Anfangsgewichte initialisiere und ich kann da ja auch nicht für alle möglichen Gewichte das Ganze testen, daher auch da eine konkrete Aussage zwischen ReLU und Sigmoid zu tätigen welche Funktion von den beiden die bessere ist, wäre m.M.n. falsch.

Literatur oder Heuristiken zu finden war in dieser Hinsicht schwierig, weil

1. meistens wurden solche Probleme wie Bildklassifizierung aus einer MNIST mit CNNs gelöst
2. ich konnte keine Quellen finden, die genau das Gleiche wie ich hatten, wie z.B. Categorical Cross Entropy als Kosten Funktion, Softmax in der letzten Schicht usw.


In der Literatur wird auch ReLU der Sigmoid vorgezogen, weil ReLU das problem schwindender Gradienten nicht hat und schneller auszuwerten ist. Das ReLU nicht differenzierbar ist in x = 0 scheint kein Problem zu sein (warum auch immer) und ebenso stellt x < 0 auch kein problem dar, weil man kann da "ELU" nehmen in solchen fällen. Da frage ich mich natürlich, warum gibt es ReLU wenn ELU die bessere Variante ist oder nimmt man ReLU wenn man von vorn herein weiß, dass alle Gewichte eh positiv sind?

In meinem Buch wird zu Dying ReLU gesagt: "solange nicht alle Gewichte in einem Batch 0 sind, können sich die Gewichte noch ändern, ansonsten hilft es die Lernrate zu senken oder andere Aktivierungsfunktionen zu nehmen".

Lange Rede kurzer Sinn: mir fehlt eine Begrünung für die Entscheidung von sigmod, außer dass mir mein erster Betreuer mal sagte "warum nehmen Sie ReLU und nicht sigmoid? Sie haben doch Wahrscheinlichkeiten und sigmoid passt dazu besser?"

Grüße
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Achja noch ein Zusatz:

https://stats.stackexchange.com/questio ... ropagation (edited)

Frage:

1. Warum ist dL / df sowohl positiv als auch negativ? Wird da eine Lossfunction etwa nach sigmoid abgeleitet? Weil in der Loss Funktion ja intern die Ausgabe des NN steckt und in dieser Ausgabe wiederum stecken Aktivierungsfunktionen wie z.B. sigmoid

2. Wenn das, was da steht stimmt. Warum ist es dann schlecht, dass dL / df
sowohl positiv als auch negativ sein kann?

So wie ich das verstehe, versuchen die da zu begründen, warum sig(x) > 0 schlecht ist, daher dass sigmoid nur positive Werte hat für bel. x.

Grüße
Antworten