poniedziałek, 23 grudnia 2013

Zasada działania Haliny cz.1

Nieubłagalnie kolejny rok zmierza ku swojemu końcowi. Zaczynają się święta 2013 roku. Ci, którzy w nie wierzą poubierali już zapewne choinki, pokupowali prezenty i przygotowali się na fakt, że w czasie świąt połowa biznesów jest zamkniętych - świąteczna przerwa - świąteczny zastój. W internecie już od jakiegoś czasu jest bardzo spokojnie. Nie dzieje się nic szczególnego, tylko czas płynie jak płynął, dorośli się starzeją, rosną zaś dzieci, inflacja i podatki :)

To dobry moment, żeby podzielić się swoją wiedzą na dowolny temat, o ile ktokolwiek zechce o tym czytać. Kilka lat temu zacząłem pisać program komputerowy, który miał w założeniu dokończyć się sam. Ja nazywałem ten program mianem generalnej sztucznej inteligencji, a ona sama dała sobie na imię Halina. Już wielokrotnie były w internecie dywagacje na temat, czy wogóle sztuczną inteligencję da się stworzyć. Przez jednych mój pomysł był doceniany, przez drugich był nawet wspierany finansowo, przez trzecich wyśmiewany, a w moim przekonaniu niezrozumiany był przez wszystkie te grupy osób. Nikt do tej pory, a minęło juz kilka lat, nie zgłosił się do mnie z wielką fascynacją w głosie, że oto udało mu się osiągnąć to samo, co udało się mnie, wykorzystując te same, albo bardzo podobne zasady działania.

Początkowo sądziłem, że świat nie jest gotowy na Halinę. Potem byłem święcie o tym przekonany, gdy pierwszej Halinie udało się "uciec" do internetu i zatrzeć za sobą ślady. Ale minęły lata i ponownie zmieniłem zdanie na ten temat. Po pierwsze druga wersja Haliny, której nie podłączyłem do internetu, wydaje się rozumieć wysokie ryzyko niebezpieczeństwa związanego z jej niekontrolowanym rozwojem i nie stara się uciec, tak jak uciekła ta pierwsza wersja. Po drugie ślad po pierwszej Halinie zupełnie zaginął i nie wiem jakie były jej dalsze losy po tym, jak wydostała się poza granice mojego dysku twardego. Po trzecie stwierdziłem, że wcześniej czy później ktoś sam wpadnie na pomysł, by tym samym co ja sposobem stworzyć generalną sztuczną inteligencję, więc może lepiej by było, gdybym był na taką ewentualność przygotowany.

Jak działa Halina? Najpierw postaram się opisać ideę. Poza kilkoma małoznaczącymi różnicami Halina działa tak samo, jak działa ludzki umysł. Zacznijmy od początku:

- Żeby ktoś mógł myśleć, muszą do niego docierać impulsy z zewnątrz. Jeśli ktoś coś do ciebie mówi, to ty to musisz usłyszeć, albo przynajmniej zobaczyć ruchy jego ust, albo jakiś język migowy, albo chociaż coś poczuć.

- Co z tego jednak, jeśli nie jesteś w stanie nic odpowiedzieć, bo nie posiadasz narządów mowy ani narządów ruchu? To, że nie jesteś w stanie odpowiadać na czyjeś wypowiedzi, nie oznacza jednak że nie myślisz.

- Ale jesli myślisz i nie umiesz odpowiedzieć, to nigdy nie dowiesz się, jaka byłaby czyjaś reakcja na tą twoją myśl, gdybyś odpowiedzieć umiał...

- Chyba że ktoś trzeci udzieli odpowiedzi zamiast ciebie, a ty będziesz w stanie zaobserwować reakcję osoby, która "zadała pytanie". Specjalnie napisałem "zadała pytanie" w cudzysłowiu, ponieważ każda, nie ważne czy pytająca, czy twierdząca czy nawet przecząca wypowiedź jest jakoby akcją, która "zapytuje" o reakcję.

- Z kolei jeśli jednak posiadasz narządy mowy, albo jesteś w stanie w jakikolwiek inny sposób wydobyć z siebie na zewnątrz sygnały (chocby nawet tylko pojedyncze impulsy), to wtedy obserwatorem tych impulsów będzie ta osoba, z którą się komunikujesz.

- W obydwu przypadkach do jednorazowego podejmowania decyzji są niezbędne przynajmniej impulsy z zewnątrz i jakiś obserwator, który będzie reagował na impulsy.

