Vor ein paar Tagen habe ich versucht, das, was ich dieses Jahr in einer KI-Vorlesung über neuronale Netze gelernt habe, in die Praxis umzusetzen. Ich habe versucht, einen einfachen zu machen, mit nur 2 Neuronen, der sein Eingangssignal replizieren würde. Hier ist eine kleine Zeichnung des Netzwerks, mit meinen Berechnungen: http://imgur.com/a/RixAH (Entschuldigung für die Kommentare in Französisch, sie sind nicht wirklich wichtig)Backpropagation für ein einfaches neuronales Netzwerk, das ungewöhnliche Ergebnisse liefert
Die seltsame Sache ist, dass es konvergiert, aber für ein einfaches binäres Eingangssignal, wann das Signal ist 0, sendet das Netzwerk effektiv ~ 0, aber wenn es 1 ist, sendet es ~ 0,5, und ich verstehe nicht warum. Außerdem muss ich die Lernrate ziemlich hoch setzen (~ 100), um es zum Laufen zu bringen, wieder weiß ich nicht warum.
Hier ist der Java-Code, den ich verwendet, um das Netzwerk zu testen:
public class Main
{
final static double R = 100;
public static void main(String[] args)
{
double w1 = Math.random(), w2 = Math.random();
for (int iter = 1; iter <= 100; iter++)
{
int x;
if (Math.random() >= 0.5)
{
x = 1;
}
else
{
x = 0;
}
double p1 = x * w1;
double y = 1/(1 + Math.exp(-p1));
double p2 = y * w2;
double z = 1/(1 + Math.exp(-p2));
double P = -0.5 * Math.pow(x - z, 2);
double dP1 = (x - z) * z * (1 - z) * w2 * y * (1 - y) * x;
double dP2 = (x - z) * z * (1 - z) * y;
w1 += R * dP1;
w2 += R * dP2;
System.out.println("x = " + x + ", z = " + z + ", P = " + P);
}
}
}
Haben Sie eine Ahnung, wo das Problem aus kommen könnte?
Danke.
LeChocdesGitans
Edit:
ich es endlich geschafft, zum Laufen zu bringen (folgte ich Ihren Rat für die Netzwerkkonfiguration). Ich nehme an, es gab auch einen Implementierungsfehler, weil es nicht direkt funktionierte, nachdem ich das Layout des Netzwerks geändert hatte, aber ich begann es noch einmal und nun kann ich ziemlich interessante Dinge tun, wie die Zeichenerkennung, die ziemlich gut funktioniert , vergleichen Sie, wie grundlegend meine Anwendung ist.
Nochmals vielen Dank für Ihren Rat!
Ich bin neugierig, warum haben Sie sich entschieden, zwei Schichten mit jeweils einem Neuron zu verwenden? – rpd
Nun, da ich nicht viel Erfahrung im maschinellen Lernen habe, habe ich nur ein Setup verwendet, das ich in einem der Videos des MIT über neuronale Netze gesehen habe. Was denkst du ist das Beste? – LeChocdesGitans
Ein Setup von einer Schicht mit zwei Perzeptronen ist funktioneller und "realistischer" als ein Spielzeugbeispiel. – rpd