Stručný průvodce přenosem učení a jeho aplikováním na neuronovou síť

Příklady klasifikace obrazu a zpracování přirozeného jazyka

K dispozici také ve španělštině También k dispozici en español

Velké pokroky, kterých bylo nedávno dosaženo ve světě hlubokého učení, nelze vysvětlit bez spojení několika faktorů, jako je vývoj a demokratizace procesních nástrojů, zavedení nových platforem a rámců nebo příchod více technik ke zlepšení neuronů. síťové školení. Ale co se týče účinnosti nebo přesnosti, najdeme klíčový faktor, který způsobil revoluci v oblastech počítačového vidění nebo zpracování přirozeného jazyka. V tomto článku vysvětlím, co je Transfer Learning a několik případů použití.

Foto Doug Linstedt na Unsplash

Poznámka: Většinu toho, co zde říkám, jsem se naučil z kurzu Deep Learning for Coders, který vyučoval Jeremy Howard na University of San Francisco.

Když se postavíme před problém, který vyžaduje jeho řešení pro strojové učení, a my se rozhodneme použít hlubokou neuronovou síť, jako první úkol si musíme vybrat nejvhodnější architekturu pro náš konkrétní případ. Jakmile je toto konstrukční rozhodnutí učiněno, čelíme problému inicializace jeho parametrů (hmotnosti a zkreslení) pro každou vrstvu v naší síti. Až donedávna bylo nejběžnějším postupem náhodně inicializovat tyto parametry v malém rozsahu, což nějakým způsobem pomohlo algoritmu odpovědnému za úpravu těchto hodnot v tréninkovém procesu. Jako výchozí bod to není špatné (vždy lepší než jejich inicializace na nulu), ale vždy to byl subjekt s dostatečným prostorem pro zlepšení.

První velký příjemce: Computer Vision

Představte si na okamžik, že čelíme problému klasifikace obrazu, který musí rozlišovat mezi plemeny koček.

Brady Bunch, verze pro kočky

Co když namísto náhodného inicializace parametrů naší sítě začneme s využitím hodnot získaných po zaškolení stejné základní architektury s obrovským souborem označených obrázků, kde kočky již existovaly (mimo jiné)? Tímto způsobem bychom přenesli získané znalosti v obecnějším úkolu do našeho konkrétního případu a nezačali bychom úplně od nuly.

To je to, co získáme při osvojování modelů dříve vyškolených v ohromném datovém souboru ImageNet, který v současné době obsahuje více než 14 milionů obrázků a téměř 22 000 různých štítků. Snad nejznámějším případem je architektura ResNet, vítěz soutěže pro rozpoznávání obrázků, kterou společnost ImageNet provedla v roce 2015. Skutečnost použití stejné architektury se stejnými parametry jako předškolený model umožní naší síti rozpoznat mnoho věcí od začátku, což bude také znamenat velmi krátký tréninkový čas. Toto použití dat ImageNet jako výchozího bodu znamenalo obrovský skok v poli Computer Vision.

Ukázka dat ImageNet

Jak již bylo zmíněno, uděláme v první řadě základní architekturu, která závisí na konkrétním problému, který má být vyřešen, a na našich znalostech nejlepších existujících technik pro konkrétní scénář (více o tomto tématu později články). Inicializujeme tuto architekturu s hodnotami parametrů z předškoleného modelu, takže naše konečné výsledky budou lepší a dosaženy mnohem dříve. Dalším krokem je odstranění výstupní vrstvy ze základní architektury a místo toho přidat další vrstvy, abychom mohli původní model retušovat, abychom jej přizpůsobili našemu konkrétnímu případu.

V příkladu plemen koček použijeme jako výchozí bod model ResNet předškolený na datech ImageNet; pak odstraňte výstupní vrstvu zodpovědnou za rozhodnutí, zda máme kočku nebo rybu (nebo něco jiného), a nakonec připojte pár finálních vrstev k přeorientování úkolu původního modelu se zaměřením na klasifikaci plemen koček podle pozorovaných rozdílů mezi nimi.

Příklad (Mathworks)

Trik, který jsem se naučil z kurzu Fast.ai: při použití přenosu se výsledky učení mohou výrazně zlepšit, pokud nejprve trénujeme náš model se zmenšenými verzemi původních obrazů a poté jej trénujeme s většími obrázky. Výsledky se zlepšují, protože podle našich sítí to vypadá jako jiný dataset. Tato technika se nazývá progresivní změna velikosti a funguje pro minimální velikost obrázku 64x64 pixelů.

Tréninková strategie neuronové sítě s přenosovým učením

Při tréninku jakékoli sítě pomocí přenosu učení můžeme postupovat téměř obecným postupem. Použijeme dvoustupňovou strategii:

V první fázi zmrazíme parametry patřící k základní architektuře. Bylo by trochu absurdní znovu upravit parametry z prvních vrstev stejným způsobem jako u nově přidaných, protože stěží zlepšíme schopnost základního modelu detekovat jednoduché tvary, jako jsou úhlopříčky nebo přechody (něco, co již bylo dosaženo první vrstvou). Vybereme vhodnou rychlost učení pro úpravu parametrů v dalších vrstvách (ne příliš vysoká, aby se zabránilo oscilacím, ani příliš nízká, aby se zabránilo navždy čekajícímu). Tréninkový čas bude malý, protože není mnoho parametrů k úpravě; mělo by stačit několik epoch (úplné iterace všech dat).

