Discussion:
Odczyt ciśnienia - analiza obrazu
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
heby
2020-10-21 08:29:24 UTC
Permalink
Cześć.

Jest takie coś:

https://drive.google.com/file/d/1wsunQU_gOmqgQ1-jFkHeubBNSpJPAS5F/view?usp=sharing

Zdjęcie jest zrobione normalnym aparatem, docelowo będzie to nagrywane
gorszej jakosci kamerą, więc kontrast i szumy będa inne, odczyt będzie
też w nocy (podświetlowny z boku) więc cienie też będą inne.

Wiem, że zawsze orientacja obrazu będzie taka jak widać, czyli połowa
zakresu, wskazówka w pionie. Kamerę mam pod kontrolą.

Zadanie:

Mając do dyspozycji niewielką moc obliczeniową (~-pi) zanalizować obraz
i odczytać położenie wskazówki na tarczy dostając liczbę 0-max.

To nie jest krytyczne, wiec jesli raz na jakiś czas będzie bład to nie
złego się nie stanie.

Po drugie, to nie jest real-time. Jeśli odczytam położenie raz na
kilkanaście sekund, będzie ok.

Najwygodniej będzie mi uzyć OpenCV + python bo mam w tym jakieś
doświadczenia.

Teraz:
Mam jakieś pomysły jak to zrealizować za pomocą kilku algorytmów, ale
całośc rozbija się o to, że warunki w których to robię, będą zmienne.
Zarówno oświetlenie jak i "zaparowanie" górnej częsci wyświetlacza będą
zależały od pogody.

Coś czuje że bez sprytniejszych algorytmów daleko nie zajadę.

Opcja czołgowa: generować sztuczny obraz czyjnika bez wskazówki,
metodami porównywania obrazu dopasować go idealnie do klatki z kamery,
wklejać wskazówkę co kilka stopni i sprawdać która z takich wklejonych
wskazówek splecie się najlepiej z obrazem. Tylko że to czasochłonne.

Opcja sensowna: algorytm potrafiący określić od razu kąt pod którym
widać wskazówkę, np. po wykasowaniu pierścienia i tarcz (tarcze pewnie
załatwi prosta binaryzacjia + erozja). Jakieś propozycje na odczyt kąta
pod którym jest wskazówka?

Może ktoś widział podobne zagadnienie w postaci publikacji gdzie mógłbym
zerknąć choćby na hasłowe algorytmy?

PS. Nie, nie da się podłaczyć czujnika innego niż ten ;) Z przyczyn
pozatechnicznych.

PS2. To nie zaliczenie, to konkretny problem ad-hoc z domu ...
heby
2020-10-21 08:50:10 UTC
Permalink
Post by heby
Cześć.
I jeszcze jedno: tak wiem że są "gotowce" na sieci, nawet kilka
obejrzałem, zwyczajowo sprawadzaja się do binaryzacji i użycia na tym
transformaty Hougha. Ale może ktoś ma jakiś inny pomysł, nie wykluczam
że fajnie by było usłyszeć o AI.
Maciej Sobczak
2020-10-21 19:44:43 UTC
Permalink
Post by heby
https://drive.google.com/file/d/1wsunQU_gOmqgQ1-jFkHeubBNSpJPAS5F/view?usp=sharing
Wolfram:

img = Import["cisnieniomierz.jpg"];
img2 = ImageTake[
ImageResize[ImageMultiply[img, 5], 500], {76, -39}, {86, -82}];

img2 to rozjaśniony, wycentrowany (na oś wskazówki, wartości dobrane) i pomniejszony obraz ciśnieniomierza.

mask = Rasterize[
Graphics[{Disk[{0, 0}, 1.1], White, Disk[{0, 0}, 1]},
PlotRange -> {{-1.75, 1.75}, {-1.75, 1.75}}],
RasterSize -> ImageDimensions[img2]];

mask to maska, która wycina pierścień tam, gdzie jest czerwone pole (tam jest tylko czarna wskazówka na czerwonym, więc nic innego nie przeszkadza).

img3 = ImageMultiply[img2, ColorNegate[mask]];
img4 = ImageAdd[img3, mask];

img4 to wycięte czerwone pole z kawałkiem czarnej wskazówki, reszta jest całkiem biała.

blacks = PixelValuePositions[img4, Black, 0.15];

blacks to lista pozycji czarnych (lub prawie czarnych, tolerancja dobrana) pikseli. Jest ich w sumie 7.

Map[
Function[p,
***@ArcTan[Divide @@ Reverse[(p - ImageDimensions[img2]/2)]]/Degree
],
blacks
] // Median

7.81529

I tyle właśnie, w stopniach, jest odchylona wskazówka od poziomu.

Można też porobić dużo zdjęć wzorcowych i porównywać korelacją albo jakimiś sieciami, ale samą arytmetyką jest dużo taniej. Da się to zrobić w dowolnym innym języku.

(BTW - Google twierdzi, że w tym kodzie są adresy mailowe. Dobre.)
--
Maciej Sobczak * http://www.inspirel.com
heby
2020-10-21 20:03:22 UTC
Permalink
Post by Maciej Sobczak
Post by heby
https://drive.google.com/file/d/1wsunQU_gOmqgQ1-jFkHeubBNSpJPAS5F/view?usp=sharing
Niestety ciezko go wdrożyć, troche jak matlab, dobry do prezentacji na
konferencji i reszte rób se sam ;)
Post by Maciej Sobczak
Map[
Function[p,
],
blacks
] // Median
7.81529
I tyle właśnie, w stopniach, jest odchylona wskazówka od poziomu.
Co to w zasadzie robi? Wcześniejsze funkcje to tylko prosta obróbka
obrazu, ale tutaj troche niejasne, nie znam składni Wolframa. Tylko
arctang liczysz z pixeli? Co to za mapa?
Post by Maciej Sobczak
Można też porobić dużo zdjęć wzorcowych i porównywać korelacją albo jakimiś sieciami, ale samą arytmetyką jest dużo taniej.
Obawiam się że nie zadziała jak tylko zmienią się warunki oświetlenia.
Obecnie projektuje podstawkę pod kamerę, trzeba to jeszcze wydrukować i
będę miał pełny zakres oświetlenia po 1 dobie, więc grybam sobie jak to
będzie wygladać, ale raczej będzie oświetlenie nocne i może część detali
zmieni kompletnie wygląd.

