The Problem


Here is the thing. Well, it is not the thing exactly, it is more like a frustration or desperate need for deformation. The work in Artificial Intelligence field is less orientated as I expected, nor it is organized. Of course, there are sets of tools to work with, witch works, after some tune-ups, but this time it is not about tools. It is more about the essential of this field, the root, which drives it forwards – the brain.


We, human living beings, are very subjective on every subject what so ever. We do go to school in order to learn how to write, calculate. There are not so many intelligence, as I define it, in those ages. It is more like an exploring process, which started immediately after memory system has been launched in the brain and finishes then we die. It is more or less continues process.

So, here is the thing: how to define, on what intelligence basis, do we develop the artificial intelligence system? Example: an older person has a quite bad memory, so the brain does not recognize some of the people faces. So does current face-recognition solutions, due to some unique specifications. Personally, sometimes I do mess up with recognising some of my fellow students, but let’s say, machine does a better job. What conclusions does it make? While, after some renewing-faces job, I do perform better job, than the machine, does it makes machine less accurate?

These questions are the essence of the brain working problem – it is not a state machine. It is a dynamic machine. You can not stop it, as a car engine, inspect it, make changes and run again. If You kill the brain, it would not rise from the dead again. This is the problem. The only possible solutions to this is to make changes, while brain is still working. This causes some ethic problems, sadly. Another solution – making models and testing them. Looking how likely it is to work as brain does. More like physics, huh? Just physics people have a good platform to test their ideas – the mighty universe. While we do have only 5 kg of neural matter, which is not possible to model on high level scale.


Brain, the dynamic system of connections, which is not possible to model, is so interesting, so frustrating and depressing on the same time. What gives us energy to explore the brain, also does make the problems to do so.

A simple example of feedforward neural network and image recognition


The new field, in which I’ve stepped a little bit is image processing or image recognition. This field has some similarities with the previous field (signal processing) and so it was not so difficult to try something new.

Today, we’re going to review a simple application, which I’ve written for my lab as a bonus for the final mark. The objection of the application is to recognize the areas in the picture, which has the most trees (the greenest ones). All the code can be downloaded here, especially, if you’re good in analyzing codes, the further description of this method is not necessarily to read in order to understand how everything works.


Firstly, we take a picture for training. Originally, images are 1000×1000 pixel size, but because I’m poor and my computer does not have lots of power and memory capacity, the image size is scaled by 0.40. The image size after the scale is 400×400 pixels.

Sample image

Next step is to use a sliding window (not sliding window protocol) to analyse the image. Basically, it is the same sliding window method, as for one dimensional signal, but this time, the samples are taken in two dimensions. The matlab implementation is extremely easy:

for i=2:size(I, 1)-1
 clear j;
 for j=2:size(I, 2)-1
   Id(k,:) = I(j-1:j+1,i-1:i+1,:);
   k = k + 1;

The code illustrates the use of 3×3 sliding window. The variable I is the image itself and because it is an RGB image, the selected window has three dimensions. The most important information from the image for the forest discovery problem is the green color, so the identification can be done by this feature. What we can do is not to save all RGB information of the window, but just green color information:

for i=2:size(I, 1)-1
  clear j;
  for j=2:size(I, 2)-1
    Id(k) = mean(mean(I(j-1:j+1,i-1:i+1,2)))/9;
    k = k + 1;

Using this code, we can work only with one dimensional feature data, not 27 dimensional data (as would be, using all RGB information).

Next problem is the uncertainty then the window sees the forest and then it is something else. Doing this by hand would be some sort of suicidal work, which could take ages to complete.. But there is a solution! It’s called the k-means clustering algorithm. What KM does, it divides the data by means. Logically, the green color mean of the forest area would be bigger.

It matlab it is realized quite simply:

IDX = kmeans(Id,2);

And this is it. The function returns the labels of the data of KM clusters.

The KM algorithm is sometimes a little bit random, for example – first time, doing KM it can label most green zones as 1, and not so green zones as 2. Do it again and the labels would be turned around. How well KM performed the clustering solution can be tested only after classification, then the `forest` would be recognized. If you see, that the algorithm does not work as good as it suppose to – you need to run it again, to give KM algorithm one more chance (okay, maybe not only one chance, but it is still better, than manually labeling data).

The next step, after KM is to separate original data, which we will need to train our Artificial Neural Network (FeedForward Neural Network (FFNN)), to do classification.

P1 = Id(IDX==1,:);
P2 = Id(IDX==2,:);
number = min(size(P1), size(P2));
number = number(1);

Here, P1 has one cluster of data, and P2 has the other. We’re searching with data cluster has less data, because the training algorithm require, that number of data samples in training set of both data clusters would be the same.

