Co to jest uczenie głębokie? Algorytmy naśladujące ludzki mózg

Definicja uczenia głębokiego

Głębokie uczenie się to forma uczenia maszynowego, która modeluje wzorce danych jako złożone, wielowarstwowe sieci. Ponieważ uczenie głębokie jest najbardziej ogólnym sposobem modelowania problemu, ma potencjał rozwiązywania trudnych problemów - takich jak widzenie komputerowe i przetwarzanie języka naturalnego - które przewyższają zarówno konwencjonalne programowanie, jak i inne techniki uczenia maszynowego.

Głębokie uczenie się nie tylko może przynieść użyteczne wyniki tam, gdzie inne metody zawodzą, ale także może stworzyć dokładniejsze modele niż inne metody i może skrócić czas potrzebny na zbudowanie użytecznego modelu. Jednak szkolenie modeli uczenia głębokiego wymaga dużej mocy obliczeniowej. Inną wadą uczenia głębokiego jest trudność w interpretacji modeli uczenia głębokiego. 

Cechą charakterystyczną uczenia głębokiego jest to, że trenowany model ma więcej niż jedną ukrytą warstwę między danymi wejściowymi a wyjściowymi. W większości dyskusji głębokie uczenie się oznacza używanie głębokich sieci neuronowych. Istnieje jednak kilka algorytmów, które wdrażają głębokie uczenie się przy użyciu innych rodzajów warstw ukrytych poza sieciami neuronowymi.

Uczenie głębokie a uczenie maszynowe

Wspomniałem, że deep learning to forma uczenia maszynowego. Niegłębokie uczenie maszynowe będę odnosił się do klasycznego uczenia maszynowego , aby dostosować się do powszechnego użycia.

Ogólnie rzecz biorąc, klasyczne algorytmy uczenia maszynowego działają znacznie szybciej niż algorytmy głębokiego uczenia; jeden lub więcej procesorów często wystarcza do wytrenowania modelu klasycznego. Modele uczenia głębokiego często wymagają akceleratorów sprzętowych, takich jak GPU, TPU lub FPGA, do szkolenia, a także do wdrażania na dużą skalę. Bez nich trenowanie modeli zajęłoby miesiące.

W przypadku wielu problemów niektóre klasyczne algorytmy uczenia maszynowego stworzą „wystarczająco dobry” model. W przypadku innych problemów klasyczne algorytmy uczenia maszynowego nie działały w przeszłości zbyt dobrze.

Aplikacje do głębokiego uczenia

Istnieje wiele przykładów problemów, które obecnie wymagają głębokiego uczenia się, aby stworzyć najlepsze modele. Przetwarzanie języka naturalnego (NLP) jest dobre.

Jesienią 2016 r. Jakość pracy Tłumacza Google dla par językowych angielski-francuski, angielsko-chiński i angielsko-japoński nagle się poprawiła, od tworzenia sałatek słownych po tworzenie zdań zbliżonych do jakości profesjonalnego tłumaczenia wykonywanego przez człowieka. To, co wydarzyło się za kulisami, to fakt, że zespoły Google Brain i Google Translate zmodernizowały Tłumacza Google z używania starych algorytmów tłumaczenia maszynowego opartych na frazach (jeden z rodzajów klasycznego uczenia maszynowego) do korzystania z głębokiej sieci neuronowej wyszkolonej z osadzaniem słów przy użyciu platformy Google TensorFlow .

To nie był łatwy projekt. Wielu badaczy na poziomie doktorantów zajęło miesiące pracy nad modelami i tysiące tygodni GPU na wytrenowanie modeli. To również zachęciło Google do stworzenia nowego rodzaju chipa, jednostki przetwarzania tensorowego (TPU), do obsługi sieci neuronowych na dużą skalę dla Tłumacza Google.

Oprócz problemu tłumaczenia językowego, którym zajmuje się Tłumacz Google, główne zadania NLP obejmują automatyczne podsumowywanie, rozwiązywanie współodniesień, analizę dyskursu, segmentację morfologiczną, rozpoznawanie nazwanych jednostek, generowanie języka naturalnego, rozumienie języka naturalnego, tagowanie części mowy, sentyment analiza i rozpoznawanie mowy.