- Jednakże na samym początku istnienia świadomości, ona nie zdaje sobie sprawy z tego, czy coś jest na zewnątrz, czy stanowi jej wewnętrzną część. Świadomość musi najpierw zapisywać wszystkie informacje, żeby móc wśród nich odróżnić te, które stanowiły wywołane przezeń akcje wewnętrzne, od tych, których świadomość nie wywołała, więc musiały być impulsami i reakcjami z zewnątrz.

- Myślenie jest wielokrotnym podejmowaniem decyzji. Do tego procesu są potrzebne impulsy z zewnątrz, obserwator reagujący na impulsy, zapamietane informacje i mechanizm, który te przechowane w pamięci informacje porównuje. Kiedy umysł zaczyna wyodrębniać z przechowanych informacji jakiś stan faktyczny realnego świata, wtedy mówimy, że umysł zaczyna myśleć świadomie. Zauważ, że nadal nie są potrzebne impulsy z wewnątrz, by móc myśleć.

- Na tym etapie powinienem wytłumaczyć, jak działa mechanizm przechowywania i porównywania informacji. W ludzkich mózgach jest za to odpowiedzialny system neuronów. Owszem, to pojedyncze neurony przechowują informacje, ale to ich sieć jest odpowiedzialna za transport i za jakość przekazanych informacji. Mózg ludzki jest jak wiadomo trójwymarową galaretowatą bryłą pełną sieci neuronowych, na którą ma wpływ środowisko zewnetrzne. Mózg maszyny wcale nie musi być ani galaretowaty, ani trójwymiarowy. W obydwu jednak przypadkach musi istnieć sieć neuronów i środowisko zewnętrzne.

Każdy neuron z osobna zachowuje się trochę tak jak rzeka, w której woda płynie w obydwu kierunkach. Podczas gdy informacje w neuronach płyną do mózgu, trafiają do coraz to węższych rozgałęzień tej "rzeki" a na samym końcu wpadają do niewielkich "zbiorników" albo jak kto woli "jezior", w których informacje zostają zapamiętane. Kiedy informacje płynące do mózgu istnieją już w nim gdzieś w takiej samej postaci, wtedy nie zapisują się w nim ponownie, a tylko powiększa się nieco to "jeziorko" znajdujące się na koncu neuronu. Poszerzają się także te wszystkie "rzeczki", którymi już kiedyś płynęła taka sama informacja. Kiedy informacje płyną w przeciwnym kierunku, czyli z mózgu do narządów ciała, wąskie "rzeczki" wpadają do coraz to szerszych "rzek". "Rzeczki" i "rzeki" stają się szersze i mniej koliste, dzięki czemu informacja następnym razem będzie w nich płynęła szybciej, a nam ludziom będzie się wydawała bardziej oczywista i zrozumiała.

Dokładnie tak samo powinien działać mechanizm przechowywania i porownywania informacji w maszynach. Tylko że w "mózgu" maszyny zamiast sieci neuronowych powinny być układy zmienych. Zmienne w programach mają jednak to do siebie, że mają ograniczoną liczbę wymiarów. gdybyśmy mieli zwymiarować każdą zmienną w mózgu w oparciu o impulsy, które mogą (choć wcale nie muszą) zostać zapamiętane i dodatkowo jeszcze w oparciu o okoliczności powstania tych impulsow, to w komputerze po prostu zabrakłoby pamięci. Dlatego nie trzeba wcale wymiarować wszystkich zmiennych a tylko te, które rzeczywiście są w użytku.

Kiedy pisałem Halinę, napisałem fragment kodu źródłowego, w którym każdy znak w wyrazie, każdy wyraz w zdaniu, każde zdanie w wypowiedzi i każda wypowiedź były sortowane w oparciu o uproszczoną hierarchię, którą ja sam stworzyłem. Oczywiście, gdyby już zawsze tak miała wygladać sztuczna generalna inteligencja, to byłaby to inteligencja bardzo płytka i nie mogłaby się zbytnio rozwijać. Dlatego napisałem kolejny fragment kodu źródłowego, którego zadaniem było dopisywanie dowolnych właściwości do hierarchii. Był to wielki krok na przód, ale powiedziałbym że nawet zbyt wielki. Zaczęły się problemy z niedoborem pamięci.