Robiłem kilka analiz tego typu róznymi metodami i zazwyczaj proste
liczenie pixeli wybija sobie zęby o pierwszą muchę na obrazie, słabo się
sprawdzą jak pojawią się odbicia, cienie, szum. Szukam czegoś bardziej,
bo ja wiem, statystycznego. Transformata Hougha jest tutaj praktycznie
oczywistym rozwiązaniem, ale o ile wiem jest bardzo cieżka obliczeniowo
(masa latania po obrazie i kręcenia prostą sumując pixele). Ale może się
mylę i z tej prostej metody wynika jednak jakaś optymalizacja stosowana
w opencv?

Obecnie szyje sobie na boku własnie coś oparte o Hougha, czuje jednak że
można prościej, np. można zrobić splot ze sztuczną wskazówką, bo środek
tarczy jestem w stanie łatwo znaleźć i ją sobie narysować. W tedy z
Hougha zostanie tylko 1 punkt z nieznanym "fi" co znacząco zmniejszy
ilośc liczenia. Albo nie mam racji i nie warto tak optymalizować.
Post by Maciej Sobczak
Da się to zrobić w dowolnym innym języku.
Wiadomo.
Maciej Sobczak
2020-10-21 22:07:26 UTC
Permalink
Post by heby
Niestety ciezko go wdrożyć,
Na RaspberryPi jest już wdrożony. Akurat do gapienia się na ciśnieniomierz w piwnicy.
Post by heby
Post by Maciej Sobczak
Map[
Function[p,
],
blacks
] // Median
Co to w zasadzie robi? Wcześniejsze funkcje to tylko prosta obróbka
obrazu, ale tutaj troche niejasne, nie znam składni Wolframa. Tylko
arctang liczysz z pixeli? Co to za mapa?
Z wcześniejszych obliczeń, blacks to lista pozycji czarnych punktów, np. taka (powiedzmy, że są 3 punkty obok siebie):

{{42,65},{43,65},{43,66}}

Powiedzmy, że obrazek ma 200x200, więc środek ma w punkcie {100,100}. Taką wartość dostajemy z ImageDimensions[img2]/2.
Trzeba znaleźć wektor ze środka obrazka (bo wcześniejsze obliczenia były po to, żeby środek obrazka był w osi wskazówki) do tych czarnych punktów - to robi odejmowanie (p - ImageDimensions[img2]/2), jeśli p jest jednym z punktów z listy. Dalej liczymy normalnie ArcTan[y/x] tego wektora, ale skoro mamy {x,y}, to trzeba odwrócić kolejność (Reverse) i zamienić parę na dzielenie (Divide). Wynik chcemy w stopniach - dzielimy przez Degree, co jest stałą oznaczajacą ilość radianów w stopniu. Mapa robi to wszystko dla każdego punktu z listy. Na sam koniec (notacja post-fix) jest wybierany środkowy wynik, na wypadek gdyby trafiła się jakaś "mucha" gdzieś.
Można się jeszcze zastanowić, w którym kwadrancie są te punkty, bo to wpływa na znak kąta.
Post by heby
Robiłem kilka analiz tego typu róznymi metodami i zazwyczaj proste
liczenie pixeli wybija sobie zęby o pierwszą muchę
Właśnie nie. Można nawet przyjąć jakąś oczekiwaną liczbę pikseli z tej analizy. Jak jest ich za dużo, to masz muchę i odrzucasz pomiar. Jak jest ich tyle, co trzeba, to jest ok (albo się urwała wskazówka i jest mucha udająca wskazówkę - ale takiego sabotażu niczym się nie obsłuży).
Post by heby
Transformata [...]
Szkoda liczenia.
--
Maciej Sobczak * http://www.inspirel.com
Andrzej S
2020-10-22 06:55:02 UTC
Permalink
Post by heby
Cześć.
https://drive.google.com/file/d/1wsunQU_gOmqgQ1-jFkHeubBNSpJPAS5F/view?usp=sharing
1. Skonstruuj pęk kilkuset odcinków od środka do brzegu (jak wskazówka).
Grubość wskazówki mówi ile ich powinno być.

2. Wzdłuż każdego odcinka policz sumę RGB.

3. Wskazówka to ten odcinek, dla którego suma jest minimalna.

pozdro
--
A S
heby
2020-10-22 07:19:34 UTC
Permalink
Post by Andrzej S
1. Skonstruuj pęk kilkuset odcinków od środka do brzegu (jak wskazówka).
Grubość wskazówki mówi ile ich powinno być.
2. Wzdłuż każdego odcinka policz sumę RGB.
3. Wskazówka to ten odcinek, dla którego suma jest minimalna.
To własnie uproszczona transformata Hougha. Bede to m.in. próbował jak
ogarnę mechaniczne mocowanie, ale najpierw pójdzie uproszczony algorytm
od Maćka.
Maciej Sobczak
2020-10-22 16:29:01 UTC
Permalink
Post by Andrzej S
1. Skonstruuj pęk kilkuset odcinków od środka do brzegu (jak wskazówka).
Grubość wskazówki mówi ile ich powinno być.
Dobry pomysł, ale odcinki powinny mieć taką samą długość, bo inaczej odległość do brzegu będzie mieć wpływ na sumę. W sensie - niech to będzie "do brzegu", ale np. tarczy, a nie całego obrazka.
--
Maciej Sobczak * http://www.inspirel.com
Roman Tyczka
2020-10-22 17:52:51 UTC
Permalink
Post by heby
PS. Nie, nie da się podłaczyć czujnika innego niż ten ;) Z przyczyn
pozatechnicznych.
PS2. To nie zaliczenie, to konkretny problem ad-hoc z domu ...
A może wybić szybkę, pomalować wskazówkę mocno odblaskowym lakierem i
robić fotę z drobnym oświetleniem?
Wtedy wskazówka będzie "świecić" i łatwo ją będzie zlokalizować.
--
pzdr
Roman
heby
2020-10-22 20:16:22 UTC
Permalink
Post by Roman Tyczka
A może wybić szybkę, pomalować wskazówkę mocno odblaskowym lakierem i
robić fotę z drobnym oświetleniem?
Za 5 lat. Po gwarancji ...
Post by Roman Tyczka
Wtedy wskazówka będzie "świecić" i łatwo ją będzie zlokalizować.
A jak by jeszcze do niej przymocować mały enkoder ... Wiesz, jak bym
mógl pozbyć się tego manometru i wstawić czujnik elektroniczny to by w
ogóle tematu nie było ...

Na razie w grę wchodzą metody bezinwazyjne, kiedyś, w przyszłosci, będa
metody sensowne.

PS. Znalazłm wiele lat temu rozwiązanie podobnego problemu za pomocą
kilku cewek wykrywajacych zmianę inducyjności gdy pod nimi była
wskazówka. Autor narzekał, że całośc rozkalibrowuje się co chwile.

