Multiple Output Neural Network
Habe ich gebaut meine ersten neuronalen Netzes in python, und ich habe das Spiel mit ein paar Datensätzen; es geht gut so weit!!!
Ich habe eine kurze Frage bezüglich der Modellierung von Ereignissen mit mehreren Ergebnissen: -
Sagen, ich wünschte, zu trainieren, ein Netzwerk, um mir zu sagen, die Wahrscheinlichkeit, dass jeder Läufer gewinnen Sie einen 100m-sprint. Ich würde das Netz alle relevanten Daten über jeden Läufer, und die Anzahl der Ausgänge wäre gleich der Anzahl der Läufer in das Rennen.
Meine Frage ist, mithilfe einer sigmoid-Funktion, wie kann ich sicher gehen, dass die Summe der Ausgänge wird gleich 1.0 sein ? Wird das Netzwerk natürlich lernen, dies zu tun, oder muss ich irgendwie damit dies geschieht explizit ? Wenn ja, wie würde ich gehen über das tun dies ?
Vielen Dank.
InformationsquelleAutor der Frage Sherlock | 2011-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Ausgang Ihres neuronalen Netzes wird Ansatz 1. Ich glaube nicht, dass es tatsächlich zu 1.
Braucht man eigentlich nicht, um zu sehen, welchen Ausgang gleich 1 ist. Nachdem Sie trainiert haben Ihr Netz bis zu einer bestimmten Ebene Fehler, wenn Sie die Eingänge, schauen Sie für maximale Leistung in Ihrer Ausgabe später. Zum Beispiel, sagen Sie Ihre Ausgabe-Schicht hat die folgende Ausgabe:
[0.0001, 0.00023, 0.0041, 0.99999412, 0.0012, 0.0002]
dann die Läufer, die das Rennen gewonnen haben, ist Läufer Nummer 4.Also ja, Ihr Netzwerk "lernen" 1 zu produzieren, aber es wird nicht genau 1 sein. Dies ist, warum Sie trainieren, um innerhalb einer bestimmten Fehlerquote. Habe ich vor kurzem erstellt ein neuronales Netzwerk zum erkennen handgeschriebener Ziffern, und dies ist die Methode, die ich verwendet. In meinem output-layer, ich habe einen Vektor mit 10 Komponenten. Die erste Komponente ist 0, und die Letzte Komponente darstellt, 9. Also, wenn ich eine 4 auf dem Netz, ich rechnen Sie die Ausgabe von Vektor zu schauen, wie
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
. Natürlich, es ist nicht das, was ich bekommen genau, aber es ist das, was ich trainiere das Netzwerk zur Verfügung zu stellen. Also, um herauszufinden, welche Ziffer es ist, ich habe einfach überprüfen, um zu sehen, welche Komponente den höchsten output oder Gäste.Nun in deiner zweiten Frage, ich glaube, du bist gefragt wie das Netzwerk zu lernen, um die richtige Antwort? Um dies zu tun, müssen Sie, um Ihr Netzwerk mit einigen der Trainingsdaten und trainieren Sie, bis die Ausgabe unter einem bestimmten Fehler-Schwelle. Also, was Sie brauchen ist ein Satz von Daten enthält, die Eingänge und die korrekte Ausgabe. Zunächst Ihre neuronale Netz wird mit zufälligen gewichten (es gibt einige algorithmen, die Ihnen helfen, wählen Sie besser GEWICHTE zu minimieren, die Zeit der Ausbildung, aber das ist ein wenig mehr erweitert). Als Nächstes müssen Sie einen Weg, zu sagen, das neuronale Netzwerk zu lernen aus den gegebenen Daten. Also im Grunde, Sie geben die Daten in das neuronale Netzwerk und bietet eine Ausgabe, die sehr wahrscheinlich falsch zu sein. Dann vergleichen Sie diese Daten mit die erwartete (korrekte) Ausgabe und Sie sagen, das neuronale Netzwerk und aktualisiert seine GEWICHTE so, dass es näher an der richtigen Antwort. Sie tun dies immer und immer wieder, bis der Fehler unter einem bestimmten Schwellenwert.
Der einfachste Weg, dies zu tun, ist die Implementierung der stochastischen backpropagation-Algorithmus. In diesem Algorithmus berechnet man den Fehler zwischen der tatsächlichen Ausgabe des neuronalen Netzes und die erwartete Ausgabe. Dann backpropagate die Fehler aus der output-Ebene den ganzen Weg bis auf die GEWICHTE der verborgenen Schicht, die Anpassung der GEWICHTE, wie Sie gehen. Dann wiederholen Sie diesen Vorgang, bis Sie den Fehler berechnen Sie unter eine bestimmte Schwelle. Also bei jedem Schritt, Sie sind immer näher und näher in Richtung Ihrer Lösung.
Können Sie den beschriebenen Algorithmus hier. Es gibt eine anständige Menge mit Mathe zu tun, so vorbereitet werden! Wenn Sie möchten, um zu sehen, ein Beispiel für eine Implementierung dieses Algorithmus sind, können Sie einen Blick auf dieses Java-code, ich habe auf github. Der code nutzt das momentum und eine einfache form von simulated annealing als gut, aber die standard-backpropagation-Algorithmus soll leicht erkennbar ist. Der Wikipedia-Artikel über RÜCKFÜHRUNG hat eine link eine Implementierung des backpropagation-Algorithmus in Python.
Sind Sie wahrscheinlich nicht gehen, um zu verstehen, die der Algorithmus sofort, erwarten, verbringen einige Zeit es zu verstehen und die Arbeit durch einige der math. Ich setzte mich mit Papier und Bleistift, wie ich war, die Kodierung und das ist, wie ich endlich verstanden, was Los war.
Hier sind ein paar Ressourcen, die Ihnen helfen sollen zu verstehen, RÜCKFÜHRUNG, ein wenig besser:
Wenn Sie möchten, dass einige mehr Ressourcen, Sie können auch nehmen einen Blick auf meine Antwort hier.
InformationsquelleAutor der Antwort Vivin Paliath
Im Grunde wollen Sie eine Funktion mehrerer reellen zahlen, die konvertiert diese reellen zahlen in Wahrscheinlichkeiten an (jede zwischen 0 und 1, Summe: 1). Sie können dies leicht durch post-processing die Leistung von Ihrem Netzwerk.
Ihrem Netzwerk gibt, die Sie reelle zahlen r1, r2, ..., rn, erhöht sich die Wahrscheinlichkeit, dass jeder Läufer gewinnt das Rennen.
Berechnen Sie exp(r1) exp(r2), ..., und die Summe, die Sie für ers = exp(r1) + exp(r2) + ... + exp(rn). Dann ist die Wahrscheinlichkeit, dass der erste racer gewinnt, ist exp(r1) /ers.
Dies ist eine Nutzung der Boltzman-Verteilung. http://en.wikipedia.org/wiki/Boltzmann_distribution
InformationsquelleAutor der Antwort Rob Neuhaus
Sollten Sie für Ihr Netzwerk umgehen, und lernen es natürlich irgendwann.
Machen das Netzwerk erfahren, dass Sie ein wenig schneller, hier ist das, was Federn in den Sinn zuerst:
fügen Sie eine zusätzliche Ausgabe namens 'sum' (zusammenfassend all die anderen Ausgabe-Neuronen) -- wenn Sie wollen, dass alle output-Neuronen werden in einer separaten Ebene, fügen Sie einfach eine Schicht der Ausgänge, erste
numRunners
Ausgänge verbinden Sie einfach den entsprechenden Neuronen in der vorhergehenden Schicht, und die letztennumRunners+1
-TEN neuron Sie eine Verbindung zu allen Neuronen, die aus der vorhergehenden Schicht, und befestigen Sie die GEWICHTE zu 1)dem Trainings-set enthalten würde, 0-1-Vektoren für jeden Läufer (wollte nicht laufen), und das "erwartete" Ergebnis wäre eine 0-1-Vektor
00..00001000..01
ersten 1-Kennzeichnung der Läufer, die das Rennen gewonnen, zuletzt 1 Kennzeichnung der "Summe" von "Wahrscheinlichkeiten"für den unbekannten Rennen, das Netzwerk würde versuchen, vorauszusagen, welche Läufer gewinnen würde. Da die Ausgänge zusammenhängende Werte (mehr oder weniger :D) Sie kann gelesen werden als "die Sicherheit des Netzwerks, mit dem der Läufer gewinnt das Rennen" - das ist das, was du bist suchen für
Selbst ohne die zusätzlichen
sum
neuron, dies ist die grobe Beschreibung der Art und Weise der Ausbildung sollten die Daten angeordnet werden.InformationsquelleAutor der Antwort penelope