19 marca 2020

Identicon, avatar, robohash i inne graficzne reprezentacje danych

Widzieliście nieraz ikonki generowane z automatu i być może zastanawia Was, czym są, jak powstają, czy ich ilość jest skończona. W tym wpisie postaram się nakreślić ogólnie zarys koncepcji kilku powszechnych:

Naturalnie w/w identyfikatory można wygenerować sobie przy pomocy kodu OpenSource (linki pod w/w nazwami). To nie jest koniec, jeśli chodzi o eksplorację indenticon, oto lista na githubie do wyników wyszukiwania implementacji identicons w różnych językach programowania.

Rozpocznę kilkoma wygenerowanymi przykładami, które przybliżą, o czym chciałbym tutaj napisać:







Jak niektórzy zdążyli zauważyć najbliższy branży IT identicon to wizualizacja odcisku klucza OpenSSH. Kiedy generujemy klucz, jak pamiętacie pojawia się taka jak w animacji powyżej tekstowa reprezentacja.
Wszelkie identicony mają na celu pokazać w postaci obrazka odcisk/odpowiednik klucza lub napisu, który wprowadza się na wejście.

Jak pewnie niektórzy kojarzą, domyślny avatar w githubie jest właśnie generowany takim sposobem. Projekt WordPress również ma swoje odpowiedniki.
Często mamy sytuację, w której chcemy w łatwy sposób rozróżnić osoby, których tylko imię lub pseudonim znamy - tutaj przydają się identikony. Prawdopodobnie najczęstszymi ich przykładami są różne osoby na różnych platformach dyskusyjnych, takich jak czaty, fora, strony wiki lub systemy śledzenia incydentów/problemów.

Punktem wyjścia do wizualizacji dowolnych danych jest często funkcja skrótu lub z ang. hashowanie. Hashowanie w tym kontekście ma na celu przedstawienie wartości stałej długości na podstawie zmiennej długości danych wejściowych. Ta reprezentacja stałej długości jest tylko dużą liczbą, która może być następnie wykorzystana jako punkt wyjścia do rozróżnienia różnych informacji.

W momencie, kiedy mamy już liczbę możemy w powtarzalny sposób stworzyć reprezentację na jej podstawie. I tak dzięki trickom programistycznym, artystycznej fantazji i oszukiwaniu wzroku można ukrywać ale też przekazywać informację wizualną ludziom. Jest taki dość znaczący rozdział psychologii oraz dziedzin pochodnych t.j. doświadczenie użytkownika (ang. User Experience / UX), gdzie tzw. Pre-attentive Processing jest wykorzystywany. Zakładamy, że człowiek posiada ograniczoną percepcję wzrokową i aparat wzroku działa w sposób specyficzny. To oznacza, że niektórymi cechami obrazu można na odbiór informacji wpływać świadomie lub podświadomie.
Czyli np. bazując na mieszaniu koloru, nasycenia barwy, jasności, formy, położenie przestrzenne i przesunięcia można zbudować dość atrakcyjne wizualizację i ikony. Jest też ogromna dziedzina (ikono)grafiki komputerowej, która bazuje zasadniczo m. in. na tych założeniach.

Z punktu widzenia realizacji i algorytmów używanych w identicons, są to sprytne kilku linijkowe przesunięcia bitów/maskowania/mieszania z losowaniem wartości. Istnieją też opcje losowania elementów identicon z listy kilku obrazków bazowych i składanie w całość t.j. tutaj w MonsterID:



Kolejnym wartościowym przykładem użycia identiconów są portfele wirtualnej waluty (kryptowalutyEthereum:



Moim faworytem ze względu na zainteresowanie robotyką oraz atrakcyjny wygląd są RoboHASHe. 
Istnieje wiele gotowych generatorów t.j. np: ten dla RoboHash.



Obliczmy liczbę różnych robotów, które możemy wygenerować:
- Istnieje 5 różnych części ciała
- Istnieje 10 różnych kształtów dla każdej części ciała
- Istnieje 10 różnych kolorów robota
- Istnieje 10 różnych kolorów tła
W sumie to 10⁵ * 10 * 10 = 10 000 000 różnych robotów. 
Nie jest to nawet blisko liczby różnych adresów, która wynosi ~ 2²⁵⁶ = 10⁷⁷. 
Chociaż prawdopodobnie niemożliwe jest wygenerowanie czegoś zbliżonego do 10⁷⁷ różnych, 
dobrze rozpoznawalnych, dobrze zapamiętywalnych identiconów na powierzchni 128x128 pikseli, 
tylko dlatego, że zdolność ludzi do przetwarzania obrazów jest ograniczona. 
Dlatego identicons nigdy nie może być pomiarem bezpieczeństwa 
i nigdy nie zastąpi potrzeby dokładnego sprawdzenia adresu przed potwierdzeniem krytycznego transferu. 
Chociaż ich entropia jest pomijalna w porównaniu do przestrzeni adresowej, 
aby szybko uzyskać przegląd historii transakcji lub rozróżnić własne konta, identicons są bardzo cenne.

Warto zdawać sobie sprawę, że w branży IT potrzeba jest matką wynalazców i tak też w przypadku identiconów było - po prostu ludzie nie wgrywali swoich avatarów/ikonek, przez co pustka została zapewniona twórczością artystów-programistów :-)

