Поглиблене вивчення нейронних мереж, що пояснюється простою англійською мовою

Машинне навчання, і особливо глибоке навчання - це дві технології, які змінюють світ.

Після довгої "зими штучного інтелекту", яка тривала 30 років, обчислювальні потужності та набори даних нарешті наздогнали алгоритми штучного інтелекту, запропоновані протягом другої половини ХХ століття.

Це означає, що моделі глибокого навчання нарешті використовуються для складання ефективних прогнозів, які вирішують реальні проблеми.

Як завжди, для вчених з даних та інженерів програмного забезпечення важливо розуміти на високому рівні, як працюють моделі глибокого навчання. Ця стаття пояснить історію та основні концепції нейронних мереж глибокого навчання простою англійською мовою.

Історія глибокого навчання

Поглиблене навчання було осмислено Джеффрі Хінтоном у 1980-х. Його широко вважають батьком-засновником галузі глибокого навчання. Хінтон працював у Google з березня 2013 року, коли була придбана його компанія DNNresearch Inc.

Головним внеском Хінтона у сферу глибокого навчання було порівняння методів машинного навчання з людським мозку.

Більш конкретно, він створив концепцію "нейронної мережі", яка є алгоритмом глибокого навчання, структурованим подібним до організації нейронів мозку. Хінтон застосував такий підхід, оскільки людський мозок, мабуть, найпотужніший обчислювальний двигун, відомий сьогодні.

Структуру, яку створив Хінтон, називали штучною нейронною мережею (або коротше штучною нейронною мережею). Ось короткий опис того, як вони функціонують:

  • Штучні нейронні мережі складаються з шарів вузла
  • Кожен вузол призначений для поведінки подібно до нейрона в мозку
  • Перший шар нейронної мережі називається inputшаром, за ним слідують hiddenшари, потім, нарешті, outputшар
  • Кожен вузол нейронної мережі виконує якийсь розрахунок, який передається іншим вузлам глибше нейронної мережі

Ось спрощена візуалізація, щоб продемонструвати, як це працює:

Візуалізація штучної нейронної мережі

Нейронні мережі представляли величезний крок вперед у галузі глибокого навчання.

Однак знадобилися десятиліття, щоб машинне навчання (і особливо глибоке навчання) набуло популярності.

Чому ми розберемось у наступному розділі.

Чому глибоке навчання не зразу спрацювало

Якщо глибоке навчання спочатку було задумано десятки років тому, чому воно сьогодні лише набирає обертів?

Це тому, що будь-яка зріла модель глибокого навчання вимагає великої кількості двох ресурсів:

  • Дані
  • Обчислювальна потужність

На момент концептуального народження глибокого навчання дослідники не мали доступу ні до даних, ні до обчислювальних потужностей для побудови та навчання значущих моделей глибокого навчання. Це з часом змінилося, що призвело до того, що сьогодні глибоке навчання стало помітним.

Розуміння нейронів у глибокому навчанні

Нейрони є найважливішим компонентом будь-якої моделі глибокого навчання.

Насправді, можна стверджувати, що ви не можете повністю зрозуміти глибоке навчання, маючи глибокі знання про те, як працюють нейрони.

Цей розділ познайомить вас із поняттям нейронів у процесі глибокого навчання. Ми поговоримо про походження нейронів глибокого навчання, про те, як їх надихнула біологія людського мозку, і чому нейрони так важливі в моделях глибокого навчання сьогодні.

Що таке нейрон в біології?

Нейрони в процесі глибокого навчання були натхнені нейронами людського мозку. Ось схема анатомії нейрона мозку:

Анатомія нейрона в мозку

Як бачите, нейрони мають досить цікаву будову. Групи нейронів працюють разом у мозку людини, виконуючи функціональність, яка нам потрібна у нашому повсякденному житті.

