Reinforcement learning
Neuronale Netze kann man auf unterschiedlichste Arten trainieren. Am einfachsten geht es, wenn man Eingabedaten und Ausgabedaten zur verfügung hat. Diese kann man dem Netz zeigen und mittels Backprapagation (oder Quickpropagation) dem Netz beibringen. Dann kann das Netz sich in ähnlichen Situationen ähnlich verhalten und damit intelligent wirken.Was macht man allerdings, wenn man gar nicht weiß, was in welcher Spielsituation (Eingabedaten) das Beste (Ausgabedaten) ist? Beziehungsweise, wenn man gar nicht krampfhaft das Beste erreichen will, sondern eingach nur einen lernenden Computer haben will, der seine eigenen Erfahrungen macht?
Für diese Fälle eignet sich ein Algorithmus der auf einer einfachen Bewertungsfunktion beruht. Diese Bewertungsfunktion braucht nur zu sagen: "Das war gut", "Das war nicht so gut", etc. Der Algorithmus, der auf diese Art das Netz trainiert heisst 'Reinforcement Learning'.
Ich habe in meiner Beispielanwendung zunächst ein neuronales Netz implementiert. Dieses wird mit zufälligen Gewichten initialisiert. Im Falle einer Belohnung, werden die Neuronenverbindungen, die zu dem guten Ergebnis geführt haben verstärkt. Im Falle einer bestrafung werden die Gewichte auf zufällige Weise verändert, damit so ein 'Fehler' nicht nochmal passiert. Die Belohnung ist natürlich stärker als die Bestrafung, da sonst das gelernte Verhalten bei einer Bestrafung wieder verloren gehen würde (Wegen der zufälligen Veränderung).
Als Beispielanwendung habe ich eine Ballwurfmaschiene, die einen Punkt treffen soll. Wenn sie diesem Punkt näher als beim letzten Wurf kommt, wird sie belohnt, ansonsten bestraft. Sie findet nach anfänglichen Zufallswürfen recht schnell den richtigen Wurfwinkel. Davon habe ich auch ein kleines Video gemacht: