Poznański Portal Matematyczny

Matematyk w Dolinie Krzemowej, I

Autor: Piotr Zioło Redaktor: Paweł Mleczko

Przyszłość jest dziś

Wyobraźmy sobie popołudnie współczesnego nastolatka. Po powrocie ze szkoły sięga po tablet, loguje się do Facebooka i przegląda treści wyselekcjonowane specjalnie dla niego przez sztuczną inteligencję. Następnie uruchamia Gmaila, aby sprawdzić pocztę. Nie zajmuje to długo, ponieważ od dawna nie zdarzyło się, aby do jego skrzynki trafił spam. W końcu, w poszukiwaniu dalszego umysłowego wypoczynku po szkole, trafia na YouTube, gdzie kolejna sztuczna inteligencja serwuje mu treści dostosowane do jego zainteresowań. Gdy już skończy surfowanie po sieci, zabiera się za lekcje. Jeśli nie pamięta jakiegoś prostego faktu, zawsze może zapytać Siri (bota opartego na sztucznej inteligencji) ze swojego iPhone’a, a gdy Siri sobie nie poradzi, spyta Google’a (chiński nastolatek spyta Baidu – chińskiego odpowiednika Google’a, który potrafi już sam rozwiązywać proste zadania z fizyki i matematyki). Jeśli nasz nastolatek w poszukiwaniu materiałów trafi przypadkiem na stronę w języku koreańskim albo suahili, nie będzie to stanowiło żadnego problemu, ponieważ Google Translate, mimo że wciąż mocno niedoskonały, przetłumaczy stronę na wystarczającym, zrozumiałym poziomie. A w międzyczasie pod nogami będzie mu się pętał Hektor − automatyczny odkurzacz1.

Wszystkie przykłady wykorzystania sztucznej inteligencji (czy też uczenia maszynowego2, które jest trzonem współczesnej sztucznej inteligencji) wskazane powyżej to jednak tylko znaki okresu wczesnego dzieciństwa tej dziedziny. Na wizje rodem z książek Stanisława Lema czy Isaaca Asimova, takie jak roboty o inteligencji przewyższającej ludzką, chmary inteligentnych nano-robotów czy kopalnie na pasie asteroid, przyjdzie nam pewnie jeszcze trochę poczekać3, jednak już wkrótce sztuczna inteligencja będzie miała na życie naszego nastolatka znacznie większy wpływ.

Bez ustawiania budzika inteligentny dom obudzi naszego bohatera o odpowiedniej godzinie, znając jego plan zajęć ściągnięty z internetu. Odpowiednio wcześniej włączy ogrzewanie, aby wstawanie było milsze, potem włączy światła, zaparzy kawę, a także wstawi tosty. Gdy nasz nastolatek przejdzie już przez próg, inteligentny dom zmyje naczynia, wstawi pranie oraz tak ustawi ogrzewanie, aby kosztowało ono jak najmniej. W tym czasie nasz bohater wsiądzie do samochodu bez kierowcy, a ten zawiezie go bez pytania (bo przecież zna tryb dnia wszystkich domowników) pod samą szkołę. Natomiast po powrocie do domu w odrobieniu lekcji naszemu nastolatkowi pomoże bot, z którym rozmowa będzie nieodróżnialna od rozmowy ze zwykłym człowiekiem.

Inteligentne domy, autonomiczne samochody oraz inteligentne boty, a nawet roboty już istnieją, chociaż domy nie są jeszcze tak zaawansowane, samochody są jeszcze w fazie testów, a roboty często przewracają się o własne nogi. Warto jednak zobaczyć na własne oczy na poniższych krótkich filmach, że ta przyszłość, tworzona obecnie głównie przez firmy z Doliny Krzemowej takie jak Google, Apple, Facebook, Amazon, Tesla Motors, jest już blisko.