Ve druhé fázi se pokusíme vylepšit model provedením jemné úpravy. První věcí, kterou uděláme, je uvolnit parametry ze základních vrstev a mírně upravit jejich hodnoty. Vybereme rozsah pro maximální rychlost učení prostřednictvím různých vrstev tak, aby se hmotnosti základních vrstev sotva změnily, zatímco konečné váhy mají větší modifikační rozpětí (i když to bude menší než v první fázi). Vycvičíme naši síť pro další epochy; v zásadě, dokud se chyba ověření trvale nezhorší.

Přenos učení pro zpracování přirozeného jazyka

Hlavní příčinou drastických vylepšení dosažených před několika lety v oblasti zpracování přirozeného jazyka (NLP) bylo také Transfer Learning.

Začínáme z předpokladu: obvykle náš datový soubor bude omezen v rámci konkrétního předmětu a nebude to dost velké, aby nám umožnilo porozumět složitosti tohoto jazyka.

V roce 2018 Jeremy Howard a Sebastian Ruder publikovali referát představující ULMFiT (Universal Language Model Fine-Tuning), obecný způsob, jak aplikovat Transfer Learning na jakýkoli problém NLP a přinést do této oblasti dříve dosažené pokroky v oblasti Computer Vision. Důsledek: nejlepší dosažené výsledky (se zlepšením přesnosti o 18–24%) v několika klasických souborech dat, jako je ten, který byl použit k klasifikaci filmových recenzí IMDB na pozitivní a negativní.

Zpracování přirozeného jazyka není tak jednoduché

Kroky podniknuté v tomto příkladu a další podobné problémy by byly následující:

1. Jako výchozí bod vyberte předem vyškolený model (nebo vytvořte a zaškolte nový) v obecnější textové úloze. V NLP použijeme tzv. Jazykový model, který se například snaží předpovídat další slovo ve větě, jak vidíme v prediktivních klávesnicích. Tento úkol vyžaduje hlubokou znalost jazyka a světa kolem nás; práce s n-gramy (slova, která se obvykle objevují společně) jako předtím nestačí k získání schopnosti potřebné k pokračování vět. Ale… co když použijeme Deep Learning s použitím většího souboru dat, jako je velká hromada článků převzatých z Wikipedie? Vypadá to jako dobrý nápad! Predikce dalšího slova nebude pro náš konečný klasifikační úkol příliš užitečný, ale dosažením toho dosáhneme velmi cenné znalosti jazyka a skutečnosti, kde je použito. Mnohem lepší než začít s náhodnými parametry, že?

Tento první krok se nebude opakovat, i když se náš problém nebo doména změní, pokud bude použit stejný jazyk.

2. Upřesněte jazykový model použitím Transfer Learning, abyste vytvořili nový, který je dobrý v předpovídání dalšího slova, ale v naší konkrétní doméně; v tomto případě recenze filmu. Síť krmíme pomocí našeho datového souboru, nazývaného také cílový korpus, a použijeme tokenizaci (segmentaci textu na minimální jednotky nebo tokeny), normalizaci a numerizaci (pozor u speciálních tokenů). Doporučuje se používat všechna dostupná data, včetně testovacích vzorků; protože jejich štítky (které budou použity pro klasifikaci) nejsou pro předpovídání dalšího slova potřeba. Připojíme se ke všem vzorkům a rezervujeme například 10% z celkového počtu pro ověření modelu.

Není třeba udržovat celý model; stačí kodér, což je část, která se naučila jazyk (a ne ten, který generuje další slovo).

Zatím máme to, co se nazývá učení pod dohledem, bez nutnosti používat vzorky označené člověkem, protože je již obsahuje datový soubor. Model v našem případě se naučí, jak jsou filmové recenze psány, i když neví, zda jsou pozitivní nebo negativní.

3. Vytvořte specifický klasifikátor pro náš konkrétní úkol (k rozlišení pozitivních a negativních recenzí) a přeneste to, co se předchozí model naučil (tento model by platil také pro jakýkoli jiný klasifikátor založený na stejných datech).

Obrázek byl přenesen z fast.ai

V první fázi budeme trénovat pouze připojené vrstvy. Budeme pokračovat ve výcviku ve druhé fázi, ale bez rozepnutí celé sítě najednou, jako jsme to udělali pro klasifikaci obrazu; Nejprve uvolníme poslední vrstvy základní architektury a na chvíli to zaškolíme ... pak odemkneme několik dalších vrstev a zaškolíme další bit ... a tak dále, dokud to úplně nerozmrazíme a ještě jednou nevycvičíme.

Výsledný model po tomto bodě již bude schopen rozeznat, zda je hodnocení pozitivní nebo negativní :)

Závěr

Když pracujeme na problému strojového učení týkajícího se obrázků nebo textu, je vždy vhodné zvážit Transfer Learning pro inicializaci našich parametrů neuronové sítě.

Abychom vyřešili problémy orámované v těchto oborech, počítáme s mnoha předškolenými modely, které pro nás budou velmi užitečné; musíme si jen vybrat ten pravý:

  • Computer Vision: modely pro PyTorch, Keras
  • Zpracování přirozeného jazyka: Transformátory ([*] BERT, GPT-2,…), ULMFiT atd.
Ernie, Elmo a Bert

Transfer Learning je relativně nová technika, s prostorem pro zlepšení v předchozích oborech (nové modely se objevují každý týden) a v některých dalších je stále třeba prozkoumávat a využívat. Pokud pracujete s neuronovými sítěmi, určitě je to téma, které musíte pečlivě sledovat a stojí za to prozkoumat :)

PS- Podívejte se na tyto notebooky Python, kde najdete plné příklady použití fastai: Klasifikace obrázků + klasifikace revizí IMDB.

Doufám, že se vám to líbilo! Přihlaste se k odběru #yottabytů, takže vám nebudou chybět články jako je tento :)