Nie przejmuj się, mój perceptronku

 

Mój wstępniak na You Tube

 

A takie tam różne. Robię trochę badań nad zjawiskiem inteligencji zbiorowej i ponieważ trudno mi tak z biegu znaleźć dobre przykłady inteligencji zbiorowej w prawdziwym życiu, to zrobiłem sobie taki mały perceptron – czyli sieć neuronalną – który ma zastępować prawdziwe życie. Tak trochę w kontekście tej inteligencji zbiorowej, dalej przegryzam się przez Rozporządzenia Ministra Nauki i Szkolnictwa Wyższego z dnia 22 lutego 2019 roku w sprawie ewaluacji jakości działalności naukowej. Ogólnie się dzieje.

Interesuję się inteligencją zbiorową, ponieważ mam wrażenie, że nawet najdziwniejsze relacje międzyludzkie, takie na pozór naprawdę pogięte, mają jakiś swój funkcjonalny sens. Robimy coś na pierwszy rzut oka idiotycznego. Kiedy jednak pierwszy rzut oka ustępuje miejsca drugiemu, wtedy ten drugi widzi trochę inny kontekst i widzi sens w tym pozornym idiotyzmie. Weźmy takie przejście dla pieszych. Gdyby przyglądał się temu człowiek z dżungli, stwierdziłby: „Idiotyzm. Chodzą zawsze tak samo, po ścieżkach oznakowanych tak, że tylko niewidomy tapir by nie zauważył. Są przewidywalni jak fiks. Nic nie upolują. Zdechną z głodu. Przykre”. A jednak my nie zdychamy z głodu i te przejścia dla pieszych jakoś działają, tyle że w innym kontekście niż dżungla.

Kiedy używam sztucznej inteligencji, odkrywam mnóstwo ciekawych rzeczy na temat działania naszej inteligencji. Znacie zapewne tą zasadę, że nagrody działają na nas mocniej niż kary. Wzmocnienie pozytywne działa mocniej niż wzmocnienie negatywne. No i ja tu właśnie prowadzę badania na temat efektywności energetycznej gospodarek, w sensie na temat ilości PeKaBe (Produktu Krajowego Brutto) w przeliczeniu na 1 kilogram przeliczeniowy ropy naftowej w sensie finalnej konsumpcji energii, no i zrobiłem taki prosty perceptron wielowarstwowy (zaraz tam „wielo-„… trzy warstwy wszystkiego), no i ten perceptron kombinuje jak łączyć tą efektywność energetyczną z PeKaBe na głowę, z odsetkiem energii odnawialnych w całości konsumpcji finalnej i z różnymi innymi zjawiskami. W zasadzie, perceptron wielowarstwowy uczy się na podstawie porażek i związanych z tym kar. Perceptron się multiplikuje i próbuje, jaka mu wyjdzie efektywność energetyczna z tej jego chwilowej postaci. Jak się multiplikuje, to się nieuchronnie myli, ale umie się do błędu przyznać, a nawet mierzy ten błąd i następnie go wpuszcza do wartości swoich zmiennych wejściowych. Perceptron uczy się czegokolwiek tylko wtedy, kiedy się pomyli i w pewnym sensie karze sam siebie za pomyłkę.

Postanowiłem spróbować co będzie, kiedy dam mojemu perceptronowi wzmocnienie pozytywne. Dzielę błędy na korzystne i niekorzystne. Te pierwsze to efektywność energetyczna wyższa od oczekiwanej, te drugie to wręcz przeciwnie. Kiedy perceptron popełnia błąd korzystny, wtedy pozwalam mu wykorzystać go w całości w kolejnych rundach eksperymentalnych. Kiedy jednak popełnia błąd niekorzystny, to ja ten błąd zmniejszam i dopiero taki zmniejszony jest propagowany dalej. Wzmacniam wydźwięk sukcesów, zmniejszam wagę porażek.

No i co? No i w sumie to kicha. Mój standardowy eksperyment z perceptronem to 5000 prób, no i zawsze coś z tego wychodzi. Kiedy jednak wprowadzam do algorytmu mechanizm wzmacniania sukcesów i osłabiania porażek – czyli kiedy wprowadzam arbitralne rozróżnienie na sukcesy i porażki – to perceptron już po 30 ÷ 40 rundach eksperymentalnych stwierdza, że zjadł wszystkie rozumy. Przestaje generować błąd, fiksuje wszystkie zmienne i wszystko byłoby fajnie, gdyby ich nie fiksował na poziomach absurdalnie niskich. Wyszło mu, na ten przykład, że Austriacy mogliby mieć taką samą efektywność energetyczną, jak mają teraz, przy liczbie ludności o ¾ niższej od obecnej i generalnie ze wszystkim co się da o ¾ poniżej poziomów dzisiejszych. Jak mu dałem wzmocnienie pozytywne, to doradził Austriakom powrót do prymitywu. Dobrze, że mu nie wrzuciłem danych na temat Polski. Dopiero by wstyd był, a tak to co najwyżej może być incydent dyplomatyczny.

