PDA

Prikaži potpunu verziju : AI - Artifical Intelligence


PeTkO
20.2.2012, 20:38
Pozdrav

Potrebna mi je vasa pomoc oko jedne moje "teorije" (mozda nisam prvi, ali nigde nisam nasao neku slicnu teoriju AI-a) vestacke inteligencije. Potrebna mi je za razvoj odredjenog bota koji bi mogao da komunicira sa covekom. Celu teoriju o nacinu razmisljanja ljudskog mozga i nacinu ucenja je potrebno pomnoziti sa x1000 ili cak i vise kako bi dosli do brzine samog mozga :)

Evo kako ona glasi:

Naime, ljudski mozak se sastoji od pet glavna delova (izrazicu se u kompjuterskom slengu, tako mi je lakse): 1. Ulazni senzori, 2. CPU, 3. Memorija, 4. "Karakterni" cip, 5. Izlazni "uredjaji". E sad, svi mi reagujemo na neke nadrazaje iz spoljne okoline...Uzmimo na primer neko pitanje koje je postavljeno nama...Preko ulaznih "senzora" (usi), neki nadrazaj dolazi do nekog tamo CPU-a u nasoj glavi, koji vrsi analizu cele recenice i izvlaci kljucne reci (npr. u pitanju "Kako se zovete", on ce izvuci dve kljucne reci "kako" i "zovete"). Zatim, u memoriji trazi podatke koji odgovaraju na te dve kljucne reci i dobije nekoliko "rezultata". Taj niz od nekoliko odgovora se prosledjuje do "karakternog" cipa koji na osnovu samih karakternih osobina odredjuje odgovor koji ce biti prosledjen do izlaznih "uredjaja" (u nasem slucaju, usta tj. moc govora). Na primer, ukoliko je osoba lazljiva, taj karakterni cip ce izabrati ne tacan rezultat iz niza, cak iako on zna da to nije tacno. Ukoliko je nervozna on ce da da odgovor npr. "odje8i, sta te briga", itd...znate o cemu pricam. E sad, ukoliko na kljucne reci ne postoje, ili ne postoje dovoljno dobra poklapanja sa odgovorima u memoriji, informacija da ne postoji zapis u memoriji se preko karakternog "cipa" prosledjuje na izlazne uredjaje pa pitanje moze da glasi "ne znam, mozes li ti da mi kazes" (ukoliko je "lepo raspolozen") ili "Ne znam i bas me briga" (ukoliko je "nervozan").

Ne znam koliko vam je sve ovo jasno, ali nadam se da jeste...ukoliko nije, slobodno pitajte :) I ponavaljam, sve se ovo mnozi, sa x100, x1000...

I sad dolazimo do glavnog problema. Posto je ovde jako potrebna brzina, u kom jeziku mi preporucujete da ovo radim? Razmisljao sam da radim u PHP&MySQL, ali nisam siguran da li ce da "zakuca" CPU racunara posle nekog duzeg vremena rada (ili zbog velicine baze podataka), ili da npr. odradim u C# ili nekom drugom jeziku po vasem predlogu.

doctor
20.2.2012, 21:21
Nadam se da shvataš u šta se upuštaš, želim ti puno sreće ali... Ali :)

Elem, mislim da bi najbolje bilo da koristiš C/C++, nikakve skripting jezike niti bilo šta što koristi .Net. Takođe, gledaj da radiš bez glomaznih engine-a za baze podataka, najbrže rešenje (po pitanju performansi) bilo bi da razviješ neki minijaturni engine za menadžment baza podataka kakav tebi odgovara (koji nema nepotrebne funkcije, radi brzo i efikasno i samo ono čemu je namenjen). Ako smatraš da nemaš vremena i volje za to, a postoji sistem koji ima sve što je tebi potrebno i pruža dobre performanse samo ga izguglaj.

Tako bih ja to uradio što se tiče baza, zahteva vremena, ali nije ništa naspram toga koliko vremena zahteva čak i najprostiji AI program... Ako si ozbiljan u vezi ovoga onda još jedanput - srećno :D

