багатошарова персептронна архітектура (MLP): критерії вибору кількості прихованих шарів та розміру прихованого шару?


104

Якщо у нас є 10 власних векторів, у нас може бути 10 нейронних вузлів у вхідному шарі. Якщо у нас є 5 вихідних класів, то у вихідного шару ми можемо мати 5 вузлів. Але які критерії вибору кількості прихованого шару в MLP і скільки нейронних вузли в 1 прихованому шарі?



Відповіді:


217

скільки прихованих шарів ?

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

Припускаючи, що ваші дані вимагають розділення нелінійною технікою, тоді завжди починайте з одного прихованого шару . Майже напевно, це все, що вам знадобиться. Якщо ваші дані можна розділити за допомогою MLP, то для цього MLP, ймовірно, потрібен лише один прихований шар. Існує теоретичне обгрунтування цього, але моя причина є суто емпіричною: багато складних проблем класифікації / регресії вирішуються за допомогою одношарових MLP, але я не пам'ятаю, щоб зустріти будь-які багатоприховані шари MLP, використовувані для успішного моделювання даних, -інше на дошках оголошень МЛ, підручниках з МС, наукових працях тощо. Вони, безумовно, існують, але обставини, які виправдовують їх використання, є емпірично досить рідкісними.


Скільки вузлів у прихованому шарі?

З навчальної літератури MLP. мій власний досвід і т. д. я збирав і часто покладаюся на кілька правил ( RoT ), і які я також вважав надійними керівниками (тобто, вказівки були точними, і навіть тоді, коли цього не було, це було зазвичай було зрозуміло, що робити далі):

RoT на основі поліпшення конвергенції:

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

Чому? По-перше, кілька зайвих вузлів у прихованому шарі, швидше за все, не принесуть ніякої шкоди - ваш MLP все одно зблизиться. З іншого боку, занадто мало вузлів у прихованому шарі може запобігти конвергенції. Подумайте про це таким чином, додаткові вузли забезпечують деяку надлишкову ємність - додаткові ваги для зберігання / вивільнення сигналу в мережу під час ітерації (навчання або побудова моделі). По-друге, якщо ви починаєте з додаткових вузлів у вашому прихованому шарі, то їх легко обрізати пізніше (під час проходження ітерації). Це звичайне явище, і для діагностики, що допомагають вам, є діагностичні методи (наприклад, діаграма Хінтона, яка є лише візуальним зображенням вагових матриць, «теплова карта» вагових значень).

RoT на основі розміру вхідного шару та розміру вихідного шару:

Велике правило полягає в тому, щоб розмір цього [прихованого] шару знаходився десь між розміром вхідного шару ... і розміром вихідного шару ....

Для обчислення кількості прихованих вузлів використовуємо загальне правило: (Кількість входів + виходів) x 2/3

RoT на основі основних компонентів:

Як правило, ми визначаємо стільки прихованих вузлів, скільки розмірів [основних компонентів], необхідних для збору 70-90% дисперсії набору вхідних даних .

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

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

Єдина дієва методика оптимізації кількості нейронів у прихованому шарі:

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

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


На практиці я роблю це так:

вхідний рівень : розмір мого вактора даних (кількість функцій у моїй моделі) + 1 для вузла зміщення, не враховуючи змінну відповіді, звичайно

вихідний шар : soley визначається моєю моделлю: регресія (один вузол) та класифікація (кількість вузлів, еквівалентна кількості класів, якщо припустити softmax)

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

введіть тут опис зображення


1
Я хотів би додати деякі пов'язані результати щодо №1 RoT: У успішних SVM ви фактично відображаєте свій вхід у простір більш високого розміру (більше прихованих вузлів, ніж вузлів у вхідному шарі на мові NN). Завданням вихідного шару є отримання рішення з цього надмірно повного представлення. Можливо, також буде підключено до випадкових проекцій. У блискучому документі Adam Coates & Andrew Y. Ng (2011) обговорюються споріднені теми.
Владислав Довгалець

Приємне пояснення. Будь-яка ідея про те, як я міг побудувати подібну фігуру при використанні sklearn та MLPClassifier?
seralouk

1
@sera ти маєш на увазі стиль xkcd?
denfromufa

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

2

Дуже важко вибрати кількість нейронів у прихованому шарі та вибрати кількість прихованих шарів у вашій нейронній мережі.

Зазвичай для більшості застосунків достатньо одного прихованого шару. Також кількість нейронів у цьому прихованому шарі повинна бути між кількістю входів (10 у вашому прикладі) та кількістю виходів (5 у вашому прикладі).

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


1

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

Ключові фрагменти:

  1. Хромосома : вектор, який визначає, скільки одиниць у кожному прихованому шарі (наприклад, [20,5,1,0,0], що означає 20 одиниць у першому прихованому шарі, 5 у другому, ..., при цьому відсутні шари 4 та 5). Ви можете встановити обмеження на максимальну кількість шарів для випробування та максимальну кількість одиниць у кожному шарі. Вам також слід встановити обмеження щодо генерування хромосом. Напр. [10, 0, 3, ...] не слід генерувати, оскільки будь-які одиниці після пропущеного шару ("3, ...") не матимуть ніякого значення і означатимуть цикли оцінки відходів.
  2. Фітнес-функція : функція, яка повертає зворотну найменшу помилку тренувань у наборі перехресних перевірок мережі, визначеній заданою хромосомою. Ви також можете включити кількість загальних одиниць або час обчислення, якщо хочете знайти "найменшу / найшвидшу, але найбільш точну мережу".

Ви також можете врахувати:

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

0

Останнім часом є теоретична робота з цього https://arxiv.org/abs/1809.09953 . Якщо припустимо, що ви використовуєте MLP RELU, всі приховані шари мають однакову кількість вузлів, а ваша функція втрати та справжня функція, яку ви наближаєте до нейромережі, підкоряються деяким технічним властивостям (у статті), ви можете вибрати глибину, яка повинна бути такою замовіть $ \ log (n) $ і вашу ширину прихованих шарів на порядок $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Тут $ n $ - ваш розмір вибірки, $ d $ - розмірність вашого вхідного вектора, а $ \ beta $ - параметр гладкості для вашої справжньої функції. Оскільки $ \ beta $ невідомо, ви, ймовірно, захочете трактувати це як гіперпараметр.

Роблячи це, ви можете гарантувати, що при ймовірності, що переходить до $ 1 $ як функція розміру вибірки, ваша помилка наближення перетвориться на $ 0 $ як функція розміру вибірки. Вони дають ставку. Зауважте, що це не гарантовано є "найкращою" архітектурою, але це може принаймні дати вам гарне місце для початку. Крім того, мій власний досвід говорить про те, що такі речі, як випадання, все ще можуть допомогти на практиці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.