Jeszcze parę słów wyjaśnienia, dlaczego i jak stosuję perceptron wielowarstwowy, aby przedstawić działanie inteligencji zbiorowej. Opieram się na tzw. teorii roju (patrz np. Stradner et al 2013[1]), zgodnie z którą inteligencja zbiorowa przejawia się jako koordynacja. W ten sposób ograniczamy nieco nasze ambicje względem naszej własnej zbiorowej inteligencji. Fajnie byłoby myśleć, że jako zbiorowość dążymy do jakiegoś sensownego zbiorowego celu i robimy to rozsądnie. Zauważmy jednak, że ocena wartości naszego celu oraz ocena racjonalności drogi, którą przyjęliśmy wymagają odniesienia etycznego i prakseologicznego. Układ odniesienia musimy oczywiście stworzyć sami. Nikt inny tego za nas nie zrobi. Jeżeli sami tworzymy układ odniesienia dla oceny naszych celów i ścieżki do ich osiągnięcia, to tak trochę mało ambitnie. Sami sobie kadzimy, do jakich to fajnych celów dążymy albo też sami siebie wbijamy w kompleksy, że niby te nasze cele za mało ambitne.

W teorii roju zakłada się że wystarczy, jak jesteśmy skoordynowani. Możemy być skoordynowani na trzech poziomach: statycznym, dynamicznym skorelowanym i dynamicznym losowym. Koordynacja statyczna to tak, jak w synapsach albo w McDonaldzie. Jak podmiot A zrobi X, to podmiot B zawsze zrobi Y. Zawsze tak samo. Koordynacja dynamiczna skorelowana jest wtedy, jak podmiot B może zachować się różnie wobec działania podmiotu B, ale to różnie ma swój powtarzalny wzorzec. B czasami zrobi Y1, a czasami Y2, ale Y3 to już raczej nie, a to czy Y1 czy Y2 zależy od subtelnych różnic w zachowaniu X ze strony podmiotu A. Kiedy jednak podmiot A nawet nie wie, który inny podmiot zareaguje na jego zachowanie A, wtedy musi to zachowanie jakoś zasygnalizować szerszej zbiorowości. Może zareaguje B, a może C? Kto wie? Tak działa roznoszenie zarodników roślin i grzybów, czy też rozprzestrzenianie feromonów.  To jest koordynacja dynamiczna losowa.

Rój jest inteligentny, kiedy potrafi przystosować się do nowych okoliczności poprzez zmianę stopnia koordynacji. Eksperymentujemy z nowymi wariantami naszych nawyków i strategii. Na chwilę przechodzimy od koordynacji statycznej do dynamicznej skorelowanej. Ta ostatnia może się na chwilę przekształcić w koordynację dynamiczną losową. Wszystko po to, żeby wpuścić trochę świeżego powietrza i nauczyć się nowych wzorców zachowań. Nowe wzorce zachowań będą prawdopodobnie faworyzować nieco inny typ partnerów seksualnych, a tym samym nieco inną pulę genów. W ten inteligencja przekłada się na trwałą mutację genetyczną całego gatunku.

Sieć neuronalna wykorzystuje zbiór zmiennych. Kiedy są to zmienne ekonomiczne, takie jak PKB na głowę mieszkańca czy efektywność energetyczna, każdą z nich można traktować jako chwilowy przejaw zbioru decyzji podejmowanych przez dużą liczbę ludzi w dłuższym okresie czasu. Stopień wzajemnego powiązania tych decyzji można traktować jako stopień wzajemnej koordynacji zachowań, które stoją za takimi a nie innymi wartościami zmiennych. Związki pomiędzy liczbami są prostsze niż związki między ludźmi. Można te związki zmierzyć, np. przy pomocy odległości Euklidesowej: V(x1;x2) = [(x1 – x2)2]0,5.  Z tym pierwiastkiem z kwadratu to chodzi o zlikwidowanie możliwego minusa. Ujemna odległość źle wygląda w pomiarach. W tym wypadku należy pohamować zapędy wpojone na lekcjach matematyki. Mówili nam „upraszczaj !”. W tym wypadku, jeżeli uproszczę potęgi, to wyjdzie mi potęga „1”, a to z minusem nic nie zrobi. Nie upraszczamy więc nadmiernie, tylko grzecznie, po kolei, najpierw do kwadratu, a potem dopiero z tego pierwiastek kwadratowy.

Kiedy mam wiele zmiennych, wtedy dla każdej z nich mogę określić jej odległości Euklidesowe wobec wszystkich pozostałych i wyciągnąć średnią arytmetyczną z tych odległości. Potem z tych średnich arytmetycznych wyciągam kolejną średnią arytmetyczną i otrzymuję w ten sposób jedną z możliwych postaci funkcji spójności, która określa jak ciasne są relacje między zmiennymi.