PS2. A całkiem serio to pomyślałem że to taka zabawa. Wiedza o ciśnieniu
jest mi prawie niepotrzebna, ale chciałem sobie poćwiczyć pythona i
opencv. To czemu nie skorzystać z okazji i zrobic coś użytecznego.
Adam M
2020-10-23 14:50:52 UTC
Permalink
Post by heby
Post by Roman Tyczka
A może wybić szybkę, pomalować wskazówkę mocno odblaskowym lakierem i
robić fotę z drobnym oświetleniem?
Za 5 lat. Po gwarancji ...
Post by Roman Tyczka
Wtedy wskazówka będzie "świecić" i łatwo ją będzie zlokalizować.
A jak by jeszcze do niej przymocować mały enkoder ... Wiesz, jak bym
mógl pozbyć się tego manometru i wstawić czujnik elektroniczny to by w
ogóle tematu nie było ...
Na razie w grę wchodzą metody bezinwazyjne, kiedyś, w przyszłosci, będa
metody sensowne.
A moze sprobowac zabawy z kolorem oswietlenia w celu poprawienia widocznosci wskazowki - mialem doczynienia z kamerami firmy Cognex uzywanymi razem z robotami przemyslowymi i odpowiedni kolor oswietlenia plus filtry polaryzacyjne czynia cuda. Albo zainwestowac w taka camera z wbudowanym systemem detekcji - jesli to jest instalacja przemyslowa (poniewaz te kamery do tanich nie naleza).
heby
2020-10-23 16:10:41 UTC
Permalink
Post by Adam M
A moze sprobowac zabawy z kolorem oswietlenia w celu poprawienia widocznosci wskazowki
Mamy 2020, niech się tym zajmuje AI a nie jakies hardwareowe, a fe,
rozwiązania ;)
Mateusz Viste
2020-10-23 16:16:40 UTC
Permalink
Post by heby
Post by Adam M
A moze sprobowac zabawy z kolorem oswietlenia w celu poprawienia widocznosci wskazowki
Mamy 2020, niech się tym zajmuje AI a nie jakies hardwareowe, a fe,
rozwiązania ;)
AI są fajne, ostatnio trochę się tym bawiłem. Nie podoba mi się jednak
to, że kiedy raz zdarzy się że sieć neuronowa nie zachowa się tak, jak
powinna (czy jak człowiek tego oczekuje) - to nie wiadomo ani dlaczego,
ani jak to naprawić. No tak, można intensywnie testować, ale w
zależności od domeny przetestowanie 100% pokrycia może nie być
realistyczne.

Mateusz
heby
2020-10-23 16:52:42 UTC
Permalink
Post by Mateusz Viste
Post by heby
Mamy 2020, niech się tym zajmuje AI a nie jakies hardwareowe, a fe,
rozwiązania ;)
AI są fajne, ostatnio trochę się tym bawiłem. Nie podoba mi się jednak
to, że kiedy raz zdarzy się że sieć neuronowa nie zachowa się tak, jak
powinna (czy jak człowiek tego oczekuje) - to nie wiadomo ani dlaczego,
ani jak to naprawić.
Zupełnie jak u ludzi. Tak trzymać.
M.M.
2020-11-14 04:35:58 UTC
Permalink
Post by Mateusz Viste
Post by heby
Post by Adam M
A moze sprobowac zabawy z kolorem oswietlenia w celu poprawienia
widocznosci wskazowki
Mamy 2020, niech się tym zajmuje AI a nie jakies hardwareowe, a fe,
rozwiązania ;)
AI są fajne, ostatnio trochę się tym bawiłem. Nie podoba mi się jednak
to, że kiedy raz zdarzy się że sieć neuronowa nie zachowa się tak, jak
powinna (czy jak człowiek tego oczekuje) - to nie wiadomo ani dlaczego,
ani jak to naprawić.
Nie wiem co masz na myśli....

Jeśli sieć da złą odpowiedź i ktoś monitoruje system, to mamy dodatkowy
przykład który może dorzucić do danych uczących. Można sieć wytrenować
jeszcze raz na danych rozszerzonych o kolejny przykład. Teoretycznie można
uzyskać lepszą sieć trenując na zborze poszerzonym o sytuacje w których
sieć podawała błędne odpowiedzi. Ale to jest teoretycznie, bo w praktyce nie
jest taka dobrze. Wielokrotnie na danych, co do których byłem przekonany że
są lepsze, uzyskiwałem gorsze wyniki.
Post by Mateusz Viste
No tak, można intensywnie testować, ale w
zależności od domeny przetestowanie 100% pokrycia może nie być
realistyczne.
Zwykle nie jest.

Pozdrawiam
Mateusz Viste
2020-11-14 19:21:21 UTC
Permalink
Post by M.M.
Post by Mateusz Viste
AI są fajne, ostatnio trochę się tym bawiłem. Nie podoba mi się
jednak to, że kiedy raz zdarzy się że sieć neuronowa nie zachowa
się tak, jak powinna (czy jak człowiek tego oczekuje) - to nie
wiadomo ani dlaczego, ani jak to naprawić.
Nie wiem co masz na myśli....
Przykład: wytrenowałem sieć która ma robić "coś". Sprzedałem produkt
przemysłowemu klientowi. Działa. Do momentu, kiedy sieć wysypała
klientowi produkcję. Fakt, że sieć zawiodła, to jeden problem -
powiedzmy, mniejszy. Poważniejszy problem to wytłumaczyć klientowi
dlaczego, oraz sprawić że więcej nie będzie.
Post by M.M.
Jeśli sieć da złą odpowiedź i ktoś monitoruje system, to mamy
dodatkowy przykład który może dorzucić do danych uczących.
Jeden przykład chyba nie wpłynie na działanie sieci - tych przykładów
musi być raczej dużo więcej... i uważać, aby nie "przetrenować" AI.

AI to niewątpliwie ciekawy temat, ale zdecydowanie nie panaceum na
wszystko. Jeśli potrzebny determinizm i możliwość zrozumienia dlaczego
robot reaguje w ten a nie inny sposób - to AI odpada.

