• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Neural Network - Dostosowanie liczby output'ów do modelu

VPS Starter Arubacloud
0 głosów
190 wizyt
pytanie zadane 6 sierpnia 2019 w Python przez Dodkom Nowicjusz (140 p.)
Pracuje nad projektem, w którym buduje model, który ma za zadanie nauczyć się grać w warcaby. Do tego zadania będę właśnie korzystał z sieci neuronowych (tensorflow, keras etc...). Na input będę dawał po prostu całą plansze z pionkami czyli powiedzmy (32) input'y. Natomiast nie mam, pomysłu na output, na początku myślałem że 32x4 starczy, czyli po 4 możliwe ruchy na każde pole w grze, potem pomyślałem, że przecież poza ruchami i biciem pionka przeciwnika, można robić podwójny skok z biciem, a jakby tego było mało, gdy dojdziemy pionkiem na ostatnie pola to zmienia się w królówkę i możliwości ruchu jest wtedy dużo więcej.

Teoretycznie zamiast do pola w grze mógłbym podpiąć ruchy do pionka czyli zamiast początkowych 32x4, byłoby 8x4, ale minus jest taki, że wtedy sieć neuronowa nie uczyłaby się tak jak ja chce. Przy takim outpucie powiedzmy, że sieć dla jakiejś pozycji nauczyła by się, że trzeba ruszyć pionkiem(5) i gdy w przyszłości pojawi się ta pozycja, ale z innym ustawieniem pionków, to się nadal będzie myślała że pionek(5) to jest dobry ruch mimo, że znajduje się w innym miejscu. Dlatego właśnie wole przypisywać poszczególne ruchy do danego pola. Tylko właśnie mam problem bo czasem możliwych output'ów jest nie więcej niż 32x4 (po 4 ruchy na każde pole)  a czasem dla danego pola może być i 8 różnych ruchów. Teoretycznie mógłbym zrobić to tak, że wziąć pod uwagę wszystkie możliwe ruchy, ale gdy dodamy podwójne bicie, potrójne bicie itd.. to takich potencjalnych ruchów jest za dużo. Spowodowałoby to, że sieć uczyła by się wolno, ponieważ brałaby pod uwagę zawsze wszystkie możliwe ruchy, nawet wtedy gdy królówek nie ma na planszy.

Mam jeden pomysł, ale nie wiem czy on by wypalił. Stworzyć 2 modele sieci neuronowych, jedną do wyboru pionka, czyli tylko 32 output'y, drugi model do wyboru ruchu i tu powiedzmy mogłyby być wszystkie możliwe ruchy dla danego pionka/królówki.

Nie jestem pewny czy efektywnie takie 2 sieci by działały. Dlatego właśnie pisze na forum, szczerze wątpię, że ktoś będzie w stanie mi pomóc, ale nie zaszkodzi spróbować.

Tak więc jak macie jakieś pomysły to piszcie śmiało.
komentarz 6 sierpnia 2019 przez RafalS VIP (122,820 p.)
A jak będziesz tą sieć uczył? Googlowałeś podobne projekty? Na pewno jest ich masa.
komentarz 6 sierpnia 2019 przez Dodkom Nowicjusz (140 p.)
Na początku z bazy danych, ale później planuje, podciągnąć to pod deep reinforcement learning, czyli żeby na podstawie własnych gier model się uczył.

2 odpowiedzi

+1 głos
odpowiedź 6 sierpnia 2019 przez mokrowski Mędrzec (155,460 p.)
Na wejściu masz stan planszy (czyli 8x8), na wyjściu 1 neuron oceny stanu ze względu na jednego z graczy (np. białego). Generujesz wszystkie możliwe ruchy z danej pozycji i oceniasz. Najlepszy wybierasz.

Dla pracy sieci dla 2 gracza, odwracasz funkcję oceny czyli wybierasz ruch w którym przeciwnik będzie miał najmniejsze szanse.

To jedna z prostszych implementacji.

BTW, zwróć uwagę że warcaby są grą zupełną i jest znany algorytm który w każdym przypadku zapewnia zwycięstwo (przynajmniej dla 8x8).
komentarz 6 sierpnia 2019 przez Dodkom Nowicjusz (140 p.)
takie coś by się w sumie całkowicie różniło od mojego pierwotnego pomysłu, ale może ma to sens. Zamiast wykonywać raz model.predict, który zwróci mi dokładny ruch, to wywołam, model.predict dla każdego możliwego ruchu i zobaczę gdzie jest najwyższa wartość.

A masz pomysł jak taką sieć najlepiej trenować, załóżmy że mam bazę danych gier na wysokim poziomie. Pierwszy pomysł jaki mi przychodzi do głowy, to dla ruchu, który został wykonany w bazie danych dawać powiedzmy 1 a dla wszystkich innych 0
komentarz 7 sierpnia 2019 przez mokrowski Mędrzec (155,460 p.)

W proponowany sposób, nauczysz sieć zawartości bazy. Lepiej chyba PSO: https://en.wikipedia.org/wiki/Particle_swarm_optimization W ten sposób będziesz eksplorował całą przestrzeń rozwiązań.

Jeśli nie to co powyżej to reinforcment z inną instancją sieci może mieć sens.

komentarz 21 sierpnia 2019 przez reaktywny Nałogowiec (40,650 p.)
Tak naprawdę do warcab nie potrzeba ML. Wystarczy min-max / alfa-beta

https://pl.wikipedia.org/wiki/Algorytm_alfa-beta
–1 głos
odpowiedź 6 sierpnia 2019 przez Wraith Gaduła (4,370 p.)
Jesteś blisko blisko, Jeden neuron niewiele może zdziałać dlatego ja bym zastosował warstwy tak jak mówiłeś czyli nie tak jak że 0 i 1 tylko liczby pomiędzy. Jeśli waga warstwy wyboru pionka + waga warstwy wyboru ruchu przekroczy oczekiwaną wartość to wykonaj ten ruch. Jeśli nie to następnym razem sprawdzisz tylko inna warstwe wyboru ruchu przy tej samej wadze wartswy wyboru pionka.

Podobne pytania

0 głosów
0 odpowiedzi 287 wizyt
0 głosów
0 odpowiedzi 90 wizyt
0 głosów
0 odpowiedzi 166 wizyt
pytanie zadane 18 maja 2021 w Python przez Patryk01 Obywatel (1,270 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...