Moje eksperymenty z perceptronem wielowarstwowym pokazały, że zmienia on wartość swojej funkcji spójności, a dokładnie zwiększa średnią odległość Euklidesową między swoimi zmiennymi wejściowymi po to, żeby zminimalizować błąd w szacowaniu zmiennej wyjściowej (wynikowej). W tym sensie perceptron zachowuje się jak inteligentny rój żywych istot. Daje sobie trochę dodatkowego luzu, żeby się czegoś nauczyć. Co ciekawe, kiedy w skład błędu odnotowywanego przez perceptron włączam także wartość jego funkcji spójności – czyli wzajemną odległość Euklidesową zmiennych – wtedy sieć neuronalna zachowuje się bardzo rożnie w zależności od zastosowanej funkcji aktywacyjnej. Kiedy stosuję funkcję sigmoidalną unipolarną, wtedy perceptron mniej się uczy i zachowuje większą spójność. Zachowuje się trochę jak człowiek, któremu nagle kazano zwracać uwagę na nieznane mu wcześniej zasady savoir-vivre’u. Zachowywać to się zachowuje, ale jakby tak z lekkim odcieniem kija w d**ie. Kiedy jednak zmieniam funkcję aktywacji na tangens hiperboliczny, wtedy perceptron zmuszony do obserwacji swojej własnej spójności zaczyna się bujać w krainę wyobraźni: znacznie zmniejsza swoją wewnętrzną spójność i wymyśla bardzo wysokie wartości zmiennych wejściowych.

No i ja tu tak gadu gadu i ni z tego, ni z owego prawie dokładnie wyjaśniłem, o co mi chodzi z tym perceptronem jako wyrazem inteligencji zbiorowej. Mam coś, co potrafi samo ze sobą eksperymentować i stopniowo zmniejszać błąd generowany przez te eksperymenty. Znaczy będą z tego czegoś ludzie. Jak się uczy, to rozluźnia swoją wewnętrzną spójność, czyli otwiera się na inherentny chaos egzystencji. Otwiera się różnie w zależności od zastosowanej funkcji aktywacyjnej oraz tego, czy ma zwracać uwagę na to, jak się otwiera. Jak pozwolę temu czemuś odróżniać sukcesy od porażek i wyciągać optymistyczne wnioski z niektórych odchyleń od wartości oczekiwanych, to nagle stwierdza, że już wszystko wie i że dość tego eksperymentowania.

 

No dobrze. Teraz ważne pytanie: co z tego? Jaka jest wartość naukowa tego narzędzia? Przypuszczam, że mogę w ten sposób tworzyć dość dokładne hipotezy dla badań empirycznych. Przy pomocy perceptrona symuluję, jakie mogą być oczekiwane wartości zmiennych empirycznych, w różnych warunkach uczenia się. Następnie sprawdzam dopasowanie wartości empirycznych do tych oczekiwanych i mogę określić, która hipoteza na temat zbiorowego uczenia się jest najbliższa prawdy.

 

Perceptron opiera się na akumulacji danych z przeszłości. To typ sztucznej inteligencji, który dokłada kolejne porcje informacji do już posiadanej wiedzy i w ten sposób coś optymalizuje. To jest mechanizm uczenia się, który wykracza poza potocznie pojmowany schemat « bodziec <> reakcja » (już raz o tym pisałem, w „Dwie kule w Kalifornii i wielebny Thomas Bayes”). W tej chwili chyba najbardziej fascynuje mnie to, w jaki sposób modyfikacja tej pamięci – czy też raczej zmiana sposobu zbierania informacji do pamięci – wpływa na proces uczenia się. Przedstawię teraz krótki eksperyment, jaki prowadzę przy pomocy mojego perceptronu, na danych dotyczących efektywności energetycznej gospodarki Polski.

 

Mój podstawowy model, który wykorzystałem już do jednego artykułu, zakłada że efektywność energetyczna gospodarki jest efektem oddziaływania następujących zmiennych:

 

  1. Współczynnika kapitału w bilansowych środkach trwałych przedsiębiorstw w przeliczeniu na 1 krajowe zgłoszenie patentowe; to nam mówi, jak przeciętnie dokapitalizowany jest każdy wynalazek zgłaszany do patentowania;
  2. Współczynnika udziału zagregowanej amortyzacji środków trwałych w PKB; ta zmienna mierzy, jakim obciążeniem dla gospodarki jest nadążanie za zmianą technologiczną;
  3. Liczby krajowych zgłoszeń patentowych na 1 mln mieszkańców, czyli stopnia innowacyjności społeczeństwa;
  4. Finalnego zużycia energii per capita;
  5. Odsetka ludności miejskiej w całości populacji;
  6. Zagregowanego PKB
  7. PKB per capita
  8. Liczby ludności

 

Biorę jedną i tą samą funkcję aktywacji neuronalnej: sigmoid unipolarny. Jako materiał wyjściowy, żeby perceptron oparty na tej funkcji cośkolwiek zakumał, daję mu dane empiryczne na temat powyższych zmiennych w Polsce, włącznie z samą efektywnością energetyczną, dla lat 1990 – 2014. Dane standaryzuję, czyli dla każdej zmiennej każdą wartość z osobna dzielę przez zaobserwowaną w jej rozkładzie wartość maksymalną. W efekcie każda zmienna ma wartości w przedziale 0 < x ≤ 1. Zaczynamy w roku 1990. Perceptron generuje wagi losowe, w przedziale 0 < w < 1 dla każdej zmiennej. Mnoży zestandaryzowane wartości zmiennych przez te wagi losowe i suma iloczynów „xi*wi” stanowi złożony argument „x” dla funkcji sigmoidalnej unipolarnej. Funkcja zwraca jakąś lokalną wartość i jakąś lokalną pochodną, dla roku 1990. Biorę rzeczywistą, zestandaryzowaną wartość zmiennej wynikowej – efektywności energetycznej dla roku 1990 – i odejmuję od niej wartość zwróconą przez funkcję aktywacji. Tą różnicę mnożę przez lokalną pochodną i mam lokalny błąd ważony znaczeniem lokalnej zmiany wartości (czyli pochodnej).

 

