No to lećmy po kolei :)
ŁF napisał(a)
jak można zalecać uczenie w sposób losowy twierdząc jednocześnie, że nie ma znaczenia w jakiej kolejności uczy się sieć?
To akurat nie jest sprzeczne. To, że ostateczny wynik będzie taki sam lub bardzo podobny (nawet nie da się określić czy lepszy czy gorszy) to nie znaczy, że nie można jakiejś metody preferować/zalecać.
ŁF napisał(a)
jak wyżej: nie ma znaczenia, ale może być niekorzystne. jak coś, co nie ma znaczenia, może mieć znaczenie niekorzystne?!?
Tutaj już prędzej jest sprzeczność, chociaż moim zdaniem jest to czepianie się słówek podczas gdy Ciebie (i autora wątku) trudno było w ogóle zrozumieć.
ŁF napisał(a)
nie zajmowałem się sieciami rekurencyjnymi, więc (...)
więc swoje 3 grosze wrzuciłeś :).
ŁF napisał(a)
(...) będę się wypowiadać tylko na temat sieci nierekurencyjnych
znaczy się jednokierunkowych :)
ŁF napisał(a)
- szukanie minimum funkcji błędu i zmiana wartości wag wejść dla każdej próbki odbywa się osobno (nie można naraz uczyć dwóch i więcej próbek, bo nie możesz podać na wejścia jednocześnie dwóch próbek; dwie i więcej próbki uczone są w pętli po wszystkich próbkach, zgodzisz się?).
I tak i nie. Mamy coś takiego jak metodę on-line i off-line. On-line polega na uczeniu próbka po próbce (po jednym wzorcu) natomiast off-line jest uczeniem dla całej próby (liczy się gradient z całej próby). Wówczas w metodzie off-line kolejność w ogóle nie ma znaczenia - bo nie ma znaczenia czy będziesz sumował od tyłu od przodu czy od środka czy może losowo. Dlatego zakładam, że chodzi Ci o metodę on-line, która ma kilka zalet ale ma też kilka wad :P.
ŁF napisał(a)
- nowe wagi powodują mniejszy błąd odpowiedzi sieci dla TEJ KONKRETNEJ próbki, którą aktualnie sieć jest uczona, zgodzisz się?
Też niekoniecznie :). Z tej wypowiedzi definitywnie wynika, że piszesz o metodzie on-line :). Dlaczego niekoniecznie? bo wszystko zależy od kroku uczenia. Gdy będzie baaardzo mały to na pewno zmniejszysz ten błąd (chociaż o baaardzo mało). Natomiast gdy ten krok będzie duży to możesz spowodować zwiększenie tego błędu...
ŁF napisał(a)
- jednocześnie zmiana wag dla TEJ próbki spowoduje zwiększenie błędu (być może nieistotne) dla poprzednich próbek, bo wagi ustalone dla minimalizacji ich błędu zostały zmienione.
Z tym się całkowicie nie zgodzę! Fakt, część próbek może ulec pogorszeniu ale część (i to raczej ta większa część - szczególnie w początkowej fazie uczenia) może lub nawet powinna ulec również poprawieniu. No, chyba, że Twoje dane uczące i wzorcowe są całkowicie niezależne (ale próba użycia jakiegokolwiek narzędzie jest bezcelowa).
ŁF napisał(a)
- na początku procesu uczenia skoki wag są największe (bo błąd na wyjściu jest największy i jego minimalizacja wymaga głębszych "korekt" wag).
Tak, w sumie z tym się zgodzę :).
ŁF napisał(a)
- skoro tak, to w pierwszej iteracji (tzw. epoce) uczenia każda kolejna próbka ma największy (negatywny) wpływ na wynik uczenia dla poprzednich próbek. jeszcze raz: największy i negatywny, bo 1) uczenie TEJ próbki zmienia wagi, 2) dopiero zaczynamy uczenie, więc zmiany wag są największe 3) zmiany wag minimalizujące błąd dla TEJ próbki zwiększają błąd dla wcześniejszych próbek (i tak się dzieje z każdą kolejną uczoną próbką - trochę "psuje" proces uczenia poprzednimi próbkami).
No i właśnie znowu zahaczamy o to "coś". Po pierwsze bardziej pasuje tu słowo krok uczenia a nie iteracja - a już na pewno nie epoka! Epoka odnosi się do całego zestawu zmiennych. Po drugie skąd w ogóle wywnioskowałeś, że ucząc jedną próbkę psujesz wszystkie inne? Do tego czemu tylko te poprzednie a nie te, które za chwilę będziesz uczyć również? hmm...
ŁF napisał(a)
- skoro tak, to po pierwszej iteracji/epoce sieć odpowiada najmniejszym błędem dla ostatniej próbki i największym dla próbki pierwszej. to samo dzieje się w kolejnych epokach, jednak skoki wag zmniejszają się (o ile uczenie przebiega prawidłowo); tu możesz polemizować, bo istnieją różne algorytmy minimalizacji błędu sieci, część z nich ma stały współczynnik uczenia (czy jak tam się nazywał, nie pamiętam dokładnie, oznaczany bodajże gammą) pośrednio wpływający na stały skok wartości wag, większość ma zmienny, malejący. jednak jeśli skok jest stały, to ostatnia próbka ma zawsze największy wpływ na wynik, a to rozkłada na łopatki Twoją teorię.
Najpierw może ustalmy co nazywasz iteracją/epoką bo chyba Ci się pewne pojęcia pomieszały... Zaczynam się gubić w tych wypowiedziach.
Na jakiej podstawie twierdzisz, że błąd na ostatniej próbce będzie najmniejszy a na pierwszej największy? Bo ja twierdzę, że to wszystko zależy od zaszumienia Twoich danych wejściowych i wzorcowych oraz od pewnych zależności, które są w danych. Gdy pierwsza próbka będzie miała podobne "właściwości" co ostatnia a dane wejściowe będą podobne to nie rozumiem, dlaczego ta pierwsza ma być gorsza?
ŁF napisał(a)
- skoro tak, to dla MAŁEJ ILOŚCI EPOK i dla malejącego wsp. uczenia-czy-jak-mu-tam kolejność próbek ma znaczenie.
No i znowu mam problem bo namieszałeś z epokami/iteracjami i z tym o co Ci naprawdę chodziło (przynajmniej tak mi się wydaje)...
Zadam Ci w takim razie pytanie: jeśli Twoim skromnym zdaniem to ma znaczenie to czy jest ono korzystne czy nie?
Bo ja uważam, że nie da się tego tak wprost ocenić. Po pierwsze dane możesz mieć na wstępie wymieszane (np. robiłeś ankiety i wklepujesz je w dowolnej kolejności) ale możesz mieć również szereg czasowy dane są uporządkowane! Jednak ani w jednym ani w drugim przypadku nic nie gwarantuje Ci tego, że pierwsze, środkowe, ostatnie czy jakieś inne dane będą mniej lub bardziej zaszumione...
ŁF napisał(a)
- dla ODPOWIEDNIEJ (trudny termin) ILOŚCI EPOK (i dla malejącego wsp. uczenia) kolejność próbek traci znaczenie, bo skok wag maleją i ostatnia próbka ma dużo mniej istotny wpływ na wagi, a więc i zwiększenie błędu dla pozostałych próbek.
Te dane, które będą miały większe błędy (większa odległość między wynikiem sieci a daną wzorcową) to one będą faworyzowały uczenie (gradient będzie miał większą wartość) a nie ostatnie dane bo o nich akurat nic nie wiesz... Epoka (jak to ty nazywasz) nie ma tu nic do rzeczy. Fakt, te ostatnie będą nieco bardziej faworyzowane ale to nie znaczy, że tam błąd będzie najmniejszy.
ŁF napisał(a)
- dla ZBYT DUŻEJ ILOŚCI EPOK (i dla malejącego wsp. uczenia) sieć uczy się próbek "na pamięć", żadna z próbek praktycznie nie ma wpływu na wagi (znalezione wagi zapewniają minimum funkcji błędu dla każdej próbki), a więc kolejność nie ma znaczenia.
Kolejna teza wzięta z sufitu. tzw. uczenie "na pamięć" jest przede wszystkim związane ze stosunkiem ilości danych uczących z ilością neuronów i ilością zmiennych a nie z ilością iteracji!!!
Spróbuj nauczyć sieć z 10 zmiennymi i 3 neuronami "na pamięć" ucząc ją na 10000 danych wzorcowych -> powodzenia... :)
ŁF napisał(a)
dlatego pozwolę sobie stwierdzić, że Twoje stwierdzenie ("nie ma znaczenia czy będziesz uczył od najstarszej próbki do najnowsze") nie jest zgodne z prawdą przynajmniej dla takiej sieci i takiego typu uczenia jaki podałem i DLA MAŁEJ ILOŚCI EPOK.
Ja natomiast pozwolę sobie stwierdzić, że mimo, że coś kojarzysz i widać, że trochę się tego uczyłeś to brakuje ci zarówno wiedzy teoretycznej jak i praktycznej. Do tego strasznie ciężko czyta się Twoje wypowiedzi (chociaż teraz było znacznie lepiej). Najgorsze jest natomiast błędne nazewnictwo, które doprowadza do błędnych wniosków. Przykładowo czym w końcu według Ciebie jest epoka/iteracja? Bo najpierw wywnioskowałem, że jest to jeden krok uczenia a później wychodzi na to, że chodzi Ci o... no właśnie o co?
Masz coś takiego:
for(int i=0; i<ilosc_iteracji;i++){
for(int j=0; j<ilosc_danych_uczacych; j++){
//reszta kodu
}
}
To która pętla według Ciebie odpowiada za iterację/epokę?
ŁF napisał(a)
WojtekS napisał(a)
Inaczej jest w sieciach rekurencyjnych, gdzie nie ma możliwości innej nauki jak chronologicznie -> od najstarszej do najnowszej
z przymrużeniem oka - mózg to wielka sieć rekurencyjna, a jakoś nie wymaga podawania próbek w konkretnej kolejności... ;)
Widać, że nie rozumiesz rekurencji... ale nie o tym jest ten post więc sobie daruję. Zadam jedynie pytanie retoryczne: a czy potrafisz podróżować w czasie? Nasza nauka przebiega od dnia narodzin do końca naszego życia -> nie wybierasz sobie "próbki uczącej" ("Aa, dziś mam 9 lat więc pouczę się o mechanice kwantowej..." <- no, chyba, że ty tak masz :))
ŁF napisał(a)
wiesz, jakie wartości przyjmuje funkcja sgn?
rzeczywiste? :D
ŁF napisał(a)
WojtekS napisał(a)
W dodatku znowu męczę się ze zrozumieniem Twoich zdań... Co niby chciałem powiedzieć pisząc: "ale dla sieci nierekurencyjnej pomijalne przy wielu iteracjach uczenia". Tzn. że co? :/
nie wiem, co chciałeś powiedzieć. ja chciałem powiedzieć, że dla odpowiednio wielu epok kolejność próbek nie ma znaczenia, lub jest ono pomijalne. udowodniłem to powyżej. nie wierzysz albo nie rozumiesz? sprawdź, zamiast, za przeproszeniem, bredzić.
Tak się składa, że SSN zajmuję się już jakiś czas. A o bredzeniu nic nie mów bo wcześniej wypowiadałeś się m.in. o sieciach rekurencyjnych (pisząc prawdziwe brednie) a teraz przyznałeś, że się nimi nie zajmowałeś.
aha a jakby co to już kilka zaimplementowałem (m.in. MLP, RBF, RMLP, Elmana i Kohonena) w dodatku bez korzystania z żadnej biblioteki (napisałem wszystko od zera) :). A ty, jakie masz osiągnięcia w tej dziedzinie?
Pozdrawiam