Jeśli posiadacie swoje patenty/algorytmy na identicony, zapraszam do umieszczania w komentarzach linków do kodu lub gotowych generatorów.



Materiały:

  


22 lutego 2020

Czego sztuczna inteligencja AI wciąż nie może zrobić - Machine Learning to nadzieja

W naszym świecie tzn. ludzi, różnych relacji, sieci teleinformatycznych i maszyn obliczeniowej różnej skali na co dzień tworzymy szczególny rodzaj zjawisk: przyczynowo - skutkowe. Jest to zgodne z ogólnie przyjętą logiką, że zdarzenie lub działanie niesie za sobą skutki działa, czy też efekty. Tutaj dochodzimy do pewnego faktu: jeśli chcielibyśmy wyszkolić sztuczną inteligencję z dostrzegania tak specyficznej logiki, w której to na co dzień działamy my ludzie, droga jeszcze daleka.




Posiłkując się różnymi artykułami naukowi warto dodać, że puki sztuczna inteligencja nie będzie zbyt mądra, jeśli komputery nie pojmą przyczyny i skutku, możemy zapomnieć na długo, że użyjemy AI jako potężnego wsparcia w dziedzinie życia ludzi. Dlaczego, bo z pojęciem przyczyny i skutku mają problem nawet ludzie :-), więc skoro nie jesteśmy w stanie dokonać zapisu numerycznego/macierzowego tego zjawiska, maszyny liczące nie zastąpią intuicji, kolektywnej inteligencji i powszechnie nauczanej logiki.

Nauce zwanej informatyka wystarczyła niecałą dekada, aby komputery stały się wyjątkowo dobre w diagnozowaniu chorób, tłumaczeniu języków i transkrypcji mowy, podpowiadaniu trendów, wsparciu w kilku procentach naszych zawodów. Maszyny liczące mogą ograć ludzi w skomplikowanych grach strategicznych, tworzyć fotorealistyczne obrazy i sugerować przydatne odpowiedzi na wiadomości e-mail. Mogą rysować obrazki i generować teksty, mogą też podstawiać mowę jednego człowieka do mimiki innego.
Jednak pomimo tylu niesamowitych i imponujących osiągnięć sztuczna inteligencja ma rażące słabości.

Systemy uczenia maszynowego mogą zostać oszukane lub zdezorientowane sytuacjami, w których wcześniej nie były szkolone. Autonomiczny samochód zostaje zdezorientowany przez scenariusz, z którym ludzki kierowca mógłby sobie łatwo poradzić i wybrnąć z niego w ułamku sekund. System AI z trudem przeszkolony do wykonywania jednego zadania (powiedzmy, identyfikacja psów) musi zostać ponownie nauczony, aby robić coś innego (identyfikowanie koni). Podczas tego procesu może stracić część swojej bazy wiedzy, jaką posiadał w pierwotnym zadaniu. Informatycy nazywają ten problem „katastrofalnym zapominaniem”.

Te niedociągnięcia mają coś wspólnego: istnieją, ponieważ systemy AI nie rozumieją związku przyczynowego. Widzą, że niektóre zdarzenia są powiązane z innymi, ale nie ustalają, które rzeczy bezpośrednio powodują inne. To tak, jakbyś wiedział, że obecność chmur wiąże się z deszczem, ale nie wiedziałbyś, że właśnie dzięki chmurom deszcz w ogóle może spaść.

Zrozumienie przyczyny i skutku jest dużym aspektem tego, co nazywamy zdrowym rozsądkiem, i jest to obszar, w którym systemy AI „nie mają pojęcia”, mówią naukowcy t.j. Elias Bareinboim.

Pomysły naukowcóœ to np: przekazanie badaniom nad sztuczną inteligencją spostrzeżeń ze stosunkowo nowej nauki o przyczynowości, dziedzinie ukształtowanej w ogromnym stopniu przez Judeę Pearl, zdobywcę nagrody Turinga.


Jak to opisują w/w naukowcy Bareinboim i Pearl, zdolność AI do wykrycia korelacji - np. daktu, że chmury zwiększają prawdopodobieństwo deszczu - jest jedynie najprostszym poziomem przyczynowego rozumowania. To wystarczy, aby w ostatnim dziesięcioleciu rozwinąć technikę sztucznej inteligencji znaną jako głębokie uczenie się - Deep Learning.

Biorąc pod uwagę dużą ilość danych o znanych sytuacjach, ta metoda może prowadzić do bardzo dobrych prognoz. Komputer może obliczyć prawdopodobieństwo, że pacjent z pewnymi objawami ma określoną chorobę, ponieważ nauczył się, jak często tysiące, a nawet miliony innych osób z tymi samymi objawami cierpiały na tę chorobę. To zdecydowanie może wspierać nas w jednej dziedzinie i klasyfikacji jednej, konkretnej choroby, ale diagnozowanie nie jest banalną klasyfikacją.

