Deep learning je jedno z nejprogresivnějších odvětví strojového učení se schopností řešit úlohy, které byly ještě před deseti lety nemyslitelné. Uplatnění deep learningu zasahuje mnoho oborů lidské činnosti od systémů počítačového vidění přes vyhledávací, diagnostické a asistenční systémy až po autonomní vozidla a bezpečnost. MATLAB, jakožto vývojové prostředí pro vědeckotechnické výpočty, nabízí v oblasti strojového učení a deep learningu množství algoritmů a usnadní jejich aplikaci při řešení praktických úkolů.

„Strojové učení je podoblastí umělé inteligence, zabývající se algoritmy a technikami, které umožňují počítačovému systému »učit se«. Strojové učení se značně prolíná s oblastmi statistiky a dobývání znalostí a má široké uplatnění...“ (http://cs.wikipedia.org).

Deep learning je metoda strojového učení, 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 dosahují deep learning modely vysoké přesnosti, která může předčit lidské schopnosti. Modely jsou trénovány s využitím velkého množství označených dat a jejich architektura je postavená na hlubokých neuronových sítích (deep networks).

Deep learning nachází využití v mnoha oblastech, zejména pak v úlohách:

  • klasifikace obrazu
  • rozpoznávání řeči
  • zpracování přirozeného jazyka

Učení deep learning modelů

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 milióny vzorků. Učení takového modelu může trvat velmi dlouhou dobu. Jakmile je model naučen, lze jej nasadit do provozu v reálném čase. Typickou aplikací je detekce chodců v pokročilých systémech pro podporu řízení (ADAS).

Deep learning a MATLAB

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. MATLAB je nástroj jak pro pohodlnou interaktivní práci, tak pro vývoj širokého spektra aplikací.

V oblasti deep learningu poskytuje MATLAB dva základní nástroje: autoenkodéry (Autoencoders) a konvoluční neuronové sítě (Convolutional Neural Networks – CNN). Využití CNN k rozpoznávání obrazu v programu MATLAB je na obrázku 1.


Obrázek 1: Rozpoznávání obrazu pomocí CNN v prostředí MATLAB

Rozpoznávání obrazu

Konvoluční neuronové sítě (CNN) představují oblíbenou architekturu modelů v oblasti deep learningu. Neuronová síť je uspořádána do vrstev obsahujících sady propojených uzlů. Výpočetní algoritmus CNN je založen na konvoluci mezi vstupními daty a filtry, které reprezentují hledané charakteristické rysy. CNN využívá dvourozměrné (2-D) konvoluční vrstvy, a je tedy vhodná pro zpracování 2-D dat, jako jsou obrázky.


Obrázek 2: Princip fungování konvoluční neuronové sítě

V horní části obrázku 2 je znázorněno schéma sestavení konvoluční neuronové sítě určené ke klasifikaci objektů v obrazových datech. Ve spodní části je principiální znázornění jejího fungování. Data protékají skrze neuronovou síť a dochází k jejich konvoluci s naučenými filtry (koeficienty filtrů jsou naučené váhy neuronové sítě). Výstup z konvoluce v jedné vrstvě je vstupem do vrstvy následující.

Filtry mohou začínat jako velmi jednoduché rysy, typu světlých a tmavých míst či hran, a postupně přechází do složitějších tvarů v následujících vrstvách. Cílem konvolucí je extrahovat z obrazových dat informace (ve formě mapy charakteristických rysů), na základě kterých lze objekty na snímcích rozpoznat.

Konvoluční vrstvy jsou často doplněny vrstvami ReLU a Pooling, které výstupy upraví (např. odstraní záporné hodnoty) a převzorkují na menší rozměr.

Za sadou konvolučních vrstev bývají napojeny vrstvy klasifikační, které pracují z extrahovanými rysy ze vstupních obrázků. Výstupem klasifikačních vrstev může být pravděpodobnostní rozdělení pro přiřazení klasifikační třídy (hledaného objektu) ke vstupnímu obrázku.

CNN v MATLABu

V prostředí MATLAB se s CNN pracuje velmi pohodlně. Jsou zde připraveny funkce pro vytvoření jednotlivých vrstev sítě, u kterých může uživatel nastavovat parametry. Poté vrstvy pospojuje, síť natrénuje a využije ke klasifikaci s novými daty.

Typická CNN může sestávat z vrstvy pro vstup obrázků, jedné nebo několika za sebou zapojených skupin vrstev convolution2d + relu + maxPooling2d a navazujících klasifikačních vrstev fullyConnected + softmax + classification.

vrstvy = [imageInputLayer([28 28 1]);
 convolution2dLayer(5,20);
 reluLayer(); 
 maxPooling2dLayer(2,'Stride',2);
 fullyConnectedLayer(10);
 softmaxLayer();
 classificationLayer()];
nastaveni = trainingOptions('sgdm');
cnn = trainNetwork(trenovaciObrazky,vrstvy,nastaveni);
vysledek = classify(cnn,novyObrazek);

CNN a klasická klasifikace

Konvoluční neuronové sítě nemusí být vždy využívány včetně klasifikačních vrstev. Je možné využívat pouze konvoluční vrstvy pro extrakci charakteristických rysů z dat. Získané rysy jsou pak vstupem do klasických klasifikačních algoritmů strojového učení, jako jsou rozhodovací stromy (classification trees), support vector machines, k-nearest neighbors, discriminant analysis a jiné metody, které jsou v MATLABu k dispozici.

Učení metodou Transfer Learning

Naučení celé konvoluční neuronové sítě z výchozího nastavení vyžaduje ohromné množství trénovacích dat, protože je třeba nastavit milióny váhových koeficientů. Alternativním přístupem k učení „od nuly“ je využití před-učené sítě, která již sama extrahuje charakteristické rysy ze vstupních dat. Tento přístup, označovaný termínem transfer learning, je pohodlnou cestou aplikace deep learningu bez nutnosti využití rozsáhlého množství dat a dlouhé doby učení.


Obrázek 3: Učení CNN metodou transfer learning

Přístup vychází z předpokladu, že úlohy klasifikace objektů v obrazových datech jsou v prvních krocích (v prvních vrstvách sítě) v zásadě shodné. Nejprve se z obrazu extrahují jednoduché prvky (hrany, přechody) a poté složitější struktury, až ke konkrétním objektům. K přizpůsobení sítě konkrétnímu problému tedy postačí doučit pouze několik posledních vrstev, které již rozlišují mezi konkrétními objekty. Extrakci jednoduchých rysů zajistí před-učená síť. Kvalita výsledku velmi závisí na kvalitě před-učené sítě, proto je důležitý její vhodný výběr. MATLAB nabízí stažení a využívání oblíbených před-učených sítí, např. sítě AlexNet (síť naučená s 1,2 milióny obrázků, obsahuje 23 vrstev, klasifikace objektů do 1000 kategorií).

Porovnání náročnosti učení a přesnosti klasifikace při vytváření neuronové sítě „od nuly“ v porovnání s využitím před-učené sítě je v tabulce 1.

Učení CNN  Učení sítě „od nuly“  Učení metodou transfer learning 
Trénovací data tisíce až milióny trénovacích obrázků  stovky až tisíce trénovacích obrázků
Výpočetní nároky vysoké střední
Doba učení dny až týdny pro reálné úlohy sekundy až minuty
Přesnost modelu vysoká dobrá, závisí na před-určeném modelu 

Urychlení pomocí GPU

Učení modelu pro deep learning může trvat velmi dlouhou dobu, v rozmezí dnů či týdnů. Nasazení výpočtů na grafických kartách (GPU) vede ke značnému urychlení. V případě typické úlohy klasifikace objektů v obrazu lze snížit dobu učení z dnů na hodiny. Využití GPU výpočtů k učení CNN je v prostředí MATLAB plně podporováno.

Dvouminutové video s ukázkou klasifikace objektů pomocí konvoluční neuronové sítě v prostředí MATLAB najdete pod názvem Deep Learning in 11 Lines of MATLAB Code na stránkách www.mathworks.com.

Distributor produktů společnosti MathWorks v České republice a na Slovensku:

HUMUSOFT, s. r. o.

http://www.humusoft.cz