Nie ma wątpliwości, że żyjemy w niezwykłych czasach, gdy każdego dnia science fiction na naszych oczach staje się rzeczywistością. Ale czy zastanawialiście się kiedyś, jaki zawód trzeba wykonywać, aby stać się jednym z twórców tej rewolucji, która w ciągu kilkudziesięciu lat zmieni naszą rzeczywistość nie do poznania? Pewnie każdy w pierwszym momencie pomyśli o informatykach, programistach. Nie bez powodu mówi się jednak o programistach jako o sile roboczej XXI wieku. W XIX i XX wieku masy ludzi pracowały w fabrykach, w dzisiejszych czasach taką podstawową siłę roboczą stanowią programiści. Programowanie to niezwykle przydatna umiejętność, jak czytanie i pisanie, i właściwie trudno wyobrazić sobie osobę zajmującą się zaawansowanymi technologiami, która nie potrafi programować. Jednak od umiejętności pisania i czytania do bycia Sienkiewiczem, Lemem, Hemingwayem czy Dostojewskim droga jest bardzo długa. I tak Iliadę, Quo Vadis czy Solaris świata technologii i sztucznej inteligencji nie piszą dziś programiści, lecz matematycy. To właśnie matematyka stoi u podstaw całego postępu, jaki ma obecnie miejsce, czego wyrazem jest chociażby fakt, że to właśnie Google zatrudnia najwięcej matematyków z doktoratem spośród wszystkich firm na całym świecie.

Wiele metod leżących u podstaw cyfrowej rewolucji wymaga głębokiej znajomości matematyki, daleko wykraczającej poza materiał szkolny, jednak z drugiej strony idee, a także istotne elementy matematyczne kluczowych technik można poznać bazując na wiedzy z gimnazjum i liceum. W pierwszej części tego artykułu skupimy się na metodach stosowanych w filtrach antyspamowych, zaś w drugiej przejdziemy do najważniejszego narzędzia napędzającego rozwój sztucznej inteligencji − sieci neuronowych.

Mimo że zajmowanie się sztuczną inteligencją wymaga sporego intelektualnego wysiłku, tak jak i przeczytanie tego artykułu, zdecydowanie warto zrobić ten pierwszy krok w stronę Doliny Krzemowej, aby w przyszłości stać się Kolumbem swoich czasów.

Informacyjny potop

Żyjemy w epoce informacji. W ciągu ostatnich dwóch lat ludzkość wyprodukowała więcej danych niż przez resztę swojej historii. Praktycznie wszyscy dokładamy się do tego potopu danych, np. robiąc zdjęcia czy też nagrywając filmy swoimi telefonami komórkowymi. Przez stały dostęp do elektroniki część tego strumienia danych codziennie do nas trafia, istotnie obciążając nasze systemy poznawcze.

Problem zalewu informacyjnego jest na tyle poważny, że doczekał się już opracowań książkowych na swój temat. Jednak dużo szybciej ideę tego problemu można poznać, oglądając ten krótki film.

Dostęp do ogromnych zasobów informacyjnych ma również swoją pozytywną stronę, pozwalając niemal każdemu bez wychodzenia z domu zgłębić tajniki praktycznie każdej dziedziny wiedzy. Jednak mimo ogromnej elastyczności naszych mózgów, ewolucyjnie nie są one dostosowane do radzenia sobie ze stałym napływem informacji, a szczególnie z częstymi „rozpraszaczami”. Z tego też powodu częste sprawdzanie skrzynki mailowej potrafi bardzo istotnie zredukować efektywność naszej pracy. Jeśli jednak w każdej chwili może przyjść do nas jakiś istotny mail, na który powinniśmy szybko zareagować, nie mamy wyjścia. W takim wypadku kluczowe staje się, abyśmy nie otrzymywali mnóstwa bezsensownych maili, czyli tzw. spamu. Co ciekawe, przeliczając spadek efektywności naszej pracy spowodowany przez przetwarzanie spamu, możemy dojść do kwot rzędu miliardów dolarów w skali świata. Dlatego tak ważne jest skuteczne filtrowanie takich wiadomości.

