• Nebyly nalezeny žádné výsledky

generovanie twitterových príspevkov

N/A
N/A
Protected

Academic year: 2022

Podíl "generovanie twitterových príspevkov"

Copied!
81
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

MASARYKOVA UNIVERZITA

FAKULTA INFORMATIKY

Strojové generovanie twitterových príspevkov

pomocou rekurentných neuronových sietí

DIPLOMOVÁ PRÁCA

Bc. Martin Spišiak

Brno, jeseň 2017

(2)
(3)

MASARYKOVA UNIVERZITA

FAKULTA INFORMATIKY

Strojové generovanie twitterových príspevkov

pomocou rekurentných neurónových sietí

DIPLOMOVÁ PRÁCA

Bc. Martin Spišiak

Brno, jeseň 2017

(4)
(5)

Na tomto mieste sa v tlačenej práci nachádza oficiálne podpísané zadanie práce a vyhlásenie autora školského diela.

(6)
(7)

Vyhlásenie

vyhlasujem, že táto diplomová práca je mojím pôvodným autorským dielom, ktoré som vypracoval samostatne. Všetky zdroje, pramene a literatúru, ktoré som p r i vypracovaní používal alebo z nich čerpal, v práci riadne citujem s uvedením úplného odkazu na príslušný zdroj.

Bc. Martin Spišiak

Vedúci práce: doc. PhDr. Josef Prokeš Ph.D.

(8)
(9)

Poďakovanie

Chcel by som sa poďakovať vedúcemu mojej diplomovej práce doc.

PhDr. Josefovi Prokešovi Ph.D. za rady, trpezlivosť a pomoc p r i pí­

saní práce. Tiež by som chcel poďakovať konzultantovi RNDr. Jiřímu Maternovi, Ph.D., ktorý ma usmernil pri zbieraní informácií a vývoji aplikácie. Nakoniec patrí moja veľká vďaka aj mojej rodine, ktorá mi bola vždy oporou.

(10)

Zhrnutie

Hlavný cieľ práce je vyvinutie aplikácie, ktorá bude schopná genero­

vať tweety na základe originálnych tweetov od autora so špecifickým štýlom vyjadrovania sa. Sú predstavené neurónové siete a ich aplikácie v strojovom učení a diskutované ich jednotlivé variácie. Práca demon­

štruje použitie rekurentnej neurónovej siete na generovanie textu tak, aby sa využil jej potenciál pamätať si predchádzajúci kontext.

(11)

Kľúčové slová

Twitter, rekurentně neurónové siete, strojové učenie, Long Short-term Memory, generovanie textu, Keras, Python

(12)
(13)

Obsah

1 Úvod 1 2 Strojové učenie 3

2.1 Strojové učenie bez učiteľa 3 2.2 Strojové učenie s učiteľom 4

2.2.1 Druhy strojového učenia s učiteľom 4 2.2.2 Cost function - stratová funkcia 8

2.2.3 Gradient descent 9 2.2.4 Overfitting 10

3 Neurónové siete 13 3.1 Posun vpred - forward pass 16

3.2 Spätná propagácia - backward propagation 17

4 Rekurentně neurónové siete 19 4.1 Long Short-term Memory 21 5 Analýza a generovanie twitterových príspevkov 27

5.1 Popis aplikácie 28 5.1.1 Tensor Flow 30

5.1.2 Keras 31 5.1.3 Tweepy 32 5.1.4 NumPy 32 5.2 Požiadavky na spustenie aplikácie 33

5.3 Beh aplikácie 33 5.3.1 Krok č. 1 - Stiahnutie twitterových príspevkov

konkrétneho autora 34 5.3.2 Krok č. 2 - Načítanie a spracovanie súboru s

uloženými twitterovými príspevkami 36 5.3.3 Krok č. 3 - Vytvorenie a učenie neurónovej siete

na základe spracovaných twitterových príspevkov 43 5.3.4 Krok č. 4 - Generovanie twitterových príspevkov 46

5.3.5 Konfigurácia hyperparametrov 48

6 Záver 51

(14)

Bibliografia 53 A Vybrané vygenerované tweety s rôznymi teplotami pomo­

cou aplikácie 57 A . l Tweety generované s přednastavenými hodnotami aplikácie . 57

A.2 Tweety generované s přednastavenými hodnotami aplikácie,

iba dimenzia neurónov je 256 58 A.3 Tweety generované s dimenziou neurónov 256 a počtom vrs­

tiev 1 59 A.4 Tweety generované s dimenziou neurónov 128 a počtom vrs­

tiev 2 61 B Elektronické prílohy 63

(15)

Zoznam tabuliek

2.1 Vývoj cien domov vzhľadom na rozlohu a počet izieb 5.1 Rozdelenie tweetov na sekvencie podľa parametrov

uvedených v hlavičke tabuľky 42

(16)
(17)

Zoznam obrázkov

2.1 Ukážka obrázkov s ručne písanými číslami z databáze MNIST. Obrázok prevzatý z https : //knowm. org/

m n i s t - h a n d - w r i t t e n - d i g i t s - c l a s s i f i c a t i o n - b e n c h m a r k / 5 2.2 Ukážka lineárnej regresie 7

2.3 Priebeh sigmoid funkcie. Obrázok prevzatý z https : //en.wikipedia.org/wiki/Sigmoid_function 8 2.4 Ukážka funkcie gradient descent. 10

2.5 Rôzne prípady stratovej funkcie. Prevzaté z

https://www.coursera.org/learn/machine-learning/

l e c t u r e / n w p e 2 / c o s t - f u n c t i o n - i n t u i t i o n - i i 11 3.1 Štruktúra neurónu v ľudskom tele[6] 14

3.2 Príklad neurónovej siete simulujúcej XOR operáciu.

Obrázok prevzatý z https : //stevenmiller888. github.

io/mind-how-to-build-a-neural-network/ 15 4.1 Príklad sekvencií v rekurentných neurónových

sieťach. 20

4.2 Vnútnorná štruktúra bunky L S T M so 4 vrstvami neurónových sietí. 22

4.3 Prvá sigmoid brána p r i ht-\ a Xf. 23

4.4 Druhá sigmoid brána spolu s tanh bránou. 24 4.5 Aktualizácia stavu Q . 24

4.6 Výstup bunky LSTM. 25

5.1 Názorná ukážka stránky s prihlasovacími údajmi pre aplikáciu. Hodnoty jednotlivých polí s údajmi sú zabielené. 35

5.2 Ukážka kódu funckie save_tweets 37 5.3 Funkcia prepare_data 39

5.4 Funkcia regularize_tweets 41

5.5 Implementácia funkcie i n i t i a l i z e _ a r r a y s 44 5.6 Funkcia sample, ktorá vracia znak vyskytujúci sa s

najväčšou pravdepodobnosťou ovplyvne 47 5.7 Funkcia produce_tweets, ktorá postupne generuje

tweety. 48

(18)
(19)

1 Úvod

Tradičné programovanie zahrňuje definovanie presných krokov, ktoré má počítač vykonať, aby sa dosiahlo to, čo požadujeme. A k však chceme od počítača niečo, čo ani sami nevieme naprogramovať, môže to byť pomerne náročné. A tu práve nastupuje strojové učenie. N a začiatku to boli prvé kolosy ako E N I A C a jemu podobné počítače. V priebehu niekoľkých desaťročí však prebehla masívna evolúcia výpoč­

tových systémov. Počítače sa neustále zmenšovali, výkon sa zvyšoval, a teraz nosíme vo vrecku telefóny, ktorých výpočtová sila mnohoná­

sobne prevyšuje silu prvých počítačov. A k o sa technologický pokrok neustále posúval vpred popri tom prišiel aj zrod myšlienky, že by člo­

veka mohla napodobňovať umelá inteligencia. V minulom storočí bolo niečo také nepredstaviteľne náročné na implementáciu, dnes však už umelú inteligenciu využívame (napríklad Cortana, Siri, predikcia vy­

hľadávania Google a pod.), aj keď zatiaľ ešte nejde o umelú inteligenciu podobnú tej ľudskej.[1]

Dnešná umelá inteligencia je založená na schopnosti neustále sa učiť z nových dát. Nie je to len program, ktorý sa riadi podľa presných príkazov v sekvencii napísaných programátorom. Čím viac dát je k dispozícií na analýzu a spracovanie, tým lepšia je táto inteligencia v predpovediach vecí, na ktoré slúži. Podobne môžme definovať stro­

jové učenie (angl. Machine Learning). Funguje tak, že sa vezme veľké množstvo tréningových dát - príkladov (rôzne množstvo faktorov ako vstup a ich kombinácia ako výsledný výstup, čo je jeden príklad) a pomocou nich sa stroj „naučí" predpovedať výsledok na ďalších, už ostrých vstupoch. Toto učenie používa slabá umelá inteligencia (angl.

A N I - Arti cial Narrow Intelligence), ktorá sa dnes využíva vo veľkej miere.

Príklad modelu strojového učenia sú neurónové siete. Myšlienka využiť štruktúru, ktorá sa podobá neurónovej sieti v ľudskom tele, tu bola už niekoľko desaťročí, avšak až technologický vývoj v poslednej dobe umožnil širšie využitie tohto modelu. Neurónové siete nájdu potencionálne využitie v analýze a následnom využití obrovského množstva dát, ktoré k nám prúdi cez sociálne siete. Jedným z najpo­

