Obwohl die Bayessche Analyse viel mehr umfasst, basiert der aus Spamfiltern bekannte Naive Bayes Algorithmus auf einer sehr grundlegenden Annahme: Alle Variablen sind im Wesentlichen unabhängig voneinander. So wird zum Beispiel bei der Spam - Filterung jedes Wort normalerweise als Variable behandelt. Das heißt, wenn die E - Mail das Wort "viagra" enthält, beeinflusst dieses Wissen die Wahrscheinlichkeit, dass es auch das Wort "Medizin" (oder "foo") enthält 'oder' Spam 'oder irgendetwas anderes). Das Interessante ist, dass diese Annahme in der natürlichen Sprache offensichtlich falsch ist, aber immer noch zu vernünftigen Ergebnissen führt.
Ein Weg, wie Menschen manchmal die Unabhängigkeitsannahme umgehen, ist die Definition von Variablen, die technisch eine Kombination von Dingen sind (wie die Suche nach dem Token "Buy Viagra"). Das kann funktionieren, wenn Sie bestimmte Fälle kennen, nach denen Sie suchen, aber im Allgemeinen bedeutet dies, dass Sie sich in einer Spielumgebung im Allgemeinen an nichts erinnern können. Jedes Mal, wenn du dich bewegst, führst du eine Aktion aus usw., die völlig unabhängig von allem ist, was du bisher getan hast. Ich würde sogar für die einfachsten Spiele sagen, dass dies ein sehr ineffizienter Weg ist, um das Spiel zu lernen.
Ich würde vorschlagen, stattdessen mit q-Learning zu untersuchen. Die meisten Beispiele, die du findest, sind normalerweise nur einfache Spiele (wie das Lernen, wie man eine Karte navigiert, während man Mauern, Fallen, Monster usw. meidet). Reinforcement Learning ist eine Art von nicht überwachtem Online-Lernen, das in Situationen, in denen ein Agent als Interaktion mit einer Umgebung wie einem Spiel (oder Robotern) fungieren kann, wirklich gut funktioniert. Es versucht, herauszufinden, was die optimale Aktion in jedem Zustand in der Umgebung ist (wo jeder Zustand so viele Variablen wie nötig enthalten kann, viel mehr als nur 'wo bin ich'). Der Trick besteht dann darin, gerade genug Status beizubehalten, der dem Bot hilft, gute Entscheidungen zu treffen, ohne einen eindeutigen Punkt in Ihrem Zustandsraum für jede mögliche Kombination von vorherigen Aktionen zu haben. Wenn man einen Schachbot bauen wollte, hätte man wahrscheinlich Schwierigkeiten, wenn man versucht hätte, eine Entscheidungsstrategie zu erstellen, die auf der Grundlage aller vorherigen Züge seit der Auswahl aller möglichen Kombinationen von Schach Entscheidungen trifft Bewegungen wachsen sehr schnell. Sogar ein einfacheres Modell, wo jedes Stück auf dem Brett ist, ist immer noch ein sehr großer Zustandsraum, so dass Sie einen Weg finden müssen, um zu vereinfachen, was Sie verfolgen. Aber beachte, dass du einen Zustand im Auge behalten musst, damit dein Bot nicht immer wieder versucht, einen linken Begriff in eine Wand zu setzen.
Die wikipedia article ist ziemlich Jargon schwer, aber diese tutorial macht einen viel besseren Job, die Konzepte in reale Beispiele zu übersetzen.
Der einzige Haken ist, dass Sie in der Lage sein müssen, Belohnungen zu definieren, die als positive "Verstärkung" bereitgestellt werden. Das heißt, Sie müssen in der Lage sein, die Zustände zu definieren, zu denen der Bot zu gelangen versucht, anderenfalls wird er für immer fortgeführt.
Das klingt genial. In welcher Sprache? – Trevoke
Er macht es in Python, mit den Python NetHack-Bindungen. – danieltalsky
Korrektur: Er schrieb die Python-Bindungen. – danieltalsky