M.Silenus
20.2.2012, 21:43
Pretpostavljam da želiš da napraviš program koji može da prođe Tjuringov test (http://en.wikipedia.org/wiki/Turing_test).

Nešto ovog tipa je urađeno šezdesetih. Pogledaj ELIZA-u (http://en.wikipedia.org/wiki/ELIZA).

Jednu moderniju implementaciju možeš da nađeš u, recimo, EMACS-u (kad otvoriš EMACS pritisni Alt-x, otkucaj "doctor" - bez navodnika - i uživaj).

No, pretpostavljam da želiš da koristiš neuralne mreže, u kom slučaju bi imao dosta koristi od OpenCL-a, CUDA-e i sl. Za jednostavnije rešenje koje se dosta dobro integriše u C++, pogledaj C++ AMP (inicijalna implementacija se dobija uz eksperimentalni Visual Studio 11 Developer Preview). Naravno, za ovo sve ovo ti je potreban adekvatan hardver (ie. moćna grafika - poželjno nVidia, AMD nešto ne gura GPU computing - ne znam zašto).

Imaš implementaciju neuralne mreže u okviru OpenCV (http://opencv.willowgarage.com/wiki/) projekta. Mada, ako su feed-forward, čisto sumnjam da će ti biti od bilo kakve koristi.

Naravno, uvek možeš da iskoristiš genetske algoritme da dođeš do optimalne topologije neuralne mreže ;) Ovo je nešto sa čime planiram da se pozabavim kad budem imao vremena (za daleko jednostavniji problem, naravno).

BTW. na radi se na simulatoru kompletnog ljudskog mozga, pogledaj Blue Brain Project (http://en.wikipedia.org/wiki/Blue_Brain_Project). Koliko je ovo zahtevan problem ilustruje činjenica da još nemaju na raspolaganju kompjutere koji mogu da urade simulaciju kompletnog mozga. A imaju podršku IBM-a!

Jedan zanimljiv projekat (makar po ideji, ne znam za izvedbu) je OpenCog (http://opencog.org/projects/), čiji je cilj da se napravi Artificial General Intelligence. Na sajtu projekta možeš naći module pisane u C++-u koji bi ti mogli biti od koristi (na primer RelEx i LinkGrammar).

Ipak, kao što doctor reče, nadam se da shvataš u šta se upuštaš.

PeTkO
20.2.2012, 22:21
Znam otprilike...Djavolski tezak posao...

Iskreno, ovaj rad mi treba za konkurisanje za stipendiju na jednom privatnom univerzitetu, pa imam otprilike 2 meseca za ovaj projekat. Inace hvala na linkovima.

A sta mislite o upotrebi PHP&MySQL-a? Kakvo bi bilo angazovanje procesorske snage?

Nov sam u C# i celokupnog .NET tehnologiji, pa ako moze neko da mi kaze zasto mi ne preporucujete te jezike za ovaj projekat?

Ako nista drugo, ostaje mi samo da se podsetim C++ i da pocnem lagano da razvijam celu stvar.

zokocx
20.2.2012, 22:47
Hmm nije da se nesto C# mnogo syntaksa razlikuje od C/C++ ,ali ako razmislis u kom smeru te @M.Silenus usmerava trebalo bi da vidis da ipak ima vise materijala posebno gotovog koda za C/C++, ipak ozbiljna je stvar i brzina presudna. Za neke stvari spomenute ovde sam cuo i imam osnovno obrazovanje (fakultetsko) o tome, ali od same pomisli me zaboli glava.

A da sve to sto ima portujes ili nedaj boze kacis sve to na C# preko P/Invoke, ispalo bi kao da babi pokusavas da zakacis grudi i zadnicu 20 godisnjakinje, tj. izgubio bi previse vremena i stigao gde su vec ostali stigli.

Ako znas Ok,dobro,dovoljno C++, koristi ga... ja bi isao na CUDA, posebno sto i MS na VS to malo gurka, znaci da ima buducnost.

PeTkO
20.2.2012, 22:56
Jedini problem sto se tice CUDE jeste taj sto imam AMD-ovu graficku, a koliko sam nasao na google, CUDA podrzava samo nVidia graficke kartice :(

Trazio sam i uporedjivanje izmedju OpenCL i CUDA...I cuda mi se vise svidja, prvenstveno zbog centralizovane podrske, dok sa opencl je sve "razbacano" po netu.

Btw. Da li je tacno da CUDA moze samo na nVidia kartice, ili sam ja nasao pogresnu informaciju na googlu?

M.Silenus
20.2.2012, 22:56
Ne znam koji je doctorov razlog zašto ne .NET i C#.

Moja pretpostavka je da je tvoj projekat zahteva mnogo zahtevnih računskih operacija. PHP jednostavno nije dizajniran za tako nešto. C++ jeste.

C# je, što se mene tiče, sasvim OK rešenje. Jednostavno mislim da za C++ postoji daleko veći broj pomoćnih biblioteka koje bi mogle da ti koriste.

Odabrati pravi alat za projekat je ključna stvar. Ne bi koristio pribor za kuvanje da napraviš kuću. Samo zato što dobro znaš neki alat (u tvom slučaju PHP & MySQL) ne znači da taj alat pogodan za rešavanje tvog problema.

Napravi listu zahteva za alat, pa ćemo moći da napravimo informisaniji predlog. Ko zna, možda su Scala ili Erlang prava stvar za tebe. Možda bi ti više odgovarala NoSQL baza podataka (tipa. MongoDB). Ko zna... Ja sam predložio alate koje bih ja koristio kada bih rešavao srodan problem koristeći tehnike pomenute u mom prošlom postu. Ako je ELIZA ono što hoćeš, C++ bi definitivno bio overkill.

PS. C++ AMP koristi DirectCompute da prebaci kod na GPU, pa bi trebalo da radi i na AMDu

doctor
20.2.2012, 23:22
Ne znam koji je doctorov razlog zašto ne .NET i C#.
Pa zbog performansi. U ovakvom slučaju smatram da je C++ najbolji izbor.

PeTkO
20.2.2012, 23:24
hm...Gledam trenutno ovu ELIZA-u, tj. razgovaram sa njom...deluje mi kao ne tako pametan chat bot, ali uzeci u obzir kada je projektovana, imam razumevanje. Iskreno, moj cilj je da kako je M.Silenus napisao, da moja aplikacija prodje Tjuringov test...
Kako kaze SIlenus, potreban mi je pravi alat. Ono sto ja trazim od alata, jeste da imam makar neko znanje o njemu ili da ima slicnosti sa C++ (posto pored PHP-a, njega najbolje znam), da moze da se izvrsava na svim racunarima pod Windows OS, bez obzira koji je procesor, graficku itd., da je relativno lak za ucenje, tj. da postoji centralizovana "baza znanja", i da ima dobru dokumentaciju, takodje bitna mi je i optimizovanost i brzina izvrsavanja, jer aplikacija ce zahtevati dosta racunanja, uporedjivanja, upisivanja, trazenja, kopanja i ponovo uporedjivanja u samoj bazi podataka itd. Trenutno mi nista vise ne pada na pamet, ako imate jos nesto da dodate dodajte, mozda sam nesto ispustio..

Edit: Napisao sam da "prodje Tjuringov test"...izuzetno optimisticki sa moje strane, tako da ja dovoljno da se koliko toliko priblizim ostalima, a opet, mozda i napravim nesto sto dosad nije vidjeno :) Optimista sam... :)

PeTkO
24.2.2012, 22:17
Aj da ne otvaram novu temu...

za ovaj projekat mi je potrebna dvodimenzionalna baza podataka...e sad, nasao sam neke primere koriscenja MySQL baze podataka i C++, ali nisam siguran da li postoji neka brza baza podataka od MySQL-a koja bi mi posluzila, i ako ima, da li bi ste mogli da mi preporucite neku?

Razmisljao sam da odradim i preko visedimenzionalnih nizova, ali mislim da bi mi to bilo komplikovanije zbog citanja/upisivanja novih podataka

Inace, odlucio sam da koristim OpenCL kao API za paralelno programiranje...e sad, posto imam AMD-ovu graficku, verovatno mi je potreban AMD SDK za OpenCL, pa me interesuje posto nisam uspeo da nadjem na netu, da li kada programiram sa AMD-ovim SDK-om da li ce taj kod da radi i sa nVidia-nim grafickim karticama? Mozda je glupo pitanje, ali jos uvek ucim OpenCL i celokupno paralelno programiranje, tako da oprostite :)

M.Silenus
25.2.2012, 10:27
Za OpenCL ti treba AMD Accelerated Parallel Processing (APP) SDK (formerly ATI Stream) (http://developer.amd.com/sdks/AMDAPPSDK/Pages/default.aspx). Ako kojim slučajem imaš Intelov procesor, možeš da probaš i Intel OpenCL SDK (http://software.intel.com/en-us/articles/vcsource-tools-opencl-sdk/), koji možeš da koristiš kao test platformu za slučaj da imaš problem sa GPU-om.

Ova dva bi trebalo da rade zajedno bez problema (meni nVidia i Intel OpenCL driveri rade zajedno), a svejedno ćeš iz OpenCL-a morati da izabereš uređaj koji koristiš.

Takođe, probaj OpenCL Studio (http://www.opencldev.com/), odličan je brzi razvoj OpenCL kernela (funkcije koje se izvršavaju na računskom uređaju).

Što se baze podataka tiče, pretpostavljam da ti treba neka in-memory baza podataka koja zna kako te podatke da zapiše na disk. U tom slučaju, pogledaj SQLite (http://www.sqlite.org/inmemorydb.html), ili neko od rešenja sa In-memory database (http://en.wikipedia.org/wiki/In-memory_database).

EclipsE
27.2.2012, 19:19
UC Berkeley AI predavanja. (http://www.youtube.com/watch?v=T7-VjEAosSA&list=PL9CBFBB1FE9D0EB7A&index=1&feature=plpp_video) Nisam još odgledao sve ali verujem da je interesantno :D

PeTkO
27.2.2012, 19:47
Uh, koliko sati gledanja imam...pored ovog :) Hvala EclipsE u svakom slucaju

irreal
28.2.2012, 1:11
Podrzavam svaciji projekat da napravi nesto novo i ne vidjeno.
Sve su sanse da neces uspeti, do te mere da bi se na to kladio, ali nemoj to razumeti zlonamerno. Niko nista nije izmislio i novo napravio a da se plasio neuspeha. Takodje, retko ko je iz prve napravio nesto potpuno novo - mnogo mnogo vise je propalih pokusaja.

Naravno, nadam se da ces se pre svega malo bolje informisati o svemu (mozgu, ljudskom telu generlano, programiranju, bazama) da bi imao sto vece sanse uspeha.

Za pocetak, ni usi ni usta nisu delovi mozga :)

salu na stranu, procitaj vise o tome kako mozak prima te informacije i procesira. Naravno, neces naci neku ultimativnu jasnu istinu jer je mozak dobrim delom i dalje misterija za nas, ali moze ti pomoci.

Sve u svemu, kapa dole ako u ovom polju uspes da napravis bilo sta vredno pomena, samo dobro pogledaj koliko je tvoja dosadasnja "teorija" jednostavna u poredjenju sa projektima ovde prikazanim i drugacije dostupnim, pa razradi ideje sto vise.

PeTkO
28.2.2012, 2:50
Iskreno, prvi pasus je najrealniji, i najinspirativniji tekst koji sam uspeo da procitam :)

Svestan svojih mogucnosti, tj. ne mogucnosti, sanse da ovo sve radi kako treba su veoma male. I jako sam svestan toga, i ne zelim da srljam niti da brzam mnogo.

Mislim da mi je ideja jako dobra, razgovarao sam i sa poznanikom koji je psihijatar i koji mi je rekao da u sustini i jeste tako, ali da postoji mnogo nedovoljno istrazenih delova mozga, kao i da je sama moja ideja jako bazicna, tj. uproscena, i da mi treba dosta razrade, kako bi dosao do neke radne verzije. Trenutno radim jos uvek na algortimu i bukvalno iz sata u sat se setim neceg novog pa dodam...

P.S. Ne diraj mi usi, usta i oci...to su mi I/O uredjaji :D

orange47
28.2.2012, 12:38
pise se Artificial, nadam se da ce taj tvoj program bolje znati Engleski.. :D

doctor
28.2.2012, 23:41
Trenutno radim jos uvek na algortimu i bukvalno iz sata u sat se setim neceg novog pa dodam...

Ako tu "probiješ led", istraješ i razradiš taj deo koliko god je moguće, sve ostalo će biti boza :)