Do odfiltrowywania spamu stosuje się tzw. statystykę Bayesowską oraz oparty na niej naiwny klasyfikator bayesowski. Sama nazwa tej metody pochodzi od jednego z ojców statystyki Thomasa Bayesa, żyjącego w XVIII wieku matematyka, który stworzył podwaliny całego działu statystyki, pozwalającego na wyciąganie wniosków na postawie poczynionych obserwacji.

Idea oznaczania wiadomości jako spam opiera się na badaniu częstości występowania różnych słów (a także całych zwrotów) w normalnych wiadomościach oraz w tych oznaczonych jako spam. Ponieważ do oceny tych częstości potrzebujemy początkowej bazy obu typów wiadomości, filtry antyspamowe z czasem stają się coraz lepsze, mogąc uczyć się na coraz to większych zbiorach danych.

Rozpatrzmy konkretny przykład, aby zobaczyć, jak to działa w praktyce. Załóżmy, że mamy do dyspozycji następującą bazę maili, na której nauczymy nasz klasyfikator rozpoznawać spam.

Normalne maileSpam
Myślę, że to może być dobra okazja. Sprawdź jąPożyczka na dowolny cel. Sprawdź
Myślę, że warto trochę oszczędzićSprawdź, ile możesz oszczędzić
Myślałeś już o tej pożyczce?Myślisz, że widziałeś już wszystko? Sprawdź najlepsze okazje

W rzeczywistości takie bazy zawierają miliony maili, w naszym przykładzie ograniczamy się jednak zaledwie do 6 maili, ponieważ tak znacznie lepiej będzie widać, na czym to wszystko polega.

Po otrzymaniu maila o przykładowej treści „Myślę, że to okazja” chcemy stwierdzić, jaka jest szansa, że jest to spam. Jeśli będzie to bardzo prawdopodobne, umieścimy taką wiadomość w folderze dla spamu.

Na początek załóżmy, że nie interesują nas spójniki („że”), zaimki („to”, „tej”, „ją”, „ile”), przyimki („na”, „o”) oraz przysłówki („już”). Te słowa znajdują się praktycznie w każdym mailu, także niewiele wnoszą. Dodatkowo, dla uproszczenia, wszystkie odmiany danego słowa będziemy traktować jako to samo słowo. Spójrzmy więc, jak wyglądają częstości występowania poszczególnych słów w obu grupach maili.

słowowystąpienia w normalnych mailachwystąpienia w spamie
myślę, myślałeś, myślisz31
może, możesz11
być10
dobra10
okazja, okazje11
sprawdź13
warto10
trochę10
oszczędzić11
pożyczka11
dowolny01
cel01
widziałeś01
wszystko01
najlepsze01

Wszystkich wystąpień słów w normalnych mailach jest 12, zaś w spamie 14.

W języku matematyki naszym celem jest obliczenie
\begin{align*}
P(SPAM | \text{„myślę”}, \text{„okazja”}),
\end{align*}
czyli, odczytując to wyrażenie w języku polskim, prawdopodobieństwa, że otrzymany mail to spam, pod warunkiem, że zawiera on słowa „myślę” oraz „okazja” (słowa „że” oraz „to” pominęliśmy zgodnie z naszym założeniem). Wielka litera „P” oznacza prawdopodobieństwo, natomiast pionowa kreska „|” oznacza warunek.

Aby lepiej zrozumieć ten zapis, przyjrzyjmy się dwóm przypadkom rzutu kostką sześciościenną. Najpierw zastanówmy się, ile wynosi prawdopodobieństwo wyrzucenia wyniku 6. Wszystkich możliwości mamy 6, a mamy wyrzucić jedną z nich. Dlatego
\begin{align*}
P(A) = \frac{1}{6} \approx 0{,}166 = 16{,}6\%,
\end{align*}
gdzie jako $A$ oznaczyliśmy interesujące nas zdarzenie, tzn. wyrzucenie 6 oczek. Matematycy wprowadzają takie oznaczenia, aby skrócić i uprościć zapis, choć równie dobrze można by napisać
\begin{align*}
P(\text{wyrzucenie 6 oczek w jednym rzucie kostką sześciościenną}) = \frac{1}{6}.
\end{align*}