Istnieje jednak rosnąca zgoda co do tego, że postęp w sztucznej inteligencji utknie w martwym punkcie, jeśli komputery nie będą w stanie lepiej radzić sobie z przyczyną. Gdyby maszyny mogły zrozumieć, że pewne rzeczy prowadzą do innych rzeczy, nie musiałyby cały czas uczyć się wszystkiego od nowa - mogłyby wziąć to, czego się nauczyły w jednej dziedzinie i zastosować to w innej. A gdyby maszyny mogły kierować się zdrowym rozsądkiem, moglibyśmy zaufać im, by podejmowali działania samodzielnie, wiedząc, że prawdopodobnie nie popełnią głupich błędów.

Dzisiejsza sztuczna inteligencja ma jedynie ograniczoną zdolność wnioskowania o wynikach danej akcji. W uczeniu się przez wzmocnienie, technice Reinforcement Learning, która pozwoliła maszynom opanować gry takie jak szachy i Go, system wykorzystuje rozległe próby i błędy, aby rozpoznać, które ruchy zasadniczo spowodują, że wygrają. Ale to podejście nie działa w bardziej chaotycznych ustawieniach w prawdziwym świecie. Nie pozostawia nawet maszyny z ogólnym zrozumieniem, w jaki sposób może grać w inne gry.

Jeszcze wyższym poziomem myślenia przyczynowego byłaby zdolność rozumowania, dlaczego tak się stało, i zadawania pytań "co się stanie jeśli?". Pacjent umiera podczas badania klinicznego: czy to wina medycyny eksperymentalnej czy coś innego? Spadają wyniki testów szkolnych: jakie zmiany zasad najbardziej je poprawiłyby? Tego rodzaju rozumowanie znacznie wykracza poza obecne możliwości sztucznej inteligencji.

Tego sposobu myślenia chcemy nauczyć maszyny, ale okazuje się, że dziedzina życia ludzi nie jest uproszczona do kilkunastu powiązań a do milionów prawdopodobnych powiązań. To dzięki logice i tzw. intuicji potrafimy działać skutecznie, dobrowolnie, zgodnie z naszymi zasadami życia. To jest zagadka dla sztucznej inteligencji i moim zdaniem kwestią czasu jest poznanie nowego kernela matematycznego, w których zachowanie ludzi poddaje się modelowaniu. Jeśli stworzymy dedykowaną dziedzinę, która być może będzie kolejną odnogą informatyki i psychologii, cybernetyki oraz kilku innych, będziemy w stanie kiedyś współdzielić ziemię z nowymi bytami AI.


Ciekawe linki:
 - https://www.artefakt.pl/blog/seo/algorytm-google-reinforcement-learning
 - https://xbpeng.github.io/projects/Robotic_Imitation/ + https://arxiv.org/pdf/2004.00784.pdf
 - https://landing.ai/landing-ai-creates-an-ai-tool-to-help-customers-monitor-social-distancing-in-the-workplace/
 - https://blog.edrone.me/pl/co-to-jest-deep-learning-i-jak-mozemy-go-wykorzystac/ + https://www.youtube.com/watch?v=6M5VXKLf4D4
https://www.technologyreview.com/2020/02/19/868178/what-ai-still-cant-do/

25 stycznia 2020

My Open source - visual learning generator - skrypt w Python generujący szablony PDF A4

W ramach serii "My Open Source" chciałbym przedstawić Wam mój nieskomplikowany skrypt do wsparcia nauki czytania dla dzieci i młodzieży, u których zalecane są ćwiczenia pracy z tekstem w celu poprawienia prędkości czytania. Koncept jest od dawna znany i potwierdzony w alternatywnych metodykach wsparcia prędkości nauki czytania u dzieci. Jeśli macie takie wyzwania ze swoimi dziećmi, zachęcam do codziennych ćwiczeń i motywowania dzieci do sprawniejszego czytania. W świecie informacji, to jak szybko przyswajamy wiedzę determinuje nasz byt, przetrwanie oraz niejednokrotnie jakość życia :-)

Co daje nam ten kawałek kodu - generuje plik PDF, który możemy wydrukować na kartce A4, aby dziecko wykonało ćwiczenia.

Idea wsparcia pracy z tekstem w metodzie visual learning jest na tyle banalna, że dziecko wśród wygenerowanych wyrazów musi znajdować kolejne litery alfabetu i zakreślać je długopisem podczas przeglądania tekstów.
Poniżej ćwiczenia zapisujemy czas pracy nad akapitem tekstu i liczymy na to, że czas ten będzie po kilku tygodniach pracy zmniejszał się.

Oto taki dokument A4 jako PDF generuje program do wsparcia visual learning napisany w języku programowania w Python:



Motywacją utworzenia tego kawałka praktycznego generatora była możliwość generowania przez innych potrzebujących takich arkuszy PDF A4 do wsparcia nauki czytania swojego dziecka.


https://github.com/bieli/visual-learning-generator


Jeśli zastosowaliście i chcecie przedyskutować wyniki/postępy komentujcie poniżej. Mam przejściowe doświadczenie z tym narzędziem.


...