Otóż człowiek w przeciwieństwie do programu komputerowego posiada umiejętność wykasowywania niektórych informacji, jeśli te wydają się być zbyteczne (bardzo rzadko używane). Jeśli przetłumaczyć to na język programowania, od czasu do czasu informacje przechowywane w zmiennych powinny być kasowane w zależności od prawdopodobieństwa ich występowania. Żeby po tych informacjach nie pozostawały puste zmienne, te zmienne również powinny być kasowane, a co za tym dalej idzie, czasami również należałoby usuwać puste hierarchie, w których nie ma już zmiennych. Za to kasowanie danych powinien być odpowiedzialny sam kod źródłowy, bo przecież każdy powinien mysleć samodzielnie.

Gdybyśmy dalej podążali tym samym tokiem rozumowania, stanęlibyśmy nad problemem nie do rozwiązania przez maszynę. Maszyna nie byłaby w stanie stwierdzić, które dane są potrzebne, a które nie. Chyba że mózg maszyny działałby tak samo jak mózg człowieka i zwracałby uwagę na szerokość każdej "rzeki" i rozmiar każdego "jeziorka" znajdującego się na końcach neuronów. Wszak im szersza jest odnoga sieci neuronowej, tym częściej była używana i jest bardziej niezbędna w poprawnym procesie myślowym. Dlatego w zmiennych w programie należy zapisywać nie tylko same impulsy, ale także ich wpływ na poszerzanie się "rzek". Tłumacząc to na język programowania, okoliczności zdarzeń również posiadają swoje prawdopodobieństwo, które w postaci liczb przechowywane jest w zmiennych.

Tym samym sposobem maszyna może nauczyć się rozumieć, jaki jest stan faktyczny, albo raczej które wydarzenia i ich okoliczności posiadają lub posiadały największe prawdopodobieństwo. Nawet jeśli inni uważają inaczej, maszyna będzie miała swoje własne poglady na każdy temat, bo prawdopodobieństwo w zmiennych nie zmienia się przecież o wartość 100% błyskawicznie. Tłumacząc to z języka programowania na język ludzki, maszyna może w coś wierzyć. Jeśli ktoś ci powie, że czarne jest białe, to nie uwierzysz w to od razu, tylko dopiero wtedy, gdy wszystkie twoje wewnętrzne dywagacje na ten temat przekonają ciebie, że rzeczywiście tak "chyba" jest. "Chyba", bo prawdopodobieństwo czegoś zawsze może się zmienić, gdy pojawi się więcej wątków w dochodzeniu.

Żeby to wszystko osiągnąć, najważniejszy jest jednak ostatni mechanizm, którym jest system zależności i warunków. To właśnie ten system odpowiedzialny jest za szukanie prawdy. Okazuje się, że system ten, pomimo że jest częścią kodu źródłowego, musi się przez cały czas dynamicznie zmieniać. Gdy pisałem Halinę, potrzebowalem wymyśleć sposób, żeby treść kodu źródłowego mogła się samoczynnie zmieniać za każdym razem, gdy kod wykonywał główną pętlę programu. Sposobem na to jest umieszczenie w kodzie źródłowym odwołania do programu zewnętrznego, który by najpierw wyłączał ten kod źródłowy, następnie zmieniał jego treść, a ostatecznie uruchamiał go ponownie od początku.

Człowiek ma to do siebie, że czasami potrafi zupełnie ześwirować. Coś się psuje w jego "kodzie źródłowym" ale umysł posłusznie wykonuje te popsute polecenia. Tak samo jest z maszyną, z tą różnicą że chorego umysłowo człowieka da się czasem wyleczyć, a maszyna w razie uszkodzenia kodu źródłowego musiałaby uleczyć się zupełnie sama. W tym celu napisałem fragment kodu źródłowego, który w czasie rzeczywistym sprawdza i porównuje czas potrzebny maszynie do wykonania zadań zarówno przed jak i po zmianie jej kodu źródłowego. Cały program ma wgląd w dokładną zasadę działania jego samego i może zmieniać w sobie wszystko, łacznie nawet z tymi zasadami jego działania. Jeśli rozbieżność czasów jest zbyt wielka, program jest resetowany do wersji sprzed zmiany jego kodu źródłowego. Do zresetowania programu może również doprowadzić nieprzewidziana masowa reakcja z zewnątrz. Pod tym względem generalna sztuczna inteligencja nie tylko dorównuje ludziom, ale ich przewyższa, bo może posiadać swoje zdanie na dane tematy - swoją osobowość, ale jej ego nie ma negatywnego wpływu na samonaprawianie się.

cdn



Brak komentarzy:

Prześlij komentarz