Wpis z mikrobloga

#unity3d #csharp #ai #artificialintelligence #neural #network

Hej, potrzebuję pomocy koncepcyjnej, otóż tworzę sieć neuronową, która w domyśle ma nauczyć się gry w "bombermana".
Jako wejście perceptronu podaję obiekty z otoczenia bota (głównie sprawdzam czy pole jest bezpieczne czy nie) plus dystans do gracza. Problem mam z outputem, gdyż na samym początku ustaliłem, że będzie to zakres możliwych ruchów do wykonania, jednak przy takim założeniu, nie mam pojęcia co podać sieci jako spodziewaną, dobrą odpowiedź by wyliczyć błąd.
Czy mam zmienić układ ostatniej warstwy czy może coś innego? Pomocy, nie wiem jak nauczyć tą sieć
  • 10
@Lacwik: Jeżeli to ma być zwykły perceptron wielowarstwowy, to jako wyjście właśnie ruchy do wykonania (zakodowane "1 z n"), a jako dane uczące ileś tam "obrazków" planszy i w którą stronę powinieneś się ruszyć.
@Lacwik: Jeżeli chcesz, żeby Ci sieć sama wymyśliła, jakie ruchy spodziewane będą optymalne, to musisz wymyślić jakąś funkcję celu którą będziemy optymalizować i zastosować coś bardziej wyrafinowanego niż perceptron ;) Bo perceptron to typowy przykład uczenia nadzorowanego - Ty jako nauczyciel masz znać spodziewaną dobrą odpowiedź i dać ją sieci.
@kyaroru: Co masz na mysli: "obrazki" planszy i w którą stronę powinien się ruszyć? musze go nauczyc zrówno przetrwania jak i sposobu zabicia mnie, a jeden wektor który podam na odpowiedź będzie po prostu jednym ruchem
@kyaroru: Czyli powinienem wymyślić kilka (kilkadziesiąt?) sytuacji w jakich może znaleźć się perceptron (jako input) po czym powiedzieć mu jaki pojedynczy ruch powinien w danej sytuacji wykonać?
Dobrze rozumuje?
Czyli powinienem wymyślić kilka (kilkadziesiąt?) sytuacji w jakich może znaleźć się perceptron (jako input) po czym powiedzieć mu jaki pojedynczy ruch powinien w danej sytuacji wykonać?


@Lacwik: w ten sposób to sieć neuronowa nie jest do niczego potrzebna, otrzymasz po prostu skrypt postępujący zgodnie z twoimi instrukcjami. W rl chodzi o to, żeby sieć sama doszła do tego co powinna w danej sytuacji zrobić - ty tylko wyznaczasz cel.

A z
@croppz: Kiedy na tym polega algorytm uczenia perceptronu - są dane uczące, testowe i jazda... ;) I tak, autor raczej chce coś mądrzejszego niż tradycyjny perceptron. Chociaż ze względu na prostotę implementacji i tak bym z czystej ciekawości spróbował nauczyć sieć na kilkunastu-kilkudziesięciu prostych przykładach i zobaczyć jak to wyekstrapoluje na rzeczywistą rozgrywkę - a nuż starczy.
@kyaroru: a no na tym polega, ale w ten sposób to można obrazki klasyfikować a nie uczyć sieć grać w gry. Może po prostu odniosłem mylne wrażenie że OPowi chodziło o reinforcement learning. ¯\_(ツ)_/¯
@Lacwik: Wyjściem Twojej sieci powinien być wektor możliwych akcji. Akcje to o ile dobrze kojarzę (góra, dół, lewo, prawo, podłożenie bomby). Więc wyjściem będzie wektor o długości 5 aktywowany funkcją softmax, która zamieni go na rozkład prawdopodobieństwa. W najprostszym modelu RL nie masz funkcji celu, którą minimalizujesz. Minimalizujesz bezpośrednio prawdopodobieństwo wykonania akcji, która zakończyła się czymś negatywnym (utrata życia), a maksymalizujesz (minimalizujesz wartość przeciwną) prawdopodobieństwo wykonania akcji pozytywnej (zabicie kogoś, przejście