Питання, яке Джеффрі Хінтон задав під час своїх основних досліджень у нейронних мережах, полягало в тому, чи зможемо ми побудувати комп’ютерні алгоритми, які ведуть себе подібно до нейронів мозку. Надія була на те, що імітуючи структуру мозку, ми можемо охопити деякі його можливості.

Для цього дослідники вивчали поведінку нейронів у мозку. Одним із важливих спостережень було те, що нейрон сам по собі марний. Натомість вам потрібні мережі нейронів для створення будь-якої значущої функціональності.

Це пов’язано з тим, що нейрони функціонують, приймаючи та надсилаючи сигнали. Більш конкретно, нейрон dendritesприймає сигнали і проходить по них через axon.

dendritesОдного нейрона з'єднані з axonіншим нейроном. Ці зв’язки називаються synapses, що є поняттям, яке було узагальнено в галузі глибокого навчання.

Що таке нейрон у глибокому навчанні?

Нейрони в моделях глибокого навчання - це вузли, через які протікають дані та обчислення.

Нейрони працюють так:

  • Вони приймають один або кілька вхідних сигналів. Ці вхідні сигнали можуть надходити або з необроблених наборів даних, або з нейронів, розташованих на попередньому шарі нейронної мережі.
  • Вони проводять деякі обчислення.
  • Вони посилають деякі вихідні сигнали нейронам глибше в нейронну мережу через synapse.

Ось схема функціональності нейрона в нейронній мережі глибокого навчання:

Функція нейрона в моделі глибокого навчання

Давайте пройдемося по цій схемі поетапно.

Як бачимо, нейрони в моделі глибокого навчання здатні мати синапси, які з'єднуються з кількома нейронами попереднього шару. Кожен синапс має пов'язаний weight, що впливає на важливість попереднього нейрона в загальній нейронній мережі.

Ваги є дуже важливою темою в галузі глибокого навчання, оскільки коригування ваги моделі є основним способом навчання моделей глибокого навчання. Це ви побачите на практиці пізніше, коли ми будуватимемо свої перші нейронні мережі з нуля.

Як тільки нейрон отримує вхідні дані від нейронів у попередньому шарі моделі, він складає кожен сигнал, помножений на відповідну вагу, і передає їх у функцію активації, наприклад:

Функція активації нейрона

Функція активації обчислює вихідне значення для нейрона. Потім це вихідне значення передається наступному шару нейронної мережі через інший синапс.

Це служить широким оглядом нейронів глибокого навчання. Не хвилюйтеся, якщо його потрібно було багато взяти - ми дізнаємося набагато більше про нейрони в решті цього уроку. Наразі вам достатньо глибоко зрозуміти, як вони структуровані в моделі глибокого навчання.

Функції активації глибокого навчання

Функції активації - це основне поняття, яке слід зрозуміти під час глибокого навчання.

Саме вони дозволяють нейронам нейронної мережі спілкуватися між собою через свої синапси.

У цьому розділі ви навчитеся розуміти важливість та функціональність функцій активації в процесі глибокого навчання.

Які функції активації в глибокому навчанні?

В останньому розділі ми дізналися, що нейрони отримують вхідні сигнали від попереднього шару нейронної мережі. Зважена сума цих сигналів надходить у функцію активації нейрона, потім вихід функції активації передається на наступний шар мережі.

Є чотири основні типи функцій активації, про які ми поговоримо у цьому посібнику:

  • Порогові функції
  • Сигмоподібні функції
  • Функції випрямляча або ReLU
  • Гіперболічні дотичні функції

Давайте розглянемо ці функції активації по черзі.

Порогові функції

Порогові функції обчислюють різний вихідний сигнал залежно від того, чи знаходиться його вхід вище або нижче певного порогу. Пам’ятайте, що вхідне значення для функції активації - це зважена сума вхідних значень із попереднього шару нейронної мережі.

Математично кажучи, ось офіційне визначення функції порогового глибокого навчання:

