Перша нейронна мережа
Мета цієї вправи – навчати нашу першу невелику нейронну мережу. За допомогою нейронних мереж можна вивчати нелінійні моделі без використання явних поєднань ознак.
Завдання 1. У наведеній моделі дві вхідні ознаки об’єднано в один нейрон. Чи здатна ця модель вивчати нелінійні відношення? Запустіть її, щоб підтвердити свої здогадки.
Завдання 2. Спробуйте збільшити кількість нейронів у прихованому шарі з 1 до 2, а також змінити лінійну функцію активації на нелінійну, наприклад ReLU. Чи вдасться вам створити модель, яка здатна вивчати нелінійні відношення? Чи може вона ефективно моделювати дані?
Завдання 3. Спробуйте збільшити кількість нейронів у прихованому шарі з 2 до 3, використовуючи нелінійну функцію активації, таку як ReLU. Чи може модель ефективно моделювати дані? Як змінюється якість моделі з кожним запуском?
Завдання 4. Продовжуйте експериментувати, додаючи або видаляючи приховані шари й нейрони в кожному шарі. Також можете змінювати швидкість навчання, регуляризацію і інші параметри навчання. Яку найменшу кількість нейронів і шарів можна використати, щоб втрати при тестуванні становили 0,177 або менше?
Чи впливає збільшення розміру моделі на те, як вона пристосовується або як швидко збігається?
Чи впливає це на те, як часто при збіжності отримується модель, що дає гарні результати? Для прикладу спробуйте архітектуру, указану нижче.
- Перший прихований шар із трьома нейронами.
- Другий прихований шар із трьома нейронами.
- Третій прихований шар із двома нейронами.
(Відповіді наведено відразу під вправою.)
Натисніть значок плюса, щоб переглянути відповідь на завдання 1.
Для активації встановлено значення Лінійна, тому ця модель не може вивчати нелінійні відношення. Втрати дуже великі, тому модель недостатньо пристосовується до даних.
Натисніть значок плюса, щоб переглянути відповідь на завдання 2.
Нелінійна функція активації може вивчати нелінійні моделі. Однак один прихований шар із двома нейронами не може відобразити всі нелінійні відношення цього набору даних, і навіть без шуму в ньому будуть високі втрати, тому модель усе одно недостатньо пристосовується до даних. У цих вправах використовується недетермінований алгоритм, тому деякі запуски не дадуть змогу навчити ефективну модель, у той час як результати інших запусків будуть доволі гарні.
Найкраща модель може бути зовсім не такою, як ви очікуєте!
Натисніть значок плюса, щоб переглянути відповідь на завдання 3.
У цій вправі яскраво простежується недетермінована природа інтерактивного середовища. Одного прихованого шару з трьома нейронами достатньо для моделювання набору даних (за відсутності шуму), але не під час усіх запусків модель збігатиметься так, щоб давати гарні результати.
Достатньо трьох нейронів, оскільки функція XOR може бути представлена як комбінація трьох півплощин (активація ReLU). Це можна побачити, якщо подивитися на зображення нейронів, якими позначено вихідні дані окремих нейронів. У хорошій моделі з трьома нейронами й функцією активації ReLU буде одне зображення з майже вертикальною лінією, що виявляє позитивну (або негативну: знак може змінюватися) величину X1, одне зображення з майже горизонтальною лінією, що виявляє знак величини X2, і одне зображення з діагональною лінією, що виявляє їх взаємодію.
Однак не під час усіх запусків модель збігатиметься так, щоб давати гарні результати. Деякі запуски працюватимуть не краще, ніж модель із двома нейронами: у цих випадках можна побачити повторювані нейрони.
Натисніть значок плюса, щоб переглянути відповідь на завдання 4.
Одного прихованого шару з трьома нейронами достатньо для моделювання даних, але в ньому немає резервних потужностей, тому при багатьох запусках він фактично втратить нейрон і не зможе навчити хорошу модель. В одному шарі з більш ніж трьома нейронами є більше резервних потужностей, а отже, модель імовірніше збігатиметься так, щоб давати гарні результати.
Як бачимо, один прихований шар із двома нейронами не може добре моделювати дані. Якщо ви спробуєте налаштувати так модель, то побачите, що всі дані у вихідному шарі – це лише фігури, що складаються з ліній із цих двох вузлів. У цьому випадку глибша мережа моделює набір даних краще, ніж лише перший прихований шар: окремі нейрони другого шару можуть моделювати складніші фігури, наприклад створити верхній правий квадрант, об’єднуючи нейрони першого шару. Якщо додати другий прихований шар, набір даних усе-таки моделюватиметься краще, ніж якби використовувався лише перший такий шар. Проте, можливо, доцільніше додати більше вузлів у перший шар, щоб у наборі даних, з якого другий шар створює свої фігури, було більше ліній.
Однак модель з одним нейроном у першому прихованому шарі не може добре навчатися незалежно від глибини. Це пов’язано з тим, що вихідні дані першого шару змінюються лише в одному вимірі (зазвичай це діагональна лінія), чого недостатньо для хорошого моделювання такого набору даних. Наступні шари не можуть компенсувати це, хоч якими складними будуть; інформацію, яку містили вхідні дані, безповоротно втрачено.
А що якби замість маленької мережі ми створили багато шарів із великою кількістю нейронів для такої простої задачі, як ця? Ми вже знаємо, що перший шар може генерувати лінії з різноманітними нахилами, другий – об’єднувати їх у безліч різних форм і з кожним наступним шаром форми стають усе складнішими.
Дозволивши моделі враховувати стільки різних форм завдяки такій великій кількості різних прихованих нейронів, ви створили достатньо простору для того, щоб їй було легко надмірно пристосовуватися до шуму навчального набору. Як результат, ці складні форми відображають слабкі сторони навчальних даних, а не узагальнену фундаментальну істину. У випадках, подібних до цього прикладу, більші моделі можуть створювати складні межі, які відповідатимуть точним точкам даних. У крайньому разі велика модель запам’ятає острівець навколо окремої точки шуму. Це називається запам’ятовуванням даних. Збільшивши розмір моделі, ви побачите, що з такими налаштуваннями вона часто працює гірше, ніж простіша модель із достатньою кількістю нейронів для вирішення проблеми.