Mateusz
M.M.
2020-11-15 05:56:09 UTC
Permalink
Post by Mateusz Viste
Post by M.M.
Post by Mateusz Viste
AI są fajne, ostatnio trochę się tym bawiłem. Nie podoba mi się
jednak to, że kiedy raz zdarzy się że sieć neuronowa nie zachowa
się tak, jak powinna (czy jak człowiek tego oczekuje) - to nie
wiadomo ani dlaczego, ani jak to naprawić.
Nie wiem co masz na myśli....
Przykład: wytrenowałem sieć która ma robić "coś". Sprzedałem produkt
przemysłowemu klientowi. Działa. Do momentu, kiedy sieć wysypała
klientowi produkcję.
Nadal nie znam wystarczającej ilości szczegółów, ale może sieć wcześniej
dużo zarobiła, albo dużo zaoszczędziła względem alternatywnych rozwiązań, że
na pewne problemy można sobie pozwolić? Albo w ogóle nie ma lepszego
rozwiązania i trzeba z wadami sieci żyć?
Post by Mateusz Viste
Fakt, że sieć zawiodła, to jeden problem - powiedzmy, mniejszy.
Sztuczne (a i biologiczne też) sieci neuronowe z pewnym prawdopodobieństwem dają
błędne odpowiedzi. Zwykle mam N danych uczących. Dzielimy te dane na zbiór uczący o
rozmiarze NU i testowy o rozmiarze NT. I zwykle jak sieć na zbiorze uczącym da NU
poprawnych odpowiedzi, to na NT daje mniej poprawnych. Poza tym konieczność
testowania już nam zmniejsza zbiór uczący z N do NU.

Sieci według 'mojego autorskiego' pomysłu w bardzo wstępnych testach miały mniej
tego typu problemów. Ale nie mogę ich opatentować, więc nie podaję szczegółów.
Post by Mateusz Viste
Poważniejszy problem to wytłumaczyć klientowi
dlaczego, oraz sprawić że więcej nie będzie.
Jeśli sieć zostanie wyuczona na danych z ostatniego wypadku, to w takiej sytuacji tego
problemu już naprawdę nie powinno być, ale jak pisałem powyżej, sieć dająca 100%
poprawnych odpowiedzi na zbiorze uczącym, zwykle daje mniej poprawnych odpowiedzi
na zbiorze testowym.
Post by Mateusz Viste
Post by M.M.
Jeśli sieć da złą odpowiedź i ktoś monitoruje system, to mamy
dodatkowy przykład który może dorzucić do danych uczących.
Jeden przykład chyba nie wpłynie na działanie sieci - tych przykładów
musi być raczej dużo więcej... i uważać, aby nie "przetrenować" AI.
AI to niewątpliwie ciekawy temat, ale zdecydowanie nie panaceum na
wszystko. Jeśli potrzebny determinizm i możliwość zrozumienia dlaczego
robot reaguje w ten a nie inny sposób - to AI odpada.
Ja też się długo (może z 20 lat) zastanawiałem dlaczego dobrze wytresowany
pies działający w oparciu o biologiczną sieci neuronową, 1000 razy na 1000 przynosi
treserowi ręcznik, gdy treser o ręcznik go prosi. Podobnie dziecko dobrze
nauczone tabliczki mnożenia 1000 razy na 1000 dobrze poda wynik. Tymczasem
sieć neuronowa zrealizowana w krzemie, jeśli ze zbioru uczącego poda 100%
poprawnych wyników, to na zbiorze testowym skuteczność spada np. do 50%.
Nie rozumiałem dlaczego sztuczna sieć musi na zbiorze uczącym mieć skuteczność
np. 95%, aby i na zbiorze testowym miał wysoką skuteczność np. 95%. No i opracowałem
perceptron wielowarstwowy według swojego pomysłu - oczywiście też ma problemy, ale
z bardzo wstępnych badań wynikło, że ma ich mniej: znacznie szybciej się uczy,
znacznie szybciej działa, niekoniecznie traci ogólność gdy na zbiorze uczącym da
100% poprawnych odpowiedzi - czyli klienta można zapewnić że - w takiej samej
sytuacji - problem się już nie powtórzy.

W przypadku moich sieci, na początku wystarczy mniej danych, np. tyle, aby zapewnić, iż
sieć zadziała poprawnie przez godzinę. Potem dane z kraksy dodajemy do danych uczących i
próbujemy wyuczyć ponownie. System (statystycznie) powinien pracować dłużej, a w tej
konkretnej sytuacji mamy już 100% gwarancję że sieć da poprawną odpowiedź. W przypadku
klasycznego perceptronu wielowarstwowego nie ma takiej gwarancji, zwykle musi na danych
uczących mieć skuteczność niecałe 100%, aby i na zbiorze testowym miał niecałe 100%.

Pozdrawiam
Mateusz Viste
2020-11-16 08:42:43 UTC
Permalink
Post by M.M.
Nadal nie znam wystarczającej ilości szczegółów,
Bo i szczegółów niewiele mogę podać, gdyż pomysł wdrożenia AI do mojego
rozwiązania nigdy się nie zrealizował. Po kilku tygodniach męczenia
bibliotek AI, uczenia sieci na różnych wariantach i testów wszelakich
doszedłem do wniosków które podałem wcześniej w wątku. Tj. że to
ciekawa rzecz, ale jednak nie dla mnie, nie dla każdego i nie do
wszystkiego.

A konkretniej: kilka lat temu stworzyłem ten produkt:


