Sigmoid Neurode verständniss Fragen

Zespire

Lieutenant
Registriert
März 2007
Beiträge
857
Also folgendes habe mein erstes Neuronales Netz zusammen geschustert wie erwartet funktioniert es nicht :D.

Dabei bin ich mir vieler Fehler bewusst doch bei zwei Sachen bin ich mir nicht sicher...

1. Der Bias wert wozu gibt es bei der Sigmoid Neurode den Bias wen ich nichts übersehen habe könnte man ihn einfach weg lassen und würde zum selben Ergebnis kommen.

2. Bei Perceptrons ist der Rückgabewert 1 oder 0 bei Sigmoid ein wert zwischen 1.0 und 0.0 wobei
mir nicht ganz ersichtlich ist ob ich den wert abfeure oder je nachdem ob der wert größer als 0.5 ist 0 oder 1 ausgebe.
(Wie bei den output Neuroden...)


Edit:

Etwas code zum besseren Verständniss.

Code:
 public void ReciveInput(float value)//input neurode one value no bias
    {
        outPut = 1.0f / (1.0f + (float)Mathf.Exp(-value * weights[0]));
        //if out put > 0.5f output = 1 else output = 0/ignore node ?????
    }

    public void ReciveInput(Neurode[] layer)
    {
        for (int i = 0; i < layer.Length; i++)//for each neurode in the above layer
            outPut += layer[i].outPut * weights[i];//get z

        outPut = 1.0f / (1.0f + (float)Mathf.Exp(-outPut + bias));// and apply the sigmoid funktion... should work the same without bias/magic number

        //if out put > 0.5f output = 1 else output = 0/ignore node ?????
    }

Edit Nummer 2:

Ok es funktioniert doch zu Punkt 1 funktioniert auch ohne Bias konnte keinen unterschied feststellen. (einfaches Problem 4 * input 2 * hidden layer mit jeweils 6 Neuroden und 4 * output)

Zu Punkt zwei es scheint richtig zu sein das die Neuroden mehr zustände ausgeben als 1 und 0 wobei ich schon aus Neugier früher oder später das ganze mit einem threshold versuchen werde...
 
Zuletzt bearbeitet:
Eins vorweg: So ganz schlau, werde ich nicht aus deinen Fragen. Kann jetzt nicht genau erkennen, wo der Schuh drückt...

Wie dem auch sei, ich habe oft gesehen, dass die Sigmoid Aktivierungsfunktion bei den Output Neuronen verwendet wird, während bei den Neuronen in Hidden Layers eher da Tanh zur Anwendung kommt. Input Neuronen sind nur Input ohne jegliche Verarbeitung und halten einfach den Eingabewert.

Der Bias wird auf die Summe der Neuronen-Links (Gewicht * Wert des Neurons des vorherigen Layers) addiert, bevor dieser dann mit der Aktivierungsfunktion verrechnet wird. Es gibt noch weitere Aktivierungsfunktionen die u.U. zum Einsatz kommen, wobei mir noch nicht klar ist, welche wann eingesetzt wird. Ist halt noch Neuland für mich.

für die Output-Neuronen:

Code:
foreach(var link in neuron.Links) 
  sum += link.Neuron.Value * link.Weight;
sum += neuron.Bias;
neuron.Value = AvtivationSigmoid(sum);

für die Hidden Layer Neuronen:

Code:
foreach(var link in neuron.Links) 
  sum += link.Neuron.Value * link.Weight;
sum += neuron.Bias;
neuron.Value = AvtivationTanH(sum);

bei beiden Varianten hat der Bias-Wert sehr wohl Einfluß auf das Ergebnis, da dieser in die Eingabe der Aktivierungsfunktion mit einfließt.

Mal nur so eine Interessensfrage, welche Programmiersprache verwendest du gerade? Es sieht nach C# aus, wobei ich bei den Zeilen mit "Mathf.Exp" hänge und da dann meine Zweifel hätte...
 
Das mit den input Neuroden wusste ich nicht dachte die nutzen auch eine Gewichtung erstmal danke dafür.

Bei den Aktivierungsfunktionen muss ich mich auch erstmal durch testen wobei es auch mit der sigmoid Funktion funktioniert. (was nicht bedeutet das es gut ist)

Zum Bias du kannst ja mal einen test Lauf ohne Bias machen was nicht die Funktionalität deines Netzwerkes beeinflussen sollte.

Ist c# Mathf gehört zum unity3d Namespace. Es macht einfach mehr Spaß Sachen zu visualisieren anstatt auf zahlen in einer console zu starren.

Und der Schuh drückt da am meisten wo man an Fehlern arbeitet die keine sind und das eigentliche Problem übersieht... :)
 
Vielleicht könnte dir das etwas weiterhelfen:

Eine einfache Implementierung eines FeedForwardNeuralNetworks mit Trainer
https://github.com/z1c0/DotNeuralNet

Ansonsten wäre da noch Encog3 wenn es etwas umfangreicher sein soll ;)
https://github.com/encog/encog-dotnet-core

Zum Bias: Mal sehen, vielleicht finde ich die Zeit am Wochenende mal damit zu experimentieren, jedoch stehen die Chancen relativ schlecht...

Viele Grüße
Rossibaer
 
Zurück
Oben