Innym dobrym przykładem zastosowania uczenia głębokiego jest klasyfikacja obrazów. Ponieważ organizmy żywe przetwarzają obrazy za pomocą kory wzrokowej, wielu badaczy przyjęło architekturę kory wzrokowej ssaków jako model dla sieci neuronowych zaprojektowanych do rozpoznawania obrazu. Badania biologiczne sięgają lat pięćdziesiątych XX wieku.

Przełomem w polu widzenia sieci neuronowych była LeNet-5 firmy Yann LeCun z 1998 roku, siedmiopoziomowa konwolucyjna sieć neuronowa (CNN) do rozpoznawania odręcznych cyfr zdigitalizowanych w obrazach 32x32 piksele. Aby przeanalizować obrazy w wyższej rozdzielczości, sieć LeNet-5 musiałaby zostać rozszerzona na więcej neuronów i więcej warstw.

Dzisiejsze najlepsze modele klasyfikacji głębokiego obrazu mogą identyfikować różnorodne katalogi obiektów w rozdzielczości HD w kolorze. Oprócz czystych głębokich sieci neuronowych (DNN) czasami ludzie używają hybrydowych modeli wizyjnych, które łączą głębokie uczenie z klasycznymi algorytmami uczenia maszynowego, które wykonują określone podzadania.

Inne problemy ze wzrokiem, poza podstawową klasyfikacją obrazu, które zostały rozwiązane za pomocą głębokiego uczenia, obejmują klasyfikację obrazu z lokalizacją, wykrywaniem obiektów, segmentacją obiektów, przenoszeniem stylu obrazu, koloryzacją obrazu, rekonstrukcją obrazu, super-rozdzielczością i syntezą obrazu.

Klasyfikację obrazu można rozszerzyć o klasyfikację wideo, wyodrębniając poszczególne klatki z wideo i klasyfikując każdą klatkę. Wykryte obiekty w klipach wideo można śledzić od klatki do klatki.

Według Goodfellow, Bengio i Courville, piszących w 2016 r., Głębokie uczenie się zostało z powodzeniem wykorzystane do przewidywania interakcji cząsteczek, aby pomóc firmom farmaceutycznym w projektowaniu nowych leków, wyszukiwaniu cząstek subatomowych i automatycznej analizie obrazów mikroskopowych używanych do konstruowania trójwymiarowa mapa ludzkiego mózgu.

Sieci neuronowe uczenia głębokiego

Pomysły na „sztuczne” sieci neuronowe sięgają lat czterdziestych XX wieku. Podstawową koncepcją jest to, że sieć sztucznych neuronów zbudowanych z połączonych ze sobą przełączników progowych może nauczyć się rozpoznawać wzorce w taki sam sposób, jak mózg zwierzęcia i układ nerwowy (w tym siatkówka).

Propagacja wsteczna

Uczenie się w głębokich sieciach neuronowych odbywa się poprzez wzmocnienie połączenia między dwoma neuronami, gdy oba są jednocześnie aktywne podczas treningu. We współczesnym oprogramowaniu sieci neuronowych najczęściej jest to kwestia zwiększenia wartości wagi połączeń między neuronami za pomocą reguły zwanej wsteczną propagacją błędu , wsteczną propagacją lub BP.

Neurony

Jak modelowane są neurony? Każdy z nich ma funkcję propagacji, która przekształca dane wyjściowe połączonych neuronów, często z sumą ważoną. Wyjście funkcji propagacji przechodzi do funkcji aktywującej, która jest uruchamiana, gdy jej wejście przekracza wartość progową.

Funkcje aktywacji

W latach czterdziestych i pięćdziesiątych XX wieku sztuczne neurony wykorzystywały funkcję aktywacji krokowej i nazywane były perceptronami . Nowoczesne sieci neuronowe mogą powiedzieć, że używają perceptronów, ale w rzeczywistości mają one funkcje płynnej aktywacji, takie jak funkcja logistyczna lub sigmoidalna, styczna hiperboliczna i rektyfikowana jednostka liniowa (ReLU). ReLU jest zwykle najlepszym wyborem dla szybkiej konwergencji, chociaż ma problem z „umieraniem” neuronów podczas treningu, jeśli szybkość uczenia się jest ustawiona zbyt wysoko.