Next step is to train our super-awesome (and slow) FFNN with 10 hidden neurons (the number of neurons was chosen just randomly):

net = feedforwardnet(10);
P = [ P1(1:number,:); P2(1:number,:) ]';
T = [ zeros(1,number) ones(1,number) ];
net = train(net, P, T);

This can take some time.. The final algorithm does training using 4 different pictures of pictures. The classification tests was done using other 15 pictures. Here is some examples of classification done by this algorithm:

Acceptable classification result

Not acceptable classification result

On the left side of illustrations, there is an original image, in the middle there is classification result, and on the right side the mapped data. As we can see, the classification sometimes is done quite good, but sometimes is fails completely.

This algorithm requires more work (and more powerful computer to run on), but as a starting point it is quite good. The possible features to extract may be also mean of yellow color (to classify out roads).


In this article, a simple image processing example is shown and discussed. As a feature to recognize the forest and not forest areas, the mean of green color was used. No dimensional reduction algorithm was used, because only one dimension is used. The data labeling was done using k-means clustering algorithm, which showed quite good results, but it is not recommended to use it for some very important tasks. This time it was more for fun, than for production. The classification was done, using FeedForward Neural Network (FFNN).

The complete code can be downloaded here. Just extract and run `lab_10`. After some time, you must see the same images, as shown in this short example.

Įžanga į Paslėptą Markovo modelį (skaidrės)

Šį kart trumpa prezentacija apie Paslėptą Markovo modelį, su trupučiu matematikos.

Skaidrėse pristatomi mašininio apmokymo tipai, parodyta pavyzdinė savybių erdvė, aptariamas Markovo procesas, Markovo grandinė, apibūdinti Paslėpto Markovo modelio parametrai, apžvelgiamas Viterbi kelio radimo algoritmas.

Viskas paruošta nėra super-idealiai, dėl didelio akademinio užimtumo. Skaidrės yra daugiau kaip špargalkė kalbai, negu kaip mokomoji priemonė. Mokomajai priemonei reikia knygas rašyti. Skaidres galite peržiūrėti slideshare, arba atsisiųsti pdf formatu.

Vektoriaus palaikymo mašina

Kažkodėl nusprendžiau, kad seniai berašiau įrašų, kurių niekas nesuprato. Šiandien su plačia tauta norėčiau pasidalinti maža teorijos ir praktikos samprata apie Support Vector Machine (SVM) (lietuviškai galima versti įvairiai, tačiau, kadangi niekur jokio vertimo nerandu, tai sugalvojau savo variantą – Vektoriaus palaikymo mašina); Labiausiai man patiko Christopher J.C. Burgers parašytas įvadas “A Tutorial on Support Vector Machines for Pattern Recognition“. Nors, aišku, galite bandyti skaityti originalų Vapnik straipsnį “An overview of statistical learning theory“. Ten daugiau matematikos, bet ir aišku mažiau.


SVM sprendžia klasifikavimo problemas. Turim tam tikrą savybių erdvę ir mums reikia toje savybių erdvėje gražiai `padalinti` duomenis. SVM genialumas yra tai, kad jis naudoja pačius `duomenis` duomenų praskyrimo erdvei rasti. Daug žada, ne?

Gražioji pusė

Pavyzdį galima paimti iš wiki.

Grafike X_1 ir X_2 suformuoja dvi dimensijas, kur SVM ieško linijinio jų tarpusavio prasiskyrimo. Ryškiau apibrėžti tuščiaviduriai taškai ir pilkai apvesti juodi taškai yra ne kas kitas kaip palaikymo vektoriai. Tai jie pagrindinė priežastis kodėl įmanomas toks duomenų prasiskyrimas. Labai nesigilinant į SVM matematiką (ribinės klaidos radimas ir kt.), tai mes turime dvi linijines lygtis. Viskas ko mums reikia, tai rasti dvi linijinės funkcijas. Mums šiuo klausimu dar padeda ir ta sąlyga, kad nagrinėjamos lygtis turi būti viena kitai lygiagrečios. Nėra jokio Gauso (NaiveBayes), nėra jokios gausios ir gan sunkios matematikos PMM (HMM) atveju. Juk nuostabu, ne? Iš teigiamų savybių galima paminėti ir išgirtą jo naudojimą izoliuotų raidžių atpažinime. Yra pateikiamas net visas projektas su kodu (.NET) (dėl .NET jo net nežiūrėjau).

Negražioji pusė