Swoją drogą, na boku, obliczam średnią arytmetyczną dla odległości Euklidesowych każdej zmiennej, w roku 1990, od wszystkich pozostałych. Potem z tych średnich arytmetycznych wyciągam kolejną średnią arytmetyczną, a następnie obliczam jej odwrotność, czyli 1/V(x). To jest ogólna funkcja spójności mojego perceptronu.

 

Dalej, począwszy od roku 1991 i dalej w przyszłość, mam jeden stały sposób postępowania – czyli podstawowy schemat uczenia się mojego perceptronu – oraz kilka możliwych wariacji na ten główny temat. Co do zasady, w roku 1991, perceptron bierze zestandaryzowaną wartość każdej zmiennej, zarówno wynikowej efektywności energetycznej i jak i zmiennych wejściowych (a – h), dodaje do tej empirycznej wartości te lokalny błąd ważony pochodną dla roku poprzedniego – 1990 – i dalej tak samo, czyli wagi losowe, suma iloczynów zmiennych wejściowych przez wagi losowe jako złożony argument dla funkcji aktywacji neuronalnej itd. To się nazywa propagacja błędu.

 

W ten sposób, dla każdego roku od 1991 do 2014, perceptron buduje stopniowo coraz bardziej odchyloną od rzeczywistości wersję wydarzeń. Daje to 2014 – 1990 = 24 rundy eksperymentalne, podczas których perceptron twórczo uczy się na danych empirycznych.

Począwszy od rundy 25 i dalej, perceptron już nie ma danych empirycznych jako układu odniesienia. Wtedy zaczyna powtarzać tą samą operację na swojej własnej, zmodyfikowanej wersji roku 2014. Nadbudowuje na tym ostatnim rzeczywistym zdarzeniu swoją całkowicie własną wersję wydarzeń, wciąż według tego samego mechanizmu dodawania błędu zaobserwowanego w bezpośrednio poprzedzającej przeszłości.

 

Teraz możliwe modyfikacje. Pierwsza polega na obserwacji własnej spójności. W każdej kolejnej rundzie eksperymentu, poza dodawaniem błędu z poprzedniej rundy, perceptron dodaje średnią spójność tej konkretnej zmiennej z pozostałymi zmiennymi (jej średnią odległość Euklidesową od pozostałych zmiennych), zaobserwowaną w rundzie poprzedniej. Innymi słowy, perceptron zapamiętuje, jak daleko była ta konkretna zmienna od pozostałych. Potem jak w scenariuszu podstawowym: wagi losowe, suma iloczynów itede.

 

Druga modyfikacja to rozróżnienie na sukcesy i porażki. Obliczam, o ile wzrosła standaryzowana efektywność energetyczna gospodarki Polski w okresie 1990 – 2014. Wychodzi (11,77694401 – 9,673094195) / 11,77694401 = 0,178641404. Dalej dzielę to przez 24 lata, czyli 0,178641404 / 24 = 0,007443392. To jest próg odniesienia „y*” dla odróżnienia sukcesu od porażki. Błąd „e” zwracany przez funkcję aktywacji perceptronu i spełniający warunek „e > y*” jest sukcesem, każda inna jest porażką. Daję więc mojemu perceptronowi do zrozumienia: jeżeli wygenerowałeś błąd większy od średniego rocznego przyrostu efektywności energetycznej, to brawo. Jak nie, to niestety, ale wtopiłeś.

Teraz pytanie, jak mu to powiedzieć. Niektórzy ludzie źle reagują na krytykę. Nie wiem, jak zareaguje sztuczna inteligencja. Muszę sprawdzić. Na początek robię tak, jak doradza psychologia: zamiast krytykować, pokaż konsekwencje sukcesu oraz porażki. Mogę te konsekwencje wzmocnić w jednym albo w drugim kierunku, czyli wzmocnić sukcesy kosztem porażek („nieważne, że nie zająłeś pierwszego miejsca, perceptronku, ten przed Tobą i tak był na koksach, ważne jest uczestnictwo i rywalizacja”) albo też mogę wzmocnić porażki kosztem sukcesów („Ty łajzo, jak mogłeś tak polec!”). Kiedy chcę wzmocnić pamięć o sukcesach i osłabić pamięć o porażkach, to robię na przykład tak, że kiedy e > y*, to wtedy pozwalam perceptronowi dalej propagować błąd „e”, kiedy jednak e ≤ ∆y*, to wtedy pozwalam propagować tylko jakiś ułamek błędu „e”. Kiedy chcę wzmocnić pamięć o porażkach kosztem pamięci o sukcesach, to robię odwrotnie. Wszystko to mogę ująć elegancko w ramy jednego warunku logicznego:

 

>> jeżeli (e > y*), to propaguj ß1*e, a jeżeli (e ≤ y*), to propaguj ß2*e.

 

Parametry ß1 oraz ß2 określają odpowiednie wzmocnienie pamięci o sukcesach oraz o porażkach. Jeżeli ß1 > ß2, to wzmacniam wspomnienie sukcesu („W 1970-tym tośmy im pokazali!”). Jeżeli ß1 < ß2, wzmacniam z kolei wspomnienie porażki („Nigdy nie zapomnimy tego, jak ONI nas skrzywdzili!”). Konstruuję pięć scenariuszy:

 

