Programování

Co je hluboké učení? Algoritmy, které napodobují lidský mozek

Je definováno hluboké učení

Hluboké učení je forma strojového učení, která modeluje vzory v datech jako složité vícevrstvé sítě. Protože hluboké učení je nejobecnějším způsobem modelování problému, má potenciál řešit složité problémy - jako je počítačové vidění a zpracování přirozeného jazyka - které předstihují konvenční programování i další techniky strojového učení.

Hluboké učení může nejen přinést užitečné výsledky tam, kde jiné metody selžou, ale také může vytvořit přesnější modely než jiné metody a může zkrátit čas potřebný k vytvoření užitečného modelu. Výcvik modelů hlubokého učení však vyžaduje velkou výpočetní sílu. Další nevýhodou hlubokého učení je obtížnost interpretace modelů hlubokého učení.

Charakteristickou vlastností hlubokého učení je, že trénovaný model má více než jeden skrytá vrstva mezi vstupem a výstupem. Ve většině diskusí znamená hluboké učení využití hlubokých neuronových sítí. Existuje však několik algoritmů, které implementují hluboké učení pomocí jiných druhů skrytých vrstev kromě neuronových sítí.

Hluboké učení vs. strojové učení

Zmínil jsem, že hluboké učení je forma strojové učení. Nehluboké strojové učení budu označovat jako klasické strojové učení, aby vyhovovaly běžnému používání.

Obecně platí, že klasické algoritmy strojového učení běží mnohem rychleji než algoritmy hlubokého učení; jeden nebo více CPU bude často dostačující k trénování klasického modelu. Modely hlubokého učení často potřebují hardwarové akcelerátory, jako jsou GPU, TPU nebo FPGA, pro školení a také pro nasazení ve velkém. Bez nich by trénování modelů trvalo měsíce.

U mnoha problémů vytvoří klasický algoritmus strojového učení model „dostatečně dobrého“. U jiných problémů klasické algoritmy strojového učení v minulosti příliš dobře nefungovaly.

Aplikace pro hluboké učení

Existuje mnoho příkladů problémů, které v současné době vyžadují hluboké učení, aby bylo možné vytvořit ty nejlepší modely. Zpracování přirozeného jazyka (NLP) je dobré.

Na podzim roku 2016 se kvalita výstupu Překladače Google pro anglické, francouzské, anglicko-čínské a anglicko-japonské jazykové páry náhle dramaticky zlepšila, od vytváření slovního salátu po vytváření vět blízkých kvalitě profesionálního překladu člověka. V zákulisí se stalo to, že týmy Google Brain a Google Translate vylepšily Překladač Google z používání jeho starých frázových statistických algoritmů strojového překladu (jeden druh klasického strojového učení) na používání hluboké neurální sítě trénované pomocí vkládání slov pomocí rámce TensorFlow společnosti Google .

To nebyl snadný projekt. Mnoho výzkumných pracovníků na doktorské úrovni trvalo měsíce práce na modelech a tisíce GPU týdnů na školení modelů. Pobídlo to také společnost Google k vytvoření nového druhu čipu, jednotky pro zpracování tenzoru (Tensor Processing Unit, TPU), která bude pro Google Translate provozovat neuronové sítě ve velkém.

Kromě problému s překladem jazyků, kterému se Google Translate věnuje, patří mezi hlavní úkoly NLP automatická sumarizace, řešení referenčních referencí, analýza diskurzu, morfologická segmentace, rozpoznávání pojmenovaných entit, generování přirozeného jazyka, porozumění přirozenému jazyku, označování části řeči, sentiment analýza a rozpoznávání řeči.

Dalším dobrým příkladem aplikace hlubokého učení je klasifikace obrázků. Protože živé organismy zpracovávají obrazy svou zrakovou kůrou, mnoho vědců vzalo architekturu zrakové kůry savců jako model neuronových sítí určených k provádění rozpoznávání obrazu. Biologický výzkum sahá do 50. let.

Průlomem v oblasti neuronové sítě pro vidění byl Yann LeCun 1998 LeNet-5, sedmúrovňový konvoluční neuronová síť (CNN) pro rozpoznávání ručně psaných číslic digitalizovaných v obrázcích 32 x 32 pixelů. Aby bylo možné analyzovat obrázky s vyšším rozlišením, bylo by nutné síť LeNet-5 rozšířit na více neuronů a více vrstev.

Nejlepší dnešní modely klasifikace hlubokých obrazů dokážou barevně identifikovat rozmanité katalogy objektů v HD rozlišení. Kromě čistých hlubokých neuronových sítí (DNN) někdy lidé používají modely hybridního vidění, které kombinují hluboké učení s klasickými algoritmy strojového učení, které provádějí konkrétní dílčí úkoly.

Mezi další problémy se zrakem kromě základní klasifikace obrazu, které byly vyřešeny pomocí hlubokého učení, patří klasifikace obrazu s lokalizací, detekce objektů, segmentace objektů, přenos stylu obrazu, kolorování obrazu, rekonstrukce obrazu, superrozlišení obrazu a syntéza obrazu.