Tačiau SVM turi ir blogų savybių. Kas nutiks, jeigu po apmokymo, testavimo fazėje savybių erdvėje koks nors taškas pateks tarp dviejų linijų? SVM neturi jokio Gauso (bent jau originalas), todėl atsakymo paprasčiausiai nebus. Kokia loginė funkcija tai gali paaiškinti? Kur `uncertainty` principas? Sekantis SVM trūkumas – tai jo įvairumas. Jeigu prisiminti mokyklinę matematiką, tai visos matematinės plokštumos ir figūros kaip tik ir prasidėdavo tašku ir tiese. Taip pat ir SVM atveju – galime prigalvoti begalės jo variantu ir ieškoti tinkamo iki kol pati saulė sudegs. Žinoma, yra keli populiarūs, oficialiai naudojami sprendimai. Kita neigiama savybė – SVM sugebėjimas vienu laiko momentu klasifikuoti tik du duomenų debesis savybių danguje. Yra, tiesa, neblogas popierius šia tema. Siūlau pasiskaityti, kada nors. Iš praktikos dar galima paminėti, kad SVM apmokymas yra labai lėtas ir nervų reikalaujantis procesas. Stebuklus su juo galima daryti ir neturint baigtinį dimensijų skaičių, tačiau `gyvai` treniruoti klasifikatoriaus tiesiog neįmanoma.


Taip ir nesupratau kodėl SVM tapo toks populiarus. Yra geresnių ir greitesnių klasifikavimo metodų (kad ir stebuklingas PMM (HMM), nors ir reikia turėti baigtinį dimensijų skaičių). Reiks gal kada parašyti įžangą į SVM lietuvių kalba. Tiek, trumpai.

Kas iš tikrųjų yra Paslėptas Markovo modelis


Truputi pamankštinęs rankas prie Paslėpto Markovo modelio, galiu pasidalinti ne teoriniais samprotavimas apie nagrinėjamą modelį, o apie konkretų įrankį, kuris veikia ir veikia pakankamai gerai.

Paslėptas Markovo Modelis ir kiti klasifikatoriai

Jeigu padaryti prielaidą, kad Paslėptas Markovo Modelis (PMM) yra klasifikatorius, tuomet palyginus su kitais klasifikatoriais – mes turime labai galingą įrankį.

Pradėkime nuo NaiveBayes klasifikatoriaus, kuris yra labai paprastas – n dimensijų Gauso pasiskirstymas. Kai gauname tašką erdvėje – tiesiog pažiūrime kiekvieno cluster tikimybes ir išrenkam tą cluster, kuris turi didžiausią tikimybę. Paprasta, greita ir pigu. Tačiau kas nutinka, kai du Gauso pasiskirstymai yra arti vienas kito, o taškai iš šaltinio gaunami tik per delta skirtumą tarp dviejų pasiskirstymų – klasifikatorius mėtysis tarp vieno ir kito cluster. Taip mes gauname labai mažą accuracy ir presition.

Support Vector Machine yra kiek sudėtingesnis variantas. SVM’as ieško papildomų dimensijų duomenims atskirti. Tai ypač pagelbėja, kai duomenis linijiniu būdu atskirti tiesiog nėra įmanoma. Geras pavyzdys – naudojant polynomial kernel trick. Pagrindinis SVM darbo arklys yra radial basis function. Tai tas pats Gausas. Mano praktikos metu, SVM’as tik truputi geriau dirbo, negu NaiveBayes klasifikatorius, o kaikuriais atvėjais – net blogiau. Dirbtinio intelekto sistemose, visgi, daug kas priklauso nuo application. Reikia išnagrinėti kokias savybes signalas turi savyje, ką duoda dimensijų mažinimas.

PMM turi vieną labai didelį pranašumą, palyginus su kitais nagrinėtais klasifikatoriais – jis turi savyje laiko informaciją. Matematiškai šnekant, tai kai mes turime du duomenų cluster, kurių variacijos kertasi – mes virš dviejų variacijų galime aprašyti dar vieną variacija, kuri aprašo įvykių tikimybes, kurias atspindi clusters. Taip galima kontroliuoti sąlygas, kurios aprašo įvykio pasikeitimą.

Jeigu nustatyti, kad perėjimo tikimybė tarp vieno ir kito įvykio yra labai maža, tai nors, jeigu ir naujas duomenų taškas bus ant kito Gauso pasiskirstymo – klasifikatorius vistiek neskubės persijungti prie kito įvykio.

Paprastas klasifikatorius

Pagerintas (PMM) klasifikatorius


Paslėptas Markovo Modelis yra fantastiškas matematinis įrankis. Skirtingai nuo kitų klasifikatorių, jame lengvai gali būti saugoma bet kokia euristinė informacija apie nagrinėjamus duomenų clusters.

Kas yra `dimensijų mažinimas`