A jaka jest szansa, że wypadło 6 oczek, jeśli wiemy już (np. ktoś nam powiedział), że wynikiem jest liczba parzysta? W takim przypadku liczba oczek na kostce musiała wynosić 2, 4 lub 6. Ponieważ interesujący nas wynik jest jedną z tych trzech opcji, możemy stwierdzić, że
\begin{align*}
P(A | B) = \frac{1}{3} \approx 0{,}333 = 33{,}3\%,
\end{align*}
przy czym dodatkowo jako $B$ oznaczyliśmy tutaj zdarzenie wypadnięcia parzystej liczby oczek. Wyrażenie $P(A | B)$ czytamy jako prawdopodobieństwo $A$ pod warunkiem $B$. W naszym przypadku prawdopodobieństwo wypadnięcia 6 oczek, pod warunkiem, że wypadła parzysta liczba oczek.

Możemy teraz wrócić do zadania sklasyfikowania naszego maila. Zwróćmy uwagę, że dużo prościej możemy policzyć prawdopodobieństwo wystąpienia poszczególnych słów, jeśli wiemy, że mail jest lub nie jest spamem. Przykładowo zastanówcie się, jakie jest prawdopodobieństwo wystąpienia słowa „sprawdź” w mailu sklasyfikowanym jako spam. Wszystkich słów w naszej próbce spamu jest 14, natomiast słowo „sprawdź” występuje 3 razy. A zatem
\begin{align*}
P(\text{„sprawdź”} | SPAM) = \frac{3}{14} \approx 0{,}214 = 21{,}4\%.
\end{align*}
A jakie jest prawdopodobieństwo wystąpienia tego słowa w mailach, które nie są spamem? W naszym przypadku to słowo występuje 1 raz w próbce normalnych maili, a zatem
\begin{align*}
P(\text{„sprawdź”} | !SPAM) = \frac{1}{12} = 0{,}083 = 8{,}3\%.
\end{align*}
Zastosowaliśmy tutaj oznaczenie $!SPAM$ dla maili, które nie są spamem (wykrzyknik to matematyczne oznaczenie przeciwieństwa4).

Aby poczuć się pewniej w tych obliczeniach, warto sprawdzić samodzielnie kilka podanych niżej przykładów.
\begin{align*}
P(\text{„myślę”} | SPAM) &= \frac{1}{14} \approx 0{,}083 = 8{,}3\% \\
P(\text{„myślę”} | !SPAM) &= \frac{3}{12} = 0{,}25 = 25\% \\
P(\text{„dobra”} | SPAM) &= \frac{0}{14} = 0 \\
P(\text{„dobra”} | !SPAM) &= \frac{1}{12} \approx 0{,}083 = 8{,}3\% \\
P(\text{„okazja”} | SPAM) &= \frac{1}{14} \approx 0{,}071 = 7{,}1\% \\
P(\text{„okazja”} | !SPAM) &= \frac{1}{12} \approx 0{,}083 = 8{,}3\%.
\end{align*}

Jednak naszym zadaniem jest policzyć prawdopodobieństwo $P(SPAM | \text{„myślę”}, \text{„okazja”})$. Jak to zrobić?