Klasifikaci obrazu lze rozšířit na klasifikaci videa extrahováním jednotlivých snímků z videa a klasifikací každého snímku. Detekované objekty ve videoklipech lze sledovat od snímku k snímku.

Podle Goodfellow, Bengio a Courville, psaných v roce 2016, bylo hluboké učení úspěšně použito k předpovědi interakcí molekul, aby pomohly farmaceutickým společnostem navrhovat nové léky, hledat subatomární částice a automaticky analyzovat mikroskopické obrazy použité ke konstrukci 3D mapa lidského mozku.

Hluboké učení neuronových sítí

Myšlenky pro „umělé“ neuronové sítě sahají do 40. let 20. století. Základní koncept spočívá v tom, že síť umělých neuronů vytvořená ze vzájemně propojených prahových spínačů se může naučit rozpoznávat vzorce stejným způsobem, jako to dělá zvířecí mozek a nervový systém (včetně sítnice).

Zpětná propagace

K učení v hlubokých neuronových sítích dochází posilováním spojení mezi dvěma neurony, když jsou oba během tréninku aktivní současně. V moderním softwaru neuronových sítí jde nejčastěji o zvýšení hodnot hmotnosti pro spojení mezi neurony pomocí pravidla s názvem zpětné šíření chyby, backprop nebo BP.

Neurony

Jak jsou modelovány neurony? Každý z nich má funkci šíření, která transformuje výstupy připojených neuronů, často váženým součtem. Výstup funkce šíření předává aktivační funkci, která se aktivuje, když její vstup překročí prahovou hodnotu.

Aktivační funkce

Ve 40. a 50. letech 20. století umělé neurony používaly funkci krokové aktivace a byly povolány perceptrony. Moderní neuronové sítě mohou říci používají perceptrony, ale ve skutečnosti mají hladké aktivační funkce, jako je logistická nebo sigmoidní funkce, hyperbolická tangenta a rektifikovaná lineární jednotka (ReLU). ReLU je obvykle nejlepší volbou pro rychlou konvergenci, i když má problém s umíráním neuronů během tréninku, pokud je nastavena příliš vysoká rychlost učení.

Výstup aktivační funkce může předat výstupní funkci pro další tvarování. Často je však výstupní funkcí funkce identity, což znamená, že výstup aktivační funkce je předáván do navazujících připojených neuronů.

Topologie neuronových sítí

Nyní, když víme o neuronech, musíme se dozvědět o běžných topologiích neuronových sítí. V dopředné síti jsou neurony uspořádány do odlišných vrstev: jedna vstupní vrstva, libovolný počet skrytých zpracovatelských vrstev a jedna výstupní vrstva a výstupy z každé vrstvy přecházejí pouze do další vrstvy.

V síti dopředného připojení s přímými připojeními mohou některá připojení přeskakovat jednu nebo více mezilehlých vrstev. V rekurentních neuronových sítích se mohou neurony ovlivňovat buď přímo, nebo nepřímo prostřednictvím další vrstvy.

Výcvik

Kontrolované učení neuronové sítě se provádí stejně jako jakékoli jiné strojové učení. Představíte síť se skupinami tréninkových dat, porovnáte síťový výstup s požadovaným výstupem, vygenerujete chybový vektor a na základě chybového vektoru použijete opravy v síti. Dávky tréninkových dat, které jsou spuštěny společně před použitím oprav, se nazývají epochy.

Pro ty, kteří se zajímají o podrobnosti, backpropagation používá gradient funkce chyby (nebo ceny) s ohledem na váhy a předpětí modelu k nalezení správného směru k minimalizaci chyby. Aplikace korekcí řídí dvě věci: optimalizační algoritmus a proměnná rychlosti učení, která obvykle musí být malá, aby byla zaručena konvergence a zabráněno vzniku mrtvých neuronů ReLU.

Optimalizátory

Optimalizátory pro neuronové sítě obvykle používají nějakou formu algoritmu gradientního sestupu k podpoře zpětné propagace, často s mechanismem, který pomáhá vyhnout se zaseknutí v místních minimech, jako je optimalizace náhodně vybraných mini dávek (Stochastic Gradient Descent) a aplikace hybnost opravy přechodu. Některé optimalizační algoritmy také přizpůsobují rychlosti učení parametrů modelu prohlížením historie gradientů (AdaGrad, RMSProp a Adam).

Stejně jako u všech strojových učení je třeba zkontrolovat předpovědi neuronové sítě proti samostatné sadě dat ověření. Bez toho byste riskovali vytváření neuronových sítí, které si pouze zapamatují své vstupy, místo aby se naučily být zobecněnými prediktory.

Skutečné DNN

Hluboká neurální síť pro skutečný problém může mít až 10 skrytých vrstev. Jeho topologie může být jednoduchá nebo poměrně složitá.