Nejaugi jų daugiau, negu trys ?


Niekad negalvojau, kad galėsiu sau užduoti panašios krypties klausimo, tačiau, tai vienas iš svarbiausių klausimų tiek Statistikoje, tiek Signalų apdorojime ir jį būtina spręsti.

Dimensijų mažinimas

Natūralūs klausimai perskaičius skyrelio antraštę – kas aplamai yra dimensijos ir kodėl jų būna daug? Kam aplamai reikalingas dimensijų mažinimas?

Kas gi yra dimensijos? Pirmiausiai Įsivaizduokite erdvę. Ir pradėkime nuo paprasčiausio fizikinio kūno – taško. Jį aprašyti nereikia visiškai jokių dimensijų. Sakoma, kad jis egzistuoja nulinėje dimensijoje. Vis dar toje pačioje erdvėje įdėkime naują tašką ir sujunkime tą tašką su ankstesniu. Ką gi mes turime – linija. Linija turi priklausomybę nuo ilgio, vadinasi liniją mes galime aprašyti viena dimensija. Dabar ištempkime tą liniją statmenai jos ilgiui. Gausime plokštumą, visų dviejų dimensijų plokštumą. Dabar ta plokštumą mes galime aprašyti ilgiu ir pločiu. Ištempkime mūsų plokštumą statmenai jos pagrindui. Gausime trijų dimensijų kūną, kurį galime aprašyti ilgiu, pločiu ir net aukščiu.

Iš tokio klasikinio pavyzdžio galime prieiti prie išvados, kad dimensijų skaičius – tai parametrų skaičius, kuriuo mes galime aprašyti mus dominančią erdvę. Jeigu mes norime kuo tiksliau ir kuo nuodugniau aprašyti erdvę – mes pasitelkiam vis daugiau parametrų jai aprašyti. Iš čia ir kyla besaikis dimensijų skaičius.

Kodėl mums reikalingas dimensijų mažinimas? Atsakymas yra paprastas – pabandykite įsivaizduoti 120 dimensijų erdvę. Asmeniškai pats galiu įsivaizduoti tik keturias dimensijas. Iš turimo ribotumo kyla būtinybė sumažinti dimensijų skaičių išsaugant erdvės savybes.

Logiškas ir kvailas atsakymas galėtų būti – “Numetam nereikalingas dimensijas ir paliekam tik pirmas tris”. Deja, tačiau taip mes galime pamatyti tik priklausomumą tarp pirmų trijų parametrų. Dimensijų mažinimas realiai sukuria naujus sistemos parametrus, pasiremiant ant senųjų ir išspaudžia mūsų duomenis į naują `savybių erdvę`.

Trumpai aptarkime dvi paprasčiausias ir dažniausiai naudojamas technikas.

Principinė komponentų analizė

PCA ( Principal Component Analysis, “Principinė komponentų analizė” ) tai yra dimensijų mažinimo technika, paremta kovariacijos matrica. PCA sukinėja kovariacijos matricą ir ieško kryptį, kurioje esama didžiausia duomenų variacija, t.y. kuria kryptimi duomenų yra daugiausiai. Po to, kai tokia kryptis buvo rasta, PCA paima statmenį rastai krypčiai ir ieško kuria kryptimi duomenų variacija didžiausia. Procesas kartojasi priklausomai nuo dimensijų skaičiaus.

Jeigu duomenys yra trimačiai – tuomet tokios kryptis bus trys, jeigu duomenys turi 120 dimensijų – krypčių bus tiek pat – 120. Įdomiausia tai, kad nors PCA ir paliko tiek pat dimensijų – realiai visi duomenys yra projektuojami tik pirmose dimensijose, t.y. didžiausią duomenų priklausomybę erdvėje galime pamatyti pirmose dimensijose.

Analizė linijiniu diskriminantu

LDA ( Linear Discriminant Analysis, “Analizė linijinių diskriminantu” ) tai yra dar viena dažai naudojama dimensijų mažinimo technika, paremta duomenų matricos vidurkiu skaičiavimu. LDA paima duomenų sritis, paskaičiuoja jų didžiausio vidurkio tašką ir sukalioja duomenis iki tol, kol vidurkiai nebus atskirti per maksimalų galima atstumą.


Užteks kalbų, metas ir pažiūrėti į kažką.

Tarkime mes turime du kiaušinius trijose dimensijose, kurie yra pasiskirstę pagal Gausą.

Po PCA atlikimo, PCA mums gražina kryptis, kuriomis yra didžiausia variacija.

Dabar mes jau turime kryptis, todėl galime suprojektuoti mūsų duomenis gautų krypčių atžvilgiu. Taigi, dviejuose dimensijose mūsų duomenys atrodo taip.