Działa, klienci zadowoleni i w ogóle wszystko cacy. Ale jako że
ostatnio temat "AI" jest na czasie, to porobiłem nieco testów aby
zobaczyć czy dałoby się wdrożyć jakąś sieć neuronową do produktu,
zamiast obecnie relatywnie skomplikowanego algorytmu. Wartość dodana w
zasadzie byłaby żadna, ot, inne podejście - ale temat mnie ciekawił
więc obadałem.
Post by M.M.
ale może sieć wcześniej dużo zarobiła, albo dużo zaoszczędziła
względem alternatywnych rozwiązań, że na pewne problemy można sobie
pozwolić?
Tak, dlatego pisałem o tym, że jednostkowa pomyłka sieci to mniejszy
problem. Jednak po takiej wpadce moi klienci (przynajmniej ci
przemysłowi) oczekują, że produkt zostanie udoskonalony i do takiej
sytuacji w wersji n+1 już nie doprowadzi. Często wymagają również
formalnego RFO (Reason For Outage). Przy AI niczego wytłumaczyć się nie
da, żadnej analizy też przeprowadzić nie można. Można co najwyżej dodać
kolejny przykład do nauki i ufać, że następnym razem się uda.
Post by M.M.
Albo w ogóle nie ma lepszego rozwiązania i trzeba z wadami sieci żyć?
Żyć z AI nie trzeba - w takich (być może specyficznych, nie wiem)
zastosowaniach wystarczy robić po staremu - tj. proceduralny, dobrze
opisany algorytm. W warunkach kiedy użytkownik godzi się na jakiś
procent strat, a oczekiwana metoda działania jest bardzo trudna do
opisania ("odróżnij twarz owcy od ludzkiej"), to AI z pewnością jest
dobrym rozwiązaniem. Ja tylko opisuję moje wrażenia w kontekście
własnego doświadczenia, które wskazuje na to że czasem nie ma sensu
pchać się na siłę w AI (w odpowiedzi na wypowiedź Sebastiana, w której
sugerował że nowoczesne rozwiązanie problemu to AI).
Post by M.M.
Sieci według 'mojego autorskiego' pomysłu w bardzo wstępnych testach
miały mniej tego typu problemów. Ale nie mogę ich opatentować, więc
nie podaję szczegółów.
Szkoda.
Post by M.M.
Ja też się długo (może z 20 lat) zastanawiałem dlaczego dobrze
wytresowany pies działający w oparciu o biologiczną sieci neuronową,
1000 razy na 1000 przynosi treserowi ręcznik, gdy treser o ręcznik go
prosi. Podobnie dziecko dobrze nauczone tabliczki mnożenia 1000 razy
na 1000 dobrze poda wynik. Tymczasem sieć neuronowa zrealizowana w
krzemie, jeśli ze zbioru uczącego poda 100% poprawnych wyników, to na
zbiorze testowym skuteczność spada np. do 50%.
Żaden ze mnie specjalista w dziedzinie AI, ale czy to nie po prostu
dlatego, że psi hardware jest daleko szybszy od obecnych krzemowych
klocków? Sama ilość neuronów jest oczywiście znacząco wyższa, a i z
tego co rozumiem to struktury biologicznych neuronów są jednak znacznie
bardziej złożone od aproksymacji którą wykonują biblioteki ANN (m.in
dlatego, że prawdziwe neurony potrafią tworzyć między sobą nowe
połączenia, a komputerowa sieć te połączenia ma sztywne i tylko zmienia
wagi na funkcjach aktywacji poszczególnych neuronów).
Post by M.M.
W przypadku moich sieci, na początku wystarczy mniej danych, np.
tyle, aby zapewnić, iż sieć zadziała poprawnie przez godzinę. Potem
dane z kraksy dodajemy do danych uczących i próbujemy wyuczyć
ponownie.
Tylko, że te kraksy trzeba wykrywać... czyli albo opłacać człowieka,
który analizuje system na bieżąco, albo napisać proceduralny program
który sprawdza wszystko po AI. A i tak nie będzie gwarancji, że jutro
rano znów się system nie wysypie.

Mateusz
Maciek Godek
2020-11-16 09:03:51 UTC
Permalink
Ja też się długo (może z 20 lat) zastanawiałem dlaczego dobrze wytresowany
pies działający w oparciu o biologiczną sieci neuronową, 1000 razy na 1000 przynosi
treserowi ręcznik, gdy treser o ręcznik go prosi. Podobnie dziecko dobrze
nauczone tabliczki mnożenia 1000 razy na 1000 dobrze poda wynik.
Podejrzewam, że po prostu mało rzetelnie przeprowadzałeś pomiary.
[Tak naprawdę to podejrzewam, że wcale ich nie przeprowadzałeś]
M.M.
2020-11-16 12:29:37 UTC
Permalink
Post by Maciek Godek
Ja też się długo (może z 20 lat) zastanawiałem dlaczego dobrze wytresowany
pies działający w oparciu o biologiczną sieci neuronową, 1000 razy na 1000 przynosi
treserowi ręcznik, gdy treser o ręcznik go prosi. Podobnie dziecko dobrze
nauczone tabliczki mnożenia 1000 razy na 1000 dobrze poda wynik.
Podejrzewam, że po prostu mało rzetelnie przeprowadzałeś pomiary.
[Tak naprawdę to podejrzewam, że wcale ich nie przeprowadzałeś]
Pomiary czego? Odpowiedzi z tabliczki mnożenia? Po co mi pomiary, przecież to
przykład bardziej ogólnego zjawiska które jest oczywiste. Czy może pomiary
skuteczności sztucznych sieci neuronowych według mojego pomysłu? Tutaj ta
cecha o której mówiłem też jest oczywista, nawet jakbym nie robił zupełnie
żadnych pomiarów - ale minimalne testy zrobiłem.

Zdrowy, sprawny i wykwalifikowany człowiek niektóre zadania wykonuje wielokrotnie
bezbłędnie i to przez długie lata, i to nie tylko takie łatwe jak tabliczka mnożenia.
Kierowca podejmuje decyzje wiele razy na minutę, a może nawet na sekundę. Niektórzy,
co lepsi kierowcy chwalą się wieloletnią bezwypadkową jazdą. Natomiast sztuczna
sieć neuronowa zbudowana w oparciu o klasyczny perceptron wielowarstwowy może
dawać błędne odpowiedzi na zbiorze testowym i zwykle specjalnie przerywa się
naukę na etapie gdy sieć jeszcze daje błędy na zbiorze uczącym, aby minimalizować
ilość błędnych odpowiedzi na zbiorze testowym.

Pozdrawiam
Maciek Godek
2020-11-16 18:23:59 UTC
Permalink
Post by M.M.
Post by Maciek Godek
Ja też się długo (może z 20 lat) zastanawiałem dlaczego dobrze wytresowany
pies działający w oparciu o biologiczną sieci neuronową, 1000 razy na 1000 przynosi
treserowi ręcznik, gdy treser o ręcznik go prosi. Podobnie dziecko dobrze
nauczone tabliczki mnożenia 1000 razy na 1000 dobrze poda wynik.
Podejrzewam, że po prostu mało rzetelnie przeprowadzałeś pomiary.
[Tak naprawdę to podejrzewam, że wcale ich nie przeprowadzałeś]
Pomiary czego? Odpowiedzi z tabliczki mnożenia?
Tak. I przynoszenia ręcznika przez psa.
Post by M.M.
Po co mi pomiary, przecież to
przykład bardziej ogólnego zjawiska które jest oczywiste.
Jakiego bardziej ogólnego zjawiska?
I co jest w nim oczywiste?
Post by M.M.
Zdrowy, sprawny i wykwalifikowany człowiek niektóre zadania wykonuje wielokrotnie
bezbłędnie i to przez długie lata, i to nie tylko takie łatwe jak tabliczka mnożenia.
Kierowca podejmuje decyzje wiele razy na minutę, a może nawet na sekundę.
I popełniają błędy.
Post by M.M.
Niektórzy, co lepsi kierowcy chwalą się wieloletnią bezwypadkową jazdą.
To, że ludzie się czymś chwalą, raczej wynika z ludzkiej niedoskonałości, niż z ludzkiej doskonałości.