Dochodzimy tutaj do głównego elementu naiwnego klasyfikatora bayesowskiego, do tzw. wzoru Bayesa
\begin{align*}
P(A | B) = \frac{P(B | A) P(A)}{P(B)},
\end{align*}
który pozwala nam zamienić oba „zdarzenia” miejscami. Aby sprawę jeszcze uprościć zapiszemy ten wzór w bardziej rozwiniętej postaci5
\begin{align*}
P(A | B) = \frac{P(B | A) P(A)}{P(B | A) P(A) + P(B | !A) P(!A)}.
\end{align*}
W naszym przypadku po zastosowaniu wzoru Bayesa dostaniemy
\begin{multline*}
P(SPAM | \text{„myślę”}, \text{„okazja”}) \\
= \frac{P(\text{„myślę”}, \text{„okazja”} | SPAM) P(SPAM)}{P(\text{„myślę”}, \text{„okazja”} | SPAM) P(SPAM) + P(\text{„myślę”}, \text{„okazja”} | !SPAM) P(!SPAM)}.
\end{multline*}
Na pierwszy rzut oka wygląda to skomplikowanie, ale warto zwrócić uwagę, że po prostu we wzorze Bayesa w miejsce $A$ wstawiliśmy $SPAM$, a w miejsce $B$ − „myślę”, „okazja”.

Teraz musimy policzyć poszczególne prawdopodobieństwa występujące w tym wzorze. Dla uproszczenia zakładamy, że występowanie w mailach poszczególnych słów jest od siebie zupełnie niezależne. Jest to naiwne i z reguły nieprawdziwe założenie, stąd też nazwa naiwny klasyfikator bayesowski, jednak w praktyce sprawdza się ono wyjątkowo dobrze6. W takim wypadku wyrażenie $P(\text{„myślę”}, \text{„okazja”} | SPAM)$ jest równe $P(\text{„myślę”}| SPAM) \cdot P(\text{„okazja”} | SPAM)$, a te wartości już wcześniej policzyliśmy. Mamy więc
\begin{align*}
P(\text{„myślę”}, \text{„okazja”} | SPAM) &= P(\text{„myślę”}| SPAM) \cdot P(\text{„okazja”} | SPAM) \\
&= \frac{1}{14} \cdot \frac{1}{14} = \frac{1}{196}.
\end{align*}
I dalej
\begin{align*}
P(\text{„myślę”}, \text{„okazja”} | !SPAM) &= P(\text{„myślę”}| !SPAM) P(\text{„okazja”} | !SPAM) \\
&= \frac{3}{12} \cdot \frac{1}{12} = \frac{3}{144}.
\end{align*}

Ponieważ w naszej próbce mamy trzy normalne maile i trzy maile będące spamem, możemy napisać
\begin{align*}
P(SPAM) = P(!SPAM) = \frac{1}{2} = 0{,}5 = 50\%.
\end{align*}

Po wszystkich trudach7 możemy nareszcie policzyć
\begin{align*}
P(SPAM | \text{„myślę”}, \text{„okazja”}) &= \frac{\frac{1}{196} \cdot \frac{1}{2}}{\frac{1}{196} \cdot \frac{1}{2} + \frac{3}{144} \cdot \frac{1}{2}} \\
&= \frac{12}{61} \approx 0{,}197 = 19{,}7\%.
\end{align*}
A zatem mamy niecałe 20% prawdopodobieństwa, że mail „Myślę, że to okazja” jest spamem. Oznacza to, że na ponad 80% nie jest on spamem, a zatem filtr powinien go przepuścić.

Zdecydowanie warto spróbować swoich sił, przepuszczając przez zbudowany przez nas naiwny klasyfikator bayesowski następujące maile:

  1. „Sprawdź te okazje”
  2. „Sprawdź tę pożyczkę! Warto!”

Po wykonaniu obliczeń powinniście otrzymać
\begin{align*}
P(SPAM | \text{sprawdź}, \text{okazje}) &= \frac{108}{157} \approx 68{,}8\%, \\ P(!SPAM | \text{sprawdź}, \text{okazje}) &= \frac{49}{157} \approx 31{,}2\%
\end{align*}
oraz
\begin{align*}
P(SPAM | \text{sprawdź}, \text{pożyczka}, \text{warto}) &= 0 = 0\%, \\
P(!SPAM | \text{sprawdź}, \text{pożyczka}, \text{warto}) &= 1 = 100\%.
\end{align*}

