Як встановити кількість нейронів та шарів у нейронних мережах


26

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

  1. Як можна визначити кількість середніх шарів даної нейронної мережі? 1 проти 10 чи що завгодно.
  2. Як можна вирішити кількість нейронів у кожному середньому шарі? Чи рекомендується мати однакову кількість нейронів у кожному середньому шарі чи це змінюється залежно від застосування?

Відповіді:


19

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

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

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

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

Припустимо, вас попросять розділити такі дані. Вам потрібно буде d1вказати верхню межу рішення і якось виконувати ANDоперацію, щоб визначити, чи вхідні дані знаходяться з лівого боку або з правого боку. Рядок d2виконує ще одну ANDоперацію, яка досліджує, чи є вхідні дані вище d2чи ні. У цьому випадку d1намагається зрозуміти, чи вводиться ліва частина рядка, щоб класифікувати вхід як коло , а також d2намагається з'ясувати, чи вхід знаходиться в правій частині рядка, щоб класифікувати вхід як коло . Тепер нам потрібна іншаANDоперація з підведення результатів двох ліній, побудованих після тренування їх параметрів. Якщо вхід знаходиться з лівого боку d1та з правого боку d2, його слід класифікувати як коло .

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

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

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

Для таких даних:

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

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

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


Припустимо, вас попросять знайти наступну окружну межу рішення.

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

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

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


11

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

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

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

Що робити, якщо моя мережа "занадто велика"

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

Що робити, якщо моя мережа "занадто мала"

З іншого боку, якщо ваша мережа занадто мала, вона буде корисною для ваших даних і, отже,. Було б як відповісти одним реченням, коли ви мали б написати есе на 10 сторінок. Як би добре не було вашої відповіді, ви пропустите деякі відповідні факти.

Оцінка розміру мережі

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

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

Заглиблюючись

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

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

Ідемо ширше

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


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

8

Короткий відповідь: Це дуже пов'язано з розмірами ваших даних та типом програми.

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

Інформація Bottleneck - це меч з двома острими:

1) Якщо ви користуєтеся декількома шарами / нейронами, то модель просто засвоїть кілька корисних уявлень / особливостей ваших даних і втратить деякі важливі, оскільки ємність середніх шарів дуже обмежена ( недостатні ).

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

Корисні посилання для прикладів та інших знахідок:

[1] https: //livebook.manning.com#! / Book / deep-learning-with-python / Chapter-3 / point-1130-232-232-0

[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/


4

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

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

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


1

Додаючи до попередніх відповідей, існують підходи, коли топологія нейронної мережі виникає ендогенно, як частина тренінгу. Найбільш помітно, у вас є Neuroevolution of Augmenting Topologies (NEAT), де ви починаєте з базової мережі без прихованих шарів, а потім використовуєте генетичний алгоритм для "комплексифікації" структури мережі. NEAT реалізований у багатьох рамках ML. Ось досить доступна стаття про реалізацію для вивчення Маріо: CrAIg: Використання нейронних мереж для вивчення Маріо

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