Post by Maciek GodekPost by M.M.Post by Maciek GodekPost by M.M.Z notatnikiem w ręku nie robiłem pomiarów, ale wychodząc z
Twojego założenia o ludzkiej omylności, nie ma sensu robić takich
pomiarów, bo bym się pomylił w notowaniu ;-)
To błędny wniosek.
Żartowałem :)
Ryzykant ;]
Post by M.M.Post by Maciek GodekMożna dokonywać eksperymentów pomimo tego, że się popełnia błędy.
Oczywiście.
Post by Maciek GodekPost by M.M.Kilkoro dzieci uczyłem tabliczki mnożenia, alfabetu i jak się dobrze
nauczyły to nie popełniały błędów.
Nie popełniały błędów na zbiorze trenującym, czy na zbiorze testowym?
W ogóle nie myślałem o podziale na zbiór uczący i testowy gdy przytaczałem
ten przykład.
No to nic dziwnego, że masz niewspółmierne wyniki.
Obojętnie jakie mam wyniki, tutaj raczej chodzi o zasadniczą różnicę pomiędzy
uczeniem się ludzi (dzieci), a sztucznymi sieciami neuronowymi opartymi o klasyczny
perceptron wielowarstwowy.
Dziecko uczymy np. tabliczki mnożenia, podajemy przykłady i mamy pewne
prawdopodobieństwo, że dziecko odkryje regułę na mnożenie dowolnych liczb.
Im więcej dziecku podamy przykładów, tym większa szansa na to że odkryje
regułę. Podobnie jest z naukowcem, im więcej ma danych tym ma większą szansę, że
odkryje regułę rządzącą badanym przez niego zjawiskiem. Naukowiec nie musi
przed sobą ukrywać połowy danych z badań. Gdy naukowiec proponuje jakąś regułę, to
ona powinna się sprawdzać na wszystkich dostępnych danych i jest duże prawdopodobieństwo, że
się sprawdzi na danych, którymi naukowiec nie dysponował w trakcie badań.
Oczywiście, sztuczną sieć neuronową też możemy wyuczyć dokładnie na wszystkich
dostępnych danych, bez dzielenia na zbiór uczący i testowy. Wtedy sztuczna sieć,
podobnie jak reguła naukowca, będzie się sprawdzała na wszystkich dostępnych danych.
Problem jednak w tym, że reguła zaproponowana przez sztuczną sieć neuronową będzie
sporadycznie dawała poprawne odpowiedzi na danych których sieć nie dostała w trakcie
uczenia. To się nazywa, jak zapewne wiesz, przeuczenie sztucznej sieci neuronowej.
Dlatego w przypadku sztucznej sieci neuronowej lepiej podzielić dane uczące na zbiór
testowy i uczący, i uczyć do momentu, gdy ilość poprawnych odpowiedzi na zbiorze
testowym jest maksymalna. Z tego wynikają wady sztucznych sieci neuronowych:
- tworzą regułę na mniejszej ilości danych niż ilość dostępnych,
- nawet na zbiorze uczącym z pewnym prawdopodobieństwem udzielają błędnych odpowiedzi.
Moje sieci, jak już pisałem, po wyuczeniu na maksa mają mniej objawów przeuczenia.
Post by Maciek GodekPost by M.M.Post by Maciek GodekPost by M.M.Podobnie jak w recytowaniu wiersza z
pamięci - o ile im się chciało i o ile dobrze się nauczyły to powtarzały bez
pomyłek.
Sieć neuronowa, o ile "dobrze się nauczy", też będzie powtarzała bez pomyłek.
Oczywiście, jeśli sztuczną siec neuronową, opartą o klasyczny perceptron wielowarstwowy,
wyuczymy z dokładnością 100% na danym zbiorze, to będzie dawała poprawne
odpowiedzi z prawdopodobieństwem 100% na tym zbiorze.
Post by Maciek GodekOwe 95% (czy ile tam) skuteczności nie dotyczy powtarzania.
Nie rozumiem.
Zdanie niżej masz wyjaśnienie, na które odpowiedziałeś "oczywiście"
Post by M.M.Post by Maciek GodekWytrenowana sieć dla tych samych danych wejściowych w 100% razy zwróci te same dane wyjściowe.
(w każdym razie dotyczy to sieci bezinercyjnych, takich jak perceptrony)
Oczywiście.
O.
Post by M.M.Post by Maciek GodekPost by M.M.Kiedyś amatorsko tresowałem kota, łapał i aportował zabawkę
bezbłędnie.
W jaki sposób mierzyłeś błąd? I na ilu próbach?
Na potrzeby tego o czym pisałem nie ma potrzeby użycia naukowej,
udokumentowanej metody, tym bardziej że jest to tylko analogia.
Albo używamy pomiarów, albo stosujemy analogie.
Mówienie o procentach skuteczności sugeruje pomiar.
Może wysłowiłem się w mylący sposób - przepraszam.
Post by Maciek GodekPost by M.M.Dziecko po opanowaniu całego materiału może udzielać bardzo
dokładnych, precyzyjnych odpowiedzi i ta umiejętność nie musi
dziecku niekorzystnie wpłynąć na zdolności generalizowania, abstrahowania.
Sztuczne sieci neuronowe zwykle uczy się tylko do pewnego momentu, aby
nie doszło do przeuczenia. Zwykle lepiej jest gdy sztuczne sieci
neuronowe nie udzielają precyzyjnych odpowiedzi na zbiorze uczącym.
Post by Maciek GodekPost by M.M.Ale powyższy akapit ma się nijak do tego o czym pisałem i nie
chce mi się sprawdzać, kiedy dziecko myli się raz na 5 recytacji
wiersza, a kiedy raz na 1000 recytacji. Interesuje mnie fakt, że
DZIECKO UCZĄC SIĘ DOKŁADNIE (np. tabliczki mnożenia do 10) NIE
ZATRACA ZDOLNOŚCI GENERALIZACJI W ZAKRESIE DO 20.
OK, to tutaj już jest bardziej konkretna hipoteza
Przepraszam że poprzednio napisałem zbyt skrótowo.
Post by Maciek Godek(której chyba nadal nie rozumiem).
Czyli twierdzisz, że jeżeli dziecko nauczy się na pamięć, ile to jest 6 * 7, to będzie
również bez problemu w stanie powiedzieć, ile to jest 13*17?
Nadal nie to chciałem powiedzieć, ale już jesteśmy bliżej sedna. Dziecko może
uczyć się tabliczki mnożenia na pamięć. Nie jest ważne czy to dobra metoda nauki, czy
zła - to po prostu przykład działania biologicznego mózgu w akcji. Dziecko
otrzymuje jeden przykład uczący do nauki, drugi, kolejny. W zależności od tego jakie to
dziecko i czego uczyło się wcześniej, może znaleźć regułę mnożenia po pamięciowym
opanowaniu mniejszej ilości przykładów, większej, albo w ogóle. Dziecku po
prostu dajemy przykłady do nauki. W przypadku sztucznych sieci neuronowych jest
inaczej. Przed przystąpieniem do uczenia sztucznej sieci, zbiór danych
dzielimy na zbiór uczący i zbiór testowy. Zbiór testowy jest w pewnym sensie
marnowany, ponieważ nie jest przeprowadzana na nim nauka. Niemniej jednak
zbiór testowy jest konieczny, aby móc kontrolować jakość działania sztucznej
sieci neuronowej na przykładach które nie były podawane w trakcie nauki.
W przypadku nauki dzieci też masz zbiory trenujące i zbiory testowe.
Oczywiście że można, a zazwyczaj wręcz trzeba testować zdobytą wiedzę/umiejętności
przez ludzi! Nie chciałem powiedzieć że ludzie tylko uczą się na przykładach, aż
odkrywają regułę i potem nie muszą weryfikować swojej wiedzy.
Raczej chciałem powiedzieć, że jedną z metod nauki jest taka metoda, w której
nauczyciel podaje jeden przykład i sposób rozwiązania tego przykładu, potem drugi,
trzeci, w końcu n-ty i dzieci kolejne przykłady rozwiązują samodzielnie. Raczej
chciałem powiedzieć, że nauczyciel nie ukrywa połowy materiałów edukacyjnych, w
obawie że dzieci się przeuczą.
Upraszczając, w przypadku nauki dzieci są tak jakby dwa zbiory danych: jeden uczący,
potem testowy np. na egzaminie. W przypadku sztucznej sieci neuronowej (nadal
upraszczając) są trzy zbiory: zbiór uczący, zbiór testowy i potem dane napływające
do sieci w trakcie jej działania. Dostępne dane są marnotrawione, bo sieć nie uczy
się na danych testowych, aby się nie przetrenowała. Moje sztuczne sieci, ze
względu na specyficzną architekturę (choć to nadal jest perceptron wielowarstwowy) są
mniej wrażliwe na przetrenowanie, więc można uczyć na maksa, a sieć na starych
danych nie poda błędnej odpowiedzi.
Post by Maciek GodekPrzynajmniej tak jest w przypadku nauki matematyki.
Masz przykłady i masz zadania sprawdzające.
Doświadczenia nauczycieli raczej podpowiedzą, że na zadaniach sprawdzających rzadko masz 100% skuteczności.
Oczywiście, nie chciałem powiedzieć że PO ETAPIE nauki nie sprawdza
się na kolejnych danych umiejętności uczniów czy hipotezy naukowca.
Chciałęm powiedzieć ze NA ETAPIE nauki ani naukowiec, ani uczeń nie
ukrywają przed sobą połowy dostępnych wyników badań czy połowy
materiałów edukacyjnych. Tymczasem w przypadku sztucznych sieci
neuronowych już NA ETAPIE nauki ukrywamy jakąś część danych przed
siecią i zwykle nie uczymy aż sieć pod 100% poprawnych odpowiedzi
na danych. Uczeń powinien się uczyć aż opanuje 100% dostępnych
materiałów, a naukowiec powinien pracować nad hipotezą aż pokryje
ona wszystkie materiały z badań. To co będzie po etapie nauki, czy
uczeń zda egzamin, czy hipoteza naukowca przetrwa próbę czasu i
zyska status wiedzy - stanowią kolejną kwestię.
Post by Maciek GodekPrzykład z tabliczką mnożenia jest o tyle niefortunny, że to jest dokładnie coś, czego uczysz się na pamięć.
Taki jest zamysł. To jest cache, który ma później usprawniać obliczenia.
Owszem, przedstawiłem to myląco. Chyba nigdy nie prowadziłem rozmowy na ten temat i
nie zdawałem sobie sprawy jak można zrozumieć takie przedstawienie problemu. Ale
faktycznie, tabliczka mnożenia to jest cache, a po etapie nauki uczeń jest
testowany np. na egzaminie. Więc pisanie że uczeń nie jest testowany było
mylące. Raczej chodzi o to, że uczeń nie ukrywa przed sobą części materiałów
edukacyjnych w obawie że się przeuczy - no chyba że ze zmęczenia; ale dobrze
zaprojektowany układ elektroniczny, pracujący w dobrych warunkach, odpowiednio
zasilany... praktycznie nie ulega żadnym awariom przez tysiące lat, więc pod tym
względem w ogóle porównanie ludzi i komputerów elektronicznych nie ma sensu.
Post by Maciek GodekDziecko, które ma "dane w cache'u", może nie mieć algorytmu do mnożenia, i dlatego
ze znajomości tabliczki mnożenia nie można wyciągnąć wniosku o tym, czy dziecko umie
mnożyć liczby powyżej 10.
Owszem, ale nie o to chodziło.
Post by Maciek GodekPost by M.M.Zwykle w trakcie nauki mamy do czynienia ze zjawiskiem przeuczenia, czyli
im sieć daje więcej poprawnych odpowiedzi na zbiorze uczącym, tym mniej na
zbiorze testowym. Zwykle należy przerwać trening sieci w momencie gdy na zbiorze
testowym jest najwięcej poprawnych odpowiedzi. Widać tutaj oczywistą i
sporą wadę w porównaniu z nauką dzieci. Nawet na zbiorze uczącym sieć nie
daje 100% poprawnych odpowiedzi! Minimalnie wypaczając analogię, to tak jakby
uczyć dziecko tylko do momentu gdy udzieli 80% poprawnych odpowiedzi z
tabliczki mnożenia. W sztucznych sieciach neuronowych na bazie 'mojej
autorskiej' struktury danych ten problem nie jest aż tak drastyczny - choć
niestety nadal może się pojawiać. Moje sieci mogą dawać 100% poprawnych i
bardzo precyzyjnych odpowiedzi na dostępnych danych, bez obawy, że znacznie
spadnie skuteczność na danych, których nie było w trakcie uczenia. Problem
przeuczenia w moich sieciach nie jest aż tak dużym problemem.
Nie możesz "nie mieć obaw o skuteczność na danych, których nie było w trakcie uczenia".
Bo jeżeli nie było, to skąd sieć ma wiedzieć, jakie tam mają być wartości?
Nie może tego wiedzieć.
Całkowicie obaw oczywiście nie mogę się pozbyć, ale mam zdecydowanie mniejsze obawy że
moja wyuczona sieć neuronowa na maksa (czyli przeuczona) zachowa się lepiej niż klasyczny
perceptron.
Post by Maciek GodekPrzetrenowanie i błędna generalizacja u ludzi może wystąpić w takim samym stopniu, jak u sieci neuronowych.
Czy w takim samym stopniu to inna sprawa, ale na pewno masz rację, że zarówno w przypadku ludzi jak i
sztucznych sieci neuronowych jest ryzyko błędnej generalizacji. I tutaj sztuczne sieci na bazie
mojej architektury nie wprowadzają zupełnie żadnego przełomu. Moje tylko po przeuczeniu nie są
tak bardzo (tak często) przeuczone jak sieci na bazie klasycznego perceptronu wielowarstwowego.
Post by Maciek GodekJa pamiętam, jak kiedyś chyba w przedszkolu byłem oburzony, bo mieliśmy odróżnić obrazek z sałatą od
obrazka z kapustą. I to na domiar złego była taka włoska kapusta, z odstającymi liśćmi. Tak że
wyglądała dla mnie nierozróżnialnie od sałaty (tym bardziej, że w moim spekrtum doświadczeń nie
było ani kapusty, ani sałaty)
Hmmm, kolejny ciekawy przykład na temat działania biologicznych sieci neuronowych i kolejne
źródło wartościowych inspiracji. Ale niestety do tego konkretnego i wąskiego tematu nie klei
mi się w ogóle, może czegoś nie rozumiem?
Post by Maciek GodekJak masz bardzo duży zbiór danych, to zawsze znajdzie się tam kot, który wygląda jak pies, albo
ser, który wygląda jak skrzynka na listy. Albo cyferka 3, która wygląda jak 5 albo 8. I jeżeli
oznaczenie danych mówi, że ta cyferka to jest 3, ale sieć widzi, że jednak wygląda bardziej jak 8,
to nie można mieć do niej pretensji, że "się myli".
Oczywiście, ale temat błędnych danych to kolejna kwestia. Jeśli w danych uczących cyfra 8
jest z prawdopodobieństwem p oznaczona jako 8 i z prawdopodobieństwem 1-p jako nie-osiem, to
(precyzyjna) sieć neuronowa, gdy otrzyma na wejście 8 powinna właśnie dać odpowiedź p, a
nie 1. Jeśli dane pochodzą np. z ręcznie pisanych cyfr, jeśli zbiór danych jest
reprezentatywny, a cyfra 8 jest mylona z inną cyfrą z prawdopodobieństwem 1-p, to trakcie
działania cyfra 8 jest mylona z inną cyfrą z tym samym prawdopodobieństwem, więc lepszą
odpowiedzią sieci jest odpowiedź p, niż 1. Jakie dane, taką hipotezę postawi sieć i naukowiec.
Jeśli cyfra 8 w danych jest klasyfikowana z prawdopodobieństwem 99% jako cyfra 3, to każda
szanująca się metoda uczenia maszynowego powinna też ją sklasyfikować jako cyfrę 3.
Antidotum na błędne dane jest duży i losowy zbiór uczący, który asymptotycznie będzie
dążył do zbioru reprezentatywnego, a nie cudowna metoda uczenia maszynowego która
poprawi BŁĘDY STATYSTYCZNE w danych.
W pewnym przybliżeniu, sztuczna sieć neuronowa w programie szachowym na wejście też
dostaje tylko informacje o tym, że z danej pozycji było N rozgrywek, białe wygrały X razy,
czarne Y, a pozostałe partie były remisowe. To, że dane są nieprecyzyjne albo
nawet błędne, nie oznacza, iż oczekujemy od sieci lepszej odpowiedzi niż dane.
Jeśli program szachowy napotyka pozycję z której wygrywał z prawdopodobieństwem 80%, to
sieć niech podaje odpowiedź dla tej pozycji 80%, a nie 100%, nawet jeśli pozycja jest
wygrana w 100%. Chodzi o to, aby nie podawała 70%, ani 90%, tylko właśnie precyzyjnie
80%, bo tyle wynika z danych.
Post by Maciek GodekPost by M.M.Post by Maciek GodekPost by M.M.Nie muszę
dziecka uczyć tylko 70% przykładów, bo w wieku dorosłym będzie
miało z mnożeniem w słupku - to było oczywiste. Tymczasem, sztuczna sieć
neuronowa zbudowana w oparciu o klasyczny perceptron wielowarstwowy, ucząc się
dokładnie na zbiorze uczącym, zazwyczaj udziela gorszych odpowiedzi na zbiorze
testowym. Sztuczne sieci neuronowe zbudowane w oparciu o moją architekturę
mają z tym mniej problemów - tak, chwalę się, jestem dalece niedoskonały ;-)
Ja czasem mam tak, że jak sobie w jesienne wieczory idę przez miasto, to
niektóre worki na śmieci wypełnione liśćmi mój mózg rozpoznaje jako psy.
Serio, jestem na jakimś poziomie całkowicie przekonany, że na ulicy leży pies.
Dopiero jak się wytężę, uświadamiam sobie, że to tylko worek na śmieci.
Czasem jeżeli nawet kilka dni z rzędu idę przez to samo miejsce, i leży ten
sam worek, to niezawodnie rozpoznaję w nim dużego śpiącego bernardyna.
Od czasu gdy mój wzrok uległ znacznemu pogorszeniu, bardzo często mam podobne
problemy, aż dziwne, że z takimi zakłóceniami jestem w stanie cokolwiek
rozpoznać. Ale to też odbiega od tematu rozmowy.
Właśnie chodzi o to, że nie odbiega.
Że pokazuje zjawiska, które można obserwować w działaniu sieci neuronowych na spektrum naszych doświadczeń.
To ja nie rozumiem związku tego przykładu z rozmową na temat błędych odpowiedzi sieci na
danych ze zbioru uczącego.
Post by Maciek GodekPost by M.M.Raczej chciałem
tutaj powiedzieć, że sieci zbudowane w oparciu o moją architekturę nie
powtarzają błędów, bo można je wyuczyć na maksa na danych rozszerzonych o
przypadki w których pojawiły się błędne odpowiedzi, a problem przeuczenia
nie występuje tak łatwo jak w przypadku sieci zbudowanych w oparciu o
klasyczny (nie)liniowy perceptron wielowarstwowy.
To może kluczowe pytanie jest takie, z jakich zbiorów danych korzystałeś, żeby dojść
do tych wniosków.
To w głównej mierze teorie i hipotezy. Ale też wykonałem kilka praktycznych testów,
wypadły bardzo zachęcająco. Np. na danych o zarobkach wypadły najlepiej ze wszystkich
metod uczenia jakie były dostępne w benchmarku i w wece. Minęło już kilka lat jak
robiłem testy, ale chyba na danych syntetycznych wygenerowanych z prostych wzorów
matematycznych, w ogóle wypadły bardzo dobrze i pobiły klasyczny perceptron na głowę w
szybkości, precyzji i skuteczności na zbiorze testowym.
Potem niestety, w obawie o to że kody źródłowe zostaną wykradzione z mojego komputera,
wszystko skasowałem. Nie zdążyłem przetestować wszystkich algorytmów które współpracują z
tą strukturą sieci neuronowych, w tym kilku algorytmów opracowanych przeze mnie. W przypadku
tych sieci można stosować dwa odmienne algorytmy do uczenia jednej i tej samej sieci na
tych samych danych - nie tak łatwo to wszystko dokładnie przetestować i odpluskwić.
Co do teorii, to udowodniłem że moja architektura może bardzo szybko wyuczyć się precyzyjnie
dowolnych danych, stanowi więc uniwersalny aproksymator.
Co do lepszej generalizacji formalnego dowodu w ogóle nie można przedstawić.
Mamy najprostszy, jednoelementowy zbiór uczący:
f(0)=0.
Zbiór testowy może być taki:
f(1)=1,
albo taki:
f(1)=0.
Z matematycznego punktu widzenia żaden z tych zbiorów nie jest ani gorszy, ani lepszy.
Jeśli sieć neuronowa na jednym zbiorze testowym da poprawną odpowiedź, to na drugim
da złą. Więc formalnie, z matematycznego punktu widzenia, nie istnieje żadna metoda
uczenia maszynowego, która będzie cechowała się dobrymi zdolnościami do generalizacji.
Moje sieci neuronowe nie próbują rozbić powyższego muru głową. Zamiast tego szybko
się uczą, używają minimalistycznego modelu matematycznego, szybko dla danych uczących
dają dobre odpowiedzi, nie marnją danych na zbiór testowy - ale jak pomiędzy próbkami jest
jakiś nagły pik, to i salomon nie naleje - moje sieci też tego piku cudownie nie odgadną. Oczywiście,
jeśli dla danego zadania lepszym modelem matematycznym będzie klasyczny perceptron wielowarstwowy, to
moje sieci neuronowe będą znacznie gorsze - cudów nie ma.
Swoje przekonania co do lepszych zdolności generalizacyjnych na danych praktycznych (bo
teoretycznie, na dowolnych danych, wykazałem powyżej że jest to w ogóle niemożliwe), opieram
też na pewnych podobieństwach do innych metod interpolacji/aproksymacji. Np. na tym, że
jeśli aproksymujemy modelem liniowym, to wystarczą zaledwie dwie dobre próbki uczące, aby
mieć dobrą aproksymację.
Moje sieci mają też inną zaletę, moje sieci neuronowe uczą się o rzędy wielkości
szybciej. Gdy jakąś głęboką sieć neuronową wyuczy się jeden raz przez ileś tygodni na
klastrze złożonym z wielu GPU, to moją można wyuczyć np. setki razy na jednym komputerze
bez GPU.
Post by Maciek GodekPost by M.M.Post by Maciek GodekNa dużych zbiorach danych popełnianie błędów jest niemożliwe do uniknięcia.
Jeśli jakąś przestrzeń mamy gęsto pokrytą danymi (czyli mamy dużo danych i
równomiernie rozłożonych po tej przestrzeni) to jest możliwe wyuczenie sieci
która da blisko 100% poprawnych odpowiedzi na zbiorze uczącymi i
testowym.
To zależy od zbioru uczącego i testowego.
Ale tak, zazwyczaj (pewnie) jest możliwe. Nawet owo anegdotyczne 95% to jest całkiem "blisko 100%".
Ok.
Pozdrawiam