Čím více vrstev v síti, tím více charakteristik dokáže rozpoznat. Bohužel čím více vrstev v síti, tím déle bude trvat výpočet, a tím těžší bude trénovat.

Algoritmy hlubokého učení

Jak jsem již zmínil, většina hlubokého učení se provádí pomocí hlubokých neuronových sítí. Konvoluční neuronové sítě (CNN) se často používají pro strojové vidění. Rekurentní neuronové sítě (RNN) se často používají pro zpracování přirozeného jazyka a další sekvence, stejně jako sítě LSTM (Long Short-Term Memory) a neuronové sítě založené na pozornosti. Náhodné lesy, známé také jako náhodné rozhodovací lesy, které nejsou neuronovými sítěmi, jsou užitečné pro řadu problémů s klasifikací a regresí.

Neuronové sítě CNN

Konvoluční neurální sítě obvykle používají k simulaci vizuální kůry konvoluční, sdružování, ReLU, plně připojené a ztrátové vrstvy. Konvoluční vrstva v podstatě přebírá integrály mnoha malých překrývajících se oblastí. Sdružovací vrstva provádí formu nelineárního převzorkování. Vrstvy ReLU používají nesaturační aktivační funkci f (x) = max (0, x). V plně spojené vrstvě mají neurony spojení se všemi aktivacemi v předchozí vrstvě. Ztrátová vrstva počítá, jak síťový trénink penalizuje odchylku mezi předpovězenými a skutečnými popisky, pomocí funkce pro ztrátu Softmax nebo cross-entropie pro klasifikaci nebo funkce pro euklidovskou ztrátu pro regresi.

RNN, LSTM a neuronové sítě založené na pozornosti

V neuronových sítích dopředných toků informace proudí od vstupu přes skryté vrstvy k výstupu. To omezuje síť na práci s jedním státem najednou.

V rekurentních neuronových sítích informace cyklicky procházejí smyčkou, která umožňuje síti pamatovat si poslední předchozí výstupy. To umožňuje analýzu sekvencí a časových řad. RNN mají dva běžné problémy: explodující přechody (snadno fixovatelné upnutím přechodů) a mizející přechody (není tak snadné opravit).

V LSTM je síť schopna zapomenout (bránit) předchozí informace nebo si je zapamatovat, v obou případech změnou váhy. To účinně poskytuje LSTM dlouhodobou i krátkodobou paměť a řeší problém s mizejícím gradientem. LSTMs si poradí se sekvencemi stovek minulých vstupů.

Moduly pozornosti jsou zobecněné brány, které váží vektor vstupů. Hierarchický kodér neurální pozornosti využívá několik vrstev modulů pozornosti k řešení desítek tisíc minulých vstupů.

Náhodné lesy

Dalším druhem algoritmu hlubokého učení - nikoli hluboké neuronové sítě - je Random Forest nebo Random Decision Forest. Náhodný les je sestaven z mnoha vrstev, ale místo neuronů je sestaven z rozhodovacích stromů a vydává statistický průměr (režim pro klasifikaci nebo průměr pro regresi) předpovědí jednotlivých stromů. Randomizované aspekty náhodných lesů jsou použití bootstrapové agregace (a.k.a. pytlování) pro jednotlivé stromy a přijímání náhodných podmnožin funkcí.

Rámečky hlubokého učení

I když byste mohli psát programy hlubokého učení od prvních principů, je mnohem efektivnější používat rámce hlubokého učení, zejména vzhledem k tomu, že byly optimalizovány pro použití s ​​GPU a jinými akcelerátory. Preeminent framework je TensorFlow, který vznikl na Google. Upřednostňovaným rozhraním API na vysoké úrovni pro TensorFlow je Keras, který lze také použít s jinými back-endovými rámci.

PyTorch, od Facebooku a dalších, je silnou alternativou k TensorFlow a vyznačuje se podporou dynamických neurálních sítí, ve kterých se topologie sítě může měnit z epochy do epochy. Fastai je rozhraní API třetí strany na vysoké úrovni, které používá PyTorch jako back-end.

MXNet od Amazonu a dalších je další silnou alternativou k TensorFlow s požadavkem na lepší škálovatelnost. Gluon je upřednostňovaný imperativní API na vysoké úrovni pro MXNet.

Chainer, od IBM, Intel a dalších, byl v některých ohledech inspirací pro PyTorch, vzhledem k tomu, že definuje neuronovou síť spuštěním a podporuje dynamické neuronové sítě.

Zatímco všechny výše uvedené rámce jsou primárně Python, Deeplearning4j (DL4J), původně od Skymind a nyní projekt Apache, je primárně Java a Scala. DL4J je kompatibilní s Apache Spark a Hadoop.

ONNX byl původně navržen jako otevřený ekosystém pro vyměnitelné modely AI. ONNX má nyní kromě formátu výměnného souboru i běhový modul.

$config[zx-auto] not found$config[zx-overlay] not found