Scenariusz 0: Bez uczenia się na spójności, bez nagrody

Scenariusz A.1: Bez uczenia się na spójności, wzmocnienie nagrody *2 ó ß1 = 1, ß2 = 0,5

Scenariusz A.2: Bez uczenia się na spójności, wzmocnienie nagrody o 5% ó ß1 = 1, ß2 = 0,95

Scenariusz B.1: Uczenie się na spójności, wzmocnienie nagrody *2 ó ß1 = 1, ß2 = 0,5

Scenariusz B.2: Uczenie się na spójności, wzmocnienie nagrody o 5% ó ß1 = 1, ß2 = 0,95

 

Dla każdego z pięciu scenariuszy obserwuję funkcję spójności mojego perceptronu – czyli to, na ile zachowuje się jak inteligentny rój – oraz procent energii odnawialnych w konsumpcji finalnej energii ogółem. Obserwacja obejmuje 100 rund eksperymentalnych: interesuje mnie przede wszystkim to, jak perceptron zaczyna się uczyć. Tak, dla perceptrona wielowarstwowego 100 rund eksperymentalnych to zaledwie rozgrzewka. To jest chyba największa odmiana w stosunku do moich poprzednich eksperymentów z tym perceptronem. Wcześniej moja standardowa obserwacja obejmowała 5000 rund eksperymentalnych, czyli okres 50 razy dłuższy (dłuższy w sensie zgromadzonego doświadczenia, a nie upływu czasu – perceptron nie ma pojęcia czasu). Ten eksperymentalny zoom przyniósł bardzo ciekawe wyniki, które pokazuję na dwóch wykresach poniżej i komentuję dalej, pod wykresami.

 

Widać wyraźnie dwa etapy uczenia się perceptronu. Pierwszy etap to ten, kiedy perceptron pracuje na danych empirycznych i tylko trochę je tak sobie przekształca. W tym etapie wszystkie pięć scenariuszy uczenia się idzie łeb w łeb. Wszystkie pięć zmniejsza wartość funkcji spójności – a więc usztywnia strukturę logiczną i czyni ją mniej podatną na zmiany adaptacyjne – a jednocześnie zwiększa udział energii odnawialnych w ogólnej konsumpcji. W momencie kiedy perceptron przechodzi we fristajl, czyli kiedy już sam buduje wartości danych wejściowych na podstawie zapamiętanych informacji o rzeczywistości, wszystko się zmienia. Scenariusz 0 oraz scenariusze A.1 i A.2 utrzymują sztywną strukturę logiczną (niską wartość funkcji spójności) oraz mniej więcej ten sam mix energetyczny, w sensie względem odnawialnych. Z kolei scenariusze B.1 i B.2 wracają częściowo do poprzedniej, nieco luźniejszej struktury logicznej perceptronu (wartość funkcji spójności zwiększa się), a jednocześnie generują coraz większy odsetek energii odnawialnych.

 

Kiedy więc robię zbliżenie na 100 pierwszych rund eksperymentalnych, obserwuję coś przeciwnego niż relacje zaobserwowane dla 5000 rund. Perceptron wyposażony w zdolność uczenia się na swojej własnej spójności zachowuje się jak o wiele bardziej inteligentny rój niż perceptron bez takiej zdolności. Przy 5000 rund perceptron obserwujący własną spójność wydawał się mieć kij w tyłku, a tutaj, przy zbliżeniu na pierwsze 100 rund, jest dokładnie odwrotnie: jest bardziej elastyczny i jakby śmielszy i więcej fantazji ma i w ogóle. Co ciekawe, perceptron operujący stosunkowo niewielkim rozróżnieniem między karą a nagrodą  –  jeżeli (e > y*), to propaguj e, a jeżeli (e ≤ y*), to propaguj 0,95*e – buja się bardziej niż ten, który operuje rozróżnieniem jak jeden do dwóch.

 

Najważniejszym czynnikiem różnicującym procesy uczenia się okazuje się być obserwacja własnej spójności. Jeżeli traktuję perceptron jako przedstawienie rzeczywiście działającej inteligencji zbiorowej, społeczność wyposażona w zdolność wyciągania wniosków z własnej spójności może nauczyć się więcej, niż społeczność pozbawiona takiej zdolności. No jednak musi być jakieś jednakowoż. Jednakowoż, kiedy sięgam do rundy eksperymentalnej 5000, obraz się zmienia. Perceptron wyposażony w zdolność obserwacji własnej spójności generuje odsetek energii odnawialnych ok. 16,5%. Z kolei ten, który ignoruje własną spójność osiąga ok. 17,5%. Coś się zmienia gdzieś po drodze między setną rundą eksperymentalną, a tą pięciotysięczną. Jest taka masa krytyczna pamięci zgromadzonej przez perceptron, która w pewnym sensie odwraca jego działanie. Ciekawe.

[1] Stradner, J., Thenius, R., Zahadat, P., Hamann, H., Crailsheim, K., & Schmickl, T. (2013). Algorithmic requirements for swarm intelligence in differently coupled collective systems. Chaos, Solitons & Fractals, 50, 100-114.