pulárnejších médií v súčastnosti je Twitter. Vysoká aktivita na Twitteri má pozitívny vplyv na zvýraznie profilu akejkolVek osoby alebo firmy

(20)

i . Ú V O D

v online priestore. Generovanie príspevkov automaticky na základe profilu užívateľa tak má perspektívne využitie.

V tejto práci priblížim strojové učenie a jeho druhy. Ďalej sa zame­

riam na neuronové siete a ako sa dá ich variácia, rekurentně neuronové siete, využiť na generovanie textu. Nakoniec opíšem implementovánu aplikáciu, ktorá generuje twitterové príspevky na základe zvoleného autora.

(21)

2 Strojové učenie

Strojové učenie je obor, ktorý sa zaoberá otázkou, ako dokázať, aby sa počítače samé učili. Inými slovami, strojové učenie je v podstate počíta­

čový program, ktorý učí počítače ako sa naprogramovať tak, aby sme my ako ľudia nemuseli počítaču explicitne definovať ako postupovať pri vykonávaní úlohy, ktorou chceme dosiahnuť požadovaný výsle­

dok. A b y mohol algoritmus strojového učenia napísať svoj vlastný postup p r i vykonávaní určitej úlohy, potrebuje na to súbor známych príkladov. [2]

Napríklad aby sme naučili počítač rozoznávať zvieratá, ukážeme mu niekoľko obrázkov s popisom, aké zviera na obrázku je. Podobne sa učia aj deti rozpoznávat predmety. Strojové učenie potom použije tieto vzorky na identifikáciu jedinečných atribútov, ktoré odlišujú zvieratá jedno od druhého. S touto informáciou potom strojové učenie vytvorí svoj vlastný program na rozoznávanie zvierat.

Strojové učenie je teda spôsob ako naučiť počítače, aby robili zložité úlohy, ktorých postup sa nedá jednoducho opísať človekom. Je to schopnosť nejakého programu učiť sa predpovedať nejaký výstup na základe dát, ktoré obsahujú trénovacie príklady. Trénovacie príklady sa skladajú z vstupných dát a z výstupu. Zo vstupných dát program identifikuje unikátne vlastnosti (z angl. features) a z výstupu priradí tieto vlastnosti určitej skupine. Model bude na základe týchto dát potom vedieť predpovedať, aký bude výsledok, keď m u predložíme vstupné dáta už bez výslednej hodnoty.

V rámci strojového učenia existuje mnoho modelov na predpo­

vedanie čo najsprávnejšieho výsledku. A s i jedným z najznámejších modelov v súčasnosti sú neurónové siete.

Strojové učenie sa delí na dve kategórie:

• s učiteľom (z angl. supervised)

• bez učiteľa (z angl. unsupervised)

2.1 Strojové učenie bez učiteľa

Pri učení bez dohľadu máme nejaké trénovacie dáta, ale nevieme prog­

ramu povedať, čo je správny výsledok. Pýtame sa programu otázku:

mohol by si automaticky nájsť nejakú štruktúru v daných dátach, ak

(22)

2. STROJOVÉ UČENIE

neviem, čo je v dátach, akú majú štruktúru a aký má byť približný výsledok? Mohol by si roztriediť dáta do skupín?

Toto učenie sa využíva napríklad na analýzu sociálnej siete - hľada­

nie ľudí, ktorí sa poznajú navzájom, ak poskytnem programu mojich priateľov z Facebooku. Tiež sa strojové učenie bez dohľadu využíva pri hľadaní segmentácie trhu. Veľa spoločností má k dispozícií informácie o zákazníkoch a na základe týchto informácií chceme zistiť rozdielne trhové segmenty tak, aby sme mohli lepšie cieliť marketing a reklamu.

Podobne sa toto strojové učenie používa aj p r i takzvanom probléme koktejlovej párty: chceme separovať jednotlivé hlasy v nahrávkach, v ktorých nie je jasné, ktorá osoba čo hovorí. [3]

2.2 Strojové učenie s učiteľom

O strojovom učení s učiteľom hovoríme vtedy, keď máme množinu s trénovacími príkladmi a p r i každom príklade z tejto množiny vieme, ako má vyzerať správny výsledok. Algoritmus sa na základe týchto trénovacích dát naučí predpovedať, čo bude výstupom nových dát.

2.2.1 Druhy strojového učenia s učiteľom

A k o príklad množiny s trénovacími príkladmi uvediem súbor ob­

rázkov z databáze M N I S T1 - h t t p : //yarni. lecun. com/exdb/mnist/, ktoré obsahujú ručne písané čísla ako tie uvedené na obrázku 2.1. Tieto obrázky tiež obsahujú štítky (z angl. labels), na ktorých je číslo, ktoré sa na obrázku vyskytuje. Štítky sú zvyčajne generované manuálne.

Model využívajúci strojové učenie s učiteľom sa vďaka tomuto súboru naučí predpovedať, aké číslo sa vyskytuje na ďalších, neoznačených obrázkoch. Tento príklad sa tiež nazýva klasifikácia - algoritmus sa snaží predpovedať, do ktorej triedy spadajú vstupné dáta. Vo vyššie uvedenom príklade sa po trénovaní algoritmus pokúša uhádnuť, aké číslo je na obrázku, ktorý mu predložíme. Okrem klasifikácie existuje ešte v strojovom učení s učiteľom tiež regresia.

1. MNIST - Modified National Institute of Standards and Technology database

(23)

2. STROJOVÉ UČENIE

3 / T f 4 tis I / 3 l

Obr. 2.1: Ukážka obrázkov s ručne písanými číslami z da­

tabáze MNIST. Obrázok prevzatý z h t t p s : //knowm. org/

m n i s t - h a n d - w r i t t e n - d i g i t s - c l a s s i f i c a t i o n - b e n c h m a r k /

Regresia

Do regresie sa radia všetky algoritmy strojového učenia s učiteľom, ktoré sa snažia predpovedať nejakú reálnu hodnotu na základe ne­

jakého vstupu. Trénovacia množina obsahuje príklady s hodnotami vstupných parametrov ako vstup a (väčšinou) reálne číslo ako očaká­

vaný správny výstup. Ako veľmi jednoduchý príklad uvediem rozlohu

(24)

2. STROJOVÉ UČENIE

Tabuľka 2.1: Vývoj cien domov vzhľadom na rozlohu a počet izieb hodnoty matice X hodnoty matice y

Rozloha domu Cena

130 100000

185 143000

147 112000

169 131000

domu ako vstupné dáta a cenu domu ako správne výsledky, uvedený v tabuľke 2.1.

Dáta z tabuľky 2.1 sa pretransformujú do matíc X a y nasledovne:

X =

130 100000 185 143000

,y =

147 112000 169 131000

Matica X teda predstavuje vstupné hodnoty parametra rozloha domu, kde jeden riadok znamená jeden trénovací príklad. Prvý stĺpec obsahuje rozlohu domu a druhý stĺpec počet izieb. Matica y obsa­

huje očakávané ceny domov, teda výstupné hodnoty. Tieto výstupné hodnoty sú z množiny prirodzených čísel N , ktorá je podmnožinou množiny reálnych čísel R a teda hovoríme o regresii, konkrétne o lineárnej regresii.

Ako hypotézu by sme si v prípade cien domov z tabuľky 2.1 mohli zvoliť rovnicu

h(x) = a* x + b (2.1) Hypotézou rozumieme funkciu, pomocou ktorej sa model snaží pred­

povedať výsledok na základe vstupných dát. V tomto prípade sú vstupné dáta jednotlivé riadky v matici X, ktorých hodnoty sa do­

sadia za parameter x. Hodnoty parametrov a a b sa snažíme nájsť tak, aby po dosadení dávala hypotéza výsledok čo najbližší tomu z riadku matice y, ktorý odpovedá riadku matici x. Parameter b sa tiež nazýva chybovosť - bias funkcie.

(25)

2. STROJOVÉ UČENIE

Napríklad po dosadení a = 800 a b = 0 do hypotézy uvedenej vyššie dostaneme hodnoty uvedené na obrázku 2.2, na ktorom sú tiež uvedené originálne hodnoty matice y.

Rozdiel nákladovej funckie h y p o t é z y a o č a k á v a n é h o v ý s l e d k u Očakávaný výsledok -O- Výsledok |io dosadení parametra a = 800 a h = 0 do hypotézy h(>J a'x + h

160000 T 1 1 1

150000 MBoee

Rozloha domu (v mA2)

Obr. 2.2: Ukážka lineárnej regresie Klasifikácia

Klasifikácia je podobná regresii, avšak výstupnými hodnotami tréno­

vaného modelu sú pravedpodobnostné hodnoty, teda hodnoty v inter­

vale od 0 po 1. Tieto hodnoty udávajú, ako veľmi si je trénovaný model istý, že vstupné dáta patria do konkrétnej triedy. Príkladom môže byť klasifikácia emailu ako spam na základe určitých vlastností emailu.

Výstupom teda bude pravdepodobnosť, že email je spam, alebo nie.

Pre priradenie pravdepodobností sa používa funkcia sigmo i d, ktorá je definovaná takto:

Sigmoid teda vezme hodnotu x a stlačí jú na hodnotu v intervale [0,1].

Pri určení, či je email spam, alebo nie, na základe iba jednej premennej

(26)

2. STROJOVÉ UČENIE

x by hypotéza mohla opäť vyzerať ako h (x) = a*x + b. Tá sa potom dosadí do vyššie uvedenej funkcie sigmoid a vyjde nám nová funkcia, nazvyme ju g (z), ktorá bude vyzerať ako g (z) = o~(h(x)) = 1+e-}a*x+b) • Týmto postupom dostaneme pravdepodobnosť, akou si je model istý, že email je spam.