O taip mūsų duomenys atrodys vienoje dimensijoje.


Dimensijų mažinimo klausimas liks aktualus visuomet. Egzistuoja labai daug būdų jų mažinimui. Paprastumo dėlei šiame įraše paminėjau tik du paprasčiausius linijinius būdus, tačiau egzistuoja ir gan sėkmingai dirba ir ne-linijiniai dimensijų mažinimo būdai, reikalaujantys žymiai daugiau skaičiavimo resursų.

Dėkojimai HSG-IMIT ir VGTU URD.

Paslėptas Markovo modelis: Diskretinis Markovo procesas

Paimkime sistemą, kurią galima apibūdinti bet kokiu laiko momentu tam tikra būsenų seka N, kur galimos sistemos būsenos yra S_1, S_2, .., S_N, kaip pavaizduota iliustracijoje.

Markovo graindinė su 5 būsenomis ir perėjimo tikimybėmis

Markovo graindinė su 5 būsenomis ir perėjimo tikimybėmis

Per tam tikrą, periodinį laiko tarpą, sistema pakeičia savo būseną, priklausomai nuo ankščiau numatytų tikimybių. Mes nustatome laiko konstantas, susietas su būsenų kitimu, t = 1, 2, ... ir nustatome sistemos būseną q_t, esant t laikui. Pilnas probleminis sistemos apibūdinimas reikalauja žinoti sistemos būseną kiekvienu laiko momentu. Specialaus diskretinio, pirmojo tipo Markovo grandinei, toks probleminis sistemos apibūdinimas yra išskaidytas į dabartinę ir spėjamą būseną, pavyzdžiui:

Kur P yra skaičiuojamoji tikimybė; q_t yra t laiko momentu sistemos būsena S_N.

Mes orientuojamės tik į procesus, kurioje aukščiau nurodytos lygties dešinėje dalyje, kuri yra nepriklausoma nuo laiko. Tai veda prie galimybės suformuoti tarpinių būsenų, sudarytų iš dabartinės ir spėjamos, tikimybes a_{ij}:

su tarpinės būsenos koeficientų apibrėžimais:

kadangi jos pilnai patenkina standartinio stochastinio proceso konstantas.

Aukščiau nurodytas stochastinis procesas gali būti vadinamas galimas Markovo modelis, kadangi proceso išėjimas yra sistemos būsena tam tikru laiko momentu, kur kiekviena būsena nusako fizikinį įvykį. Tam, kad įtvirtinti aptartas idėjas, paimkime trijų lygių Markovo oro modelį. Galima pasakyti, kad galimas pusiaudienį oras lauke gali būti trijų fazių:

  • Būsena 1: lietus
  • Būsena 2: debesuota
  • Būsena 3: saulėta

Mes teigiame, kad oras, esant dienai t, yra charakterizuojamas pagal aukščiau nurodytas būsenas, o galimybių a_{ij} matrica A atrodytų taip:

Padarykime prielaidą, kad pirmą dieną (t=1) šviečia saulė. Ir paklauskime klausimo: kokia tikimybė, kad per sekančias septynias dienas oras bus “saulė-saulė-lietus-lietus-saulė-debesuota-saulė-..” ? Tikimybių seką O mes galime aprašyti kaip O = \{S_3, S_3, S_3, S_1, S_1, S_3, S_2, S_3\}, kuri sudaryta iš t =1, 2, ..., 8 laiko momentu atliktais stebėjimais. Mes norime nustatyti šio modelio tikimybę O. Tokia tikimybė gali būti išreiškiama taip:

panaudojome pažymėjimą

norėdami pažymėti pradinio įvykio tikimybę.

Taip pat galime paklausti dar vieno įdomaus klausimo (į kurį atsakyti galime pasitelkti modelį): Kokia tikimybė, kad modelis liks vienoje būsenoje tiksliai d dienų?

Tokia tikimybė yra randama stebėjimų seka:

modeliui, kuris yra:

Dydis p_i(d) yra diskretinis dydis, kuris žymi funkcijos tankio tikimybę, kurios trukmė yra d, i būsenoje. Šitas eksponentinis tikimybės tankio dydis yra Markovo grandinės tikimybės būsenos ilgis. Remiantis p_i(d), mes galime apskaičiuoti tikėtiną vienos būsenos stebėjimų skaičių

Iš čia galime apskaičiuoti, kad tikėtinas vienos būsenos stebėjimas esant saulėtam orui yra \frac{1}{0.2}=5, debesuotumui \frac{1}{0.4}=2.5, o tikimybė stebėti lietų \frac{1}{0.6}=1.67 dienos.

