Какво е дълбоко обучение? Алгоритми, които имитират човешкия мозък

Определено дълбоко обучение

Дълбокото обучение е форма на машинно обучение, която моделира модели в данните като сложни, многопластови мрежи. Тъй като дълбокото обучение е най-общият начин за моделиране на проблем, той има потенциала да реши трудни проблеми - като компютърно зрение и обработка на естествен език, които надминават както конвенционалното програмиране, така и другите техники за машинно обучение.

Дълбокото обучение не само може да доведе до полезни резултати, когато други методи се провалят, но също така може да изгради по-точни модели от другите методи и може да намали времето, необходимо за изграждането на полезен модел. Обучението на модели за задълбочено обучение обаче изисква голяма изчислителна мощ. Друг недостатък на дълбокото обучение е трудността да се интерпретират дълбоките модели на обучение. 

Определящата характеристика на дълбокото обучение е, че обученият модел има повече от един скрит слой между входа и изхода. В повечето дискусии дълбокото обучение означава използване на дълбоки невронни мрежи. Има обаче няколко алгоритми, които прилагат задълбочено обучение, използвайки други видове скрити слоеве освен невронни мрежи.

Дълбоко обучение срещу машинно обучение

Споменах, че дълбокото обучение е форма на машинно обучение. Ще посоча недълбокото машинно обучение като класическо машинно обучение , за да се приспособим към обичайната употреба.

По принцип класическите алгоритми за машинно обучение работят много по-бързо от алгоритмите за дълбоко обучение; един или повече процесори често са достатъчни за обучение на класически модел. Моделите за дълбоко обучение често се нуждаят от хардуерни ускорители като графични процесори, TPU или FPGA за обучение, а също и за мащабно внедряване. Без тях моделите ще отнемат месеци, за да се обучат.

За много проблеми някои класически алгоритми за машинно обучение ще създадат модел „достатъчно добър“. По отношение на други проблеми класическите алгоритми за машинно обучение не са работили ужасно добре в миналото.

Приложения за дълбоко обучение

Има много примери за проблеми, които в момента изискват задълбочено обучение, за да се получат най-добрите модели. Обработката на естествен език (NLP) е добра.

През есента на 2016 г. качеството на изхода на Google Translate за английски-френски, английско-китайски и английско-японски езикови двойки внезапно се подобри драстично, от създаване на салата от думи до изречения, близки до качеството на професионален превод от човек. Това, което се случи зад кулисите, е, че екипите на Google Brain и Google Translate преработиха Google Translate от използването на старите базирани на фрази алгоритми за статистически машинен превод (един вид класическо машинно обучение) до използване на дълбока невронна мрежа, обучена с вграждане на думи, използвайки рамката на TensorFlow на Google .

Това не беше лесен проект. На много изследователи на докторско ниво бяха необходими месеци работа върху модели и хиляди GPU-седмици за обучение на моделите. Той също така подтикна Google да създаде нов вид чип, Tensor Processing Unit (TPU), който да управлява невронни мрежи в мащаб за Google Translate.

В допълнение към проблема с езиковия превод, адресиран от Google Translate, основните задачи на НЛП включват автоматично обобщение, разрешаване на съвместни препратки, анализ на дискурса, морфологична сегментация, разпознаване на име на обект, генериране на естествен език, разбиране на естествен език, маркиране на част от речта, настроение анализ и разпознаване на речта.

Друг добър пример за приложението на дълбокото обучение е класификацията на изображенията. Тъй като живите организми обработват изображения с визуалната си кора, много изследователи са взели архитектурата на зрителната кора на бозайниците като модел за невронни мрежи, предназначени да извършват разпознаване на изображения. Биологичните изследвания датират от 50-те години на миналия век.

Пробивът в зрителното поле на невронната мрежа беше LeNet-5 на Yann LeCun от 1998 г., седемстепенна конволюционна невронна мрежа (CNN) за разпознаване на ръчно написани цифри, дигитализирани в изображения с размери 32x32 пиксела. За да се анализират изображения с по-висока разделителна способност, мрежата LeNet-5 ще трябва да бъде разширена до повече неврони и повече слоеве.

Днешните най-добри модели за класификация на дълбоки изображения могат да идентифицират разнообразни каталози на обекти с HD резолюция в цвят. В допълнение към чистите дълбоки невронни мрежи (DNN), понякога хората използват хибридни зрителни модели, които комбинират дълбоко обучение с класически алгоритми за машинно обучение, които изпълняват специфични подзадачи.

Други проблеми със зрението освен основната класификация на изображенията, които са решени с дълбоко обучение, включват класификация на изображения с локализация, откриване на обекти, сегментиране на обекти, прехвърляне на стил на изображението, оцветяване на изображението, реконструкция на изображението, супер-резолюция на изображението и синтез на изображението.