Порогові функції

Як показано на зображенні вище, порогову функцію іноді також називають a unit step function.

Порогові функції подібні до булевих змінних в комп'ютерному програмуванні. Їх обчислене значення або 1(подібне до True), або 0(еквівалентне False).

Сигмоїдна функція

Сигмоїдна функція добре відома серед спільноти науковців даних завдяки її використанню в логістичній регресії, одній із основних технік машинного навчання, що використовується для вирішення проблем класифікації.

Сигмоїдна функція може приймати будь-яке значення, але завжди обчислює значення між 0і 1.

Ось математичне визначення сигмоїдної функції:

Сигмоподібні функції

Однією перевагою сигмоїдної функції над пороговою є те, що її крива є плавною. Це означає, що можна обчислити похідні в будь-якій точці кривої.

Функція випрямляча

Функція випрямляча не має такої ж властивості плавності, як сигмовидна функція з останнього розділу. Однак він все ще користується великою популярністю у галузі глибокого навчання.

Функція випрямляча визначається наступним чином:

  • Якщо вхідне значення менше 0, тоді функція виводить0
  • Якщо ні, функція виводить своє вхідне значення

Ось ця концепція пояснюється математично:

Функції випрямляча

Функції випрямляча часто називають Rectified Linear Unitфункціями активації, або ReLUsскорочено.

Гіперболічна дотична функція

Функція гіперболічної дотичної є єдиною функцією активації, включеною до цього посібника, яка базується на тригонометричній ідентичності.

Це математичне визначення наведено нижче:

Гіперболічна дотична функція

Функція гіперболічної дотичної за зовнішнім виглядом подібна до сигмовидної функції, але всі її вихідні значення зміщені вниз.

Як насправді працюють нейронні мережі?

Наразі в цьому підручнику ми обговорили два будівельних блоки для побудови нейронних мереж:

  • Нейрони
  • Функції активації

Однак ви, мабуть, все ще трохи заплутані щодо того, як нейронні мережі насправді працюють.

У цьому підручнику будуть зібрані частини, про які ми вже говорили, щоб Ви могли зрозуміти, як нейронні мережі працюють на практиці.

Приклад, який ми використаємо у цьому посібнику

Цей підручник буде працювати на реальному прикладі покроково, щоб ви могли зрозуміти, як нейронні мережі роблять прогнози.

Більш конкретно, ми матимемо справу з оцінкою майна.

Ви , напевно , вже знаєте , що є тонна факторів , які впливають ціни на житло, в тому числі економіки, процентні ставки, його кількість спалень / ванних кімнат, і його розташування.

Висока розмірність цього набору даних робить його цікавим кандидатом для побудови та навчання нейронної мережі.

Одне застереження щодо цього розділу - нейронна мережа, яку ми будемо використовувати для прогнозування , вже навчена . Ми вивчимо процес навчання нової нейронної мережі в наступному розділі цього посібника.

Параметри в нашому наборі даних

Почнемо з обговорення параметрів у наборі даних. Більш конкретно, уявімо, що набір даних містить такі параметри:

  • Площа
  • Спальні
  • Відстань до центру міста
  • Домашній вік

Ці чотири параметри будуть формувати вхідний шар штучної нейронної мережі. Зауважте, що насправді існує набагато більше параметрів, які ви могли б використати для навчання нейронної мережі для прогнозування цін на житло. Ми обмежили це число чотирма, щоб приклад був досить простим.

Найосновніша форма нейронної мережі

У своїй найосновнішій формі нейронна мережа має лише два шари - вхідний і вихідний. Вихідний рівень - це компонент нейронної мережі, який насправді робить прогнози.

Наприклад, якщо ви хочете робити прогнози за допомогою простої зваженої суми (також званої лінійною регресією), ваша нейронна мережа матиме такий вигляд:

Основна нейронна мережа

