frage nach dem zweck von bias und aktivierungsfunktion bei künst. nn



  • also, besschäftige mich mit knn's und habe ein paar fragen:
    als erstes zur math. basisfunktion:
    hier noch mal mit latex: http://www.gc.ssr.upm.es/inves/neural/ann3/concepts/basis.htm
    u[i] (w,n) += w[j][i]*n[j]
    dann zur aktivierungsfunktion:(ebenfalls auf oberer seite)
    f(u[i])=1/(1+exp(-u[i] );

    das würde umgesetzt etwa so aussehen:

    float *Net::durchlauf(float *input){            //complete run through the net
        setZero();                                  //set needed matrices to zero
        for(int i=0; i<amountI; i++)                //save input-vector
            inI[i]=input[i];
        for(int i=0; i<amountI; i++)                //special case here: inI=outI
            outI[i]=inI[i];
        outI[amountI]=1;                            //shift neuron = 1                        
        for(int i=0; i<amountH; i++)                //get input of hidden layer
            for(int j=0; j<=amountI; j++)
                    inH[i]+=ihWeights[j][i]*outI[j];
        for(int i=0; i<amountH; i++)                //get output of hidden layer (sigmoide function)
            outH[i]=1/(1+exp(-inH[i]));
        outH[amountH]=1;                             //shift neuron = 1
        for(int i=0; i<amountO; i++)                //get input of output layer
            for(int j=0; j<=amountH; j++)
                    inO[i]+=hoWeights[j][i]*outH[j];
        for(int i=0; i<amountO; i++)                 //get output of output layer (sigmoide function)    
            outO[i]=1/(1+exp(-inO[i]));
        return outH;
    }
    

    allerdings kann ich mir nicht richtig vorstellen: welche werte in dem leeren vektor inH bzw. inO aufsummiert werden wenn die basisfunktion angewendet wird? wie darf man sich den inhalt vorstellen?
    und wie siht der inhalt von den entsprechenden ausgabevektoren aus, nachdem inH/inO durch die aktivierungsfunktions gegangen sind? der wert der neuronen müsste sich nun zw. den dem wertebereich der akt.-funktion bewegen, aber was bringt das? wie kann man dann diesen inhalt sinnvoll anwenden???
    zum schluss noch die anwendung des bias

    outI[amountI]=1;
    

    das ist doch hier nicht wirklich ein bias, er scheintfür die funktion des netzes nicht wichtig zu sein 😕

    in diesem beispiel handelt es sich um ein dreischichtiges netz(eingabe, versteckte, ausgabe)-schicht,
    zu was ist der letzte abschnitt gut, der praktisch, die vorhergehenden daten auf die selbe weise berechnet?

    for(int i=0; i<amountO; i++)                //get input of output layer
            for(int j=0; j<=amountH; j++)
                    inO[i]+=hoWeights[j][i]*outH[j];
        for(int i=0; i<amountO; i++)                 //get output of output layer (sigmoide function)    
            outO[i]=1/(1+exp(-inO[i]));
    

    ein vorzeitiges auskommentieren bewirkt eine erkennungsrate von 0% 😞

    das beispiel stammt aus der simplenetkklasse auf www.linux-related.de.

    ich hoffe man kann mir bei diesem problemen helfen, könnte man mir dieses mysterium möglichst einfach erklären?


Anmelden zum Antworten