Chaos jak po zbóju, czyli karteczki dla premiera

Mój wstępniak na You Tube

Jedną z sytuacji, kiedy ktoś musi znaleźć swoją ścieżkę w przestrzeni społecznej jest tworzenie własnego biznesu. Najlepiej mogę sprawdzić jak moje nauczanie może pomóc w tworzeniu czyjegoś biznesu, jeżeli sam co jakiś czas wezmę się za przygotowanie biznes planu. Temu właśnie chciałbym poświęcić przynajmniej kilka wpisów w polskojęzycznej wersji mojego bloga naukowego. Mam dwa, autentyczne i nieudawane pomysły na biznes i staram się je rozwinąć. Jeden to projekt, który nazwałem BeFund, przedsięwzięcie bliskie mojej pracy naukowej. Jest to połączenie laboratorium behawioralnego z funduszem inwestycyjnym dla startupów. Podstawowa idea tego projektu opiera się na obserwacji, że najwięcej porażek startupów technologicznych ma miejsce w fazie dostosowania technologii do potrzeb użytkowników i utrzymania konkurencyjności tej technologii. Laboratorium behawioralne miałoby służyć optymalizacji cech użytkowych technologii, na których startup się opiera. Dla tego projektu mam już nakreślony biznes plan w języku angielskim i teraz postaram się przedstawić go w polskojęzycznej ścieżce mojego pisania.

Cała idea projektu BeFund wzięła się z mojej fascynacji zjawiskiem tzw. Smart Cities, czyli inteligentnych miast. Ta fascynacja ma z kolei swoje korzenie w innej, tej związanej ze zmianami technologicznymi i relacją pomiędzy energią, technologią – szczególnie elektroniką i technologiami cyfrowymi – a ludzką cywilizacją. Wracam jednak do projektu BeFund. Na początek: co to jest laboratorium behawioralne i po kiego licha tworzyć kolejne? Otóż jest to laboratorium przeznaczone do badania ludzkich zachowań, w tym szczególnie interakcji z nowymi technologiami. „Zachowanie” rozumiem szeroko. Sposób podejmowania decyzji to wzorzec zachowań i ewentualne przyspieszenie oddechu podczas podejmowania niektórych z tych decyzji też jest wzorcem zachowań. Zauważcie: płynnie przeszedłem od pojęcia zachowania do wzorca zachowań. Nawiązuję w ten sposób do jednej z podstawowych zasad nauk społecznych: my, ludzie, działamy według powtarzalnych wzorców, których uczymy się w drodze kolejnych eksperymentów. Piszę więcej na ten temat w moim poprzednim wpisie pt. „Dwie kule w Kalifornii i wielebny Thomas Bayes”.

Kiedy zacząłem się interesować rozwojem inteligentnych miast, zauważyłem kilka interesujących zjawisk. Inteligentne miasta rozwijają się w dużej mierze poprzez inkubację startupów technologicznych (czyli świeżo zakładanych, z reguły stosunkowo niewielkich firm ukierunkowanych na komercjalizację nowych technologii). Startupy technologiczne odznaczają się stosunkowo wysoką śmiertelnością: większość z nich pada po 2 – 3 latach albo zostaje wchłonięte przez duże korporacje. Technologie lansowane przez startupy są najczęściej swego rodzaju użytkowymi mutacjami jakiejś szerszej bazy technologicznej. Dla przykładu, taką modną ostatnio bazą technologiczną jest język programowania Python. Wiele aplikacji FinTech, lansowanych przez startupy, jest opartych właśnie na nim.

To trochę jak wiele konkurujących ze sobą domów mody. Mają dostęp do tych samych materiałów i tych samych technik krawieckich. Różnica tkwi w koncepcji estetycznej, czyli w dopasowaniu tych materiałów i tych technik do oczekiwań określonej grupy klientów, a jednocześnie trzeba mieć kreatywny pazur. Ze startupami technologicznymi jest tak samo. Opieramy się na jakieś szerokiej bazie technologicznej i coś wymyślamy. To coś musi oryginalne i prowokujące ciekawość, lecz jednocześnie funkcjonalnie dopasowane do określonego użytkownika. Taki mały paradoks tu mamy: z jednej strony musimy dać funkcjonalność niecodzienną i prowokującą, ale z drugiej strony, pod powłoką prowokacji i unikalności, to coś musi być dopasowane do wyuczonych, rutynowych wzorców zachowań po stronie użytkowników.

Tu pojawia się czysto praktyczna strona mojego pomysłu BeFund. Kontrolowane środowisko eksperymentalne, które twórcy startupów technologicznych mogliby wynajmować na godziny po to, aby testować interakcje tworzonych rozwiązań technologicznych z użytkownikami, byłoby jak znalazł. W ten sposób znacznie zmniejsza się ryzyko, że jakaś funkcjonalność dozna porażki biznesowej na skutek niewystarczającej konkurencyjności dla użytkownika.