Zaskakiwać może stuprocentowa klasyfikacja ostatniego maila jako normalnego maila. Z czego to wynika? W istocie wszystkiemu winne jest słowo „warto” występujące w naszej bazie maili tylko w normalnych mailach. Aby zapobiec takiemu zjawisku, w praktyce stosuje się znacznie większe bazy maili, a także tzw. wygładzanie Laplace’a (wyszukanie, na czym polega ta metoda, zostawiamy dla zainteresowanych).

W najlepszych filtrach antyspamowych stosuje się jeszcze dodatkowo prawdopodobieństwa wystąpienia całych zwrotów, co np. przy gigantycznych zbiorach danych będących w posiadaniu Google’a daje rewelacyjne rezultaty, które możemy zaobserwować w Gmailu.

I to już wszystko. W tym momencie możecie z dumą stwierdzić, że z punktu widzenia matematyki wiecie już wszystko8 o filtrach antyspamowych. Natomiast w drugiej części tego artykułu dowiecie się, w jaki sposób komputery potrafią nauczyć się rozpoznawać, co jest na zdjęciach, sterować samochodem albo dronem, a także jak uczą się grać w gry komputerowe oraz w jaki sposób były w stanie pokonać ludzi w szachy, a ostatnio także w go9.

Przypisy

  1. Co ciekawe, ponad połowa użytkowników nadaje imię zakupionemu inteligentnemu odkurzaczowi.
  2. Uczenie maszynowe to zbiór metod pozwalających na uczenie komputerów wykonywania różnych czynności, najczęściej prognozowania, w oparciu o dostępne dane lub trening. Przykładami mogą być tutaj wszelkie systemy rekomendacyjne (np. te wykorzystywane przez YouTube, Spotify, Facebook czy Amazon), automatyczne translatory (jak Google Translate), filtry antyspamowe (np. w Gmailu), oprogramowanie samochodów autonomicznych (np. Google, Tesla Motors), algorytmy handlujące na giełdzie czy algorytmy diagnostyczne wykorzystywane w medycynie (np. wykrywające raka piersi albo zbliżający się atak epileptyczny). W istocie trudno dziś znaleźć dziedzinę, w której nie zastosowano dotychczas uczenia maszynowego, także ta lista przykładów mogłaby ciągnąć się jeszcze przez wiele stron.
  3. Zgodnie z wieloma prognozami, np. futurysty Raya Kurzweila, zaledwie ok. 20 lat
  4. Często używa się również symboli \(\neg\) lub \(\sim\). O symbolach i języku matematyki można poczytać w tekście „O języku matematyki” − przyp. red.
  5. Dla zainteresowanych, zastosowaliśmy tutaj tzw. wzór na prawdopodobieństwo całkowite.
  6. Tego typu uproszczenia są często spotykane w inżynierskich zastosowaniach matematyki. Piękno matematyki polega na tym, że dzięki ścisłym metodom możemy określić, czy i kiedy tego typu uproszczenia nie doprowadzą do katastrofy.
  7. Pamiętajmy, że matematycy tego typu obliczenia wykonują bardzo rzadko. Po opracowaniu metody do wykonywania obliczeń pisze się odpowiedni program, np. w bardzo popularnym języku programowania Python, który obliczenia wykonuje za nas. Matematyka to nauka polegająca na wymyślaniu tego typu metod, a nie rachowaniu.
  8. No, prawie wszystko.☺
  9. Go to starożytna chińska gra planszowa.


Artykuł został sfinansowany dzięki wsparciu pozyskanemu przez Poznańską Fundację Matematyczną od Miasta Poznań na realizację projektu „Potęga matematyki”.

Zobacz następną część tego artykułu
Do góry