Хоча ця схема трохи абстрактна, справа в тому, що більшість нейронних мереж можна візуалізувати таким чином:

  • Вхідний рівень
  • Можливо, якісь приховані шари
  • Вихідний рівень

Саме прихований шар нейронів змушує нейронні мережі бути настільки потужними для обчислення прогнозів.

Для кожного нейрона в прихованому шарі він виконує обчислення, використовуючи деякі (або всі) нейрони останнього шару нейронної мережі. Потім ці значення використовуються в наступному шарі нейронної мережі.

Призначення нейронів у прихованому шарі нейронної мережі

Ви, напевно , цікаво - що саме робить кожен нейрон в прихованому шарі середнього ? По-іншому сказано, як слід практикам машинного навчання трактувати ці цінності?

Взагалі кажучи, нейрони у середніх шарах нейронної мережі активуються (тобто їх функція активації повертається 1) для вхідного значення, яке задовольняє певним підвластивостям.

Для нашої моделі прогнозування ціни на житло, одним із прикладів можуть бути 5-кімнатні будинки з невеликими відстанями до центру міста.

У більшості інших випадків описати характеристики, які призвели б до активації нейрона в прихованому шарі, не так просто.

Як нейрони визначають свої вхідні значення

Раніше в цьому підручнику я писав: “Для кожного нейрона в прихованому шарі він виконує обчислення, використовуючи деякі (або всі) нейрони в останньому шарі нейронної мережі”.

Це ілюструє важливий момент - що кожен нейрон нейронної мережі не повинен використовувати кожен нейрон попереднього шару.

Процес, за допомогою якого нейрони визначають, які вхідні значення використовувати з попереднього шару нейронної мережі, називається навчанням моделі. Ми дізнаємось більше про тренування нейронних мереж у наступному розділі цього курсу.

Візуалізація процесу прогнозування нейронної мережі

Візуалізуючи нейтральну мережу, ми зазвичай проводимо лінії від попереднього шару до поточного шару, коли попередній нейрон має вагу вище 0у формулі зваженої суми для поточного нейрона.

Наступне зображення допоможе візуалізувати це:

Завершена нейронна мережа

Як бачите, не кожна пара нейрон-нейрон має синапс. x4як приклад, живить лише три з п’яти нейронів у прихованому шарі. Це ілюструє важливий момент при побудові нейронних мереж - що не кожен нейрон попереднього шару повинен використовуватися в наступному шарі нейронної мережі.

Як тренуються нейронні мережі

Наразі ви дізналися таке про нейронні мережі:

  • Те, що вони складаються з нейронів
  • Що кожен нейрон використовує функцію активації, застосовану до зваженої суми виходів з попереднього шару нейронної мережі
  • Широкий огляд без коду того, як нейронні мережі роблять прогнози

Ми ще не розглянули дуже важливу частину інженерного процесу нейронних мереж: як навчаються нейронні мережі.

Зараз ви дізнаєтесь, як навчаються нейронні мережі. Ми обговоримо набори даних, алгоритми та загальні принципи, що використовуються при навчанні сучасних нейронних мереж, що вирішують реальні проблеми.

Жорстке кодування проти м'якого кодування

Існує два основних способи розробки комп’ютерних програм. Перш ніж заглибитися в тому , як нейронні мережі навчаються, дуже важливо , щоб переконатися , що у вас є розуміння різниці між hard-codingі soft-codingкомп'ютерними програмами.

Жорстке кодування означає, що ви чітко вказуєте вхідні змінні та бажані вихідні змінні. Інакше сказано, жорстке кодування не залишає місця для комп’ютера для інтерпретації проблеми, яку ви намагаєтесь вирішити.

Софт-кодування - повна протилежність. Це залишає програмі можливість зрозуміти, що відбувається в наборі даних. М'яке кодування дозволяє комп'ютеру розробляти власні підходи до вирішення проблем.