Šaltinis: “A tutorial on Hidden Markov Models and Selected Applications in Speech Recognition”

Paslėptas Markovo modelis: Įžanga

Po truputi ruošiames baigiamąjam darbui, todėl pradėjau versti vieną gerą paslėpto Markovo modelio vadovą “A tutorial on Hidden Markov Models and Selected Applications in Speech Recognition”. Pateikiu Jums išverstą įvadą.

Nors ir buvo pristatyti dar vėlesniais 1960-tais ir ankstyvais 1970-tais metais, statistinis Markovo metodas arba paslėptas Markovo metodas tapo labai populiarūs tik paskutiniais metais. Yra dvi pagrindinės priežastys kodėl taip nutiko. Pirma, modeliai yra stipriai pagrįsti matematiškai ir iš to galima suformuoti teoretinę bazę modelių taikymui. Antra, modeliai, reikiamai pritaikyti, labai gerai dirba praktikoje, svarbiuose įtaisuose. Šiame vadove pabandysime atsargiai ir metodiškai apžvelgti teoretinius šio tipo statistinio modelio aspektus ir parodyti kaip jie yra pritaikomi balso atpažinimo problemoms spręsti.

Realaus pasaulio procesus paprasčiausiai galime apibūdinti signalais. Signalai gamtoje gali būti diskretiniai (raidės iš žodyno) arba nuolatiniai (garsiniai signalai, temperatūros matavimai). Signalo šaltinis gali būti stacionarus (jo statistiniai apibrėžimai nepriklauso nuo laiko), ar nestacionarus (signalo apibrėžimai laikui bėgant kinta). Signalai gali būti gryni (siunčiami tiesiai iš šaltinio), ar pažeisti iš kitų signalų šaltinių (kaip pavyzdžiui triukšmo) arba dėl perdavimo trukdžių, aido, kt.

Fundamentinio tipo svarbi problema yra charakterizuoti tokius, realaus pasaulio, signalus į signalų modelį. Yra keletas priežasčių dėl ko šitą problemą yra būtina spręsti. Pirmiausiai, signalo modelis suteikia mums pradinę informaciją apie signalą, kuria remiantis yra galima apibrėžti reikalingą signalą sistemos išėjime. Pavyzdžiui, mus domina pokalbio, vykstančiu telefonu, signalo sustiprinimas. Signalas yra pažeistas triukšmo ir perdavimo kliūčių. Tokiam uždaviniui atlikti mes galime panaudoti signalų modelį ir suprojektuoti sistemą, kuri pašalins nereikalingą triukšmą ir anuliuos perdavimo iškraipymą. Antra priežastis kodėl signalų modelis yra toks svarbus yra tai, kad jis potencialiai mums gali pasakyti labai daug apie signalo šaltinį, net jeigu mes jo nematome. Ši savybė yra labai svarbi, kai yra būtina gauti tikslų signalą iš šaltinio. Šiuo atveju, su geru signalo modeliu, mes galime simuliuoti signalo šaltinį ir išmokti kuo daugiau iš tokių simuliacijų. Galiausiai, pagrindinė priežastis kodėl signalo modelis yra toks svarbus – jis velniškai gerai veikia praktikoje ir leidžia mums suvokti svarbias praktines sistemas, pavyzdžiui spėjimo sistemos, atpažinimo sistemos, identifikavimo sistemos, kt.

Galima pasirinkti keletą signalo modelio tipų, kuriais galima apibūdinti nagrinėjamo signalo ypatybes. Vienas signalas gali būti išskaidytas į keletas jo sudedamąsias klases: deterministinį modelį ir statistinį modelį. Deterministinis modelis parodo pagrindinę informaciją apie signalą: ar signalas yra sinusinės formos, ar yra eksponentinė suma, kt. Tokiais atvejais, signalo apibūdinimas yra gan paprastas uždavinys. Viskas, kas reikalaujama yra nustatyti signalo modelio parametrų reikšmes (amplitudę, dažnį, fazę, kt.). Antra signalo modelio plati klasė yra statistinis modelis, kuris bando charakterizuoti statistinius signalo parametrus. Tokių statistinių modelių pavyzdžiai yra Gauso procesas, Poisono procesas, Markovo procesas, paslėptas Markovo procesas. Paslėpta prielaida yra ta, kad signalas gali būti gerai charakterizuotas kaip parametrinis atsitiktinis procesas, ir jo stochastinio proceso parametrai gali būni nustatyti tiksliai, gerai apibūdintai.