Przykład eksperymentu behawioralnego ? A proszę bardzo. Każda technologia musi być niezawodna. Jednym z aspektów niezawodności jest odporność na błędy popełniane przez użytkownika. Błąd to sytuacja, kiedy użytkownik powinien wykonać działanie A, lecz zamiast tego wykonuje działanie B. Umieszczamy osoby reprezentatywne dla tego, co pokolenie młodsze od mojego określa mianem „targetu”, w kontrolowanym środowisku eksperymentalnym. Są sam na sam z testowaną technologią. Poddajemy ich celowej dystrakcji, czyli rozpraszamy ich uwagę. W pomieszczeniu, gdzie się znajdują jest np. bardzo gorąco albo bardzo zimno. Miga tam ostre światło. Gra głośna muzyka. Zawieszony na ścianie telewizor wyświetla coś strasznego, np. kolejny wiec wyborczy albo kolejny przegrany mecz polskiej drużyny w jakąś piłkę (rodzaj piłki do wyboru). Można te bodźce mnożyć do woli.

Teraz kalibrujemy. Dajemy uczestnikom eksperymentu jakieś zadania wymagające koncentracji uwagi: połącz punkty na rysunku, rozwiąż zadania matematyczne, dopasuj elementy puzzla itp. Najpierw robimy to w środowisku sprzyjającym koncentracji uwagi – nie ma wiecu wyborczego w telewizorze na ścianie. Zapisujemy wyniki osiągnięte przez uczestników eksperymentu. Potem stopniowo podkręcamy strumień bodźców i zwiększamy dystrakcję. Robimy to np. w pięciu kolejnych stopniach. Na każdym stopniu dystrakcji dajemy uczestnikom do wykonania identyczny zestaw zadań (oczywiście puzzle jest inny i działania matematyczne są inne, ale struktura zadania jest taka sama) i mierzymy ich wyniki.

W ten sposób kalibrujemy nasze środowisko eksperymentalnie, tzn. określamy różne poziomy dystrakcji u naszych uczestników. Może być spokój i porządek – stopień pierwszy – albo trochę nieporządku, tak jak pod koniec dnia w centrum rozliczeniowym – stopień drugi – albo sporo nieporządku, jak tuż przed rodzinnym wyjazdem na wakacje – stopień trzeci – albo znowu tak, jak wtedy, kiedy nazajutrz rano po solidnej imprezie trzeba się wybrać do pracy na 6:30 rano – stopień czwarty – albo wreszcie tak, jak wtedy kiedy naszym szefem jest premier i właśnie się dowiedział, że nie przygotowaliśmy mu tych małych karteczek do przemówienia, które ma wygłosić za 5 minut – to jest stopień piąty, czyli chaos po zbóju.

Teraz nasi uczestnicy zaczynają korzystać z testowanej technologii. Obserwujemy błędy, jakie popełniają na kolejnych stopniach dystrakcji. Interesuje nas kilka różnych rzeczy. Po pierwsze, ważny jest katalog możliwych błędów. Twórcy testowanej technologii mogą do nich dopasować funkcjonalności typu „głupi Jasio”. Najdalej idącym rozwiązaniem jest automatyzacja tego konkretnego fragmentu procesu tak, żeby użytkownik nawet nie miał okazji podejmować decyzji prowadzących do popełnienia błędu. Innym rozwiązaniem jest sugestia ukierunkowana na podświadomość, np. wyeksponować graficznie to, co użytkownik powinien kliknąć na ekranie i raczej zmniejszyć albo schować w mniej widocznym menu to, czym w danej chwili raczej nie powinien się zajmować jak nie chce żeby mu się apka zawiesiła. Największe zaufanie do użytkowników wykazujemy wtedy, kiedy po prostu umieszczamy sugestie ukierunkowane na świadomość, jak na ekranach zamówienia w McDonaldzie: „czy jesteś pewien/pewna że to jest Twoje zamówienie ?” itp.

Wyposażamy kolejną generację prototypów w tego typu zabezpieczenia i testujemy ponownie. Ideałem jest dojście do zerowej liczby błędów użytkowników na najwyższym poziomie dystrakcji. Eksperyment może jednak wykazać, że realistycznie możliwy do osiągnięcia jest nieco niższy poziom doskonałości. Pozwala nam to określić, jaka liczba jakiego rodzaju błędów jest realistycznie do przewidzenia w typowej interakcji naszego reprezentatywnego targeta z definitywną, lansowaną na rynku technologią.

Tak sobie pomyślałem, że takie laboratorium behawioralne, jakie chciałbym stworzyć w projekcie BeFund może już na wejściu oferować twórcom nowych technologii środowisko eksperymentalne skalibrowane – i to starannie – pod kątem możliwych stopni dystrakcji. To byłoby jak znalazł do testowania różnych aspektów technologii. Niezawodność to jedno, ale szybkość to drugie. Jak szybko nasze króliki eksperymentalni (królicy eksperymentalni ?) zarejestrują 100 faktur w systemie rachunkowo – księgowym, na różnych stopniach dystrakcji ? Jakie błędy przy tym popełnią ? No i jeszcze jedno: jak bardzo będą kontent, albo wręcz przeciwnie, po wykonaniu całego ciągu operacji ?

Ta ostatnia kwestia, czyli subiektywne doznania uczestników eksperymentu, jest istotna dla procesów uczenia się, o których pisałem już wcześniej, we wpisie pt. „Dwie kule w Kalifornii i wielebny Thomas Bayes”. Kiedy uczestnik eksperymentu przechodzi sekwencję działań, w których może popełniać błędy, jest to sekwencja sukcesów i porażek, która prowadzi do wyćwiczenia określonych wzorców zachowań lub do uświadomienia, że trzeba wykształcić nowe wzorce, lepiej dopasowane do określonego kontekstu. Pojawia się tutaj subtelne rozróżnienie między obiektywną a subiektywną definicją sukcesu lub porażki.

