Deep learning je metoda umělé inteligence, kde je za pomoci mnohovrstvých nelineárních výpočetních modelů získávána užitečná informace přímo z dat. V klasifikačních úlohách dosahuje deep learning vysoké přesnosti, která může předčít lidské schopnosti. MATLAB, jakožto vývojové prostředí pro vědeckotechnické výpočty, nabízí v oblasti deep learningu množství algoritmů a usnadní jejich aplikaci při řešení praktických úkolů.
Text volně navazuje na článek Deep learning a prostředí MATLAB.
- úvodní odstavce opakují základní principy deep lerningu pro práci s obrázky
- aplikace deep learningu na signály od kapitoly Signály a časové řady
Umělá inteligence (anglicky Artificial intelligence, AI) je obor
informatiky zabývající se tvorbou strojů vykazujících známky
inteligentního chování. Definice pojmu „inteligentní chování“ je
stále předmětem diskuse, nejčastěji se jako etalon inteligence užívá
lidský rozum.
(http://cs.wikipedia.org).
Deep learning spadá do podoblasti umělé inteligence zvané strojové učení. Cílem je vykonávat klasifikační úlohy, kde je datům přiřazena klasifikační kategorie (např. druh zvířete na obrázku), nebo úlohy regresní, kde je výstupem hodnota spojité veličiny (např. odhadovaná cena nemovitosti). Jádrem algoritmů strojového učení jsou matematické modely, které jsou „učeny“ s využitím označených dat, u kterých předem známe správnou hodnotu výsledku. Naučený model je následně použit na nová data, u kterých výsledek hledáme.
Architektura modelů pro deep learning je postavená na hlubokých neuronových sítích (deep networks). Tyto sítě se skládají z množství za sebou seřazených vrstev s různým významem. Nejjednodušší sítě mají kolem 10 vrstev, zatímco aktuální výkonné modely mohou obsahovat stovky vrstev uspořádaných do sériovo-paralelních struktur.
Deep learning nachází využití v mnoha oblastech, zejména pak v úlohách:
Přesnost deep learning modelu závisí z velké části na množství dat použitých k jeho učení. Nejpřesnější modely vyžadují tisíce, či dokonce miliony vzorků. Učení takového modelu může trvat velmi dlouhou dobu.
Naučení celé hluboké neuronové sítě z výchozího nastavení je úloha náročná na čas i množství trénovacích dat. Alternativním přístupem je využití před-učené sítě, která již byla naučena pro jinou klasifikační nebo regresní úlohu (obrázek 1). V tomto případě stačí síť „doučit“ pro úlohu novou.
Vycházíme ze skutečnosti, že počáteční vrstvy sítě extrahují z dat natolik obecné rysy, které jsou pro většinu úloh společné. Lze je tedy opakovaně využít. Doučit stačí pouze vrstvy blíže ke konci sítě, které již extrahují rysy specifické pro konkrétní úkol. Tento přístup, označovaný termínem transfer learning, je pohodlnou cestou aplikace deep learningu s využitím omezeného množství dat a relativně krátkou dobou učení. V současné době existuje celá řada před-učených volně dostupných sítí, které je možné využít.
K rozpoznávání objektů na snímcích se využívají tzv. konvoluční neuronové sítě (CNN), jejichž jádrem jsou konvoluční vrstvy. Výpočetní algoritmus CNN je založen na konvoluci mezi vstupními daty a filtry, které reprezentují hledané charakteristické rysy (obrázek 2). CNN využívá dvourozměrné 2-D konvoluční vrstvy a je tedy vhodná pro zpracování 2-D dat, jako jsou obrázky. Mezi konvoluční vrstvy bývají vsazeny vrstvy pro úpravu dílčích výstupů (normalizace, pooling). Za sadou konvolučních vrstev jsou napojeny vrstvy klasifikační nebo regresní, jejichž výstupem je pravděpodobnost přiřazení klasifikačních tříd (objektů) ke vstupnímu obrázku nebo predikovaná hodnota.
MATLAB je inženýrský nástroj a interaktivní prostředí pro vědecké a technické výpočty, analýzu dat, vizualizaci, vývoj algoritmů, modelování a simulace. S CNN se v prostředí MATLAB pracuje velmi pohodlně. Jsou zde připraveny funkce pro vytvoření více než 50 různých typů vrstev, u kterých může uživatel nastavovat parametry. Poté vrstvy pospojuje, síť natrénuje a využije ke klasifikaci či predikci hodnot s novými daty.
Pokud by připravené vrstvy nestačily, je možné vytvářet vrstvy vlastní. Také lze uživatelsky přizpůsobit celý průběh učení, včetně definice vlastních kritérií, výpočtu ztrátových funkci či aktualizace vah při učení. Je tak možné řešit i pokročilé typy úloh, jako jsou GAN (Generative Adversarial Network), Siamské sítě, variační autoenkodéry, apod.
Typická klasifikační CNN může sestávat z vrstvy ImageInput pro vstup obrázků, jedné nebo několika za sebou zapojených skupin vrstev Convolution2D + BatchNormalization + ReLU + MaxPooling2D a navazujících klasifikačních vrstev FullyConnected + Softmax + ClassificationOutput.
vrstvy = [imageInputLayer(velikost_obrazku);
convolution2dLayer(velikost_filtru, pocet_filtru);
batchNormalizationLayer;
reluLayer;
maxPooling2dLayer(okno, 'Stride', krok);
fullyConnectedLayer(pocet_klasifikacnich_trid);
softmaxLayer;
classificationLayer];
nastaveni = trainingOptions('sgdm');
cnn = trainNetwork(trenovaciObrazky, vrstvy, nastaveni);
vysledek = classify(cnn, novyObrazek);
K práci s CNN lze s výhodou využívat GPU výpočty. MATLAB nabízí stažení a využívání oblíbených před-učených sítí, např. sítě AlexNet, GoogLeNet nebo ResNet.
Sítě je možné vytvářet, editovat a učit též v grafickém nástroji Deep Network Designer (obrázek 3).
Jak využít potenciál a výkonnost konvolučních neuronových sítí pro jednorozměrné signály a časové řady? Jednou z možností je převést signály na „obrázky“ pomocí časově-frekvenční transformace. Výsledkem transformace je obrázek změn rozložení frekvencí signálu v čase. Může se jednat o spektrogram, který využívá Fourierovu transformaci, nebo scalogram, který využívá vlnkovou (wavelet) transformaci. Konvoluční neuronová síť je aplikována na transformovaná data stejným způsobem, jako by pracovala s běžnými obrázky.
Příkladem nasazení metody deep learning na 1-D signály je klasifikace záznamů EKG. Použitá data jsou veřejně dostupná na webových stránkách PhysioNet (https://physionet.org/). Na obrázku 4 jsou signály srdečního rytmu ze tří situací: srdeční arytmie, městnavé srdeční selhání a normální sinusový rytmus. Cílem bylo naučit hlubokou neuronovou síť rozpoznat tyto tři situace.
Aby bylo možné využít sílu konvolučních neuronových sítí, byly úseky naměřeného srdečního rytmu převedeny na scalogramy s využitím spojité vlnkové transformace (obrázek 5).
Pro klasifikaci byla využita před-učená síť AlexNet, složená z 25 vrstev. Síť AlexNet je natrénována na 1,2 milionu obrázků a rozpoznává 1000 druhů objektů (druhy zvířat, kancelářské předměty, atd.). Pro rozpoznání srdečního rytmu byla téměř celá síť ponechána v originální podobě, pouze poslední klasifikační vrstvy byly nahrazeny novými „čistými“ vrstvami. Síť byla poté doučena na datech 130 scalogramů EKG ze 3 sledovaných kategorií srdečního rytmu. Její fungování bylo testováno s validační sadou údajů, kde síť dosáhla úspěšnosti přes 93%.
Celý příklad si můžete prohlédnout zde.
Alternativním přístupem k využití konvolučních neuronových sítí jsou sítě LSTM, které jsou přímo navrženy pro práci s 1-D signály a časovými řadami. Jejich hlavní složkou jsou LSTM vrstvy (long short-term memory). LSTM vrstva je rekurentní neuronová síť (RNN) schopná naučit se dlouhodobé závislosti v signálech, tj. závislosti ze vzdálených časových kroků. LSTM sítě lze využít ke stejným účelům, jako sítě konvoluční, tedy k řešení klasifikačních a regresních úloh.
Typická klasifikační LSTM síť v prostředí MATLAB může být vytvořena sestavením vhodných vrstev (viz. níže) a dále trénována a volána příkazy trainNetwork, classify a predict, stejně jako sítě konvoluční.
vrstvy = [sequenceInputLayer(pocet_kanalu_signalu);
lstmLayer(pocet_vnitrnich_lstm_jednotek);
fullyConnectedLayer(pocet_klasifikacnich_trid);
softmaxLayer;
classificationLayer];
Časově frekvenční transformace signálů ve spojení s „obrázkovými“ konvolučními neuronových sítěmi a využití LSTM sítí přináší deep learning do oblasti jednorozměrných dat, signálů a časových řad. Uplatnění nachází jak v technických oborech, tak oblastech medicíny, biologie a finančnictví.
Jaroslav Jirkovský (HUMUSOFT), 14.9.2018