Eksperymentowałem trochę z różnymi implementacjami Perceptron i chcę się upewnić, czy poprawnie rozumiem „iteracje”.
Oryginalna reguła perceptronowa Rosenblatta
O ile rozumiem, w klasycznym algorytmie perceptronowym Rosenblatta wagi są jednocześnie aktualizowane po każdym przykładzie treningu za pośrednictwem
gdzie jest tutaj zasadą uczenia się. A wartość docelowa i rzeczywista są progowe (-1 lub 1). Zaimplementowałem to jako 1 iteracja = 1 przejście przez próbkę treningową, ale wektor masy jest aktualizowany po każdej próbce treningowej.
I obliczam „rzeczywistą” wartość jako
Spadek gradientu stochastycznego
To samo co reguła perceptronowa target
i actual
nie są progami, ale wartościami rzeczywistymi. Ponadto liczę „iterację” jako ścieżkę nad próbką treningową.
Zarówno SGD, jak i klasyczna reguła perceptronowa zbiegają się w tym przypadku rozdzielanym liniowo, jednak mam problemy z implementacją spadku gradientu.
Spadek gradientu
Tutaj przeglądam próbkę treningową i podsumowuję zmiany masy dla 1 przejścia nad próbką treningową, a następnie aktualizuję wagi, np.
dla każdej próbki treningowej:
...
po 1 przejściu przez zestaw treningowy:
Zastanawiam się, czy to założenie jest poprawne, czy coś mi brakuje. Próbowałem różnych (nawet nieskończenie małych) wskaźników uczenia się, ale nigdy nie udało mi się uzyskać żadnych oznak konwergencji. Zastanawiam się więc, czy coś źle zrozumiałem. tutaj.
Dzięki, Sebastian