Biologia a informatyka

Witam serdecznie wszystkich Czytelników z nowej dla mnie pozycji autora, a nie tylko komentatora na tym blogu.

Temat: biologia a informatyka, ale nie na poziomie technicznym, gdzie współpraca kwitnie, tylko na ogólno-filozoficznym, gdzie obie nauki czasem mijają się w pełnym pędzie, zmierzając w przeciwnych kierunkach.

Skojarzenie, o którym chcę napisać, przyszło mi do głowy, gdy przeczytałem w programie tegorocznego warszawskiego Festiwalu Nauki zapowiedź debaty „Biologia syntetyczna osądzona”. Nie chodzi tu mi o osąd, tylko o samą biologię syntetyczną, która, jak ją rozumiem, dąży do tworzenia nowych, dotąd nieistniejących organizmów w sposób w pełni kontrolowany przez badacza. Spodziewam się, że największym marzeniem jest zrobić komórkę z jak najmniejszej liczby komponentów, tak aby w pełni móc ogarnąć wszystkie ich interakcje. Poczuć się jej jak ongiś zegarmistrz, który przypatrywał się finezyjnej współpracy kółek zębatych w zegarku, wiedząc wszystko o wszystkich. To widać też w całym potężnym nurcie biologii molekularnej, w którym chodzi o identyfikowanie tych kółek zębatych, ich funkcji i wzajemnych zazębień.

Z drugiej strony informatyka, gdzie stworzenie prostego programu, nad którym ma się pełną kontrolę, nie jest wielkim wyzwaniem – uczymy tego studentów na pierwszym roku. Jednak w miarę wzrostu zapotrzebowań i skali problemów do rozwiązania, w naszym fachu jest silna potrzeba i tendencja do rezygnacji z postawy zegarmistrza. Coraz częściej (a w zastosowaniach praktycznych już prawie zawsze) informatyk tworząc program rezygnuje z pełnej wiedzy i kontroli nad nim.

W najprostszej wersji jest to absolutnie powszechne, praktycznie wszystkie kompilatory języków programowania dokonują różnych optymalizacji, tak że powstały kod wykonywalny nie do końca odpowiada temu, co programista napisał, choć ma dokładnie identyczną funkcjonalność.

Dalej idą deklaratywne języki programowania, w których programista już tylko w formalny sposób deklaruje co ma być obliczone, a strategię uzyskania tego wyniku pozostawia systemowi obliczeniowemu. Do tej kategorii należy Prolog oraz standardowy język zapytań systemów relacyjnych baz danych SQL.

Pisząc program współbieżny, składający się z wielu wątków wykonujących swoje obliczenia niezależnie, programista traci również kontrolę nad kolejnością wykonania wielu czynności. Jest ona oczywiście zdeterminowana w pojedynczym wątku, ale nie ma sposobu, aby pełną synchronizację osiągnąć pomiędzy czynnościami wykonywanymi w różnych wątkach. W rzeczywistości, w kolejnych testach twego samego programu, wykonywanych w identycznych warunkach, te kolejności mogą być inne. Teraz za nas rozstrzyga już nawet nie system realizujący nasze programy, ale przypadek. Programista musi się zadowolić instalowaniem w programach różnych zabezpieczeń, by poszczególne wątki nie szkodziły sobie nawzajem.

Stosujemy też szeroko algorytmy heurytyczne i uczące się, które działają w sposób nie do końca dla nas przejrzysty. Popatrzmy na sztuczne sieci neuronowe, o których wiele osób pewnie słyszało. Sieć konstruuje się z wielkiej liczby dość systematycznie powiązanych, bardzo prostych sztucznych neuronów i tu w zasadzie kończy się rola twórcza programisty. Potem podaje jej się pewną liczbę przykładów danych wejściowych z podaną oczekiwaną reakcją i tu twórca jeszcze ma aktywną rolę, wybierając strategię uczenia sieci i przykłady, ale daleko mu już do pełnej wiedzy, co się „w środku” dzieje. Sieć uczy się tych przykładów, czyli gromadzi w swoich danych wewnętrznych wiedzę o nich, by w przyszłości poprawnie reagować na nowe zadania, inne od tych szkoleniowych. Okazuje się, że sieci neuronowe zdolne są do generalizacji, a także do uaktualniania swojej wiedzy kosztem wcześniej poznanych wzorców. Co najciekawsze, wiedza zgromadzona przez sieć jest absolutnie nieczytelna dla człowieka, który może oczywiście użyć jej jako narzędzia, ale nie może (w obecnym stanie wiedzy) przełożyć jej na w pełni kontrolowalny algorytm realizujący to samo zadanie.

Mamy więc dwa potężne nurty: biologiczny, żeby uprościć, poddać kontroli i zrozumieć, oraz biegnący w przeciwnym kierunku informatyczny, żeby zrezygnować z pełnego zrozumienia i kontroli w zamian za sprawne działanie. Pozdrawiam wszystkich płynących w przeciwnym kierunku!

Jerzy Tyszkiewicz

Fot. Hustvedt (CC SA)