Тут корисний конкретний приклад. Ось два приклади того, як ви можете ідентифікувати котів у наборі даних, використовуючи прийоми м'якого та жорсткого кодування.

  • Жорстке кодування: ви використовуєте конкретні параметри, щоб передбачити, чи є тварина котом. Більш конкретно, ви можете сказати, що якщо вага і довжина тварини лежать у певних межах
  • М'яке кодування: ви надаєте набір даних, що містить тварин, позначених типом їх виду та характеристиками цих тварин. Потім ви створюєте комп’ютерну програму, щоб передбачити, є тварина котом чи ні, виходячи з характеристик у наборі даних.

Як ви можете собі уявити, навчання нейронних мереж потрапляє в категорію програмного кодування. Майте це на увазі під час проходження цього курсу.

Навчання нейронної мережі за допомогою функції витрат

Нейронні мережі навчаються за допомогою a cost function, яке є рівнянням, що використовується для вимірювання помилки, яка міститься в прогнозуванні мережі.

Формула функції витрат на глибоке навчання (яких існує безліч - це лише один приклад) наведена нижче:

Рівняння функції витрат

Примітка: ця функція витрат називається mean squared error, тому в лівій частині знака рівності є MSE.

Незважаючи на те, що в цьому рівнянні достатньо математики формул, його найкраще узагальнити наступним чином:

Take the difference between the predicted output value of an observation and the actual output value of that observation. Square that difference and divide it by 2.

Ще раз наголосимо, що це лише один із прикладів функції витрат, яка може бути використана в машинному навчанні (хоча це, правда, найпопулярніший вибір). Вибір, яку функцію витрат використовувати, є складною та цікавою темою як такою, що виходить за рамки цього посібника.

Як вже згадувалося, метою штучної нейронної мережі є мінімізація значення функції витрат. Функція витрат мінімізована, коли передбачуване значення вашого алгоритму максимально наближене до фактичного значення. Інакше сказано, що мета нейронної мережі - мінімізувати помилки, які вона робить у своїх прогнозах!

Модифікація нейронної мережі

Після того, як створюється початкова нейронна мережа та імпутується її функція витрат, в нейронні мережі вносяться зміни, щоб побачити, чи зменшують вони значення функції витрат.

Більш конкретно, фактичним компонентом нейронної мережі, який модифікується, є ваги кожного нейрона в його синапсі, які передаються на наступний шар мережі.

Викликається механізм, за допомогою якого ваги модифікуються для переміщення нейронної мережі до ваг з меншою похибкою gradient descent. Наразі вам достатньо зрозуміти, що процес навчання нейронних мереж виглядає так:

  • Початкові ваги для вхідних значень кожного нейрона призначаються
  • Прогнози розраховуються з використанням цих початкових значень
  • Прогнози подаються у функцію витрат для вимірювання похибки нейронної мережі
  • Алгоритм градієнтного спуску змінює ваги для вхідних значень кожного нейрона
  • Цей процес продовжується до тих пір, поки ваги не перестануть змінюватися (або поки сума їх зміни на кожній ітерації не опуститься нижче заданого порогу)

Це може здатися дуже абстрактним - і це нормально! Ці поняття, як правило, повністю зрозумілі лише тоді, коли ви починаєте навчати свої перші моделі машинного навчання.

Заключні думки

У цьому підручнику ви дізналися про те, як нейронні мережі виконують обчислення, щоб робити корисні прогнози.

Якщо ви зацікавлені дізнатися більше про побудову, навчання та впровадження передової моделі машинного навчання, моя електронна книга Pragmatic Machine Learning навчить вас будувати 9 різних моделей машинного навчання за допомогою реальних проектів.

Ви можете розгорнути код із електронної книги на своєму GitHub або в особистому портфоліо, щоб показати його майбутнім роботодавцям. Книга виходить у світ 3 серпня - попередньо замовіть її на знижку 50% зараз!