Obr. 2.3: Priebeh sigmoid funkcie. Obrázok prevzatý z h t t p s : / / e n . wikipedia.org/wiki/Sigmoid_function

2.2.2 Cost function - stratová funkcia

Stratová funkcia (z angl. cost function) v skratke predstavuje rozdiel medzi očakávanou výstupnou hodnotou, ktorá sa nachádza v tréno- vacích dátach a výstupnou hodnotou, ktorú predikuje hypotéza so zvolenými parametrami. Je to akási "mierka chybovosti"zvoleného modelu. Väčšinou sa definuje nasledovne:

C o s t = B U O M - i ď

2 * n

Matematicky popísané, vezmeme rozdiely medzi očakávaným výsled­

kom y i a predikciou modelu h (x{). Potom tieto rozdiely umocníme, aby

(27)

2. STROJOVÉ UČENIE

sme sa vyhli záporným číslam a penalizovali väčšie rozdiely. Následne ich spolu sčítame a vezmeme ich priemer. [4] Týmto postupom dosta­

neme číslo, ktoré udáva, ako dobre predikuje náš model výstupné hodnoty. Čím menšie číslo, tým lepšie.

Pre taký jednoduchý problém, ako je napríklad vypočítanie ceny domu na základe jedného parametra, môžeme doslova uhádnuť para­

metre, ktoré minimalizujú našu stratovú funkciu. Ale ako sa zvyšuje komplexita stratovej funkcie, hľadanie výsledku pomocou hádania prestáva byť uskutočniteľné. Toto je dôvod pre použitie iteratívneho prístupu zvaného gradient descent, ktorý nám umožňuje minimalizo­

vať komplexnú stratovú funkciu.

2.2.3 Gradient descent

Cieľom prístupu gradient descent je nájdenie minima stratovej funkcie nášho modelu. Toto je docielené iteratívnym získavaním stále pres­

nejšieho odhadu stratovej funkcie. Predstavte si ako kráčate dolinou so zaviazanými očami. Vašim cieľom je nájdenie najnižšieho miesta v doline, ako by ste to spravili?

Rozumný prístup by bol dotknúť sa zeme okolo vás a ísť smerom ktorým sa zem najviac zvažuje. Urobte krok a potom celý proces opa­

kujte až kým nie je zem okolo vás plochá. To budete vedieť, že ste našli najnižšie miesto v doline - ak sa pohnete hociktorým smerom, budete v rovnakej výške alebo o niečo vyššie. A k sa vrátime k matematike, zem okolo nás sa stáva našou stratovou funkciou a výška v najnižšom bode údolia je minimum tejto funkcie. [4]

Teraz sa bližšie pozrime na stratovú funkciu ktorú sme videli v regresii: Vidíme, že toto je funkcia dvoch premenných: a a b. Všetky ostatné (X - vstupné dáta a y - očakávaný výstup) sú určené počas tréningu. Naším cieľom je minimalizovať túto funkciu.

Pre začatie algoritmu gradient descent je potrebný počiatočný od­

had parametrov a a b, ktoré minimalizujú túto funkciu. Ďalší krok je nájsť parciálne derivácie stratovej funkcie s ohľadom na obidva para­

metre: Parciálna derivácia indikuje, aké je zníženie, respektíve zvýšenie, ak zvýšime parametre a alebo b o veľmi malú hodnotu.

Táto hodnota sa volá learning rate - rýchlosť učenia.. Nemala by byť príliš velká, pretože by sme mohli prestreliť minimum. Tak isto by ne­

mala byť príliš malá, pretože potom bude algoritmus gradient descent

(28)

2. STROJOVÉ UČENIE

veľmi pomalý. Môžme to vidieť na obrázku 2.4, kde máme namiesto parametrov a a b parameter 0 .

Obr. 2.4: Ukážka jednej iterácie gradient descent. Obrázok prevzatý z https://www.coursera.org/learn/machine-learning

Opakujte tento proces až kým nenarazíte na dno, inými slovami algoritmus konvergoval a strata bola minimalizovaná. Existuje veľa ďalších trikov a výnimiek, ktoré tu nie sú popísané, ale toto je jeden zo spôsobov, ako nájsť optimálne parametre pre váš parametrický model.

Pri neurónových sieťach existujú rôzne variácie tohto algoritmu, avšak princíp je podobný.[4]

2.2.4 Overfitting

Bežný problém v strojovom učení je takzvaný overfitting: nájdenie fun­

kcie, ktorá perfektne vystihuje trénovacie dáta, z ktorých sa model učil, ale nedostatočne generalizuje pre dosiaľ nevidené dáta. Overfitting nastáva, keď model dosiahne stratovú funkciu veími blízku nule pre všetky trénovacie príklady. Toto sa stáva veľmi problematické s naras­

tajúcou komplexitou modelu. Underfitting je opačný problém, nastáva

(29)

2. STROJOVÉ UČENIE

keď model nie je dostatočne komplexný na zachytenie smerodajného vzorca v dátach. Príklady sú uvedené na obrázku 2.5.

Chybovosť (z angl. bias) vyjadruje počet nepresností vzniknutých pri odhadovaní fenoménov v reálnom svete pomocou zjednodušeného modelu.

Kolísanie (z angl. variance) znamená ako veľmi sa mení testovacia chybovosť na základe variácii v trénovacích dátach. Odzrkadľuje sen- zitivitu modelu na idiosynkrázie dát na ktorých sa učil. A k o model naberá na komplexitě a začína byť viac flexibilný, jeho chybovosť sa znižuje (dobre vysvetľuje trénovacie dáta), ale kolísanie sa zvyšuje (negeneralizuje už tak dobre). Dobrý model potrebuje nízku chybovosť a nízke kolísanie.

Nesmieme ale zabúdať, že to, ako dobre funguje model na trénova­

cích dátach, nie je jediná vec. Chceme tiež správne predpovedať, ktoré nové emaily budú označené ako spam. Nechceme len vytvoriť model, ktorý má 100% presnosť v klasifikácii emailov, ktoré sme použili na jeho tréning. Presná selekcia na testovacích dátach je jedna vec. Čo sa však počíta je to, či naučené postupy pomôžu aj v budúcnosti na reálnych dátach. [4]

Size

High bias (underfit)

Slze

"Just right"

Size

0o + 0\X + 62X2 + 03x3 + 04.x*

High variance (overfit)

Obr. 2.5: Rôzne prípady stratovej funkcie. Prevzaté z https:

//www.coursera.org/learn/machine-learning/lecture/nwpe2/

c o s t - f u n c t i o n - i n t u i t i o n - i i

Model uvedený na obrázku 2.5 napravo má nulovú stratu na tré­

novacích dátach, pretože perfektne vystihuje všetky aspekty týchto dát. Ale vôbec negeneralizuje. A k by sme pridali nové dáta ktoré ešte nie sú na čiare, jeho vysvetlenie týchto dát by bolo vysoko nepresné.

(30)

2. STROJOVÉ UČENIE

Máme dve možnosti ako sa vysporiadať s overfittingom:

1. Použiť viac trénovacích dát. Čím viac ich máte, tým ťažšie sa mo­

del overfitne naučením sa príliš veľa z akéhokolVek trénovacieho prípadu.

2. Použitie regularizácie. Existuje mnoho spôsobov, ako implemen­

tovat' regularizáciu. Napríklad môžme do stratovej funkcie i m ­ plementovat' pokutu za vytvorenie modelu ktorý prikladá prí­

liš veľký význam jednému aspektu, alebo dovoľuje aby bolo braných na vedomie príliš veľa aspektov. Alebo v príklade na obrázku 2.2 môžeme vydeliť rozlohu domov, resp. ich cenu prie­

merom týchto hodnôt.

(31)

3 Neurónové siete

V poslednej dobe sa neurónové siete stávajú čoraz populárnejšou im­

plementáciou strojového učenia. Neurónové siete sú čiastočne posta­

vené na princípe fungovania ľudského mozgu. Nachádzajú sa v nich tisíce až milióny uzlov pre spracovanie informácií, ktoré sú prepojené veľmi hustou komunikačnou sieťou. Väčšina dnešných neurónových sietí je organizovaná do viacerých vrstiev. Cez tieto vrstvy dáta prechá­

dzajú iba jedným smerom. Samotný uzol môže byť spojený s viacerými uzlami na nižšej vrstve, od ktorých dostáva dáta, a taktiež s viacerými uzlami na vyššej vrstve, ktorým dáta zasiela.

Neurónové siete môžeme využiť ako prostriedok pre strojové uče­

nie, pri ktorom sa počítač učí vykonávať špecifickú činnosť pomocou analýzy existujúcich príkladov. Tieto príklady sú bežne předpřipra­

vené na základe našich požiadavkov. Systém pre rozoznávanie ob­

jektov tak napríklad môže dostať tisíce obrázkov, na ktorých sú autá, domy, šálky a podobne. Na tejto vzorke obrázkov sa ďalej snaží hľadať podobnosti pre určitý typ objektu.

U z o l pridelí každému prichádzajúcemu spojeniu číslo, ktoré vy­

jadruje váhu tohto spojenia. Vo chvíli, ako je sieť aktívna, uzol dostane pre každé spojenie iné dáta - iné číslo. Toto číslo je potom vynásobené váhou spojenia. U z o l potom tieto výsledky sčíta a na výsledok ná­

sledne aplikuje aktivačnú funkciu. Jednou z nich je aj sigmoid funkcia, ktorú som spomenul pri klasifikácii. Výsledné číslo potom určuje, ako sa bude ďalej s dátami narábať. A k je toto výsledné číslo menšie, ako určitá hraničná hodnota, žiadne dáta sa neposúvajú ďalej. A k toto číslo presiahne hraničnú hodnotu, uzol sa aktivuje, čo v dnešných neurónových sieťach väčšinou znamená poslanie čísla (sumy vstupov tohto uzlu vynásobených ich váhami) po všetkých odchádzajúcich spojeniach tohto uzlu.

Na začiatku trénovania neurónovej siete sú všetky váhy a hraničné hodnoty nastavené na náhodne hodnoty. Trénovacia vzorka hodnôt je predaná spodnej vrstve uzlov, nazývanej tiež vstupná vrstva. Tieto hodnoty ďalej pokračujú cez vyššie vrstvy, kde sa násobia a spájajú na základe komplexných pravidiel, až kým sa, značne zmenené, ne­

dostanú až do výstupnej vrstvy. Počas trénovania sa váhy a hraničné

(32)

3- NEURÓNOVÉ SIETE

hodnoty upravujú tak, aby vloženie trénovacích dát s rovnakým zna­

čením vyústilo v podobe výsledky. [5]

Učenie neurónových sietí na trénovacích dátach spolu s predik­

ciou výstupu je náročné na výpočtovú kapacitu, a tak až donedávna neboli rozšírené. Avšak spolu s neustálou evolúciou počítačov a zvy­

šovaním výpočtovej kapacity sa postupne zvyšovalo aj využívanie takýchto sietí. Neurónová sieť je trénovaná až pokým minimalizuje počet chybných predikcii. Napríklad p r i kategorizácií obrázkov so zvieratami, s naučenou množinou parametrov (alebo tiež váh) je na­

učená neurónová sieť pripravená zaradiť obrázky, ktoré ešte nikdy predtým nevidela, do tried. Tieto triedy môžu byť napríklad či je to mačka, medveď a podobne.

Dendrite

Obr. 3.1: Štruktúra neurónu v ľudskom tele[6]

N a obrázku 3.1 si všimnime 3 veci:

• Dendrity (Dendrite) sú v neurónovej sieti vstupmi neurónu, alebo tiež prichádzajúce spojenia.

• Telo bunky (Celí body) je funkcia v neuróne.

• Axon je výstup nášho neurónu, alebo tiež odchádzajúce spojenie.

V skutočnosti ich je veľmi veľa.

Nucleus

(33)

3- NEURÓNOVÉ SIETE

Tieto tri veci tvoria jeden neurón. Neuróny sú medzi sebou poprepá­

jané pomocou spojov - synaps. Neurónové siete sa podobajú logickým obvodom s tým rozdielom, že jednotlivé uzly v neurónových sieťach - neuróny pracujú s reálnymi číslami namiesto jednotiek a núl. Prí­

kladom môže byť napríklad jednoduchá neurónová sieť uvedená na obrázku 3.2, ktorá sa snaží napodobňovať operáciu X O R1 na základe vstupov.

INPUT HIDDEN OUTPUT

Obr. 3.2: Príklad neurónovej siete simulujúcej X O R operáciu.

Obrázok prevzatý z h t t p s : / / s t e v e n m i l l e r 8 8 8 . g i t h u b . i o / mind-how-to-build-a-neural-network/

Čím viac trénovacích príkladov bude k dispozícií pre neurónovú sieť, tým bude predpoveď výstupu na už ostrých dátach presnejšia.

Nemôže sa stať, že by sme neurónovú sieť "zahltili" dátami a tým zní­

žili jej efektivitu. Jediné, na čo môže mať veľký objem tréningových dát vplyv, je dlhšia doba trénovania a konzumovanie väčšieho množstva pamäte.

Neurónové siete sa skladajú z viacerých vrstiev. Prvá je vstupná vrstva, ktorá prijíma vstupné dáta. Potom nasledujú skryté vrstvy a každá slúži na vykonanie jedného kroku výpočtu. Nachádzajú sa 1. logická operácia XOR patrí medzi základné boolovské operácie. Vykonáva fun­

kciu exkluzívneho logického súčtu.

(34)

3- NEURÓNOVÉ SIETE

medzi vstupnou a výstupnou vrstvou. Princíp neurónových sietí spo­

číva vo vykonávaní jednoduchších operácií na uzloch, ktoré sa potom spájajú do jedného väčšieho celku a tak vznikne zložitejšia štruktúra schopná vykonávať náročné operácie. Za skrytými vrstvami potom na­

sleduje výstupná vrstva, ktorá poskytuje samotnú predikciu výsledku.

Môže obsahovať jeden a viac výstupných uzlov. V prípade neurónovej siete, ktorá rozpoznáva čísla od 1 po 10 na obrázkoch, to je 10 výstup­

ných uzlov. Každý z nich predstavuje konkrétne číslo a p r i výstupe sa na uzle, ktorý predstavuje predpovedané číslo, objaví hodnota v intervale od 0 po 1. Táto hodnota vyjadruje pravdepodobnosť, že sa dané číslo na obrázku nachádza.

3.1 Posun vpred - forward pass

Posun vpred je proces, pri ktorom vstupné dáta putujú celou štruktú­

rou neurónovej siete až po predikciu výsledku. Na každom neuróne v sieti sa spočíta vnútorná hodnota tak, že sa vezmú hodnoty tých uzlov z predchádzajúcej vrstvy, ktoré sú s týmto neurónom spojené prichá­

dzajúcimi spojeniami. Tieto hodnoty sa potom vynásobia príslušnými váhami spojení a následne sa sčítajú. N a záver sa aplikuje aktivačná funkcia neurónu. Napríklad na obrázku 3.2 by sa uskutočnil posun vpred nasledovne:

1. Najskôr sa pre každý neurón v skrytej vrstve vypočíta hodnota, ktorú vidíme v neuróne na obrázku. Tú spočítame pomocou rovnice aj = o~(Wh * a\ + WÍ- * a\), kde i je index neurónu v skrytej vrstve, pre ktorý práve počítame hodnotu. je kon­

krétna váha spojenia idúceho z uzla a\ v prvej vrstve do z'-tého uzla aj v skrytej vrstve a tak podobne, c je funkcia sigmoid. Pre prvý uzol v skrytej vrstve by sme teda spočítali hodnotu nasle­

dovne: a\ = (7(0.8 * 1 + 0.2 * 1) = cj(l) = 0.73. Vyšla nám teda tá istá hodnota, akú môžeme vidieť na obrázku. Obdobne sa spočítajú ostatné hodnoty na zvyšných uzloch v skrytej vrstve.

Tento postup sa opakuje, ak máme viac skrytých vrstiev. Všetko sa to dá zjednodušiť ešte pomocou matíc a stavy všetkých uzlov

(35)

3- NEURÓNOVÉ SIETE

spočítať naraz následne:

Wl2 Wjg W]2 W2\

Následne nám potom ešte ostáva aplikovať sigmoid na každý uzol v a2. Vďaka maticiam a operáciám na nich prebieha výpočet oveľa rýchlejšie, ako keby sme to mali robiť krok po kroku.

Potom sa spočíta výstupná hodnota na uzle vo výstupnej vrstve.

Tá sa spočíta podobne, ako hodnoty v skrytej vrstve: a\ = c ^ W ^ * a\ + W|x * a\ + Wfi * a\) = a(0.3 * 0.73 + 0.5 * 0.79 + 0.9 * 0.69) = c(1.235) = 0.774. Podobne aj tu, ak by sme mali viac výstupných uzlov, tak by sme vedeli všetko urýchliť pomocou matíc.

