AI: Odrobina teorii
AI to oczywiście Artificial Intelligence czyli Sztuczna Inteligencja.
Natomiast następujących zapisów nie należy w żadnym wypadku traktować jako jakiejkolwiek uporządkowanej informacji na temat sztucznej inteligencji. Umieszczam tu kilka bardzo ogólnych i zupełnie przypadkowych uwag.
Tematy sztucznej inteligencji czy uczenia maszynowego czy big data (wszystkie jakoś ze sobą powiązane) odgrywają dziś coraz większą rolę. Stąd nieśmiały pomysł, aby praktycznie (oraz szybko i łatwo) pokazać proste zadania z tym związane. Natomiast tematyka jest bardzo szeroka i warta podjęcia szerszych studiów (na przykład na II stopniu?).
Pod względem matematycznym, na podstawy sztucznej inteligencji składają się:
- algebra liniowa:
- przestrzenie wektorowe,
- tensory,
- przekształcenia liniowe,
- podprzestrzenie
- teoria macierzy,
- wartości i wektory własne,
- analiza matematyczna:
- granice, ciągłość, nieciągłość,…
- pochodne,
- całki,
- podstawowe twierdzenia rachunku całkowego,
- …
- rachunek prawdopodobieństwa:
- prawdopodobieństwa warunkowe,
- „prawo wielkich liczb”,
- statystyka bayesowska,
- błądzenie losowe (np. łańcuchy Markowa)
- …
- optymalizacja:
- programowanie liniowe,
- programowanie kwadratowe,
- zagadnienia kombinatoryczne,
- …
- heurystyka:
- algorytmy genetyczne,
- ewolucja różniczkowa (Differential evolution),
- metody iteracyjne,
- metoda Newtona,
- metody gradientowe,
- metody gradientów sprzężonych
- interpolacja
- …
Klasyfikacja
Jednym z najważniejszych zadań sztucznej inteligencji jest klasyfikacja, czyli taki problem decyzyjny, który odpowiada do jakiej kategorii należy badany obiekt. Jednym z przykładów jest rozpoznanie rodzaju schorzenia na podstawie objawów. Dodać trzeba, że bardzo często algorytmy sztucznej inteligencji sprawdzają się tu bardzo dobrze.
Podstawowe metody stosowane przez algorytmy klasyfikacji to:
- „naiwny Bayes” — metoda oparta na twierdzeniu Bayesa o prawdopodobieństwie warunkowym,
- budowa hiperpłaszczyzn (hiperpowierzchni) rozgraniczających w przestrzeni cech,
- \(k\)-Najbliższych Sąsiadów — metoda polegająca na zmierzeniu odległości wektora cech klasyfikowanego obiektu od sklasyfikowanych i wyboru tej kategorii, w której znajduje się \(k\) najbliższych obiektów.
- drzewa decyzyjne — rozpatruje się sekwencyjnie kolejne cechy klasyfikowanego obiektu i na tej podstawie dokonuje ostatecznej klasyfikacji,
- regresja logistyczna,
- …
Zazwyczaj klasyfikacja wymaga ciągu uczącego, czyli zestawu obiektów, które są wstępnie sklasyfikowane. Na tej podstawie algorytm „dostraja się taki sposób, żeby jego decyzje były zgodne z zadeklarowanymi klasami obiektów. Bardzo często uczenie się ma kolejny etap, czyli sprawdzian: działanie algorytmu testowane jest na kolejnych preklasyfikowanych obiektach. Jeżeli wyniki nie są zadowalające — dostarcza się kolejny ciąg uczący.
Stąd przyjęła się nazwa „Uczenie maszynowe” lub Machine Learning.
Pamiętać trzeba, że nigdy decyzje klasyfikatora nie są w 100% poprawne.
W przypadku klasyfikacji binarnej można stworzyć „tablicę pomyłek” (confusion matrix). Niech nasz algorytm służy do decydowania czy pacjent jest chory czy zdrowy. Możemy mieć do czynienia z czterema sytuacjami:
- Pacjent jest zdrowy i tak jest klasyfikowany przez algorytm; decyzja jest prawdziwie pozytywna czyli TP1.
- Pacjent jest zdrowy, ale klasyfikowany jako chory — fałszywie negatywnie czyli FN.
- Pacjent jest chory, ale klasyfikowany jako zdrowy —fałszywie pozytywnie, FP,
- Chory pacjent jest klasyfikowany jako chory — prawdziwie negatywnie, TN.
Przypadki klasyfikacji fałszywie pozytywnej określane są również mianem błędu pierwszego rodzaju, a przypadki fałszywie negatywne — błędy drugiego rodzaju.
Czasami używa się dodtkowych parametrów: czułość (TPR — True Positive Rate), swoistość (TNR — True Negative Rate), precyzja (PPV Positive Predictive Value) i dokładność (ACC Accuracy). Określone są one wzorami:
- TPR: \[TPR=TP/(TP+FN)\]
- TNR: \[TNR=TN/(FP+TN)\]
- PPV: \[PPV=TP/(TP+FP)\]
- ACC: \[ACC=(TP+TN)/(P+N)\] gdzie: \(P=TP+FN\), a \(N= TN+FP\); \(P+N\) to wielkość testowanej populacji.
Przykład
Poniższy przykład został wybrany z dokumentacji.
Do klasy \(A=\{1, 2\}\) należą dwa elementy, do klasy \(B=\{3,4\}\) kolejne dwa. zbiory są rozłączne i klasyfikacja wydaje się prosta: wszystko co mniejsze od 2,5 to \(A\), a pozostałe — \(B\).
\(\pmb{\text{TrainingSet}=\{1\to \text{A},2\to \text{A},3\to \text{B},4\to \text{B}\};}\)
\(\pmb{c=\text{Classify}[\text{TrainingSet}]}\)
\(\text{ClassifierFunction}\left[\fbox{$$}\right]\)
\(\pmb{c[2.5,”\text{Probabilities}”]}\)
\(\text{A}\to 0.166667,\text{B}\to 0.833333\)
\(\pmb{\text{Plot}[c[x,”\text{Probability}”\to \text{A}],\{x,0,5\}]}\)
Gdy sytuację skomplikujemy i \(A=\{1, 2, 3{,}1\}\), a \(B=\{3, 3{,}15, 4, 5\}\) to zbiory znowu, są rozłączne, ale przedziały liczbowe „zachodzą” na siebie. Klasyfikacja nie jest już taka prosta.
\(\pmb{\text{TrainingSet}=\{1\to \text{A},2\to \text{A},3.1\to \text{A},3\to \text{B},3.15\to \text{B},4\to \text{B},5\to \text{B}\};}\)
\(\pmb{c=\text{Classify}[\text{TrainingSet}]}\)
\(\text{ClassifierFunction}\left[\fbox{$$}\right]\)
\(\pmb{c[2.5,”\text{Probabilities}”]}\)
\(\text{A}\to 0.523397,\text{B}\to 0.476603\)
\(\pmb{\text{Plot}[c[x,”\text{Probability}”\to \text{A}],\{x,0,5\}]}\)
\(\pmb{c[3]}\)
\(\text{B}\)
Co ciekawe, w pierwszym przypadku użyty klasyfikator to Nearest Neighbors (najbliżsi sąsiedzi), a w drugim regresja logistyczna.
,,Odwrotna klasyfikacja”
Pod pojęciem ,,odwrotnej klasyfikacji” rozumiem zadanie stworzenia obiektu, który będzie miał określone cechy. Takie zadanie już bardziej nadaje się do określenia jako ,,sztuczna inteligencja” bo algorytm tworzy (na przykład obraz obiektu) mający pożądane cechy. Technologia nazywa się GAN (Generative Adversarial Network) i ostatnio nie schodzi z łam internetowych dzienników. Pojawiły się zestawy sztucznie generowanych twarzy, sztucznie generowanych kotków, a nawet obrazki ptaków (i kwiatów) generowane na podstawie słownego opisu (,,ptak z białym brzuszkiem i zółtym ogonem”) [1].
Lektury
Wydaje się, ża zacząć można od Tadeusiewicza [2] i [3]. Autor jest niewątpliwie autorytetem w tym zakresie. Po polsku dostępnych jest kilka prac: [4], [5], [6]. Tematyka jest tak gorąca, że można napotkać sporo obszernych źródeł (udostępnianych, na przykłąd, przed publikacją) lub jako materiały pomocnicze do kursów: [7], [8], [9]. Ciekawe jest też obszerne zetsawienie zasobów [10].
Uwagi
Sugeruję dokładne zapoznanie się z dokumentacją polecenia Classify dostępną bądź na stronach producenta lub — lepiej — w czasie zajęć, po otwarciu notatnika Mathematici. Dokumentacja jest interaktywna i można polecenia w helpach modyfikować i patrzeć na efekty lub kopiować do notatnika. Warto zapoznać się z całym rozdziałem dotyczącym uczenia maszynowego [11].
Polecenie Classify automatycznie tworzy procedurę (funkcję), która podany element klasyfikuje do kategorii.
Dostępne metody klasyfikacji to:
- „DecisionTree”
- “GradientBoostedTrees”
- “LogisticRegression” ’
- “Markov”
- “NaiveBayes”
- “NearestNeighbors”
- “NeuralNetwork”
- “RandomForest”
- “SupportVectorMachine”
Polecenie Classify może wybierać metodę klasyfikacji tak, aby optymalizować jedno z kryteriów:
- użycie pamięci,
- jakość klasyfikacji,
- szybkość klasyfikacji
- szybkość nauki
- może też wybrać kryterum automatycznie, lub użyć wszystkich danych jako danych uczących.
Dodatkowo, oprogramowanie ma już kilka wcześniej przygotowanych funkcji klasyfikujących, pozwalających na rozpoznawanie:
- flag,
- wieku na podstawie twarzy,
- płci na podstawie twarzy,
- języku w jakim napisany jest tekst (lub program)
- …
Narzędzia
Nie ma najlepszych narzędzi do rozwiązywania żadnego problemu. Natomiast obliczenia na potrzeby sztucznej inteligencji prowadzone są/mogą być w różnych językach. Do najpopularniejszych należą:
- Python,
- R,
- Matlab,
- Wolfram Language,
- Julia,
- Prolog
- Lisp
- Java
- …
Zajęcia
Wstęp
Zacznijmy od prostego przykładu z dokumentacji funkcji Classify programu Mathematica.
Wczytujemy dane korzystając z serwisu Gutenberg zawierającego pełne teksty utworów literackich dostępne na wolnych licencjach.
Najpierw Szekspir:
1 2 3 4 5 6 |
Othello = Import["http://www.gutenberg.org/cache/epub/2267/pg2267.txt"]; Hamlet = Import["http://www.gutenberg.org/cache/epub/2265/pg2265.txt"]; Macbeth = Import["http://www.gutenberg.org/cache/epub/2264/pg2264.txt"]; |
Później Hugo:
1 2 3 4 5 6 |
LesMiserables = Import["http://www.gutenberg.org/cache/epub/135/pg135.txt"]; NotreDamede = Import["http://www.gutenberg.org/cache/epub/2610/pg2610.txt"]; TheManWho = Import["http://www.gutenberg.org/cache/epub/12587/pg12587.txt"]; |
I wreszcie Wilde:
1 2 3 4 5 6 |
TheImportance = Import["http://www.gutenberg.org/cache/epub/844/pg844.txt"]; ThePicture = Import["http://www.gutenberg.org/cache/epub/174/pg174.txt"]; AnIdeal = Import["http://www.gutenberg.org/files/885/885-0.txt"]; |
Tworzymy funkcję klasyfikującą wiążąc po dwa teksty z Autorem.
1 2 3 |
author = Classify[<|"William Shakespeare" -> {Othello, Hamlet}, "Oscar Wilde" -> {TheImportance, ThePictureo}, "Victor Hugo" -> {LesMiserables, NotreDamede}|>] |
Sprawdzamy pozostałe teksty
1 |
author[{Macbeth, AnIdeal, TheManWho}] |
Zadania
- Na podstawie dokumentacji opisz jak rozumiesz działanie funkcji
Classify
(niekoniecznie w przypadku rozpoznawania autorów tekstów, ale, być może, patrząc na prostsze przykłady — patrz rozdz. 1.3). Oczekuję sprawozdania! - Powtórz inne przykłady z dokumentacji lub twórczo wykorzystaj gotowe funkcje klasyfikujące.
- Spróbuj korzystając z serwisu Wolne Lektury powtórzyć zadanie klasyfikacji wybierając jakichś trzech pisarzy. Wolne Lektury również oferują pliki w prostym formacie tekstowym.
- Rozważmy, że mamy następujący problem (serię uczącą): 500 bananów, 300 pomarańczy i 200 innych owoców. Metodą organoleptyczną sprawdziliśmy które z nich są słodkie. Dodatkowo dokonalismy ich (wzrokowej) klasyfikacji na owoce „długie” i „krótkie”. Wyniki przedstawia następująca tabelka:
Owoc „Długi” „Krótki” Słodki Nie słodki Banan 400 100 350 150 Pomarańcza 0 300 150 150 Inne 100 100 150 50 Zadanie znakomicie nadaje się do zastosowania naiwnej metody Bayesa2 do odpowiedzi na następujące pytanie: Jeżeli wylosujemy owoc, który jest długi, ale nie jest słodki, to jakie są szanse, że jest to banan?
Obliczenia można przeprowadzić bezpośrednio na prawdopodobienstwach [1], ale zaproponuj jak powinien wyglądać eksperyment (losowanie) uczenia maszynowego.
Mathematica ma funkcję losowego wyboru RandomChoice. Można jej użyć do wylosowania owocu, a później do przyporządkowania mu cech (zgodnie z zadanymi prawdopodoobieństwami). W ten sposób można wygenerować serię uczacą, która posłuży do wygenerowania funkcji klasyfikującej.
Warto sprawdzić jak funkcja klasyfikuje: gennerować elementy serii sprawdzającej (rodzaj owocu oraz jego cechy) i poddawać je klasyfikacji. Niestety, efekty klasyfikacji są zgodne jedynie w sensie probabilistycznym3, a warto pamiętać (wiedzieć?), że tego typu klasyfikatorów używano do wskazywania celów dla dronów działjących na bliskim wschodzie…
Tak na marginesie: metody rozpoznawania spamu bardzo często oparte są na naiwnej metdozie klasyfikacji Bayesa.
Sprawozdanie
Laboratorium to może być relizowane na dwu zajeciach, ale powinno być zakończone obfitym sprawozdaniem i ciekawymi wynikami.
Instrukcja w postaci jednego pliku…
…jest również dostępna.
- H. Ferreira, „Basics of machine learning and a simple implementation of the naive bayes algorithm,” , 2018.
[BibTeX] [Download PDF]@Electronic{Ferreira2018, author = {Hugo Ferreira}, title = {Basics of Machine Learning and a simple implementation of the Naive Bayes algorithm}, year = {2018}, url = {https://medium.com/hugo-ferreiras-blog/basics-of-machine-learning-and-a-simple-implementation-of-the-naive-bayes-algorithm-80c1e67a2e8a}, }
- R. Tadeusiewicz, „Uporządkowane wiadomości na temat sztucznej inteligencji,” , 2019.
[BibTeX] [Download PDF]@Electronic{Tadeusiewicz2019, author = {Ryszard Tadeusiewicz}, title = {Uporządkowane wiadomości na temat sztucznej inteligencji}, year = {2019}, url = {https://natemat.pl/blogi/ryszardtadeusiewicz/174271,uporzadkowane-wiadomosci-na-temat-sztucznej-inteligencji}, }
- R. Tadeusiewicz, „Nowa kolekcja wiadomości na temat sztucznej inteligencji,” , 2019.
[BibTeX] [Download PDF]@Electronic{Tadeusiewicz2019a, author = {Ryszard Tadeusiewicz}, title = {Nowa kolekcja wiadomości na temat sztucznej inteligencji}, year = {2019}, url = {https://natemat.pl/blogi/ryszardtadeusiewicz/272491,nowa-kolekcja-wiadomosci-na-temat-sztucznej-inteligencji}, }
- Deep learning. systemy uczące się, I. Goodfellow, Y. Bengio, and A. Courville, Eds., Warszawa: Wydawnictwo naupowe pwn, 2018.
[BibTeX] [Download PDF]@Book{Goodfellow2018, title = {Deep Learning. Systemy uczące się}, year = {2018}, editor = {Ian Goodfellow and Yoshua Bengio and Aaron Courville}, publisher = {Wydawnictwo Naupowe PWN}, url = {https://libra.ibuk.pl/book/190795}, address = {Warszawa}, timestamp = {2019.09.23}, }
- J. Koronacki and J. Ćwik, Statystyczne systemy uczące się, Warszawa: Akademicka oficyna wydawnicza exit andrzej lang, 2015.
[BibTeX] [Download PDF]@Book{Koronacki2015, author = {Jacek Koronacki and Jan Ćwik}, title = {Statystyczne systemy uczące się}, year = {2015}, publisher = {Akademicka Oficyna Wydawnicza EXIT Andrzej Lang}, url = {https://libra.ibuk.pl/book/148861}, address = {Warszawa}, timestamp = {2019.09.23}, }
- S. Raschka, Python. uczenie maszynowe, Helion, 2017.
[BibTeX] [Download PDF]@Book{Raschka2017, author = {Sebastian Raschka}, title = {Python. Uczenie maszynowe}, year = {2017}, publisher = {Helion}, url = {https://nasbi.pl/21/pythum/podstawowe-szczegoly.html}, timestamp = {2019.09.23}, }
- G. Peyré, Mathematical foundations of data sciences, , 2019.
[BibTeX] [Download PDF]@Book{Peyre2019, author = {Gabriel Peyré}, title = {Mathematical Foundations of Data Sciences}, year = {2019}, url = {https://mathematical-tours.github.io/book/}, }
- A. Zhang, Z. C. Lipton, M. Li, and A. J. Smola, Dive into deep learning, , 2019.
[BibTeX] [Download PDF]@Book{Zhang2019, author = {Aston Zhang and Zachary C. Lipton and Mu Li and Alexander J. Smola}, title = {Dive into Deep Learning}, year = {2019}, url = {http://d2l.ai/}, timestamp = {2019.09.23}, }
- J. Gallier and J. Quaintance, Algebra, topology, differential calculus, and optimization theory for computer science and machine learning, , 2019.
[BibTeX] [Download PDF]@Book{Gallier2019, author = {Jean Gallier and Jocelyn Quaintance}, title = {Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning}, year = {2019}, url = {https://drive.google.com/file/d/1sJvLQwxMyu89t2z4Zf9tD7O7efnbIUyB/view}, }
- R. Allen, „My curated list of ai and machine learning resources from around the web,” , 2017.
[BibTeX] [Download PDF]@Electronic{Allen2017, author = {Robbie Allen}, title = {My Curated List of AI and Machine Learning Resources from Around the Web}, year = {2017}, url = {https://medium.com/machine-learning-in-practice/my-curated-list-of-ai-and-machine-learning-resources-from-around-the-web-9a97823b8524}, }
- „Machine learning,” , 2019.
[BibTeX] [Download PDF]@Electronic{MachLearn, title = {Machine Learning}, year = {2019}, url = {https://reference.wolfram.com/language/guide/MachineLearning.html}, organization = {Wolfram}, }