Įdomumo dėlei, nusakytas kalbos atpažinimas, abudu deterministiniai ir stochastiniai signalo modeliai turi didelį pasisekimą. Šitame straipsnyje mes orientuosimės į vieną stochastinį signalo modelį, kuris pavadintas paslėptas Markovo modelis (angliškai: hidden Markov model (HMM)). Pirmiausiai mes apžvelgsime Markovo grandinės teoriją ir ją plėsdami prieisime prie paslėpto Markovo modelio, panaudodami kelis pavyzdžius. Tuomet sutelksime savo dėmesį į tris fundamentines problemas, su kuriomis susiduriama projektuojant HMM: stebėjimo eilės tikimybės vertinimas specifiniam HMM; geriausios modelio būsenos eilės nustatymas; modelio parametrų apibrėžimas, siekiant gauti norimą signalo atsakymą. Mes parodysime, kad kai šios tris fundamentinės problemos yra išspręstos, mes galime taikyti HMM nurodytoms problemos spręsti balso atpažinimo sistemose.

Nei paslėpto Markovo modelio, nei balso atpažinimas nėra naujas dalykas. Pagrindinė teorija buvo paskelbta Baumo ir jo kolegų dar vėlyvais 1960, ankstyvais 1970 metais ir pritaikyta balso atpažinimo sprendimams Bakerio CMU ir Jelinek su kolegomis IBM 1970 metais. Tačiau, paplitęs supratimas ir HMM teorijos kalbos atpažinimo sprendimai pasirodė tik prieš kelerius metus. Tai nutiko dėl kelių priežasčių. Pirma, paslėptas Markovo modelis buvo publikuotas matematiniuose žurnaluose, kurie pagrinde nebuvo skaitomi inžinierių, kurie dirbo prie balso atpažinimo. Antra priežastis yra ta, kad pagrindiniai balso atpažinimo sprendimai nebuvo gerai dokumentuoti daugeliams vartotojų, todėl buvo sunku suprasti kokiu principu veikia sprendimas ir inžinieriai negalėjo perkelti modelio į savo tyrimus. Kuomet detalūs vadovai buvo išleisti, inžinieriai perkėlė teoretinį modelį savo laboratorijas. Šitas vadovas yra skirtas suteikti pagrindinės HMM teorijos apžvalgą (kaip ją pateikė Baumas ir jo kolegos), sutekti praktines teorinio metodo diegimo detales ir aptarti keletą nurodytų teoretinių aiškių problemų sprendimų pavyzdžių kalbos atpažinime. Vadovas sudeda iš kelių sudėtų straipsnių ir suteikia vientisą vadovą, kuris suteikia reikiamą užnugarį norint dirbti šios sferos tyrimų srityje.

Šis vadovas susideda iš sekančių sekcijų. Antroje sekcijoje mes apžvelgsime diskrečią Markovo grandinę ir parodysime paslėptos būsenos koncepciją, kur stebėjimas yra problematiška būsenos funkcija, gali būti efektyviai panaudota. Teoriją iliustruosime dvejais pavyzdžiais: monetos supimas, klasikinė kamuoliuko ir urnos sistema. Trečioje sekcijoje mes aptarsime tris fundamentines HMM problemas, ir suteiksime tris praktines technikas jas sprendžiant. Ketvirtoje sekcijoje mes aptarsime skirtinus HMM tipus, kurie buvo išstudijuoti: ergodinis ir kairys-dešinys modelius. Šioje sekcijoje mes taip pat aptarsime skirtingas modelio ypatybes, kaip stebėjimo skaičiaus funkcija, būsenos trukmės skaičius ir optimizavimo kriterijus, pasirenkant teisingas HMM parametrų reikšmes. Penktoje sekcijoje mes aptarsime problemas, kuris kyla diegiant HMM, kaip mastelio keitimas, pradinių parametrų sąmatos, modelio dydis, modelio forma, duomenų praradimas ir daugialypės stebėjimo seką. Šeštoje sekcijoje mes aptarsime izoliuotą žodžių iš balso atpažinimą, kuris yra suprojektuotas, naudojantis HMM idėjomis ir parodysime kaip jis elgiasi, lyginant su kitomis, alternatyviomis sistemomis. Septintoje sekcijoje mes išplėsime idėjas, aptartas šeštoje sekcijoje, ir pritaikysime jas sakinio atpažinimui. Tam mes jungsime atskirus, kiekvieno žodžio HMM modelius. Aštuntoje sekcijoje mes trumpai apžvelgsime didelį balso atpažinimo žodyną ir galiausiai, devintoje sekcijoje mes apibendrinsime visas idėjas, kurias aptarinėjome per visą vadovą.

Dirbtinis intelektas #1


Būdamas Helsinkyje, savo universiteto bibliotekoje atradau pakankamai literatūros pradėti intensyviau studijuoti savo hobį ir galbūt būsimo bakalaurinio temą – dirbtinį intelektą.

