Sztuczna inteligencja to…

Categories Programowanie

Sztuczna inteligencja to naprawdę ciekawa rzecz.

Bo każdy interpretuje ją inaczej w zależności od tego skąd podchodzi, a raczej jaką wiedzę w tym zakresie posiadł.

W 2010 myślałem o Algortymach z tej dziedziny jako czymś prostym. Piszesz kod w C++, wywołujesz i on coś tam robi.
Na przykład w grach przeciwnik robi unik. Bądź chowa się za skrzynką.

Prosty przykład:

Opis: Jeżeli Objekt „Enemy” ma mniej niż 70 punktów życia to ma się częściej robic unik. Jeżeli ma mniej niż 40 punktów życia to ma schowac się za skrzynką.

I z tego prostego przykladu, aby balansowac rogrywke można zrobic od groma innych.

Albo jak to mój nauczyciel od programowania dawno temu miał w zwyczaju mawiac:
„Nie ma „IF”, nie ma programowania”

Ale czy zwykłe ify można nazwac sztuczną intelgencją? Dziś mało kto tak nazywa programowanie w grach „tą” sztuczną inteligencją, a raczej zachowanie przeciwników.

Ale czy Machine Learning to sztuczna inteligencja? Czy Reinforcement Learnign to sztuczna inteligencja?
W sumie… to nie. To też są IFy. Tylko jest ich trochę więcej.

Teraz nie mamy 5-10 ifów, tylko mamy ich milion. I na podstawie ważenia jest wzięte pod uwagę wyrażenie A, B, bądź C… badź D, bądź E…

Tylko my nie nazywamy tego w ten sposób.

Pod uwagę jest wzięte wyrażenie A, bądź A+1, bądź A +2 … A+n, gdzie n określa ostatnie wyrażenie.

Ale my nie używamy A. My używamy x’ów. Więc zapisujemy że jest pod uwagę wzięta wartośc:

x+1, x+2… a żeby dużo nie pisac można zapisac to pod postacią znaku sumy:

Liczbe zamienilismy na n, gdzy sie powtarza.
https://www.wolframalpha.com/input/?i=sum+x_i+%2B+n_i%2C+i%3D1+to+n

I w tym momencie zdaję sobie sprawę, że nie umiem tego tak naprawdę lepiej matematycznie prosto wytłumaczyc.
Ale sprobuje to kiedys moze lepiej obrac w slowa z przykladem 🙂

Ale nie o tym chcialem faktycznie pisac.

Bo jak ktos chce cos przewidziec (predict), badz sklasyfikowac, bądź nauczyc to używa w zależności od metody:

– Supervised Learning (Uczenie nadzorowane)
– Unsupervised Learning (Uczenie nienadzorowane)
– Reinforcement Learning (Uczenie wzmocnione)

Supervised Learningto taka jakby nauka z nauczycielem.

Dajemy naszemu algorytmowi dane i on na podstawie tych danych uczy się. My mu mówimy co jest czym. Labelujemy (oznaczamy) nasze dane i on z tego stara się zebrac jakis sens.

Jak mu potem cos damy czego nie zna, to on jest w stanie to rozpoznac.

Problem? Że potrzeba na przykład na rozpoznanie zdjęcia kota minimum 1000 zdjęc różnych kotów oznaczonych aby algorytm mógł potem przewidziec, że na zdjęciu 1001 jest kot, a na zdjęciu 1002 to nie jest kot.

Albo Hot Dog…

I jakbyście chcieli coś podobnego zrobic to byście musieli znaleźc 1000 zdjęc hot-dogów najlepiej różnych z internetu,
oznaczyc je boxami i potem dac algorytmowi do nauki. Choc cyasem i 300 zdjęc starczy.

Można też użyc do tego seriwsów jak ten:
https://www.mturk.com/

Unsupervised Learning
Algorytm dostaje Input (dane wejściowe) i z tego stara się zrozumiec jakąś większą całośc.
Szukamy że tak powiem „szablonu”, „wzoru”, które te dane oddają.

Algorytmy polecające (recommendation algorithms) są tego dobrym przykładem.

Na przykład polecone filmy na Netfliksie są prawdopdobnie na tym przykładzie oparte.

Jeżeli spodobał mi się Batman i Superman oraz 20 innych filmów.
Jakiejś innej osobie też spodobały się podobne filmy to algorytm prawdopodobnie poleci mi jakos następny Film obejrzec Wonder Woman.

Im więcej danych wejściowych tym lepiej. Nie trzeba ich nawet oznaczac, a jedynie znaleźc pewien schemat.

Przykłady film lepiej to tłumaczący:

Reinforcement Learning:

Piszemy algorytm który dajemu naszemu agentowi i ten nasz agent porusza się po danym środowisku.
Wydaje mi się, że to jest najbardziej zbliżone do tego, co ludzie rozumieją pod postacią sztucznej inteligencji.

Nasz agent porusza się po labiryncie, poziomie czy czymś tam innym i za dobrze wykonane ruchy otrzyma nagrodę.

Im lepiej napisany algorytm tym dalej nasz agent przejdzie poziomy.

Tu taki przykład:

Użyty został algorytm od OpenAi PPO2, w środowisku Gym-Retro
https://github.com/openai/baselines/blob/master/baselines/ppo2/ppo2.py

Działa to na takiej zasadzie, że na podstaiw środowiska piszecie algorytm który motywuje naszego Agenta (czyli Sonica) do poruszania się do przodu. Trochę jak Dopamina u człowieka.

W tym przypadku udane poruszenie się do przodu na osi X nagradza naszego Agenta. Przejście poziomu to już w ogóle.
Definiujecie nagrody i określacie ile punktów nagrody za daną czynnośc chcecie przeznaczyc.

Źle zdefiniowane nagrody rozleniwią naszego agenta, a zbyt dobrze zdefiniowane spowodują, że zacznie robic glupie rzeczy takie jak zbieranie monet, zamiast przechodzenia poziomu.

Na początku algorytm nie robi nic. Uczy się. Skacze to w lewo, to w prawo.Jak nie uda mu się przejśc na przykład 10 kroków w przód przez 10 minut to algorytm jest zamykany. Nagrody przydzielone i zaczynamy grę od nowa. I tak 1000 razy,

Genetycznie:

Po tych 1000 ruchach mamy swój model, który można użyc w innych grach, ale prawdopdobnie najlepiej będzie się sprawdzał na sonicu, bo na nim został on nauczony.

To tyle. I tak nikt tego nie przeczyta bo zadługie, ale pewnie będę pisał więcej takich rzeczy, żeby sobie wiedzę posotortowac 🙂

#machinelearning #programowanie