3.2 Spätná propagácia - backward propagation

Spätná propagácia predstavuje otázku, ako je potrebné upraviť váhy neurónových spojení tak, aby vo finále dávala neurónová výstup bližší požadovanému výsledku, teda aby sme minimalizovali stratovú fun­

kciu. Názov pochádza zo skutočnosti, že výpočet gradientu prebieha spätne cez sieť, pričom najprv sa vypočíta gradient váh výstupnej vrstvy a ako posledný sa vypočíta gradient váh prvej vrstvy. Čias­

točné výpočty gradientu z jednej vrstvy sa opätovne používajú pri výpočte gradientu pre predchádzajúcu vrstvu. Tento spätný tok in­

formácií o chybách umožňuje efektívny výpočet gradientu na každej vrstve oproti naivnému prístupu pri výpočte gradientu každej vrstvy oddelene. [7].

(36)
(37)

4 Rekurentně neuronové siete

Napriek tomu, že sa obyčajné neuronové siete považujú za veľký krok smerom k vývoju autonómnych systémov a umelej inteligen­

cie, majú jeden nedostatok. Sú limitované na špecický prípad, kde je na vstupe vektor pevnej veľkosti a produktom je opäť vektor nemen­

nej veľkosti. [8] Predpokladáme tiež, že vstupy sú na sebe nezávislé.

