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 biasoutI[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?