Wyjście funkcji aktywacji może przejść do funkcji wyjściowej w celu dodatkowego ukształtowania. Często jednak funkcja wyjściowa jest funkcją tożsamości, co oznacza, że ​​sygnał wyjściowy funkcji aktywacji jest przekazywany do połączonych dalej neuronów.

Topologie sieci neuronowych

Teraz, gdy wiemy o neuronach, musimy poznać typowe topologie sieci neuronowych. W sieci ze sprzężeniem zwrotnym neurony są zorganizowane w odrębne warstwy: jedna warstwa wejściowa, dowolna liczba ukrytych warstw przetwarzania i jedna warstwa wyjściowa, a dane wyjściowe z każdej warstwy przechodzą tylko do następnej warstwy.

W sieci ze sprzężeniem zwrotnym z połączeniami skrótowymi niektóre połączenia mogą przeskakiwać przez jedną lub więcej warstw pośrednich. W powtarzających się sieciach neuronowych neurony mogą wpływać na siebie, bezpośrednio lub pośrednio, poprzez następną warstwę.

Trening

Uczenie nadzorowane sieci neuronowej odbywa się tak samo jak inne uczenie maszynowe. Przedstawiasz sieci grupy danych uczących, porównujesz wyjście sieciowe z żądanym wyjściem, generujesz wektor błędu i stosujesz poprawki do sieci na podstawie wektora błędu. Partie danych uczących, które są uruchamiane razem przed zastosowaniem poprawek, nazywane są epokami.

Dla zainteresowanych szczegółami, propagacja wsteczna wykorzystuje gradient funkcji błędu (lub kosztu) w odniesieniu do wag i odchyleń modelu, aby odkryć właściwy kierunek i zminimalizować błąd. Dwie rzeczy kontrolują stosowanie poprawek: algorytm optymalizacji i zmienna szybkości uczenia się, która zwykle musi być mała, aby zagwarantować zbieżność i uniknąć spowodowania martwych neuronów ReLU.

Optymalizatory

Optymalizatory dla sieci neuronowych zazwyczaj używają jakiejś formy algorytmu zstępowania gradientu do kierowania propagacją wsteczną, często z mechanizmem pomagającym uniknąć utknięcia w lokalnych minimach, takim jak optymalizacja losowo wybranych mini-partii (Stochastic Gradient Descent) i stosowanie korekcji pędu do gradientu . Niektóre algorytmy optymalizacji dostosowują również szybkość uczenia się parametrów modelu, patrząc na historię gradientu (AdaGrad, RMSProp i Adam).

Podobnie jak w przypadku wszystkich systemów uczących się, musisz porównać przewidywania sieci neuronowej z oddzielnym zestawem danych walidacyjnych. Bez tego ryzykujesz tworzenie sieci neuronowych, które tylko zapamiętują swoje dane wejściowe, zamiast uczyć się bycia uogólnionymi predyktorami.

Prawdziwe DNN

Głęboka sieć neuronowa dla prawdziwego problemu może mieć ponad 10 ukrytych warstw. Jego topologia może być prosta lub dość złożona.

Im więcej warstw w sieci, tym więcej cech może rozpoznać. Niestety, im więcej warstw w sieci, tym dłużej potrwa obliczenia i trudniej będzie trenować.

Algorytmy głębokiego uczenia

Jak wspomniałem wcześniej, większość uczenia głębokiego odbywa się za pomocą głębokich sieci neuronowych. Konwolucyjne sieci neuronowe (CNN) są często używane do widzenia maszynowego. Rekurencyjne sieci neuronowe (RNN) są często używane do przetwarzania języka naturalnego i innych sekwencji, podobnie jak sieci pamięci długoterminowej (LSTM) i sieci neuronowe oparte na uwadze. Lasy losowe, nazywane również lasami losowych decyzji, które nie są sieciami neuronowymi, są przydatne w przypadku szeregu problemów związanych z klasyfikacją i regresją.

Sieci neuronowe CNN

