Článek ve formátu PDF je možné stáhnout
zde.
Deep learning je jedna z nejprogresivnějších metod oboru strojového učení se schopností řešit úlohy, které byly ještě před deseti lety nemyslitelné. Nachází uplatnění v mnoha oblastech lidské činnosti od systémů strojového vidění přes vyhledávací, diagnostické a asistenční systémy až po autonomní vozidla a bezpečnost. Softwarový systém Matlab, jakožto vývojové prostředí pro vědeckotechnické výpočty, nabízí pro strojové učení obecně i metodu deep learning množství algoritmů a usnadňuje tak jejich použití k řešení reálných úloh.
„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ývaní znalostí a má široké uplatnění...“ (http://cs.wikipedia.org ).
Deep learning (popř. Deep Learning; doslovně lze přeložit jako učení do hloubky) je metoda strojového učení, při níž je pomocí mnohovrstvých nelineárních výpočetních modelů získávána užitečná informace přímo z primárních údajů. V klasifikačních úlohách dosahují modely založené na metodě deep learning (tzv. modely deep learning) velké přesnosti, která může předčit lidské schopnosti. Modely deep learning jsou trénovány s použitím velkého množství označených údajů, přičemž základem jejich struktur jsou tzv. hluboké neuronové sítě (deep networks).
Metoda deep learning nachází využití v mnoha oborech, zejména v těchto úlohách:
- klasifikace obrazu,
- rozpoznávání řeči,
- porozumění přirozenému jazyku.
Učení modelů deep learning
Přesnost modelu deep learning z velké části závisí na množství údajů 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. Jakmile je model naučen, lze jej použít v provozu v reálném čase. Typickou úlohou je detekce chodců v pokročilých systémech podpory řidičů při řízení vozidel (Advanced Driver-Assistance System – ADAS).
Metoda deep learning a Matlab
Softwarový systém 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. Systém Matlab je nástroj jak pro pohodlnou interaktivní práci, tak pro vývoj širokého spektra aplikačních programů.
V oboru deep learning nabízí Matlab dva základní nástroje: autoenkodéry (autoencoders) a konvoluční neuronové sítě (Convolutional Neural Network – CNN). Přiklad operace rozpoznávání obrazu s využitím CNN v prostředí Matlab je na obr. 1.
Rozpoznávání obrazu
Konvoluční neuronové sítě (CNN) jsou oblíbeným základem modelů deep learning. Neuronová síť je uspořádána do vrstev obsahujících sady propojených uzlů. Výpočetní algoritmus sítí CNN je založen na konvoluci mezi vstupními údaji a filtry, které reprezentují hledané charakteristické rysy obrazu. Síť CNN využívá dvourozměrné (2D) konvoluční vrstvy, a je tedy vhodná pro zpracování souborů 2D dat, jako jsou obrázky. Princip fungování konvoluční neuronové sítě je ukázán na obr. 2.
V horní části obr. 2 je schematicky znázorněna obecná skladba konvoluční neuronové sítě určené ke klasifikaci objektů obsažených v obrazových údajích. V dolní části obrázku je principiálně znázorněno její fungování. Údaje protékají neuronovou sítí a dochází k jejich konvoluci s naučenými filtry (koeficienty filtrů jsou naučené váhy prvků neuronové sítě). Výstup z konvoluce v jedné vrstvě je vstupem do vrstvy následující.
Filtry, které mohou začínat na úrovni detekce velmi jednoduchých rysů, typu např. světlých a tmavých míst či hran, postupně přecházejí k detekci složitějších tvarů v následujících vrstvách. Cílem konvolucí je extrahovat z obrazových údajů informace (ve formě mapy charakteristických rysů), na jejichž základě lze objekty na snímcích rozpoznat.
Konvoluční vrstvy jsou často doplněny vrstvami ReLU (rectified linear units) a Pooling, které výstupy upraví (např. odstraní záporné hodnoty) a převzorkují na menší rozměr (viz horní část obr. 2).
Za sadou konvolučních vrstev bývají napojeny vrstvy klasifikační, které pracují s rysy extrahovanými 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 prostředí Matlab
V prostředí Matlab se s CNN pracuje velmi pohodlně. Jsou zde připraveny funkce pro vytvoření jednotlivých vrstev sítě, u nichž může uživatel nastavovat hodnoty parametrů. Poté vrstvy pospojuje, síť natrénuje a využije ke klasifikaci s novými údaji.
Typická síť CNN se může skládat 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 (viz obr. 3).
CNN a klasická klasifikace
Konvoluční neuronové sítě nemusí být vždy využívány včetně svých klasifikačních vrstev. Je možné využívat pouze jejich konvoluční vrstvy, a to za účelem extrahovat z předložených údajů charakteristické rysy. 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 prostředí Matlab k dispozici.
Učení metodou transfer learning
Proces naučení celé konvoluční neuronové sítě z výchozího nastavení vyžaduje ohromné množství trénovacích údajů, protože je třeba nastavit miliony váhových koeficientů. Alternativním přístupem k učení sítě „od nuly“ je využití „předučené“ sítě, která ze vstupních údajů již sama extrahuje charakteristické rysy. Tento přístup, označovaný jako transfer learning, je pohodlnou cestou použití metody deep learning bez nutnosti zpracovávat rozsáhlé množství údajů spojené s dlouhou dobou učení se sítě.
Princip přístupu transfer learning je ukázán na obr. 4. Vychází se z předpokladu, že úlohy klasifikace objektů v obrazových údajích 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, postupně 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ředučená síť. Kvalita výsledku velmi závisí na kvalitě předučené sítě, proto je důležitý její vhodný výběr. Prostředí Matlab nabízí ke stažení a využívání oblíbené předučené sítě, např. síť AlexNet (síť naučená s 1,2 milionu obrázků, obsahuje 23 vrstev, klasifikuje objekty do 1 000 kategorií).
Rámcové porovnání náročnosti učení a přesnosti klasifikace při vytváření neuronové sítě „od nuly“ oproti využití předučené sítě je uvedeno v tab. 1.
Urychlení učení použitím GPU
Učení modelu pro deep learning může trvat velmi dlouhou dobu, v rozmezí dnů až týdnů. Značného urychlení se dosáhne při použití výpočtů na grafických kartách (Graphics Processing Unit – GPU). V případě typické úlohy klasifikace objektů v obrazu lze zkrátit dobu učení z dnů na hodiny. Využití výpočtů na GPU k učení sítí CNN je v prostředí Matlab plně podporováno.
Dvouminutový videozáznam s ukázkou klasifikace obrázků s použitím konvoluční neuronové sítě v prostředí Matlab lze nalézt na www.mathworks.com pod názvem Deep Learning in 11 Lines of Matlab Code.
Vizualizace sítí CNN
Lze jednoduchým způsobem kontrolovat, zda je síť naučená správně? Vedle testování se souborem údajů, u kterého je dopředu známý správný výsledek, je možné vykonat optickou kontrolu vizualizační technikou deep dream. Prostředí Matlab obsahuje funkci deepDreamImage, syntetizující umělý obrázek, který výrazně aktivuje vrstvy dané sítě pro zvolenou kategorii obrázků. Opticky pak lze zkontrolovat, zda naučené vlastnosti odpovídají hledanému tvaru. Na obr. 5 je ukázka vizualizace sítě AlexNet pro kategorii květináče.
Sítě CNN a strojové vidění
Jednou z nejčastějších úloh v oboru strojového počítačového vidění je detekce specifických objektů ve snímané scéně. Jako typický příklad lze uvést rozpoznávání dopravních značek při jízdě automobilem. Při detekci objektů nejde o zařazení celého snímku do dané kategorie, ale o rozpoznání objektu pokrývajícího pouze část snímku. V ostatních částech snímku se nacházejí další objekty, které hledajícího nezajímají, a proto není možné klasifikovat snímek jako celek. Jak přenést sílu a přesnost sítě CNN do této úlohy?
V prostředí Matlab je k dispozici několik algoritmů typu R-CNN (Regions with Convolutional Neural Networks), kdy je konvoluční neuronová síť použita ke klasifikaci výřezů (regionů) v rámci daného snímku. Namísto klasifikace všech výřezů získaných prostřednictvím „plovoucího“ okénka detektor R-CNN zpracovává pouze výřezy, v nichž je výskyt hledaného objektu pravděpodobný. To významnou měrou zmenšuje požadavky na výpočetní výkon. V prostředí Matlab jsou k dispozici detektory R-CNN, Fast R-CNN a Faster R-CNN. Již název napovídá, že výhodou posledně jmenovaného detektoru je rychlost detekce, což usnadňuje jeho použití v reálném provozním prostředí.
Stejně jako v případě sítě CNN je i v algoritmech R-CNN možné využít předučenou síť. Algoritmus učení detektoru R-CNN pak pouze „doučí“ výslednou síť pro uživatelem specifikované objekty.
(Humusoft s. r. o.)
Obr. 1. Příklad použití CNN v prostředí Matlab: rozpoznání obrazu počítačové klávesnice
Obr. 2. Princip činnosti konvoluční neuronové sítě (CNN)
Obr. 3. Příklad zápisu sítě CNN v prostředí Matlab
Obr. 4. Zrychlené učení sítě CNN metodou transfer learning
Obr. 5. Vizualizace sítě CNN technikou Deep Dream v prostředí Matlab (síť AlexNet)
Tab. 1. Porovnání metod učení sítě CNN
Parametr | Učení sítě „od nuly“ | Učení metodou transfer learning |
Trénovací data | tisíce až miliony trénovacích obrázků | stovky až tisíce trénovacích obrázků |
Výpočetní nároky | značné | střední |
Doba učení | dny až týdny pro reálné úlohy | sekundy až minuty |
Přesnost modelu | velká | dobrá, závisí na předučeném modelu CNN |