W każdym razie rynek ubezpieczeń nie ma powodów do narzekań.
M.M.
2020-11-18 20:44:47 UTC
Permalink
Post by Maciek Godek
Post by M.M.
Post by Maciek Godek
Ja też się długo (może z 20 lat) zastanawiałem dlaczego dobrze wytresowany
pies działający w oparciu o biologiczną sieci neuronową, 1000 razy na 1000 przynosi
treserowi ręcznik, gdy treser o ręcznik go prosi. Podobnie dziecko dobrze
nauczone tabliczki mnożenia 1000 razy na 1000 dobrze poda wynik.
Podejrzewam, że po prostu mało rzetelnie przeprowadzałeś pomiary.
[Tak naprawdę to podejrzewam, że wcale ich nie przeprowadzałeś]
Pomiary czego? Odpowiedzi z tabliczki mnożenia?
Tak. I przynoszenia ręcznika przez psa.
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 ;-)

Kilkoro dzieci uczyłem tabliczki mnożenia, alfabetu i jak się dobrze
nauczyły to nie popełniały błędów. 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. Kiedyś amatorsko tresowałem kota, łapał i aportował zabawkę
bezbłędnie.

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. 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 ;-)
Post by Maciek Godek
Post by M.M.
Po co mi pomiary, przecież to
przykład bardziej ogólnego zjawiska które jest oczywiste.
Jakiego bardziej ogólnego zjawiska?
I co jest w nim oczywiste?
To co napisałem wielkimi literami w powyższym akapicie.
Post by Maciek Godek
Post by M.M.
Zdrowy, sprawny i wykwalifikowany człowiek niektóre zadania wykonuje wielokrotnie
bezbłędnie i to przez długie lata, i to nie tylko takie łatwe jak tabliczka mnożenia.
Kierowca podejmuje decyzje wiele razy na minutę, a może nawet na sekundę.
I popełniają błędy.
Tak, to wszystko ciekawe kwestie, ale odbiegają od tego co chciałem
napisać.
Post by Maciek Godek
Post by M.M.
Niektórzy, co lepsi kierowcy chwalą się wieloletnią bezwypadkową jazdą.
To, że ludzie się czymś chwalą, raczej wynika z ludzkiej niedoskonałości, niż z ludzkiej doskonałości.
Kolejny temat rzeka.
Post by Maciek Godek
W każdym razie rynek ubezpieczeń nie ma powodów do narzekań.
Zgoda. Ale mam nadzieję że już jest jasne co mialem na myśli.


Pozdrawiam




Pozdrawiam
Maciek Godek
2020-11-18 22:10:44 UTC
Permalink
Post 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.
Można dokonywać eksperymentów pomimo tego, że się popełnia błędy.
Post 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?
Post 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.
Owe 95% (czy ile tam) skuteczności nie dotyczy powtarzania.
Wytrenowana 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)
Post 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?
Post 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 (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?
Post 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.

Na dużych zbiorach danych popełnianie błędów jest niemożliwe do uniknięcia.
Post by M.M.
Post by Maciek Godek
Post by M.M.
Po co mi pomiary, przecież to
przykład bardziej ogólnego zjawiska które jest oczywiste.
Jakiego bardziej ogólnego zjawiska?
I co jest w nim oczywiste?
To co napisałem wielkimi literami w powyższym akapicie.
Post by Maciek Godek
Post by M.M.
Zdrowy, sprawny i wykwalifikowany człowiek niektóre zadania wykonuje wielokrotnie
bezbłędnie i to przez długie lata, i to nie tylko takie łatwe jak tabliczka mnożenia.
Kierowca podejmuje decyzje wiele razy na minutę, a może nawet na sekundę.
I popełniają błędy.
Tak, to wszystko ciekawe kwestie, ale odbiegają od tego co chciałem
napisać.
Post by Maciek Godek
Post by M.M.
Niektórzy, co lepsi kierowcy chwalą się wieloletnią bezwypadkową jazdą.
To, że ludzie się czymś chwalą, raczej wynika z ludzkiej niedoskonałości, niż z ludzkiej doskonałości.
Kolejny temat rzeka.
Post by Maciek Godek
W każdym razie rynek ubezpieczeń nie ma powodów do narzekań.
Zgoda. Ale mam nadzieję że już jest jasne co mialem na myśli.
No właśnie nie jest :)
M.M.
2020-11-19 12:30:24 UTC
Permalink
Post by Maciek Godek
Post 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 :)
Post by Maciek Godek
Można dokonywać eksperymentów pomimo tego, że się popełnia błędy.
Oczywiście.
Post by Maciek Godek
Post 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.
Post by Maciek Godek
Post 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 Godek
Owe 95% (czy ile tam) skuteczności nie dotyczy powtarzania.
Nie rozumiem.
Post by Maciek Godek
Wytrenowana 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.
Post by Maciek Godek
Post 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.
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 Godek
Post 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.
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.
Post by Maciek Godek
Post 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. 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.
Post by Maciek Godek
Na 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.
Post by Maciek Godek
Post by M.M.
Post by Maciek Godek
Post by M.M.
Po co mi pomiary, przecież to
przykład bardziej ogólnego zjawiska które jest oczywiste.
Jakiego bardziej ogólnego zjawiska?
I co jest w nim oczywiste?
To co napisałem wielkimi literami w powyższym akapicie.
Post by Maciek Godek
Post by M.M.
Zdrowy, sprawny i wykwalifikowany człowiek niektóre zadania wykonuje wielokrotnie
bezbłędnie i to przez długie lata, i to nie tylko takie łatwe jak tabliczka mnożenia.
Kierowca podejmuje decyzje wiele razy na minutę, a może nawet na sekundę.
I popełniają błędy.
Tak, to wszystko ciekawe kwestie, ale odbiegają od tego co chciałem
napisać.
Post by Maciek Godek
Post by M.M.
Niektórzy, co lepsi kierowcy chwalą się wieloletnią bezwypadkową jazdą.
To, że ludzie się czymś chwalą, raczej wynika z ludzkiej niedoskonałości, niż z ludzkiej doskonałości.
Kolejny temat rzeka.
Post by Maciek Godek
W każdym razie rynek ubezpieczeń nie ma powodów do narzekań.
Zgoda. Ale mam nadzieję że już jest jasne co mialem na myśli.
No właśnie nie jest :)
Ok, spróbowałem jeszcze raz to opisać. Podsumowanie jest proste. Moje
sieci można uczyć na maksa, więc nie powtórzą błędu, a dlatego że trudniej
ulegają przeuczeniu, jest mniejsze prawdopodobieństwo że po takim wyuczeniu
na maksa dadzą całkowicie błędną odpowiedź na danych spoza zbioru
uczącego - np. gdy mucha wleci przed obiektyw kamery robota.