Konwolucyjne sieci neuronowe zazwyczaj wykorzystują warstwy konwolucyjne, pulowanie, ReLU, w pełni połączone i stratne do symulacji kory wzrokowej. Warstwa splotowa zasadniczo przyjmuje całki wielu małych, nakładających się obszarów. Warstwa puli działa w postaci nieliniowego próbkowania w dół. Warstwy ReLU stosują nienasycającą funkcję aktywacji f(x) = max(0,x). W warstwie w pełni połączonej neurony mają połączenia ze wszystkimi aktywacjami w warstwie poprzedniej. Warstwa strat oblicza, w jaki sposób uczenie sieci penalizuje odchylenie między etykietami przewidywanymi i prawdziwymi, używając funkcji straty Softmax lub cross-entropii do klasyfikacji lub funkcji straty euklidesowej do regresji.

RNN, LSTM i sieci neuronowe oparte na uwadze

W sieciach neuronowych ze sprzężeniem zwrotnym informacje przepływają od wejścia, przez warstwy ukryte, do wyjścia. Ogranicza to sieć do obsługi pojedynczego stanu naraz.

W powtarzających się sieciach neuronowych informacje przechodzą cyklicznie przez pętlę, która umożliwia sieci zapamiętanie ostatnich poprzednich wyników. Pozwala to na analizę sekwencji i szeregów czasowych. RNN mają dwa typowe problemy: eksplodujące gradienty (łatwe do naprawienia przez zaciskanie gradientów) i znikające gradienty (nie tak łatwe do naprawienia).

W LSTM sieć jest w stanie zapomnieć (bramkować) lub zapamiętać poprzednie informacje, w obu przypadkach poprzez zmianę wagi. To skutecznie zapewnia LSTM zarówno pamięć długoterminową, jak i krótkotrwałą i rozwiązuje problem znikającego gradientu. LSTM radzą sobie z sekwencjami setek przeszłych danych wejściowych.

Moduły uwagi to uogólnione bramki, które stosują wagi do wektora danych wejściowych. Hierarchiczny koder uwagi neuronowej wykorzystuje wiele warstw modułów uwagi, aby radzić sobie z dziesiątkami tysięcy wcześniejszych danych wejściowych.

Losowe lasy

Innym rodzajem algorytmu uczenia głębokiego - a nie głęboką siecią neuronową - jest Random Forest lub Random Decision Forest. Random Forest jest zbudowany z wielu warstw, ale zamiast neuronów jest zbudowany z drzew decyzyjnych i generuje średnią statystyczną (tryb klasyfikacji lub średnią dla regresji) prognoz poszczególnych drzew. Randomizowane aspekty Random Forests to wykorzystanie agregacji bootstrap (znanej również jako pakowanie ) dla poszczególnych drzew i wybieranie losowych podzbiorów cech.

Struktury głębokiego uczenia

Chociaż można pisać programy do uczenia głębokiego na podstawie pierwszych zasad, znacznie wydajniejsze jest korzystanie z platform uczenia głębokiego, zwłaszcza biorąc pod uwagę, że zostały one zoptymalizowane do użytku z procesorami graficznymi i innymi akceleratorami. Najważniejszym frameworkiem jest TensorFlow, który powstał w Google. Preferowanym interfejsem API wysokiego poziomu dla TensorFlow jest Keras, którego można również używać z innymi frameworkami zaplecza.

PyTorch, z Facebooka i innych, jest silną alternatywą dla TensorFlow i wyróżnia się obsługą dynamicznych sieci neuronowych, w których topologia sieci może zmieniać się z epoki na epokę. Fastai to zewnętrzny interfejs API wysokiego poziomu, który wykorzystuje PyTorch jako zaplecze.

MXNet firmy Amazon i innych to kolejna silna alternatywa dla TensorFlow, która zapewnia lepszą skalowalność. Gluon jest preferowanym, imperatywnym API wysokiego poziomu dla MXNet.

Chainer, z IBM, Intel i innych, był w pewnym sensie inspiracją dla PyTorch, biorąc pod uwagę, że definiuje on sieć neuronową przez uruchomienie i obsługuje dynamiczne sieci neuronowe.

Podczas gdy wszystkie wymienione powyżej frameworki to głównie Python, Deeplearning4j (DL4J), pierwotnie ze Skymind, a teraz projekt Apache, to głównie Java i Scala. DL4J jest kompatybilny z Apache Spark i Hadoop.

ONNX został pierwotnie zaproponowany jako otwarty ekosystem dla wymiennych modeli AI. ONNX ma teraz oprócz formatu pliku wymiany środowisko uruchomieniowe.