Ale pre mnoho úloh to nie je práve najlepší nápad. Napríklad ak by sme chceli predpovedať ďalší znak, ktorý sa bude vo vete vyskyto­

vať, potrebujeme vedieť, aké písmená sa už v sekvencii nachádzajú.

Nasledujúci znak totiž na nich závisí. Štandardné neurónové siete toto ale nedokážu, pretože si nevedia udržať kontext. Nevedia, aké boli predchádzajúce znaky. Podobne napríklad nedokážu zmysluplne prekladať vetné spojenia. Netušia, aký zmysel dáva celá veta, vidia iba jedno slovo, rad za radom.

Rekurentně neurónové siete tento nedostatok odstraňujú pomocou sekvencii. Sú nazývané rekurentnými preto, lebo vykonávajú tú istú úlohu pre každý prvok v sekvencii a výstup je závislý na predchádza­

júcich výpočtoch. Inými slovami, rekurentně neurónové siete majú

"pamäť", ktorá si udržiava informáciu o tom, čo už bolo doposiaľ vypo­

čítané. Za predpokladu, že predikcie možných výstupov neurónovej majú pridelené pravděpodobnostně hodnoty, nové sekvencie môžu byť vygenerované z naučenej siete iteratívnym odberom vzoriek z výstupu siete a následným použitím týchto vzoriek ako vstupnú sek- venciu v ďalšom kroku. Inak povedané, predať na vstup rekurentnej sieti jej vlastné vynálezy, podobne, ako keď sníva osoba. [9]

(38)

4- REKURENTNĚ NEURÓNOVÉ SIETE

one to one one to many many to one many to many many to many

í t í í t t t t t t í í í t t t t í

Sekvencie vektorov sa pri rekurentných neurónových sieťach vyskytujú na vstupe, na výstupe alebo aj aj. Každý obdĺžnik je vektor a šípky predstavujú funkcie, ako napríklad násobenie matíc. Vstupné vektory sú zvýraznené červenou farbou, výstupné vektory modrou farbou a vektory zvýraznené zelenou farbou znázorňujú stav rekurentnej neurónovej siete.

Zľava doprava sú postupne znázornené:

1. Štandardné neurónové siete so spracovávaním vektorov fixnej veľ­

kosti na vstupe a na výstupe (napríklad klasifikácia obrazu)

2. Rekurentná neurónová sieť - sekvencia vektorov na výstupe (naprí­

klad titulkovanie obrázkov berie obrázok ako vstup a produkuje slová zložené do súvislej vety)

3. sekvencia vektorov na vstupe (napríklad analýza citového obsahu, kedy je daná veta klasifikovaná ako vyjadrujúca pozitívny alebo ne­

gatívny citový obsah)

4. sekvencia vektorov na vstupe a na výstupe (napríklad strojový pre­

klad, kedy rekurentná neurónová sieť prečíta vetu v angličtine a vy­

produkuje vetu vo francúzštine)

5. synchronizovaná sekvencia vektorov na vstupe a na výstupe (naprí­

klad video klasifikácia, kde chceme označiť - klasifikovať každý rámec videa.)

Všimnime si, že v každom prípade (okrem prípadu 1.) nie je žiadny limit na dĺžku sekvencií, pretože rekurentná transformácia (zelené obdĺžniky) je

daná fixne a môže byť použitá toľkokrát, koľko chceme.[8]

Obr. 4.1: Príklad sekvencií v rekurentných neurónových sie­

ťach. Obrázok prevzatý z h t t p : //karpathy .github. io/2015/05/21/

m n - e f f ectiveness/.

(39)

4- REKURENTNĚ NEURÓNOVÉ SIETE

Rekurentně neurónové siete môžu teoreticky využívať informá­

ciu v sekvenciách ľubovolnej dĺžky. V realite sú ale limitované na pozeranie dozadu iba o pár krokov.

Jedným z lákadiel rekurentných neurónových sietí je myšlienka, že by mohli byť schopné prepojiť predchádzajúce informácie s aktuál­

nou úlohou, napríklad použitím informácie z predchádzajúcich video rámcov by mohla rekurentná neurónová sieť lepšie pochopiť súčasný rámec. Ale dokážu to?

Niekedy nám stačí sa pozrieť na najnovšie informácie pre vykona­

nie súčasnej úlohy. Zvážmee napríklad model jazyka, ktorý sa snaží predpovedať ďalšie slovo na základe predchádzajúceho. A k sa snažíme predpovedať posledné slovo v oblaky sú na oblohe", nepotrebujeme žiaden ďalší kontext - je celkom jasné, že ďalším slovom bude obloha.

V takýchto prípadoch, kde je medzera medzi relevantnou informá­

ciou a miestom, kde je potrebná, malý, rekurentně neurónové siete sa dokážu naučiť používať informácie z minulosti.

Existujú však aj prípady, keď potrebujeme viac kontextu. Naprí­

klad ak sa pokúšame predpovedať posledné slovo v texte "Vyrastal som vo Francúzsku ... Hovorím plynule francúzsky."Nedávna infor­

mácia naznačuje, že ďalšie slovo je pravdepodobne názov jazyka, ale ak chceme zúžiť jazyk, potrebujeme v kontexte mať aj krajinu, to jest Francúzsko. Toto slovo sa ale nachádza viac v minulosti. Je teda úplne možné, že medzera medzi príslušnou informáciou a bodom, v ktorom je potrebná, sa stala veľmi veľkou. Bohužiaľ, keď táto medzera rastie, rekurentná neurónová sieť sa stane neschopnou naučiť sa spojiť takéto informácie. Tento problém bol do hĺbky popísaný v prácach Hoch- reiter, et al. (2001)[10] a Bengio, et al. (1994)[11], ktorí našli niekoľko veľmi základných dôvodov, prečo by to mohlo byť ťažké. Jedným z nich je aj vanishing gradient. Je to problém, ktorý zamedzí aktualizá­

ciu váhy na spojení kvôli tomu, že gradient je zanedbateľný. Našťastie vylepšenie rekurentnej neurónovej siete, takzvané Long Short-term Memory nemá tento problém.

4.1 Long Short-term Memory

Long Short-term Memory siete, v skratke LSTM, sú špeciálny druh re­

kurentných neurónových sietí, schopné učiť sa dlho trvajúce závislosti.

(40)

4- REKURENTNĚ NEURÓNOVÉ SIETE

A k o prvý raz ich definovali Hochreiter & Schmidhuber (1997)[12]

a odvtedy boli vylepšované a popularizované. Pracujú mimoriadne dobre na veľkom množstve problémov a v dnešnej dobe sú široko používané. L S T M sú výslovne navrhnuté tak, aby sa vyhli problému udržania si dlhodobých závislostí. Spomienka na informácie na dlhú dobu je prakticky ich predvolené správanie, nie niečo, čo sa snažia učiť.

Veľmi dobre sú popísané na odkaze h t t p : / / c o l a h . github. i o / p o s t s / 2015-08-Understanding-LSTMs/, z ktorého budem v nasledujúcich paragrafoch čerpať.

Všetky rekurentně neurónové siete majú formu opakujúcich sa modulov neurónových sietí. V štandardných R N N s má tento modul jednoduchú štruktúru ako napríklad jednoduchá tanh vrstva. Repeti- tívny modul v štandardných R N N obsahuje jednu vrstvu. LSTMs majú tiež reťazovú štruktúru, ale repetitívny modul má inú štruktúru. N a ­ miesto jednej vrstvy neurónovej siete sú štyri interagujúce navzájom špeciálnym spôsobom.

Obr. 4.2: Vnútnorná štruktúra bunky L S T M so 4 vrstvami neuró­

nových sietí. Obrázok prevzatý z h t t p : / / c o l a h . g i t h u b . i o / p o s t s / 2015-08-Understanding-LSTMs/

Kľúčom k L S T M je stav buniek, ktorý slúži trochu ako dopravný pás. Pohybuje sa rovno po celom reťazci, s len malými lineárnymi inte­

rakciami. Je veľmi jednoduché, aby informácie prechádzali pozdĺžne bez zmeny.

L S T M má schopnosť odstrániť alebo pridať informácie do bunko­

vého stavu, starostlivo regulovanými štruktúrami nazývanými brány.

Brány sú spôsob, ako umožniť vstup voliteľnej informácii. Sú zložené

(41)

4- REKURENTNĚ NEURÓNOVÉ SIETE

z vrstvy sigmoidnej neurónovej siete a operácie bodového násobenia.

Sigmoidová vrstva produkuje čísla medzi nulou a jednotkou, pričom popisuje, koľko z každej zložky by malo prejsť. Hodnota nula znamená

"nepustiť nič,"zatiaľ čo hodnota jedna znamená "vpustiť všetkoľ'LSTM má tri z takéto brány, ktoré chránia a riadia bunkový stav.

Prvým krokom v L S T M je rozhodnúť sa, aké informácie budeme vyradíme z bunkového stavu. Toto rozhodnutie vykonáva sigmoidná vrstva nazývaná "vrstva zabúdajúcej brány"(z angl. forget gate layer).

Pozrie sa na ht-i a xt a na základe toho i m priradí číselnú hodnotu, a tak sa rozhodne o ponechaní resp. neponechaní informácie v bunko­