Pozdrawiam
Maciek Godek
2020-11-20 16:02:27 UTC
Permalink
Post by M.M.
Post by Maciek Godek
Post 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 Godek
Można dokonywać eksperymentów pomimo tego, że się popełnia błędy.
Oczywiście.
Post by Maciek Godek
Post 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.
Post by M.M.
Post by Maciek Godek
Post 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 Godek
Owe 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 Godek
Wytrenowana 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 Godek
Post 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.
Post 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 Godek
Post 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.
Przynajmniej 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.

Przykł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.

Dziecko, 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.
Post 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ć.

Przetrenowanie i błędna generalizacja u ludzi może wystąpić w takim samym stopniu, jak u sieci neuronowych.

Ja 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)

Jak 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".
Post by M.M.
Post by Maciek Godek
Post 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ń.
Post 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.
Post by M.M.
Post by Maciek Godek
Na 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%".
M.M.
2020-11-20 22:38:24 UTC
Permalink
Post by Maciek Godek
Post by M.M.
Post by Maciek Godek
Post 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 Godek
Można dokonywać eksperymentów pomimo tego, że się popełnia błędy.
Oczywiście.
Post by Maciek Godek
Post 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 Godek
Post by M.M.
Post by Maciek Godek
Post 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 Godek
Owe 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 Godek
Wytrenowana 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 Godek
Post 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 Godek
Post 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 Godek
Post 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 Godek
Przynajmniej 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 Godek
Przykł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 Godek
Dziecko, 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 Godek
Post 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 Godek
Przetrenowanie 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 Godek
Ja 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 Godek
Jak 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 Godek
Post by M.M.
Post by Maciek Godek
Post 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 Godek
Post 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 Godek
Post by M.M.
Post by Maciek Godek
Na 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
M.M.
2020-11-30 07:39:23 UTC
Permalink
Post by M.M.
Post by Maciek Godek
Post by M.M.
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
Fajnie się rozmawiało, trochę szkoda że wątek się urwał :(
slawek
2020-12-03 10:51:21 UTC
Permalink
1. Można AI zastosować do szukania rozwiązań, a potem to co
znajdzie weryfikować algorytmem deterministycznym. Czyli np. AI
wybiera optymalną trasę jazdy, ale jednocześnie "głupi" algorytm
sprawdza czy jest ona bezpieczna. Tak aby w najgorszym przypadku
system zaparkował w bezpieczny sposób - np. poprosił o decyzję
człowieka.

2. Błędy - obojętnie AI czy zwykłe bugi - są "acceptable" - jeżeli
ich skutki (w sensie ile i jakich szkód rocznie, czyli
"sumaryczna kwota strat") są mniej dotkliwe niż w rozwiązaniu
alternatywnym. Czyli nie narzekamy że AI rozwaliła produkcję...
Tylko sprawdzamy czy per saldo nie wyszliśmy nawet lepiej... Bo z
AI to było raz na rok, a bez AI to było raz na kwartał.


----Android NewsGroup Reader----
http://usenet.sinaapp.com/
M.M.
2020-12-04 01:04:51 UTC
Permalink
Post by slawek
1. Można AI zastosować do szukania rozwiązań, a potem to co
znajdzie weryfikować algorytmem deterministycznym. Czyli np. AI
wybiera optymalną trasę jazdy, ale jednocześnie "głupi" algorytm
sprawdza czy jest ona bezpieczna. Tak aby w najgorszym przypadku
system zaparkował w bezpieczny sposób - np. poprosił o decyzję
człowieka.
Oczywiście że można, a wraz z upływem czasu działania, napływa
więcej danych uczących. Teoretycznie na większej ilości danych
można zbudować lepszy system AI. W praktyce zależy jakie to jest
AI, np. mój program szachowy (oparty o jeden liniowy neuron) grał
gorzej gdy ilość danych była duża. Gdy próbowałem stosować
bardziej rozbudowane sieci, to grał gorzej, uczenie trwało długo... i
pojawiały się jeszcze inne problemy.
Post by slawek
2. Błędy - obojętnie AI czy zwykłe bugi - są "acceptable" - jeżeli
ich skutki (w sensie ile i jakich szkód rocznie, czyli
"sumaryczna kwota strat") są mniej dotkliwe niż w rozwiązaniu
alternatywnym. Czyli nie narzekamy że AI rozwaliła produkcję...
Tylko sprawdzamy czy per saldo nie wyszliśmy nawet lepiej... Bo z
AI to było raz na rok, a bez AI to było raz na kwartał.
Albo gdy w ogóle nie ma (dobrego) algorytmu, jak np. zadania związane z
rozpoznawaniem obrazu, choćby prowadzenie pojazdu. Generalnie zawsze
dopuszcza się dane rozwiązanie jeśli straty są mniejsze od zysków z
uwzględnieniem kosztu alternatywnego.


Pozdrawiam.
Mateusz Viste
2020-12-04 08:49:19 UTC
Permalink
Generalnie zawsze dopuszcza się dane rozwiązanie jeśli straty są
mniejsze od zysków z uwzględnieniem kosztu alternatywnego.
Niby tak, ale z mojego doświadczenia wynika, że biznes jednak tak nie
działa. Jeśli sprzedajesz klientowi program z serwisem, to niezależnie
od tego, ile mu ten program pozwala zaoszczędzić, klient będzie
wymagał, aby ew. usterki były wyjaśniane i usuwane, a produkt ulepszany
z czasem. Ja wskazuję tu tylko, że przy AI to staje się nieoczywiste,
gdyż mamy do czynienia z czarną skrzynką.

Mateusz
M.M.
2020-12-04 12:09:36 UTC
Permalink
Hmmm... klienci są różni. Jedni rozumieją że program oparty o AI ma
określone wady, inni nie rozumieją. Jeszcze inni, pomimo tego że
rozumieją, będą chcieli wykorzystać wady programu w negocjacjach.
Podstawą jest poinformowanie klienta że program czasami zachowa się
idiotycznie, wyjaśnić problem będzie można tylko statystycznie, a
naprawa sprowadzi się do poszerzenia zbioru uczącego i wyuczenia na
nowo. Podstawa to dobre zadanie do którego nie ma lepszego
rozwiązania niż oparte o AI.

Sieci zbudowane w oparciu o 'moją autorską' strukturę można
uczyć pewnym algorytmem, a ten algorytm z kolei ma przynajmniej
taką zaletę, że błędy popełnione w przeszłości na 100% nie zostaną
powtórzone w przyszłości. Interpretacja zachowania moich sieci też
jest trochę łatwiejsza niż klasycznego perceptronu wielowarstowego, ale
nadal trudniejsza niż interpretacja drzew decyzyjnych albo zbiorów reguł.

Pozdrawiam
slawek
2020-12-05 16:51:39 UTC
Permalink
2020-12-03 o 17:04 -0800, M.M. napisał:> Generalnie zawsze dopuszcza się dane rozwiązanie jeśli straty są> mniejsze od zysków z uwzględnieniem kosztu alternatywnego.Niby tak, ale z mojego doświadczenia wynika, że biznes jednak tak niedziała. Jeśli sprzedajesz klientowi program z serwisem, to niezależnieod tego, ile mu ten program pozwala zaoszczędzić, klient będziewymagał, aby ew. usterki były wyjaśniane i usuwane, a produkt ulepszanyz czasem. Ja wskazuję tu tylko, że przy AI to staje się nieoczywiste,gdyż mamy do czynienia z czarną skrzynką.Mateusz
Generalnie ;)

