Transkrypcja
Postscriptum do rozmów o AI
Cześć Michał.
Cześć Wojtek.
Troszkę się dogadaliśmy na różne tematy o sztucznej inteligencji i sprawa się rozlała na trzeci odcinek.
Rozlała się… No to peszek.
To też będzie takie postscriptum, powiedzmy.
Takie luźne Może zebranie tych konceptów, jakieś tam okraszone skromną ilustracją? Tak, staro akademicko-popkulturowym, wciąż, jak się uda.
Dokładnie tak, jak opisałeś.Pewnie tak, tak będzie. Także zapraszamy na kolejny odcinek.
Początki AI, czyli systemy eksperckie
Dobra, Michał, w kolejnym odcinku od czego zaczniemy?
Tak naprawdę w tym naszym postscriptum zgrabnie pominęliśmy w tych poprzednich odcinkach to, co drzewiej bywało, co tylko sygnalizowaliśmy, powiedzmy, leciutko między wierszami. Przeszliśmy od razu do ujęcia z grubej rury, jak to się mówi, i te wielkie modele poszły na warsztat. Natomiast takie rzeczy, które gdzieś tam już wyszły w pewnym momencie z dziedziny fantastyki naukowej, przestały już być domeną tylko literatury czy filmów i zaczęły wchodzić do użycia. To właśnie to, co wypadałoby jakoś naszkicować. Bo jak cię tam kiedyś na studiach, dawno temu, uczyło o początkach sztucznej inteligencji, to właśnie była mowa o tych rzeczach. To były takie pierwsze systemy. Dzisiaj to już jest archaiczny temat i właściwie może nawet nie zawsze czuć, że się go spotyka, ale system ekspercki to jest coś takiego, co kiedyś było w modzie. Nawet na studiach kształcono ludzi, jak takie coś zbudować. Były w użyciu takie proste – de facto klasyfikatory treści, jak byśmy dzisiaj na nie popatrzyli. Wtedy to się nazywało systemem eksperckim, a teoria za tym stojąca była taka, że zapraszamy eksperta lub ekspertów. Dajmy na to, bardzo nośnym tematem były systemy medyczne do diagnostyki chorobowej. Założenie było takie, że zapraszamy wybitnych specjalistów z danej dziedziny, zadajemy im miliard pytań i budujemy coś, co się tam szumnie nazywało przeróżnie – przeważnie jakieś sieci kontekstowe. To coś było silnikiem całego systemu eksperckiego i on nazwę swoją wywodził od tych ekspertów właśnie, którzy użyczyli mu wiedzy domenowej. Natomiast on sam miał silnik, który potrafił po tej wiedzy się poruszać. Na przykład diagnosta później wpisywał dane objawy. Wiadomo, że wciąż lepiej, jak diagnozował lekarz, a nie na przykład poeta, bo wspierał się też swoją wiedzą i wiedział, jak najlepiej odpytać taki system, żeby dał dobrą odpowiedź. Ale jeżeli były mniej wymagające przypadki użycia, to prawdopodobnie zwykły śmiertelnik był w stanie tak zadawać pytania albo po prostu wybierać z dostępnych opcji, żeby sobie zawęzić tę ścieżkę. Mi to jednak od samego początku zalatywało trochę taką ideą drzewa decyzyjnego – często skomplikowanego, może bardziej rozbudowanego. Jak na ówczesne czasy, po prostu na dużym zbiorze danych – nie na takich kolosalnych jak dzisiaj, ale na większym niż kilka pytań.
Tego typu klasyfikacja jak najbardziej jest OK, bo często potrzebujemy, że tak powiem, wrzucić czy to ludzi, czy pewne obiekty w pewne kubełki, w pewne przedziały. Często tworzy się przedziały cech. To się też często w finansach stosuje, żeby określić chociażby znajomość rynków. Na przykład, żeby obecnie w aplikacjach mobilnych kupować akcje, musimy wypełnić ankietę, gdzie musimy odpowiedzieć na kilka pytań. I też gdzieś jesteśmy, że tak powiem, profilowani pod kątem tego, czy rzeczywiście rozumiemy i akceptujemy ryzyko związane z inwestowaniem w jakieś mniej czy bardziej ryzykowne fundusze, właściwie instrumenty finansowe, więc tutaj branża medyczna też często polega na takiej klasyfikacji, przynajmniej na wstępnym etapie, bo ciężko jest postawić finalną diagnozę, bazując tylko i wyłącznie na takich określeniach.
Chociaż chodzą słuchy, że gdzieniegdzie to się tak czasem robi i takim systemem eksperckim jest czasem wyszukiwarka Google.
Tak, tak. To wtedy wiadomo, najczęściej się człowiek dowiaduje, że ma różne groźne choroby. Lepiej tego nie oglądać, bo zawsze wychodzi to samo.
Ewolucja systemów eksperckich i rola radiologów
Natomiast te systemy – to taka jeszcze może mała dygresja – one również ewoluowały w kontekście rozpoznawania obrazów, czyli na przykład rozpoznawania chociażby w radiologii.
Tak, tak, tak.
I to też jest pewien system ekspercki.
I chyba właśnie, sorki, na tym kierunku mieliśmy, w sensie na tej specjalizacji na studiach, też mieliśmy to do wyboru.
No właśnie, z tym, że te lata, powiedzmy, 10, 15, 20 lat temu…
…20+…
to jeszcze nie było aż tak zaawansowane… Natomiast nie dalej jak w roku 2015 pan Geoffrey Hinton, czyli pan, którego określa się ojcem chrzestnym współczesnej sztucznej inteligencji – już padło jego nazwisko tutaj u nas w podcaście – praprawnuk pana Boole’a.
To ten.
To ten.
Dopadło.
On w 2015 roku powiedział, że już w sumie powinniśmy przestać szkolić radiologów, bo generalnie mamy taką samą skuteczność w rozpoznawaniu obrazów w obecnych systemach, że radiolog będzie niepotrzebny. Ostatnimi laty delikatnie wycofał się z tego twierdzenia, że jeszcze może chwilkę to nam zajmie – w sensie, że to nie będzie w przeciągu najbliższych dwóch, trzech lat – ale wciąż podtrzymuje to zdanie, tylko z pewnym przesunięciem czasowym.
To ogólnie jest chyba taka cecha wszelkich osobistości, które wypowiadają się na tego typu tematy – tylko przesuwają pewną datę danego odkrycia, ale gdzieś jest w tym pewna prawda. No bo rzeczywiście, jeśli te systemy będą w stanie na podstawie obrazu rozpoznać jednostki chorobowe czy jakieś inne rzeczy ze skutecznością dorównującą ekspertom, to te systemy są już, można powiedzieć, gotowe, by tych ekspertów zastąpić.
Pytanie, kto będzie szkolił dalej te systemy, jak tych ekspertów zabraknie.
No to będą stare systemy uczyły nowe systemy.
No właśnie. I znowu do skrajności tu dochodzimy.
Więc tylko trochę spokojniej.
Może z tym zaprzestaniem szkolenia to ogólnie pewnie nigdy nie nastąpi, ale nie ma co ukrywać, że zapotrzebowanie znacznie zmaleje, bo tylko najlepsi zostaną, żeby ewentualnie szkolić te systemy.
Tylko znowuż, mimo wszystko, jest myśl taka pozytywna, że jednak dalej ludzie będą trochę potrzebni, więc trochę ich zostanie. Wciąż wszystkich się nie wyeliminuje. Oczywiście, nawet Skynet by nas wszystkich nie skosił, bo część byłaby potrzebna. Zresztą Matrix wiedział o tym doskonale.
Tak, chociaż ta potrzeba jest raczej, że tak powiem, niewiele dla samego człowieka budująca.
Ludzkie a maszynowe uczenie się
W każdym razie, tutaj przy systemach eksperckich mieliśmy typowe uczenie pod nadzorem. Podobnie zresztą jak przy dzisiejszych systemach z uczeniem maszynowym – też coś takiego występuje, gdzie nawet w wersjach prototypowych można się spodziewać, że wynik z takiego automatu wciąż będzie poddawany weryfikacji i akceptacji przez użytkownika końcowego, właśnie przez jakiegoś eksperta domenowego. Żeby daleko nie szukać, to właśnie tak mieliśmy w ostatnim projekcie, że elementy rozpoznawane automatycznie musiały być zatwierdzone, ponieważ obowiązywała faza douczania systemu albo przynajmniej weryfikacji poprawności jego rozpoznawania.
No to tak, chyba właśnie te systemy eksperckie jakoś tak niejawnie przeszły w uczenie maszynowe, czyli zmieniały się przez te lata.
Bo, po raz kolejny, to co już wspominaliśmy – znacznie łatwiej takie systemy nauczyć, bazując na dużej ilości danych, bo jednak te wzorce wtedy łatwiej wykryć i przyporządkować do pewnych cech. Więc tutaj jest po prostu potrzebne big data. Jeśli mamy ten wystarczająco duży zbiór danych, to wtedy możemy z większą dokładnością znaleźć te wzorce, określić i ewentualnie, z jakimś nadzorem, poprawić pewne odpowiedzi, które nie są prawidłowe. De facto w ten sam sposób my się uczymy, tak naprawdę – na zbiorach danych.
Z tym, że ludzie potrafią nauczyć się na znacznie mniejszych zbiorach danych, bo taki radiolog nie przyswaja sobie zdjęć z całego internetu czy wszystkich książek na świecie. Ludzie potrzebują ogólnie znacznie mniejszej ilości danych, żeby wykazać się i wyłonić pewną ekspertyzę. Natomiast wielkie modele konsumują ogromne ilości – wszystko jak leci. Wiadomo, że wtedy większa baza tych danych… zakładając oczywiście, że dane są poprawne i nie są gdzieś zanieczyszczone… To też jest kwestia odpowiedniego przygotowania tego, żeby nasz model wyszedł poprawnie.
Sprawność ludzkiego mózgu i błędy poznawcze
Chyba tutaj zachodzi wiele takich ciekawych zjawisk w uczeniu ludzi, nas. Raz, że te zbiory mamy mniejsze, to i pojemność „keszu” też mamy mniejszą. Już wspominaliśmy w poprzednim odcinku, że nasza pamięć podręczna jest ograniczona do zaledwie kilku symboli. Może u niektórych ludzi, którzy ćwiczą albo mają jakieś wrodzone zdolności, do kilkunastu, być może, ale przeważnie mówi się o siedmiu. Przynajmniej ja tak słyszałem.
Więc jak musimy kontekst grubszy złapać, to przechodzimy na kolejne poziomy abstrakcji, gdzie sobie coś uogólniamy. W pewnym momencie kończy się stos. I wtedy mówimy, że „tego się nie da zrobić”. Aż przychodzi ktoś, kto nie wie, i właśnie on, bez tych wszystkich symboli, to ogarnie.
I to jest kolejny fenomen. Do wykształcenia się takiej intuicji eksperta – jak to się modeluje, i bodajże model Dreyfusa o tym wspomina – żeby zostać ekspertem, który faktycznie posługuje się ekspercką intuicją, potrzeba 10 000 godzin. Ale takich uczciwych godzin przepracowanych w temacie. Czyli po prostu, jak siadamy do nauki gry na skrzypcach, to dopiero za 10 000 godzin gramy tak, żeby się dało słuchać. W przypadku skrzypiec to jest dość łatwo zaakceptować ten fakt, bo wcześniej nie da się tego słuchać.
Żeby taki ekspert mógł się wyuczyć, to gdyby miał się uczyć metodami uczenia maszynowego, musiałby faktycznie tony tego materiału przewalić, a jednak nie da rady tego zrobić. Więc tu do głosu dochodzi chyba ta niezwykła zdolność operacyjna naszego mózgu, bo przez te miliardy połączeń między neuronami, czy cokolwiek tam mamy, ta olbrzymia moc przetwarzania się przekłada. Wystarczy popatrzeć, jak się dzieci uczą i jaki to jest fenomen niesamowitego, szybkiego uczenia, zwłaszcza kiedy podaje im się fragmenty wiedzy w strawny, dopasowany dla nich sposób.
Jeżeli zejdziemy jeszcze w abstrakcji niżej, to mamy zwierzęta. Inne gatunki niż człowiek. Gdzie na przykład ssaki naczelne nierzadko nam dorównują, a przynajmniej aspirują. I to mieliśmy w tej, na razie trylogii, o „Planecie małp”, tej najświeższej, z Cezarem. To jest świetnie pokazane. Bardzo lubię wszystkie trzy części, a teraz chyba wychodzi czwarta.
„Geneza planety małp” to był pierwszy. Czwarta część wychodzi, tylko nie wiem, w którym momencie ma być osadzona. Albo pomyliłem trailery. Gdzieś mi mignęło, że znowuż czwarta część trylogii o „Planecie małp”.
Ta trylogia tak, ale „czwarta część trylogii” zawsze lepiej brzmiało.
Wiadomo, że w tym filmie to było trochę przesadzone, chyba że nie wiemy wszystkiego o szympansach. Ale niektóre doświadczenia, jakie można spotkać w internecie, pokazują, że ssaki naczelne też da się uczyć różnych fajnych rzeczy i to dość szybko. I nie tylko naczelne, bo przecież są też delfiny. Jak się obserwuje sztuczki robione przez delfiny w jakimś delfinarium, to może na tych sztuczkach nie widać jakiejś inteligencji osobniczej, ale widać pracę zespołową. Widać, że da się takie coś, co wygląda jak ryba, nauczyć tego typu operacji.
Wracając do samego procesu uczenia, to chyba tutaj ta wielka moc obliczeniowa struktur białkowych plus jakaś intuicja – w którą stronę podążać z tym uczeniem?
No właśnie. Ta wielka ilość danych, które duże modele czy ogólnie sieci neuronowe są w stanie wchłonąć, nie zawsze działa na korzyść, bo siłą rzeczy nie jesteśmy w stanie zawsze odsiać ziarna od plew. Wiadomo, że tutaj będzie pewne wyśrodkowanie spojrzenia na dany zbiór uczący i tak naprawdę będzie troszkę brakowało spójności w odpowiedziach takiej sieci. Możemy to zobaczyć chociażby na czacie GPT – ciężko oczekiwać od niego, może nie poglądów, ale spójnego podejścia, spójnych odpowiedzi. One będą się troszkę wahać w zależności od tego zarzewia wiedzy.
Gdzie u ludzi, jakby nie patrzeć, sposoby uczenia się i w ogóle przyswajania wiedzy – nie tylko wiedzy sensu stricto, ale ogólnie wiedzy o otoczeniu – zawsze cechuje bardzo duża spójność. Ludzki umysł, człowiek jako istota, bardzo mocno dba o spójność swoich przekonań, poglądów i ogólnie swojego myślenia. Nasz mózg o to dba.
Niestety, wiąże się to często z pewnymi problemami, bo wszelkie błędy poznawcze, wszelkie uprzedzenia, one są też elementami budowania tej spójności. Nawet jeśli coś przeczy naszemu obrazowi świata albo naszym poglądom, tym gorzej dla tych poglądów i tym gorzej dla rzeczywistości. To jest koszt, jaki płacimy, jaki nasz mózg płaci za to, żeby ten model świata zbudowany w naszej głowie był spójny i stabilny. Nie jesteśmy w stanie pozwolić sobie na to, żeby go w kółko rozbudowywać, w kółko zmieniać te wagi połączeń. To tak samo jak w dużych modelach jest bardzo trudne, tak samo w naszym mózgu jest to trudne – jest wyryte w kamieniu. Do pewnego stopnia jest modyfikowane, ale wiele rzeczy przeczy zdrowemu rozsądkowi, dlatego, że mamy już pewien wyryty schemat.
Energetycznie kosztowne jest zmienianie tego schematu.
Można popatrzeć… oczywiście mogę tak amatorsko popatrzeć na kwestie medyczne, wszystkie dywagacje są bardzo amatorskie, nie ma tu specjalistów, w żadnym wypadku. Ale zasłyszałem taki pogląd, że właśnie mózg jest takim wyspecjalizowanym komputerem do zadań optymalizacyjnych. Będzie poszukiwał takiej drogi, żeby przy rozwiązywaniu dowolnego zagadnienia – od sterowania funkcjami ciała po myślenie – względnie prostą ścieżką prowadzić do osiągnięcia zadowalającego rezultatu. To taki algorytm, taka heurystyka, która po prostu jak coś znajdzie pasującego, to jest zadowolona i mówi, że to już jest to.
Jednocześnie nie będzie starał się rozpraszać. Zgodnie z tym poglądem wynika to po prostu z wymagań istoty żywej, która musi zachować maksimum energii do podtrzymywania życia. Więc wszystkie czynności, które da się automatyzować, są zautomatyzowane do bólu. Na przykład jadąc samochodem, nie zastanawiamy się, że teraz sięgamy do dźwigni biegów, sprzęgło i tak dalej. Jedziemy sobie na automacie i z grubsza orientujemy się, w którym miejscu jesteśmy. A czasami nie. Wtedy Google Maps, o ile się nie zacina, może podpowiedzieć.
Ale właśnie ten mózg ma ponoć za zadanie minimalizować straty, zużycie energii, więc musi nam dać taką odpowiedź, która jest zadowalająca. Więc jak mamy już dobrą odpowiedź przygotowaną od lat i ona tam działała…
Co z tego? Nawet jeśli nie do końca jest prawdziwa.
Albo usłyszeliśmy pewne fakty, które mówią, że jest inaczej – jeszcze się będziemy kłócić.
Oczywiście. Mimo że później nawet ta kłótnia zajmuje więcej czasu niż poznanie tej prawdy.
Wygrywanie będzie jeszcze kosztowniejsze niż ta kłótnia.
Więc jak się teraz kłócimy, to jakoś to będzie.
Jakoś to będzie. Najważniejsze, żeby zachować istniejące połączenia.
Najgorzej, jak się trzeba codziennie kłócić.
Tak, więc to się też da zrobić.
Wystarczy więcej jeść Snickersów. Będzie więcej energii do kłótni.
Jeden ze sposobów, na pewno.
Bardzo duża dygresja. Oczywiście, ale to są tematy tak bardzo ciekawie powiązane z nami samymi jako ludźmi.
Historia sieci neuronowych i przełomowe odkrycia
One leżały u podstaw początkowego podejścia do sieci neuronowych i ogólnie do uczenia maszynowego. W sieciach neuronowych pokładano nadzieje już od samego początku. Wiemy, że dzisiaj wyewoluowały do okropnie wielkich wynalazków, które czasem potrafią nam namieszać w głowie, ale wtedy było domniemanie, że wystarczy pozwolić im się rozrosnąć, jak już będzie dostępna moc sprzętowa czy softwarowa. Pozwolić, żeby te sieci urosły i kto wie, może zyskają świadomość.
Jak na razie urosły do rozmiarów kolosalnych i jeszcze świadome chyba nie są. Z tego co nam wyszło, wciąż chyba nie ma klasycznego odwzorowania struktury naszych komórek nerwowych w sprzęcie, a właśnie w tym poszukiwano jakiegoś Graala tej świadomości. Że w końcu rozbudujemy ten sztuczny mózg: najpierw zbudujemy go na obraz i podobieństwo naszych żywych mózgów, pozwolimy mu się rozrosnąć, damy tyle sprzętu, żeby zgadzała się pojemność, zapuścimy to i kiedyś tam zacznie być świadomy.
Zgadza się. Rzeczywiście, te wstępne założenia na temat sztucznych sieci neuronowych i odwzorowania struktury mózgu dokładnie tak zakładały. Był też taki moment, kiedy nastąpiło wypłaszczenie zdolności poznawczych takich sieci i troszeczkę zwątpiono, że faktycznie da się to zrobić. Gdzieś tam w latach 80. czy na początku 90. wtedy już brakowało mocy obliczeniowej. Te zagadnienia były na tyle wyszukane, że tej mocy po prostu nie było.
Do jakichś prostszych zadań jeszcze jakoś to działało, jednak te proste modele, tak jak można zobaczyć na wykresach, bardzo szybko łapią wypłaszczenie, gdzie już nie da się za bardzo poprawić ich wydajności i one zwyczajnie przestają działać. I tutaj też nadszedł moment zwątpienia, czy to się faktycznie skaluje tak, jak wszyscy myślą.
I tutaj wspomniany już pan Hinton, który generalnie od lat 80. się tym zajmuje, mocno propagował ideę samych sieci neuronowych, ale też metod ich uczenia. Głównie chodzi o tak zwaną wsteczną propagację, czyli samodoskonalenie się tej sieci, polegające na ciągłym poprawianiu wag w zależności od tego, jaka jest odpowiedź sieci względem oczekiwanej. Oczywiście, tam są różne ciekawe algorytmy, bardzo silny aparat matematyczny, na którym, jak już wspominałem, poległem w jednym z kursów pana Hintona na Courserze.
(śmiech) Kto by nie poległ?
Trzeba tam było policzyć pewne gradienty błędów tej sieci neuronowej i dla następnej iteracji wyznaczyć nowy współczynnik uczenia się. O to chodziło.
Zero nie wychodziło zero, a delta wychodziła ujemna.
Tak, ale to niedoskonały aparat matematyczny, a mój na pewno był niedoskonały.
Natomiast pan Hinton nieustannie się tym zajmował i wierzył, że faktycznie da się to zrobić. Gdzie w latach 80. bardzo mocno królowała tak zwana symboliczna AI, czyli przekonanie, że nie do końca musimy odwzorowywać struktury, ale bardziej polegamy na jakichś regułach matematycznych i logicznych.
Widzę pewną zbieżność z efektem, czyli oszukiwać wystarczająco dobrze.
No poniekąd. To może nie polegało na tyle na oszukiwaniu, co jednak na reprezentacji tej sztucznej inteligencji w troszkę bardziej strawny dla człowieka sposób – przez pewne przybliżenia, drzewa decyzyjne, przez pewne reguły matematyczne.
Bo jakby nie patrzeć, w przypadku sieci neuronowej, oczywiście model ogólny i zasady działania są znane, ale jak już zrobimy ten model, zwłaszcza taki duży, to już zupełnie nie wiemy, co tam się w środku dzieje. Ciężko ogarnąć te, jak już wspominaliśmy, miliardy parametrów i wag. Brakuje nam heurystyk, brakuje nawet narzędzi, żeby w łatwy sposób na przykład zdebugować teraz sygnał, który ma nam określić, czy na obrazku widzimy takie, a nie inne zwierzę, i dostać odpowiedź. Ciężko to sobie łatwo prześledzić.
Natomiast pan Hinton dość mocno wierzył, że to podejście będzie przydatne. Tak naprawdę to, co teraz jest podstawą obecnych dużych modeli językowych, czyli de facto predykcja następnego wyrazu w zdaniu… no bo tak naprawdę to jest zasada działania czatu GPT. To jest wciąż predykcja następnego wyrazu. Oczywiście, pod spodem ta predykcja następuje w bardzo skomplikowany sposób. To nie jest nawet miliard ifów, ale wciąż jest to przewidywanie następnego wyrazu.
I pan Hinton już taki model stworzył w 1986 roku. Nauczył go na kilkuset zdaniach, pewnie ręcznie wyklikanych, i udowodnił, że tego typu predykcja już wtedy jakoś zadziałała. To nie był oczywiście large language model, pewnie bardziej small albo nawet XS, ale on już prawie 40 lat temu coś takiego stworzył. Od tego momentu to rozwijał i tak naprawdę duża część zasług idzie do niego i do jego zespołu, który nad tym pracował, między innymi właśnie w Google. Więc to jest coś, co nie jest takie superświeże, jak by się mogło wydawać, patrząc na obecne newsy czy filmiki mówiące: „mamy inteligencję!”. Stoją za tym dziesiątki lat badań.
A zdaje się, że niejaki pan Markow to jeszcze wcześniej swoje modele opracowywał. Chociaż, szczerze powiedziawszy, nie pamiętam dat, ale pamiętam to zagadnienie, ponieważ w mojej nieszczęsnej pracy dyplomowej, która miała poskutkować rozpoznawaniem zdań języka naturalnego – tak brzmiał temat – a zakończyła się na rozpoznawaniu fonemów z wnioskiem, że rozwiązanie jest rozwojowe. I tam właśnie, po osiągnięciu tego rozpoznawania fonemów, co na dzisiejsze standardy było po prostu niczym, przewidywaliśmy z promotorem – w sensie bardziej promotor przewidywał niż ja – zastosowanie modeli Markowa do tego, żeby połączyć te fonemy najpierw w sylaby, a później w słowa i zdania, żeby jakoś zrekonstruować treść. Ale dalej to by było takie właśnie przewidywanie. Gdyby to zadziałało, to podejrzewam, że byłbym blisko tego, co pan Hinton zrobił dekadę z hakiem przede mną. Pewnie na jakimś ZX Spectrum czy czymś.
To właśnie tutaj był problem mocy obliczeniowej. Bo, jakby nie patrzeć, nie da się fizycznie dokładać komputerów w naszym pokoju, żeby zwiększyć moc obliczeniową. Dzisiaj mamy chmurę i łatwość skalowania, ale wtedy, kiedy on to robił, miał jeszcze gorzej niż ja. Dlatego doszedł do pewnego momentu, napotkał sufit i mógł tylko domniemywać, że jego teorie i podejście są w porządku, ale musiał to wciąż rozwijać, idąc z duchem czasu i postępu coraz lepszych maszyn. On swoją drogą był też jednym z pierwszych, który zaproponował użycie GPU do trenowania tego typu sieci, więc też był jednym z prekursorów.
Przełom w tłumaczeniach i współczesne zastosowania AI
Pierwsze przełomy w tym zaczęły się gdzieś około roku 2006, kiedy faktycznie zaczęły powstawać troszkę większe modele niż te robione w latach 80. czy 90.
To ja już miałem wtedy GeForce’a. Chyba tak. Tylko to jeszcze nie był ten duży GeForce, na pewno z architekturą CUDA by na tym nie poszedł. Chociaż nie, 2007 to później… Do sprawdzenia.
Przełom nastąpił w roku 2012, kiedy faktycznie rozpoznawanie języka i głosu stało się coraz lepsze. Mniej więcej od tego momentu widać znacznie lepsze rozpoznawanie głosu w Androidzie, które kiedyś po polsku zupełnie nie działało, a od pewnego momentu nagle zaczęło super działać.
Podobnie jak Google Translate. Może nie wszyscy kojarzą albo pamiętają, ale jeszcze w roku 2014 czy 2015 Google Translate nadawał się praktycznie tylko do tłumaczenia pojedynczych słów. Wklejając większy tekst, mieliśmy go tak z grubsza przetłumaczonego. Natomiast w 2016 roku Google podmienił swój poprzedni algorytm na wyszkolone sieci neuronowe, już takie większe modele, i od tego mniej więcej czasu tłumaczenia naprawdę weszły na wyższy poziom.
Po pierwsze, dostaliśmy tłumaczenia bardzo niszowych języków, bo można je było, można powiedzieć, dostać z automatu, nie trzeba było tego tak bardzo nadzorować. Te modele też dostały możliwość tłumaczenia przechodniego. Czyli jeśli mieliśmy tłumaczenie z angielskiego na japoński i z koreańskiego na angielski, to można było jednocześnie przetłumaczyć z japońskiego na koreański, bez bezpośredniego modelu tłumaczącego. Otworzyło się dużo nowych możliwości i od tego mniej więcej roku ja sam pamiętam i kojarzę, że nastąpił gwałtowny skok w jakości Google Translate. Naprawdę zaczął fajnie tłumaczyć całe teksty.
Na temat japońskiej poezji czytałem, gdzie jakiś badacz, na pewno znający japoński, zachwycał się tym skokiem, o którym mówisz. To było po roku 2016. Powiedział, że tłumaczył sobie bodajże poezję haiku i wcześniej nie dało się tego zrobić, bo to poezja z górnej półki, która się nie rymuje. Na wcześniejszych wersjach dostawał totalne krzaki. Natomiast już po podmianie tego tłumacza najpierw dostał takie tłumaczenie wiersza na angielski, że wywołało to u niego opad szczęki, a po trzech miesiącach wrócił do tego i dostał jeszcze fajniejsze. To pokazuje, że te algorytmy – nie chciałbym nadużywać terminu „samouczące się”, ale jakieś douczane pewnie po drodze były.
Te tłumaczenia faktycznie robiły się coraz lepsze, tym bardziej że tłumaczenie przechodnie jest narażone na pułapki tekstowe. Tu trzeba znać dobrze język, żeby przetłumaczyć z jednego na drugi. Czasem po prostu są takie krzaki po drodze, że nie da się z tego wybrnąć w prosty sposób. Zresztą nasz język jest tutaj dobrym przykładem, bo jest dość zakręcony, a teraz już tłumacz radzi sobie z nim całkiem dobrze.
Dokładnie. Rozpoznawanie mowy, tłumaczenie – w tym momencie to nie jest żaden problem. Traktujemy to w ogóle za pewnik. Po prostu wpisujemy, działa, mamy. Mamy poprawianie składni, jak piszemy wiadomości czy coś w dokumencie. To dla nas zupełnie oczywista rzecz, ale jeszcze parę lat temu wcale taka nie była. Dosłownie, to były pojedyncze słowa. Pamiętam dokładnie, jak zawsze pełno było śmiechu, gdy wklejało się pełne teksty i wychodziły jakieś totalne bzdury, bo nie było tego elementu kontekstu, zrozumienia. Może „zrozumienia” to za dużo powiedziane, ale jednak jakiegoś uchwycenia treści, która jest tłumaczona. Tutaj widać przełom.
Z pułapki w pułapkę wpadamy, bo tutaj już widzimy, że ten tłumacz już coś tam rozumie, ale on rozumie to na poziomie dla niego wystarczającym, ale na poziomie konstrukcji językowej nie wie, jak taką daną konstrukcję językową przetłumaczyć na ekwiwalent w innym języku.
I to ma sens. I to nas pobudza do takiego zachwytu, że on już za chwilę będzie w ogóle potrafił z nami konwersować i wszystko rozumie. Dostajemy takiego czata, który jest jeszcze fajniejszy od tłumacza, bo nie dość, że potrafi to w każdym języku, to jeszcze błyskotliwie prowadzi konwersacje i przeprasza, jak się pomyli. A jednak nie za bardzo jeszcze czuć od niego tę świadomość.
Michał widać nie odpuści czatowi.
Nie.
Absolutnie.
Może kiedyś… nie, niemniej jednak trzeba docenić techniczne, że tak powiem, zaawansowanie tych algorytmów.
On się teraz nasłuchał. Nieważne, jak często przeprasza, to mi teraz nie będzie dobrych odpowiedzi udzielał. Będzie mnie na manowce zwodził specjalnie, z zemsty.
Może ja nie będę z nim gadał przez jakiś czas. Może zapomni, bo on zapomina po jakimś czasie.
No i tak to właśnie drzewiej wyglądało. W każdym razie rozwinęło się to do czegoś obiecującego, ale nie będziemy już odgrzewać kotleta. Wystarczająco się tutaj tym zachwycaliśmy.
Algorytmy ewolucyjne i genetyczne
I co nam zostało w temacie, żeby już tak zbytnio nie przynudzać? Ostatnia taka fajna gałąź, która też była na studiach poruszana bardzo chętnie. Mianowicie algorytmy ewolucyjne i ich szczególny przypadek – algorytmy genetyczne. Może na początek te genetyczne.
Wiem, że gdzieś tam zasłyszałem tu i ówdzie, że zrobiłeś kiedyś takie coś, co można by nazwać „komiwojażerem Wojtasa”.
Tak, to był w pełni autorski wynalazek. Nikt wcześniej na to nie wpadł.
Trzeba było ciebie…
…żebyś wpadł.
Trzeba było to opatentować.
To oczywiście była bardzo prosta implementacja problemu komiwojażera, który bardzo fajnie nadaje się na rozwiązanie za pomocą algorytmu genetycznego. Algorytmy genetyczne w założeniu celują w problemy, które są trudne w rozwiązaniu takimi standardowymi metodami, można powiedzieć brutalną siłą, metodami czysto algorytmicznymi.
To są zwykle problemy tak zwane NP-trudne, gdzie ciężko jest przeszukać całą przestrzeń problemu i znaleźć wszystkie rozwiązania. Natomiast bardzo łatwo jest zweryfikować, czy dane rozwiązanie jest optymalne. Na przykład w problemie komiwojażera ciężko znaleźć wszystkie ścieżki pomiędzy miastami – bo na tym polega ten problem, czyli na znalezieniu najkrótszej trasy spośród wszystkich możliwych. Przy odpowiednio dużym zbiorze, oczywiście.
Jasne, to nie jest mowa o prostych przypadkach dla kilkunastu czy kilkudziesięciu miast. To będzie oczywiście bardzo proste.
Natomiast nawet mając tych miast na przykład kilkaset czy jeszcze więcej, możemy wciąż bardzo łatwo sprawdzić i porównać dwie odpowiedzi – która jest krótsza, która jest dłuższa – i powiedzieć, że ta krótsza jest lepsza.
Albo ta jest lepsza, bo zużywa mniej paliwa, w zależności od tego, jaką sobie przyjmiemy funkcję kosztu.
Funkcja oceny.
Tak, to ją sobie możemy jakoś tam dobrać. To nie musi być długość sensu stricto, to może być koszt w rozumieniu wypalonego paliwa. To kwestia dostosowania.
Tutaj algorytmy genetyczne polegają właśnie na zaprezentowaniu tego problemu tak, jak w żywych organizmach mamy pewien genotyp, który opisuje cechy tego organizmu. Tutaj opisujemy cechy naszego problemu, czyli na przykład kolejność, w jakiej odwiedzamy nasze miasta.
Losujemy sobie na starcie odpowiednią grupę tak zwanych osobników, czyli populację. Po prostu instancje rozwiązania naszego problemu. Robimy klasyczny dobór naturalny, czyli wybieramy najlepsze osobniki.
Tylko te osobniki muszą być zakodowane w jakiś sposób. To, co losujemy, ta populacja, to jest po prostu ileś, tak jak powiedziałeś, instancji obiektów zakodowanych zgodnie z tym wzorcem, który opisuje nam genotyp. Najczęściej w postaci binarnej, bo wtedy najłatwiej możemy manipulować, czy to mutacjami, czy po prostu krzyżowaniem osobników.
Przy czym, dopowiem, przy tej reprezentacji ważne jest, żeby te poszczególne partie, które nam ten genotyp opisują, podzielić na geny, czyli cząstki tego genotypu, które dopiero po złączeniu tworzą łańcuch. I kiedy będziemy je ciąć na kawałeczki, to na granicach tych genów, bo inaczej nie ma to sensu – będziemy ciąć geny i zrobi nam się klasyczny koszmar jak z horrorów klasy B.
Polecam „Muchę”, bo tam pan wchodzi do teleportera, wchodzi on i mucha, i wychodzi jedno.
Źle się skrzyżowały.
Podobnie jest z mutacją, czyli zmianą wartości w jednej cesze, w jednym genie. To też nie może następować zbyt często, bo wtedy następuje odejście od rozwiązania, tracimy to rozwiązanie.
Powstają Wiedźmini.
Albo wręcz umierają. Nie wszyscy Próbę Traw przechodzili.
No dokładnie, chyba 90% odpadało. Jeśli nasze osobniki, czyli rozwiązania problemu, też będą padać jak muchy, to szybko tego rozwiązania nie znajdziemy.
Robiąc w ten sposób te wszystkie operacje w pętli symbolizującej kolejne pokolenia, z czasem, przy odpowiednio dobranych wszystkich parametrach, powinniśmy zbiec do jakiegoś optymalnego, przynajmniej lokalnie, rozwiązania.
Lokalnie. Bo ciężko będzie globalnie. Musielibyśmy rozciągnąć ewolucję na miliony lat. Możemy też utknąć gdzieś w ślepej uliczce, gdzie będziemy mieli bardzo słabą pulę genów i już z niej nie wyjdziemy.
Utknęły i koniec.
Mają dopasowane osobniki do swojego otoczenia, więc jest im fajnie.
Zawsze tego typu rozwiązania i algorytmy gdzieś tam mnie urzekały właśnie tym połączeniem takiej prostej, silnej algorytmiki z nutką biologii i jakiegoś życia.
Tak, ten aspekt życia, że ten mój algorytm troszkę żyje, gdzieś coś tworzy. Może pójść w krzaki, ale to jest po prostu wynaturzenie.
Do tego jeszcze bardzo często w tego typu aplikacjach dodaje się warstwę wizualną, pokazującą na przykład tę mapę. I tak jak te rozwiązania na początku rysują się na siatce miast jako totalne krzaki, tak później widać, że zbiegają do coraz lepiej ułożonego fragmentu trasy czy wzorca.
One się fajnie nadają do takiej zabawy i opracowania, są super dydaktycznie. Zwłaszcza w takich problemach, które każdy dość fajnie potrafi zrozumieć, jak właśnie ten komiwojażera. Łatwo to wytłumaczyć, łatwo pokazać na obrazku, a jak algorytm pokazuje, jak ten obrazek ma wyglądać, no to już jest w ogóle super.
To są bardzo ciekawe rzeczy. Nie ukrywam, że trochę mi brakuje tego typu rozwiązań gdzieś pod ręką.
No właśnie, jakoś nie chwyciły na rynku. Może złe mutacje były.
Ale na pewno warto polecić sobie jako hobbystyczny projekcik zrobienie takiego algorytmu, jeszcze z jakąś warstwą wizualną. Można tego znaleźć pełno, jakieś javascriptowe wersje tego typu rozwiązań, można się tym pobawić. Sama zabawa w ustalanie tych suwaków, parametrów, wskaźników jest bardzo ciekawa.
W ogóle próba zakodowania tego, bo tutaj trzeba zejść na poziom trochę binarny, bitowy, trzeba sobie wymyślać te reprezentacje i samo to w sobie jest już fajnym, rozwijającym ćwiczeniem. Jest tam też dużo kruczków i warunków brzegowych, jak na przykład te ślepe uliczki, kiedy już jesteśmy w jakimś lokalnym, ale wcale nie maksimum, tylko w totalnie złej odpowiedzi.
Tutaj taką analogią – chociaż będzie to miało mało wspólnego z heurystyką, a heurystyka to w ogóle fajna rzecz, bo nazwa pochodzi ponoć od tego słynnego greckiego słowa pisanego jako „eureka!”, czyli „znalazłem!”, „odkryłem!” – jest „Gra w życie”.
To jest klasyka gatunku.
To jest jakaś ewolucja, bo widać ją, jak te kropeczki sobie tam podróżują i czasem wytwarzają się takie lokalne wzory. To są właśnie punkty utknięcia, gdzie to już dalej się nie rozwinie. Ale tam, gdzie jeszcze może, to samo się rozwija i widać to życie.
Najczęściej wygląda to jak migający krzyżyk, czyli komórki w jedną stronę się rozrastają, a w drugą zwijają. Jak się tu zwiną, to zachodzą warunki, że mogą się rozrastać, a tam się muszą zwijać. I robi się takie pulsujące coś.
Mamy oscylatory, które cały czas robią to w nieskończoność, ale nie potrafią przejść w inną formę. Jak już się zapętlą, to koniec.
I to są właśnie takie martwe rozwiązania. Byłyby daleką analogią, ale inspiracją do poszukiwania takich właśnie zapętlonych albo całkowicie martwych rozwiązań, niechcących się zbiegać do naszego lokalnego ekstremum. Jak już z tego punktu nie wyjdziemy, to utknęliśmy.
„Gra w życie” zastosowań do rozwiązywania problemów ma może mniej, ale fajnie wygląda. Natomiast algorytmy genetyczne – planowanie tras, problem plecaka – tego typu rzeczy gdzieś tam pewnie da się zastosować. Nie ma jednak co ukrywać, że to nie są jakieś bardzo częste problemy w klasycznych aplikacjach biznesowych, więc trochę ciężko na co dzień takie algorytmy potrenować.
Tak jak zresztą większość tych rzeczy, które tutaj poruszyliśmy. Chyba dlatego tak mocno je poruszaliśmy, bo brakuje nam ich w naszym codziennym programowaniu.
Jeszcze mieliśmy nawiązać do mrówek.
Mrówki to są takie fajne stworzenia, które, jakby się człowiek nie zabezpieczył, i tak do szafki wejdą. Jak już znajdą jakąś dziurkę, to jeszcze wrócą i przeprowadzą kolegów.
I ktoś wpadł na pomysł, że można by to wykorzystać.
No to proszę, algorytm mrówkowy. Taki chyba już trochę zapomniany, pewnie niszowy sposób rozwiązywania głównie problemów odnajdywania ścieżek w grafie.
To jest generalnie przeszukiwanie grafu, ale również bardzo fajnie się prezentuje wizualnie. Też pamiętam, że tego typu rzeczy gdzieś tam sobie wizualizowałem, może nie w postaci mrówek jako takich, ale oczywiście kwadracików, które zawsze były zbieżne do jakiejś trasy w labiryncie. Generalnie polega to na obserwacji, na jakiej zasadzie mrówki czy inne owady tworzą sobie skomplikowane trasy, które trafiają do celu, i później ta trasa jest główną drogą do pożywienia.
Mrówki pozostawiają feromony czy jakieś inne substancje, które przyciągają inne mrówki. Jeśli dana ścieżka jest częściej wybierana, a jest najczęściej wybierana, jeśli na przykład prowadzi do celu, to siłą rzeczy tam będzie największe stężenie tych feromonów.
U Wiedźminów tak samo, bo przecież Geralt po tych fajnych śladach potrafi. To już jest klasyk, w większości gier mamy pewien ślad feromonów prowadzący do miejsca zbrodni.
Czyli kolejny wiedźmiński zmysł też był algorytmem mrówkowym. My byliśmy tą mrówką.
Ostatnią mrówką. Nie wiadomo, kto był tą pierwszą. Najgorzej, jak takie mrówki idą, a przewodnik jest pijany i po prostu idzie gdziekolwiek. Wszystkie za nim, więc ślad będzie najmocniejszy. Jak utkniemy w jakimś błędzie, to pozamiatane.
Zdaje się, są takie sytuacje, kiedy mrówki tak w koło krążą i tworzą się takie pseudo-tornado, bo ślad się tak ułożył w kółko.
Chodzą, chodzą i chodzą… Czy nie było tak przypadkiem z kombajnem do kukurydzy w „Interstellar”?
Chyba tak.
Moje mrówki jak idą, to szukają jakichś słodyczy i wracają szybko, żeby kolegom powiedzieć, więc nie tracą czasu, żeby się kręcić.
Wiadomo, do słodyczy najprostsza droga. Zresztą nie tylko mrówki tak potrafią.
Unikając takich przykrych sytuacji, gdyby nasz algorytm zechciał gdzieś utknąć w takim lokalnym ekstremum, to wtedy można by się pokusić o wycofanie się ze ścieżki, może nawet wyzerowanie tych feromonów i zapuszczenie go raz jeszcze. Jesteśmy w stanie to wykryć. Królowa mrówek nie za bardzo ogarnie temat, jak prawdziwe mrówki błądzą, ale nasza królowa w algorytmie może sobie rozkminić, że mamy błąd, jeśli zawsze nam to zbiega w to samo miejsce.
Podsumowanie i kulturowe nawiązania
OK. Czyli przeszliśmy chyba już przez większość rzeczy, których nam brakuje w codziennych systemach.
Możemy wracać do króla, ale przez Cyberpunka.
Tak, nawiązania kulturalne. I przypomniał nam się – a właściwie Jackowi, pozdrawiamy Jacka – przypomniał nam się quest z „Cyberpunka” z automatem z napojami, który, zdaje się, osiągnął chyba samoświadomość.
I stał się takim trochę psychologiem.
I nam też przyszło z nim zamienić parę zdań. Ale wiadomo, twórcy tego automatu chyba woleli, żeby sprzedawał napoje, a nie zabierał czas na gadanie z klientami.
A przeciskanie się w kolejce do guzików?
Ta kolejka była właśnie po to, żeby przyjść, pogadać. A przy okazji kupowali, na pewno.
No może też, ale zarząd zdecydował inaczej.
Toteż nie zdziwię się, jeśli niedługo nasze dystrybutory zaczną z nami konwersować i zastanawiać się, czy aby napój chce być pity.
W sumie tak, ale nie wiem, czy bym chciał wtedy kupować.
A ja bym poszedł do takiego.
O, promień słońca! I od razu byś zawiesił ten dystrybutor.
Ja wiem, że słońce nie ma promieni, już mi to wyjaśnił.
Podejrzewam, że odechciałoby mi się u niego zakupów. Także może dlatego jeszcze ich nie mamy tak powszechnie.
Chyba dobrnęliśmy już do końca tej tematyki.
Myślę, że na parę odcinków już wystarczy.
Także jeśli wam już wystarczy, to na pewno w następnym odcinku będzie już inny temat.
Jakiś normalny.
Także prosimy nie zniechęcać się, jeśli komuś akurat te tematy niekoniecznie podpadły.
Ewentualnie jakiś fajny komentarz – czego zabrakło?
Albo czego było za dużo.
Albo gdzie się pomyliliśmy.
No dobra, to dzięki Wojtek.
Dzięki Michał za wiele dygresji i za wiele ciekawych wtrąceń kulturalnych.
No to po wiedźmińsku: bywaj!
Bywaj. Trzymajcie się, cześć!