vom stave ako je vysvetlené v predchádzajúcom paragrafe.

Vezmime si príklad jazykového modelu snažiaceho sa predpovedať ďalšie slovo na základe predchádzajúcich. V tomto probléme, bunkový stav môže obsahovať rod súčasného predmetu, aby mohlo byť použité správne zámeno. Keď prejdeme k novému predmetu, chceme aby predchádzajúci rod bol zabudnutý.

Ct !

í

f t °{Wľ[ht + b f

h, i

Obr. 4.3: Prvá sigmoid brána p r i ht-\ a Xt. Obrázok prevzatý z http:

//colah.github.io/posts/2015-08-Understanding-LSTMs/

Ďalším krokom je rozhodnutie akú informáciu uložíme v bun­

kovom stave. Tento proces má dve časti. Prvou je sigmoidná vrstva nazývaná "vstupná vrstva brányä rozhoduje, ktoré hodnoty aktuali­

zujeme. Následne tanh vrstva vytvorí vektor nových prospektívnych hodnôt Q , ktoré môžu byť pridané do bunkového stavu. Toto je zná­

zornené na obrázku 4.4.

(42)

4- REKURENTNĚ NEURÓNOVÉ SIETE

U = o {Wi-[ht-i,xt] + bi) -Sl'l^jihi Čt= t a n h ( Wc- [ / iť- i , x t ] + 6c)

Obr. 4.4: Druhá sigmoid brána spolu s tanh bránou.

Obrázok prevzatý z h t t p : / / c o l a h . g i t h u b . i o / p o s t s / 2015-08-Understanding-LSTMs/

N a našom príklade jazykového modelu budeme chcieť pridať rod nového predmetu do bunkového stavu, nahradiť predchádzajúci rod, ktorý chceme zabudnúť.

Teraz musíme aktualizovať starý bunkový stav Q _ i na nový stav Q . V predchádzajúcich krokoch sa už rozhodlo, čo sa má urobiť, teraz už len ostáva samotnú činnosť vykonať. Vynásobíme starý bunkový stav f t, zabudneme informácie, o ktorých sme rozhodli predtým. Potom pridáme U * Q . Toto budú nové hodnoty, ktoré sa zmenili podľa toho, ako sme sa rozhodli aktualizovať každú hodnotu.

h, A

Ct = ft* Ct-i + H * Ct

Obr. 4.5: Aktualizácia stavu Q . Obrázok prevzatý z h t t p : / / c o l a h . github.io/posts/2015-08-Understanding-LSTMs/

V prípade jazykového modelu sme tam, kde sme skutočne vypustili informácie o pohlaví starého subjektu a pridali nové informácie, ako sme sa rozhodli v predchádzajúcich krokoch. Nakoniec sa musíme rozhodnúť, čo bude bude výstupom. Tento výstup bude vychádzať z

(43)

4- REKURENTNĚ NEURÓNOVÉ SIETE

nášho stavu buniek, ale bude to pozmenená verzia. Najprv spustíme vrstvu sigmoidu, ktorá rozhodne, aké časti bunkového stavu budeme vystupovať. Potom bunkový stav prejde cez tanh (na rozdelenie medzi hodnotami -1 a 1) a vynásobíme ho výstupom sigmoidovej brány, aby sme vygenerovali len časti, o ktorých sme sa rozhodli.

V príklade jazykového modelu, pretože sme práve mali predmet, môžeme chcieť vygenerovať informácie relevantné pre sloveso v prí­

pade, že to je to, čo príde ďalej. Napríklad, môže sa zobraziť, či je daný predmet jednotný alebo množný, takže vieme, akú podobu by malo mať konjugované sloveso, ak to bude nasledovať.[13]

ot = a(W0 [ht-i,xt] + b0) ht = ot* tanh (Ct)

Obr. 4.6: Výstup bunky L S T M . Obrázok prevzatý z h t t p : / / c o l a h . github.io/posts/2015-08-Understanding-LSTMs/

Jedna z variácií L S T M je aj Gate Recurrent Unit, alebo tiež GRU.[14]

Kombinuje zabúdajúce a vstupné brány do jednej aktualizačně] brány.

Tiež zlučuje dokopy stav bunky a skrytý stav a pár ďalších zmien.

Výsledný model je jednoduchší, ako tradičné L S T M a čoraz viac po­

pulárny. [13]

(44)
(45)

5 Analýza a generovanie twitterových príspev­

kov

Rekurentně neurónové siete sa v súčasnosti využívajú aj na generova­

nie textu s konkrétnym kontextom. Kedže je to problém, kedy sa snaží naučený model určiť aký znak nasleduje po sekvencii znakov, ktorú mu predáme ako vstup, jedná sa o klasifikáciu s viacerými triedami.

Jedným z príkladov generovania textu je aj generovanie twittero­

vých príspevkov štylisticky podobných špecifickému autorovi, ktorého príspevky si zvolíme ako trénovacie dáta. Autor by mal mať dosta­

točné množstvo príspevkov (okolo 1500 a viac), aby bol dostatočný počet trénovacích dát. Tiež by sa mal autor vyjadrovať len v jednom jazyku, uľahčí to tak trénovanie neurónovej siete. Nezáleží však na kon­

krétnom jazyku, v ktorom sú napísané autorove príspevky. V rámci implementácie aplikácie pre analýzu a generovanie twitterových prís­

pevkov som využil Long Short-term Memory model.

Keďže sú neurónové siete pomerne zložité a časovo náročné na trénovanie, odporúčam spustiť aplikáciu na grafickej karte. Neuró­

novú sieť som väčšinu času trénoval na mojej grafickej karte nVidia GeForce G T X 1080 z dôvodu výrazného urýchlenia trénovania siete oproti trénovaniu na procesore. Pre porovnanie, keď som spustil apli­

káciu s přednastavenými parametrami na procesore (Intel® Core™

Í7-4910MQ), tak jedna epocha trvala približne 10-násobne dlhšie ako na grafickej karte (nVidia GeForce G T X 1080). P r i vysokom počte trénovacích epoch je tento rozdiel' obrovský.

Pri twitterových príspevkoch je veľkou výzvou trafiť správny mo­

del, ktorý dokáže produkovať ako-tak zmysluplné tweety. Problémom je najmä obmedzené množstvo tweetov, ktoré sú k dispozícií na tré­

novanie. V mojom prípade je veľkosť trénovacích dát 280KB, čo sa transformuje do približne 200 tisíc znakov. To je veľmi malé množstvo trénovacích dát. Pri použití slovenčiny a češtiny sa to este viac skom­

plikuje, pretože narozdiel od angličtiny používajú oba jazyky oveľa viac znakov. To znamená, že sa model musí naučiť robiť predikcie pre viac znakov, čo môže zvýšiť nepresnosť predpovede nasledujúceho znaku.

(46)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

5.1 Popis aplikácie

Pri vývoji aplikácie som sa inšpiroval rôznymi implementáciami LSTM modelov pre generovanie textu, ako je aj napríklad ukážková i m ­ plementácia pre generovanie textu priamo od tvorcov knižnice Ke- ras, ktorú nájdeme tu h t t p s : / / g i t h u b . c o m / f c h o l l e t / k e r a s / b l o b / master/examples/lstm_text_generation. py. Táto implementácia ale využíva 40 dopredu zvolených za sebou idúcich znakov volených z tréningového textu ako takzvané semienko (z angl. seed). Toto se­

mienko sa potom použije ako základ pre generovanie ďalších zna­

kov. Ja som sa ale snažil implementovat aplikáciu tak, aby bol do­

predu náhodne zvolený iba jeden znak. O d neho sa potom odví­

jajú ostatné znaky, ktoré už predpovedá neurónová sieť. Zdrojový kód aplikácie sa nachádza v repozitári GitHub na stránke https:

/ / g i t h u b . com/spisiakm/textGen-LSTM. Je rozdelený do dvoch súbo­

rov:

• textGenLSTM. py, kde sa nachádza hlavný, spustitelný program

• textGenUtils .py - súbor, ktorý obsahuje pomocné metódy Samotná aplikácia je napísaná v jazyku Python a vďaka tomu som mal k dispozícií širokú škálu rôznych knižníc na uľahčenie práce.

Aplikácia využíva štyri hlavné knižnice (popísané nižšie v texte):

• TensorFlow

• Keras

• Tweepy

• Numpy

V nasledujúcich pasážach používam niektoré parametre, ktoré sú definované v kóde na samom začiatku aplikácie, v súbore textGenLSTM.

Sú to:

• batchSize

• layers

• maxTwitterLength

(47)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

• layerDimension

• epochsToTrain

• sequenceLength

• sequenceStep

• dropout

• learningRate

• numOfTweets

Přednastavené hodnoty parametrov sú nastavené podľa modelu, ktorý produkoval najpriateľnejšie tweety. Vďaka využitiu týchto paramet­

rov som mohol rýchlo meniť konfiguráciu modelu a prispôsobovať aplikáciu rôznym trénovacím dátam.

Parametre layers, layerDimension, dropout a learningRate sú hy- perparametre. To znamená, že ovplyvňujú štruktúru, alebo správanie neurónovej siete.

batchSize Tento parameter definuje, koľko sekvencií znakov sa na­

raz posunie modelu počas jednej iterácie. Jedna iterácia predstavuje jeden posun vpred a jednu propagáciu vzad. Jedna epocha sa skladá z niekoľko iterácií, ich počet závisí od množstva sekvencií vydeleného práve parametrom batchSize. Zvyšok po delení sa predá modelu v ďalšej iterácií. Čím väčšie číslo batchSize, tým viac pamäte bude apli­

kácia potrebovať. Přednastavená hodnota tohto parametru je 128.[15]

layers Parameter layers definuje počet LSTM vrstiev v modeli. Před­

nastavená hodnota sú 2 vrstvy.

maxTwitterLength Tento parameter predstavuje dĺžku tweetu, jeho hodnota je 120. Tú som zvolil tak, aby bola podobná reálnej dĺžke tweetov zvoleného autora.

layerDimension Toto číslo udáva, koľko uzlov (neurónov) má obsa­

hovať jedna vrstva LSTM.

(48)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

epochsToTrain Pomocou tohto parametra sa dá nastaviť, koľko epoch sa má model trénovať. Přednastavená hodnota je 60 epoch.

sequenceLength, sequenceStep Tieto parametre nastavujú dĺžku sekvencií, na ktorých sa bude neurónová sieť učiť, a vzdialenosť za­

čiatku jednotlivých sekvencií. Přednastavené hodnoty sú sequenceLength

= 40 a sequenceStep = 3.

dropout Dropout je jedna z techník regularizácie využívaná v ne­

urónových sieťach. Funguje tak, že náhodne zvolené neuróny sú ig­

norované behom tréningu. To znamená, že ich príspevok k aktivácií neurónov vo výstupnej vrstve je dočasne odstránený pri posune vpred a aktualizácie váh neurónov nie sú aplikované pri propagácií vzad. [16]

A k o sa neurónová sieť učí, váhy neurónov postupne usádzajú. Sú naladené na špecifické vlastnosti, ktoré poskytujú určitú špecializáciu.

Susediace neuróny sa spoliehajú na túto špecializáciu. A k sa ale spo­

liehajú na túto špecializáciu až príliš, výsledkom môže byť nie veľmi robustný model, ktorý je príliš špecializovaný na vzdelávacie údaje.

Môžeme si predstaviť, že ak sú neuróny náhodne vynechané zo siete počas tréningu, ostatné neuróny budú musieť na to reagovať a zvládnuť reprezentáciu potrebnú na predpovedanie chýbajúcich neurónov. Predpokladá sa, že táto situácia prinesie viaceré nezávislé interné reprezentácie, ktoré sa zistia v sieti.

Výsledkom je, že sieť je menej citlivá na špecifické hmotnosti ne­

urónov. To zase vedie k sieti, ktorá je schopná lepšej generalizácie a je menej pravdepodobné, že dôjde k overfittingu.[17]

Pri prednastavenej hodnote 0.2 dropout náhodne vyberie uzly, ktoré budú vynechané s pravdepodobnosťou (20%).

learningRate Je úvodná rýchlosť učenia neurónovej siete. Jej hod­

nota je nastavená na 0.01.

5.1.1 TensorFlow

TensorFlow je open source softvérová knižnica pre numerické výpočty využívajúce takzvaný graf dátového toku (z angl. data flow graph).

Uzly v grafe reprezentujú matematické operácie, zatiaľ čo hrany grafu

(49)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

reprezentujú viacdimenzionálne dátové polia - tensory (z angl. ten- sors), ktoré sa predávajú medzi uzlami.

TensorFlow bol pôvodne vyvíjaný výzkumníkmi a inžiniermi pra­

cujúcimi na projekte Google Brain, ktorý je súčastou výzkumnej orga­

nizácie Machine Intelligence patriacej spoločnosti Google. Dôvodom vývoja knižnice TensorFlow bolo vykonávanie strojového učenia a výzkum hlbokých neurónových sietí (z angl. deep neural networks), ale vyvinutý systém bol natoľko obecný, že mohol byť aplikovaný na širokú škálu ďalších domén výzkumu.[18]

Inštalačné inštrukcie sa nachádzajú na https : //www. tensorf low.

o r g / i n s t a l l / . Sú rozdelené podľa operačného systému, na ktorom chcete aplikáciu spustiť.

Okrem knižnice TensorFlow je spolu s knižnicou Keras možné využiť tiež knižnice (napríklad Microsoft Cognitive Toolkit (CNTK) - h t t p s : / / d o c s . m i c r o s o f t . c o m / c s - c z / c o g n i t i v e - t o o l k i t / , alebo The- ano - http://www.deeplearning.net/software/theano/introduction.

html. Knižnica Theano je veľmi podobná knižnici TensorFlow, tiež vy­

užíva viacdimenzionálne numpy polia. Knižnica Microsoft C N T K má veľký potenciál, pri trénovaní rôznych modelov bola niekedy aj niekoľ­

konásobne rýchlejšia ako knižnica TensorFlow, avšak ešte stále nie je úplne optimalizovaná pre model LSTM a generovanie textu. [19] Nako­

niec som si zvolil knižnicu TensorFlow, aj pre jej dobrú dokumentáciu a rôzne demo videá.

5.1.2 Keras

Knižnica Keras poskytuje vysokoúrovňové A P I pre neurónové siete, napísané v jazyku Python. Keras využíva knižnice TensorFlow, C N T K , alebo Theano pre nízkoúrovňové operácie. Keras bol vyvinutý s dôra­

zom na umožňovanie rýchlych experimentov a myšlienkou byť schopný prejsť od nápadu po výsledok s čo najmenším oneskorením je základ dobrého výzkumu.[20] Je to open-source knižnica a jej udržovateľom je Francois Chollet.

Knižnica Keras obsahuje implementácie rôznych modelov stro­

jového učenia. M e d z i nimi sú aj rekurentně neurónové siete a kon­

krétne aj implementácia Long Short-term Memory. Podobne abstra­

huje veľkú čast konfigurácie modelov a výpočtov na maticiach. Vďaka tomu m i knižnica umožnila jednoducho definovať trénovací model.

(50)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

Obsahuje tiež ďalšie užitočné funkcie, ktoré som využil - funkcie pre trénovanie modelu, ukladanie stavov modelu a samotnú predikciu výstupu.

Tým, že som využil Keras spolu s knižnicou TensorFlow, tak ne­

bolo potrebné konfigurovat knižnicu Keras - je přednastavená, aby využívala TensorFlow. Je ale veľmi jednoduché použiť inú nízkoú- rovňovú knižnicu, stačí iba zmeniť príznak z tensorf low na Vami preferovanú knižnicu (bud'Theano, alebo Microsoft C N T K ) . Bližšie je to popísané tu h t t p s : / / k e r a s . io/backend/. Návod na inštaláciu nájdete tu https : / / k e r a s . i o / # i n s t a l l a t i o n .

5.1.3 Tweepy

Tweepy je jednoduchá knižnica napísaná v jazyku Python, ktorá slúži na zjednodušenie prístupu k u A P I aplikácie Twitter. Návod na in­

štaláciu sa nachádza tu h t t p s : / / g i t h u b . com/tweepy/tweepy a doku­

mentácia sa nachádza na h t t p : //tweepy. readthedocs . i o / e n / v 3 . 5 . 0/index.html.

Oproti iným implementáciám knižníc pre prístup ku Twitter A P I využíva Tweepy takzvaný cursoring, čo je technika na rozdelenie vý­

sledkov do stránok. Veľkosť týchto stránok je definovaná parametrom count, ktorý predávame spolu s požiadavkom na Twitter API. Cur­

soring tiež poskytuje spôsob ako sa pohybovať dopredu a dozadu v týchto stránkach.[21] Toto umožňuje jednoduché získavanie twit­

terových príspevkov a preto som túto knižnicu použil na získanie twitterových príspevkov na základe mena autora. Možno jednou z nevýhod je dokumentácia, ktorá je podľa môjho názoru nedostačujúca - chýba tam viac príkladov použitia funkcionality knižnice.

5.1.4 NumPy

NumPy je knižnica, ktorá pridáva podporu pre veľké, viacrozmerné polia a matice spolu s veľkou škálou matematických funkcií, ktoré umožňujú operovať nad týmito poliami.[22]

Veľmi často som ju využil p r i príprave trénovacích dát pre neuró­

novú sieť - inicializácia polí, operácie nad týmito poliami, indexovanie a podobne. Veľmi m i tým uľahčila prácu s dátami.

(51)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

5.2 Požiadavky na spustenie aplikácie

Aby bolo možné spustiť aplikáciu, je potrebné mať nainštalovaný pyt­

hon verzie 3.5 a vyššie. Ďalej je nutné si nainštalovať knižnice TensorF- low, Keras a Tweepy. Ako posledný krok je nutné si vytvoriť aplikáciu ako registrovaný užívateľná Twitter A p p s - https : //apps. t w i t t e r . com/ a následne získať prístupové údaje, ktoré sa potom predávajú aplikácií ako vstupné argumenty.

5.3 Beh aplikácie

A k spúšťame aplikáciu po prvý raz, alebo sme vymazali súbor s ulo­

ženým natrénovaným modelom neurónovej siete, spustíme aplikáciu nasledovne:

#!/bin/sh

python -api_key=yourApiKey - a p i _ s e c r e t = y o u r A p i S e c r e t -access_token=yourAccessToken

- a c c e s s _ t o k e n _ s e c r e t = y o u r A c c e s s T o k e n S e c r e t [ - t w i t t e r _ u s e r _ i d = t w i t t e r U s e r I d ]

textGen_LSTM.py

Argumenty -api_key, -api_secret, -access_tokena -access_token_secret sú povinné a ich hodnoty získate z vašej aplikácie na Twittery na

https : //apps. twitter. com/. Konkrétne sa údaje nachádzajú po klik­

nutí na aplikáciu, v záložke Keys and Access Tokens, viď obrázok 5.1.

Hodnota poľa Consumer Key (API Key) na webovej stránke aplikácie sa použije ako hodnota argumentu -api_key, Consumer Secret (API Secret) sa použije ako hodnota argumentu -api_secret, Access Token sa použije ako hodnota argumentu -access_token a Access Token Secret sa použije ako hodnota argumentu -access_token_secret.

Argument twitter_user_id je voliteľný. Môžete ním špecifikovať iného autora twitterových príspevkov. Jeho predvolená hodnota je GoGoManTweet.

V prípade, keď už máme vytvorený súbor s natrénovaným mode­

lom (či už trénovaním pomocou aplikácie, alebo iným spôsobom) a chceme spustiť iba generovanie twitterových príspevkov, môžeme pri-

(52)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

dať argument weights a ako hodnotu specifikujeme súbor s natrénova­

ným modelom. Napríklad -weights=checkpoint_layer2_dim256_epochl50. hdf 5.

Je možné tiež program spustiť s použitím už existujúceho súboru s tweetmi uloženými ako numpy pole. V tomto prípade aplikáciu spustíme napríklad takto:

#!/bin/sh

p y t h o n - f i l e = s a v e d T w e e t s . n p y t e x t G e n_ L S T M. p y Všimnime si, že tu už nie je nutné špecifikovať prihlasovacie údaje pre aplikáciu, pretože poskytujeme súbor s tweetmi. Tiež sa dá špeci­

fikovať súbor s už natrénovaným modelom a tým preskočiť samotné trénovanie neurónovej siete pridaním argumentu weights, podobne, ako je uvedené vyššie.

Beh aplikácie je rozdelený do 4 krokov:

1. Stiahnutie twitterových príspevkov konkrétneho autora špecifi­

kovaného pomocou parametra user_id

2. Načítanie a spracovanie súboru s uloženými twitterovými prís­

pevkami

3. Učenie neurónovej siete na základe spracovaných twitterových príspevkov

4. Generovanie twitterových príspevkov

5.3.1 Krok č. 1 - Stiahnutie twitterových príspevkov konkrétneho autora

Ako prvý krok aplikácia stiahne twitterové príspevky prostredníctvom Twitter API s využitím knižnice Tweepy. V tomto kroku bolo dost tažké vybrať vhodného autora. Autor by mal mať špecifický spôsob vyjad­

rovania sa, dostatočný počet twitterových príspevkov a príspevky písané v jednom jazyku - buď v češtine, alebo slovenčine. Najväčší problémom bolo práve množstvo príspevkov, ktorých mala väčšina skúšaných autorov veľmi málo.

Druhým problémom bolo miešanie jazykov. Veľa známych užíva­

teľov (hlavne športovcov, napríklad Peter Sagan h t t p s : / / t w i t t e r . com/petosagan, alebo Petra Kvitová h t t p s : / / t w i t t e r . c o m / P e t r a _

(53)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

Istm-tweet-generation

Details Settings K e y s and A c c e s s Tokens P e r m i s s i o n s

Application Settings

K e e p the 'Consumer Secret" a secret. This key should never he human-readable in your application C o n s u m e r K e y (API Key)

C o n s u m e r Secret (API Secret)

A c c e s s Level R e a d a i d write (modify app permissions) O w n e r s p i s i a k m O w n e r ID 8 9 9 9 7 8 7 2 9 3 9 6 5 4 7 5 9 0

Application Actions

R e g e n e r a t e C o n s u m e r K e y and S e c r e t C h a n g e A p p P e r mis sio n s

Your Access Token

This access token can he used to make API requests on your own account's behalf. Do not share your access token secret with anyone A c c e s s Token

A c c e s s Token Secret

A c c e s s Level R e a d a i d write Cv. ner s p i s i a k m O w n e r ID 8 9 9 9 7 S 7 2 9 3 9 6 5 4 7 5 9 0

Obr. 5.1: Názorná ukážka stránky s prihlasovacími údajmi pre apliká­

ciu. Hodnoty jednotlivých polí s údajmi sú zabielené.

Kvitova) malo príspevky písané občas v češtine, resp. slovenčine a občas v angličtine. Toto by výrazne sťažilo učenie neurónovej siete.

Tretí problém spočíval v určení vhodného užívateľa, ktorý síce splňuje všetky vyššie uvedené podmienky, ale možno má nie práve pozitívny spôsob vyjadrovania sa. V tomto prípade to boli väčšinou politici, alebo inak zaujatí ľudia.

Nakoniec som si ako vhodného autora twitterových príspevkov vy­

bral slovenského youtubera GoGoManTV - https : / / t w i t t e r . com/

GoGoManTweet. Má dostatočné množstvo twitterových príspevkov pre analýzu. Jeho príspevky sú písané prevažne v slovenčine a má tiež dosť špecifický spôsob vyjadrovania sa. Aplikácia však nie je limito-

(54)

5- A N A L Ý Z A A GENEROVANIE TWITTEROVÝCH PRÍSPEVKOV

vaná na konkrétneho autora, zmeniť sa to dá jednoducho pomocou spustenia aplikácie spolu s parametrom -twitter_user.

Pre získanie tweetov som použil Cursor objekt knižnice Tweepy, v ktorom sa volá Twitter A P I funkcia statuses/user_timeline[23], viď obrázok 5.2, funkcia tweepy. Cursor. Táto funkcia dokáže vrátiť maximálne 3200 najnovších tweetov daného používateľa. [23]. Toto obmedzenie je dané Twitter API. Argumentmi tejto funkcie sú užíva­

teľské meno autora na Twitteri a tzv. extended mód. Funkcie Twitter API automaticky vracajú tweety skrátené na maximálne 140 znakov.

A k má tweet viac znakov, dôjde k jeho skráteniu a nahradeniu zvyš­

ných znakov tromi bodkami. Tento extended mód spôsobuje vracanie celých príspevkov bez skracovania, čo m i poskytlo dlhšie tweety a tým pádom aj viac trénovacích dát.

Priebeh funkcie je nasledovný:

1. Najskôr sa inicializuje Tweepy objekt API s využitím prihlasova­

cích údajov poskytnutých pri spúšťaní aplikácie. Tieto údaje sú nutné pre komunikáciu aplikácie s Twitter API.

2. Druhým krokom j e získanie tweetov volaním funkcie Cur s o r (ob­

rázok 5.2, riadok 126) a ich následné uloženie do poľa tweets_array.

Spolu s ukladaním do poľa sa tweety ukladajú tiež do súbora received_tweets . t x t v textovej podobe, aby si užívateľ mohol overiť, že sa získali správne tweety.

3. Ako tretie nasleduje uloženie poľa tweets_array do súboru špe­

cifikovaného pomocou parametra f i l e funkcie. Tweety sú ulo­

žené do tohto súboru ako numpy pole, čo m i následne uľahčilo ďalšiu prácu s tweetmi v nasledujúcich krokoch.

Kód funkcie je možno vidieť na obrázku 5.2.

5.3.2 Krok č. 2 - Načítanie a spracovanie súboru s uloženými twitterovými príspevkami

Pri spracovaní súboru s twitterovými príspevkami je počiatočný prob­

lém, ako čo najefektívnejšie zjednodušiť vstupné dáta pre model a tým zjednodušiť jeho tréning. Twitterové príspevky totiž môžu obsahovať okrem alfanumerických a interpunkčných aj množstvo iných znakov.

Odkazy

Související dokumenty

Kalibračný model sa vytvorí zmeraním analytického signálu kalibračných vzoriek, ktorých zloženie je známe, a ktoré viac alebo menej reprezentujú skutočné zloženie

V prípade M S analýzy polynukleotidov, ktorých vlákno sa môže podieľať na tvorbe bimolekulárnej alebo tetramolekulárnej G4 štruktúry, sa v spektrách môžu objaviť

Nachádza sa tu tiež časť, kde sa pripája externý súbor questions.js, ktorý obsahuje samotný výučbový obsah a všetky jeho potrebné informácie

Pomocou knižníc a metód na detekciu postáv je možné získať napríklad pozíciu hlavy alebo pozície jednotlivých končatín.. Tieto informácie sa dajú napríklad znázorniť

Benefity môžeme tiež rozdeliť podľa toho, či sú rovnaké pre všetkých zamestnancov (vtedy hovoríme o systéme plošnom) alebo si každý zamestnanec môže individuálne

Táto časť práce sa venuje aj popisu fungovania prenosu informácie pomocou kvantového kanála a deleniu kvantovej kryptografie podľa použitia jednofotónových pulzov

V tejto bakalárskej práci sa venujem porovnaniu JavaScriptu ES6 tiež známeho pod pojmami Vanilla JavaScript alebo aj „čistý“ JavaScript s jeho komponentovou knižnicou

Pri kúpe sa sladkostí sa ženy rozhodujú na základe rôznych kritérií. Sladkosti vďaka ochutnávkam alebo promoakciám nakúpi cca 1/10 všetkých žien. Čísla pri kúpe na