Generalnie to tzw. "biznes" to ludzie cwani, ale niezbyt
inteligentni. Ponieważ kombinują jak osiągnąć zysk i zdominować
rynek - taki lajf - to są nieufni, niby że jajogłowi chcą ich
wykiwać, bo konkurencja mogła ich nasłać. Niezbyt inteligentni w
znaczeniu: nie tracą czasu na rozważanie paradoksu
Eisteina-Podolskiego-Rosena, nie interesuje ich czy NP itd., bo
muszą działać a nie filozofować. Gdyby podkręcić im IQ to jak
Gandalf zachowywaliby equilibrium, a nie zajmowali się
biznesem.

Niemniej jednak ci Janusze błyskawicznie zaadaptowali się do
takich rzeczy jak bazy danych, marketing w Internecie, płatności
elektroniczne, GPS, JPK, a ostatnio także roboty (w jakimś tam
zakresie, skromniutko a jednak). Mają laptopy, komórki, tablety,
używają chmur, pykają w gry sieciowe, używają FB
itp.

A że są zawsze gotowi wymagać (więcej za mniej) - no cóż - tak to
już jest.


----Android NewsGroup Reader----
http://usenet.sinaapp.com/
M.M.
2020-12-07 07:33:27 UTC
Permalink
Post by slawek
2020-12-03 o 17:04 -0800, M.M. napisał:> Generalnie zawsze dopuszcza się dane rozwiązanie jeśli straty są> mniejsze od zysków z uwzględnieniem kosztu alternatywnego.Niby tak, ale z mojego doświadczenia wynika, że biznes jednak tak niedziała. Jeśli sprzedajesz klientowi program z serwisem, to niezależnieod tego, ile mu ten program pozwala zaoszczędzić, klient będziewymagał, aby ew. usterki były wyjaśniane i usuwane, a produkt ulepszanyz czasem. Ja wskazuję tu tylko, że przy AI to staje się nieoczywiste,gdyż mamy do czynienia z czarną skrzynką.Mateusz
Generalnie ;)
Generalnie to tzw. "biznes" to ludzie cwani, ale niezbyt
inteligentni. Ponieważ kombinują jak osiągnąć zysk i zdominować
rynek - taki lajf - to są nieufni, niby że jajogłowi chcą ich
wykiwać, bo konkurencja mogła ich nasłać. Niezbyt inteligentni w
znaczeniu: nie tracą czasu na rozważanie paradoksu
Eisteina-Podolskiego-Rosena, nie interesuje ich czy NP itd., bo
muszą działać a nie filozofować. Gdyby podkręcić im IQ to jak
Gandalf zachowywaliby equilibrium, a nie zajmowali się
biznesem.
Niemniej jednak ci Janusze błyskawicznie zaadaptowali się do
takich rzeczy jak bazy danych, marketing w Internecie, płatności
elektroniczne, GPS, JPK, a ostatnio także roboty (w jakimś tam
zakresie, skromniutko a jednak). Mają laptopy, komórki, tablety,
używają chmur, pykają w gry sieciowe, używają FB
itp.
A że są zawsze gotowi wymagać (więcej za mniej) - no cóż - tak to
już jest.
Przeczytałem, nawet przeczytałem z zaciekawieniem, ale niestety
nie umiem odpowiedzieć w kontekście sieci neuronowych, AI, uczenia
maszynowego. Może zapytam, czy do sztucznych sieci neuronowych
też się zaadoptowali?


Pozdrawiam

Maciej Sobczak
2020-11-15 21:56:58 UTC
Permalink
Post by M.M.
Jeśli sieć da złą odpowiedź i ktoś monitoruje system
Żartujesz sobie? Nie po to się inwestuje w AI, żeby cokolwiek monitorować. Do monitorowania są potrzebni ludzie a właśnie chodzi o to, żeby ich nie było.

Twoje CV zostało odrzucone na samym początku procesu rekrutacji. I tyle. Nie ma żadnego monitorowania, bo właśnie w tym systemie chodzi o to, żeby ograniczyć ilość CV, na które ma patrzeć (kosztowny) człowiek w HR. Monitorowanie byłoby dokładnym zaprzeczeniem tego celu. A wogle to pechowców nie przyjmujemy.

Twoje konto na fejsie zostało permanentnie zablokowane "z powodu naruszenia regulaminu". I tyle. Nie ma żadnego monitorowania, bo przy miliardzie użytkowników właśnie chodzi o to, żeby odciążyć support.

Itp.
Post by M.M.
to mamy dodatkowy
przykład który może dorzucić do danych uczących
Czyli chodziło o taką sieć na pracę domową na studiach? W takim razie OK.
--
Maciej Sobczak * http://www.inspirel.com
Adam M
2020-10-23 19:16:54 UTC
Permalink
Post by heby
Post by Adam M
A moze sprobowac zabawy z kolorem oswietlenia w celu poprawienia widocznosci wskazowki
Mamy 2020, niech się tym zajmuje AI a nie jakies hardwareowe, a fe,
rozwiązania ;)
Moze zapomnialem dodac ale kamery COGNEX maja wbudowane AI w kamere w celu przyspieszenia analizy obrazu - uzywanie kolorowego oswietlenia i filtrow tylko poprawia szanse na poprawny odczyt i decyzje. Przyklad z praktycznego zastosowania: Robot instaluje 32 nakretki zaciskowe (swage nut lub PEM) - blyszczacy srebrny kolor - na panelu aluminiowym (blyszczacy srebrny kolor) uzywajac specjalizowanej maszyny PEM - robot musi wyszukac prawna pozycje dla kazdej nakretki (3 rozne rozmiary) i potwierdzic poprawna instalacje (czasami nakretka sie maszynie wyslizguje - taka to troche niezgrabna maszyna :-D )- bez uzywania odpowiedniego oswietlenia i filtrow polaryzacji najlepsze AI wysiada (co mozna wywnioskowac z jenolitej lsniacej srebernej powiezchni).
Loading...