Класификацията на изображенията може да бъде разширена до класификация на видеоклипове чрез извличане на отделни кадри от видеоклип и класифициране на всеки кадър. Откритите обекти във видеоклиповете могат да бъдат проследявани от кадър на кадър.

Според Goodfellow, Bengio и Courville, писали през 2016 г., дълбокото обучение се използва успешно, за да се предскаже как молекулите ще взаимодействат, за да помогнат на фармацевтичните компании да проектират нови лекарства, да търсят субатомни частици и да анализират автоматично микроскопски изображения, използвани за изграждане триизмерна карта на човешкия мозък.

Дълбоко изучаване на невронни мрежи

Идеите за „изкуствени“ невронни мрежи датират от 40-те години на миналия век. Основната концепция е, че мрежа от изкуствени неврони, изградени от взаимосвързани прагови превключватели, могат да се научат да разпознават модели по същия начин, по който го правят животинският мозък и нервната система (включително ретината).

Обратно размножаване

Обучението в дълбоки невронни мрежи става чрез засилване на връзката между два неврона, когато и двата са активни едновременно по време на обучението. В съвременния софтуер за невронни мрежи това най-често е въпрос на увеличаване на стойностите на теглото за връзките между невроните, като се използва правило, наречено обратно размножаване на грешка , обратна връзка или BP.

Неврони

Как се моделират невроните? Всеки има функция за разпространение, която трансформира изходите на свързаните неврони, често с претеглена сума. Изходът на функцията за разпространение преминава към функция за активиране, която се задейства, когато нейният вход надвиши прагова стойност.

Функции за активиране

През 40-те и 50-те години изкуствените неврони са използвали функция на стъпково активиране и са били наричани персептрони . Съвременните невронни мрежи могат да кажат, че използват персептрони, но всъщност имат гладки активиращи функции, като логистичната или сигмоидната функция, хиперболичната тангента и Ректифицираната линейна единица (ReLU). ReLU обикновено е най-добрият избор за бързо сближаване, въпреки че има проблем с невроните, които „умират“ по време на обучение, ако скоростта на обучение е твърде висока.

Изходът на активиращата функция може да премине към изходна функция за допълнително оформяне. Често обаче изходната функция е функцията за идентичност, което означава, че изходът на активиращата функция се предава на свързаните надолу по веригата неврони.

Топологии на невронната мрежа

След като вече знаем за невроните, трябва да научим за общите топологии на невронната мрежа. В мрежата за обратна връзка невроните са организирани в отделни слоеве: един входен слой, произволен брой скрити обработващи слоеве и един изходен слой, а изходите от всеки слой преминават само към следващия слой.

В мрежа за пренасочване на връзки с връзки за бърз достъп някои връзки могат да прескачат един или повече междинни слоеве. При повтарящи се невронни мрежи невроните могат да влияят върху себе си, пряко или косвено чрез следващия слой.

Обучение

Контролираното обучение на невронна мрежа се извършва точно както всяко друго машинно обучение. Представяте мрежата с групи данни за обучение, сравнявате изхода на мрежата с желания изход, генерирате вектор на грешка и прилагате корекции към мрежата въз основа на вектора на грешката. Пакетите от данни за обучение, които се изпълняват заедно преди прилагане на корекции, се наричат ​​епохи.

За тези, които се интересуват от подробностите, обратното размножаване използва градиента на функцията за грешка (или цена) по отношение на теглата и отклоненията на модела, за да открие правилната посока, за да минимизира грешката. Две неща контролират прилагането на корекции: алгоритъмът за оптимизация и променливата на скоростта на обучение, която обикновено трябва да е малка, за да гарантира конвергенция и да избегне причиняването на мъртви ReLU неврони.

Оптимизатори

Оптимизаторите за невронни мрежи обикновено използват някаква форма на алгоритъм за градиентно спускане, за да задвижат обратното разпространение, често с механизъм, който помага да се избегне засядането в локални минимуми, като например оптимизиране на произволно избрани минипартиди (стохастично градиентно спускане) и прилагане на корекции на инерцията към градиента . Някои алгоритми за оптимизация също адаптират скоростта на обучение на параметрите на модела, като разглеждат историята на градиента (AdaGrad, RMSProp и Adam).

Както при всяко машинно обучение, трябва да проверите прогнозите на невронната мрежа спрямо отделен набор от данни за проверка. Без да правите това, рискувате да създадете невронни мрежи, които само запомнят техните входове, вместо да се научите да бъдат генерализирани предиктори.

Реални DNN

Дълбоката невронна мрежа за реален проблем може да има над 10 скрити слоя. Топологията му може да е проста или доста сложна.

