Wpis z mikrobloga

Mirki kochane z #programowanie i #algorytmy chyba też, a może nawet jakaś #sztucznainteligencja :p

Mam problem! Piszę strasznie głupi program - kółko i krzyżyk na sieciach neuronowych. Sieć ma uczyć się na podstawie rozgrywki dwóch ludzkich graczy. Wygląda to mniej więcej tak, że sytuacja na planszy jest przedstawiona za pomocą 9-elementowego wektora. Na wejściu sieci jest podawany wektor przedstawiający sytuację po ruchu 1 gracza, a na wyjściu oczekuję, że otrzymam wektor, który będzie przedstawiał sytację po ruchu 2 gracza.

Pól na planszy jest dziewięć, więc wektory wejściowy i wyjściowy mają 9 elementów. Sieć składa się z trzech warstw - wejściowa (9 perceptronów), 1 ukryta (9 neuronów) i wyjściowa (9 neuronów). Są dwie tablice wag - dwuwymiarowe 9x10 dla połączeń między warstwą wejściową-pośrednią i pośrednią-wyjściową.
Wektor wejściowy wygląda np. tak: [0 -1 1 1 -1 1 0 1 1], 1 - tu jest postawiony mój znak, 0 - tutaj nic nie ma, -1 - tu jest postawiony znak przeciwnika.

Funkcję aktywacji dla neuronów przyjąłem
Ui=(1-exp(Si))/(1+exp(Si))
gdzie Si to sygnał aktywacji z pojedynczego neuronu.

I tu pojawia się mój problem, ta funkcja prawdopodobnie jest niewłaściwa dla tego zadania, a nie wiem za bardzo jaką inną mógłbym tutaj dać. Z tą funkcją na wyjściu zawsze otrzymuję wektor z samymi jedynkami lub liczbami bardzo bliskimi jeden,
a powinny w tym wektorze znajdować się liczby z zakresu od -1 do 1.

Fazy propagacji działają wzorowo, tylko trochę wolno.
Może też mam źle dobrane wagi, bo początkowe losuję z zakresu od 0-9.

Proszę o pomoc, bo ze spaniem ciężko, a już parę tygodni nad tym siedzę. Może jestem zagłupi na to :p
Tak czy siak wydaje mi się, że coś z funkcją aktywacji jest nie tak, tylko teraz czy jest jakieś gotowe rozwiązanie na ten problem czy musiałbym sam taką funkcję wymyślić i zaimplementować?
  • 2
@mikkeboss: Dzięki, ale udało mi się - czeski błąd :D
Funkcja jest w porządku, tylko program źle napisany, propagacje i aktualizacja wag były w oddzielnych funkcjach, które w ogóle nie wymieniały się danymi. Teraz śmiga :3