Iškarto noriu atsiprašyti už kai kuriuos žodžius, kurie gali pasirodyti “nelietuviški” ( angliškas variantas + raidė “s” ).


Šiuolaikinis požiūris į dirbtinį intelektą susiformavo 1940 metais dėka Warren McChlloch ir Walter Pitts darbo. Jie parodė, jog dirbtinių neuronų tinklas gali potencialiai išspręsti bet kokią aritmetinę ar loginę lygtį. Jų darbas žymimas kaip dirbtinio intelekto raidos pradžia.


Koks dirbtinis intelektas be dirbtinio neurono? Norint suprasti kaip dirba dirbtinis neuronas, reikia išsiaiškinti kaip dirba biologinis neuronas.

Supaprastintai, neuronas turi tris pagrindinius komponentus:

  1. Dendridus
  2. Ląstelinį kūną
  3. Aksoną

Dendridai yra medžio tipo nervų skaidulų priimamieji tinklai, kurie siunčia elektrinį signalą į ląstelinį kūną. Ląstelinis kūnas efektingai sudeda visus ateinančius signalus. Aksona yra vienetinė nervinė skaidula, kuri perduoda signalą iš ląstelinio kūno kitiems nervams. Toje vietoje, kur susiduria aksona ir kito nervo dendridas, vadinamas sinapse.


( Paišau nelabai )


Toliau tęsiant reikia susitarti dėl žymenų:

  • Skaliarai bus žymimi mažomis raidėmis: a,b,c.
  • Vektoriai bus žymimi mažimos paryškintomis raidėmis a,b,c.
  • Matricos bus žymimos didžiosiomis paryškintomis raidėmis A,B,C.

Vieno-įėjimo neuronas

Remiantis biologiniu neuronu, galime sukonstruoti dirbtinį neuroną.

vieno įėjimo neuronas

Skaliaras p yra padauginamas iš svorio w ir pw keliauja į sumavimo įrenginį. Kitas įėjimas, kurio vertė yra pastovi – 1, yra padauginamas iš nuolydžio b ir tuomet gauta reikšmė siunčiama į sumavimo įrenginį. Sumavimo įrenginys sudeda abi atėjusias reikšmes ir išsiunčia skaliarą n į perdavimo funkciją, kuri sugeneruoja išėjimo skaliarą a.

Svoris w priklauso nuo sinapsės jėgos, sumavimo įrenginys atstoja ląstelės kūną, o perdavimo funkcija ir skaliaras a atstoja aksoną.

Perdavimo funkcijos

Perdavimo funkcijos atlieka šiokį tokį filtravimą. Dažniausiai naudojamos trys:

  1. Sunkios ribos perdavimo funkcija;
  2. Linijinė perdavimo funkcija;
  3. Logaritminė ( Log-Sigmoid ) perdavimo funkcija;

Sunkios ribos perdavimo funkcija

Sunkios ribos perdavimo funkcija išėjimui atiduoda 0, jeigu funkcijos argumentas yra mažesnis už 0 ir 1, jeigu funkcijos argumentas yra didesnis už 1. Paprasta, argi ne ? Formulės pavidalu tai atrodytų taip:

a = hardlim(n)

sunkios ribos perdavimo funkcija

Linijinė perdavimo funkcija

Linijinė perdavimo funkcija išėjimui duoda lygiai tą patį funkcijos argumentą. Formulės pavidalu tai atrodytų taip:

a = purelim(n)

linijinė perdavimo funkcija

Pagalvojus – kam tokios funkcijos reikalingos? Tačiau tokio tipo funkcijos naudojamos ADALINE tinkluose.

Logaritminė ( Log-Sigmoid ) perdavimo funkcija

Logaritminė ( Log-Sigmoid ) perdavimo funkcija paima sumavimo įrenginio išėjimą ( kuris gali būti bet koks skaičius nuo minus begalybės iki plius begalybės ) ir jį suspausti tarp 0 ir 1, remiantis tokia išraiška:

a = 1/(1+e^(-n))

Formulėje tai atrodo taip:

a = logsig(n)

logaritminė perdavimo funkcija

Tokia funkcija yra plačiai naudojama keletos sluoksnių tinkluose, kurie treniruojami backpropogation algoritmu, kadangi ši funkcija yra diferencijuojama.


Šitam įraše paminėjome kieno dėka pradėjo judėti dirbtinio intelekto mokslas, iš ko sudarytas ir kaip veikia papraščiausias dirbtinis neuronas, kokios yra perdavimo funkcijos. Kitam įraše aptarsim keletos įėjimų neuroną ir neuronų architektūros įžangą.