Колкото повече слоеве в мрежата, толкова повече характеристики тя може да разпознае. За съжаление, колкото повече слоеве в мрежата, толкова по-дълго ще отнеме изчисляването и толкова по-трудно ще бъде обучението.

Алгоритми за дълбоко обучение

Както споменах по-рано, най-дълбокото обучение се извършва с дълбоки невронни мрежи. Конволюционните невронни мрежи (CNN) често се използват за машинно зрение. Повтарящите се невронни мрежи (RNN) често се използват за обработка на естествен език и други последователности, както и мрежите с дългосрочна краткосрочна памет (LSTM) и невронните мрежи, базирани на вниманието. Случайните гори, известни също като случайни гори за вземане на решения, които не са невронни мрежи, са полезни за редица проблеми с класификацията и регресията.

Невронни мрежи на CNN

Конволюционните невронни мрежи обикновено използват слоеве, обединяване, ReLU, напълно свързани и слоеве за загуба, за да симулират визуална кора. Конволюционният слой по същество взема интегралите на много малки припокриващи се области. Обединяващият слой изпълнява форма на нелинейно намаляване на пробите. ReLU слоевете прилагат ненасищащата функция за активиране f(x) = max(0,x). В напълно свързан слой невроните имат връзки с всички активирания в предишния слой. Загубеният слой изчислява как обучението в мрежата санкционира отклонението между предсказаните и истинските етикети, използвайки Softmax или функция за кръстосана ентропия за класификация или функция на Евклидова загуба за регресия.

RNN, LSTM и невронни мрежи, базирани на вниманието

В невронните мрежи с обратна връзка информацията тече от входа през скритите слоеве към изхода. Това ограничава мрежата да се справя с едно и също състояние в даден момент.

При повтарящи се невронни мрежи информацията циклира през цикъл, което позволява на мрежата да запомни последните предишни изходи. Това дава възможност за анализ на последователности и времеви редове. RNN имат два често срещани проблема: експлодиращи градиенти (лесно се фиксират чрез затягане на градиентите) и изчезващи градиенти (не е толкова лесно да се поправят).

В LSTM мрежите са в състояние да забравят (дават) предишната информация или да я запомнят, и в двата случая чрез промяна на тежестите. Това ефективно дава на LSTM както дългосрочна, така и краткосрочна памет и решава проблема с изчезващия градиент. LSTM могат да се справят с последователности от стотици минали входове.

Модулите за внимание са обобщени порти, които прилагат тежести към вектор на входовете. Йерархичен кодер на невронно внимание използва множество слоеве модули за внимание, за да се справи с десетки хиляди минали входове.

Случайни гори

Друг вид алгоритъм за дълбоко обучение - а не дълбока невронна мрежа - е случайната гора или гората за случайни решения. Случайна гора се изгражда от много слоеве, но вместо от неврони се изгражда от дървета за вземане на решения и извежда статистическа средна стойност (режим за класификация или средно за регресия) на прогнозите на отделните дървета. Рандомизираните аспекти на случайните гори са използването на агрегиране на bootstrap (известен още като пакетиране ) за отделни дървета и вземане на произволни подмножества от характеристиките.

Дълбоки рамки за обучение

Въпреки че можете да пишете програми за задълбочено обучение от първите принципи, е много по-ефективно да използвате рамки за дълбоко обучение, особено като се има предвид, че те са оптимизирани за използване с графични процесори и други ускорители. Превъзходната рамка е TensorFlow, която произхожда от Google. Привилегированият API на високо ниво за TensorFlow е Keras, който може да се използва и с други фреймворкове.

PyTorch, от Facebook и други, е силна алтернатива на TensorFlow и има отличието да поддържа динамични невронни мрежи, при които топологията на мрежата може да се променя от епоха на епоха. Fastai е API на трето лице на високо ниво, който използва PyTorch като back-end.

MXNet, от Amazon и други, е друга силна алтернатива на TensorFlow, с претенция за по-добра мащабируемост. Gluon е предпочитаният императивен API на високо ниво за MXNet.

Chainer, от IBM, Intel и други, беше по някакъв начин вдъхновение за PyTorch, като се има предвид, че той определя невронната мрежа чрез изпълнение и поддържа динамични невронни мрежи.

Въпреки че всички споменати по-горе рамки са предимно Python, Deeplearning4j (DL4J), първоначално от Skymind и сега проект на Apache, е предимно Java и Scala. DL4J е съвместим с Apache Spark и Hadoop.

ONNX първоначално беше предложен като отворена екосистема за взаимозаменяеми AI модели. ONNX вече има време за изпълнение в допълнение към формата за обмен на файлове.