Każda technologia ma jakiś obiektywnie mierzalny wzorzec optymalnego wykorzystania: taki to a taki czas trwania procesu, taka to a taka liczba powtórek w poszczególnych działaniach, taka to a taka liczba błędów poszczególnych typów itd. Można zdefiniować sukces w korzystaniu z tej technologii, np. w jednokrotnym przejściu procesu księgowania faktury, jako określony stopień zbieżności z wzorcem optymalnego działania. Wszystko inne jest porażką. Sukcesem jest np. wykonanie określonego działania bezbłędnie lub w oznaczonym minimalnym czasie. Błędy w wykonaniu tych działań lub dłuższy od wyznaczonego czas wykonania to porażka.

Wiele technologii, zwłaszcza tych obsługiwanych cyfrowo przez użytkownika, zawiera mechanizmy natychmiastowej kompensacji błędów popełnianych przez tego ostatniego lub też natychmiastowego wspierania użytkownika. Podręcznikowym przykładem jest system kontroli trakcji w samochodzie albo też znana wielu osobom funkcjonalność cyfrowa, gdzie system kupowania czegoś przez Internet pyta czy wypełnić dany formularz wcześniej zapisanymi danymi użytkownika. W obecności takich rozwiązań pojawia się różnica między obiektywnie pojętym sukcesem lub porażką z jednej strony, a subiektywnym postrzeganiem sukcesu i porażki przez użytkownika technologii. Ten ostatni często nie zauważa że popełnił błąd albo że działał z nieoptymalną sprawnością, gdyż technologia „zamaskowała” to.

Wyobraźmy sobie sekwencję działań w 12 krokach, wykonywaną w środowisku eksperymentalnym. Dla każdego kroku, poza obiektywną obserwacją pytamy uczestnika eksperymentu o jego opinię, czy działał optymalnie (sukces) czy też nie (porażka). W tabeli poniżej przedstawiam dwa równoległe zapisy tej sekwencji, jeden wynikający z obiektywnej obserwacji, drugi z subiektywnego postrzegania uczestnika eksperymentu.

Krok sekwencji Obiektywna obserwacja Subiektywne wrażenie uczestnika eksperymentu
1 Porażka Sukces
2 Porażka Sukces
3 Sukces Sukces
4 Porażka Porażka
5 Porażka Sukces
6 Porażka Sukces
7 Sukces Sukces
8 Porażka Sukces
9 Porażka Sukces
10 Porażka Sukces
11 Porażka Porażka
12 Sukces Sukces

Sekwencja sukcesów i porażek wynikająca z obiektywnej obserwacji wskazuje, że użytkownik testowanej technologii odniósł więcej porażek niż sukcesów, a więc jego zachowanie wymaga zmiany, czyli wykształcenia nowego wzorca. Co więcej, ciągi porażek pomiędzy punktowymi sukcesami są coraz dłuższe w miarę upływu kolejnych sekwencji testowanego procesu. Użytkownik potrzebuje coraz więcej działań, żeby uczyć się wykonywać poprawnie przynajmniej niektóre z działań poprawnie. No, kochanieńki, trza się wziąć za siebie i odrobić lekcje.

Lekcje może jednak odrobić także sama technologia. Wbudowane do niej bufory kompensujące nieoptymalne działania ze strony użytkownika umożliwiają temu ostatniemu zupełnie inną percepcję tej samej sekwencji. W swoim własnym mniemaniu użytkownik miał więcej sukcesów niż porażek, czyli ma podstawy żeby ten konkretny wzorzec działania utrwalić. Co więcej, jego własne wrażenie jest takie, że w miarę wykonywania kolejnych działań w tej sekwencji porażki pojawiają się coraz rzadziej. Sławoj być king, innymi słowy. Sławoj nie odczuwa najmniejszej potrzeby odrabiania jakichkolwiek lekcji.

Wyobraźmy sobie teraz, że rozwijamy technologię, która po każdym eksperymencie tworzy rozwiązania pozwalające kompensować nieoptymalne działania użytkowników. Kolejne generacje samochodowych systemów kontroli trakcji są tutaj idealnym przykładem. Automatyczny termostat w systemach klimatyzacji jest innym przykładem. Taka technologia rozwija się w kierunku zwiększenia różnicy między jej własnym procesem uczenia się a procesem uczenia się jej użytkowników. To jest jeden z najbardziej chyba niepokojących aspektów sztucznej inteligencji: jesteśmy dzisiaj w stanie tworzyć coraz więcej technologii, których stosowanie pozwala nam żyć w błogim przeświadczeniu, że wszystko jest spoko a my jesteśmy panami stworzenia, podczas gdy stajemy się, obiektywnie rzecz biorąc, coraz głupsi funkcjonalnie.

No dobra, to tyle byłoby na dzisiaj tej nauki. Niezła, prawie nowa, mało jeżdżona. Tylko kilka niewielkich wgnieceń, ale to jej nadaje charakteru. Tak mi się wydaje, ale to jest tylko subiektywna opinia uczestnika eksperymentu.