Оцінка кількості нейронів і кількості шарів штучної нейронної мережі [закрито]


76

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

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


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

Відповіді:


103

Це справді важка проблема.

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

Люди традиційно підходили до цієї проблеми кількома різними способами:

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

  2. Використовуйте правило. Багато людей придумали багато здогадок, що найкраще працює. Щодо кількості нейронів у прихованому шарі, люди припустили, що (наприклад) вона повинна (a) знаходитись між розміром вхідного та вихідного шару, (b) встановлювати щось поблизу (входи + виходи) * 2/3, або (c) ніколи не перевищує подвійного розміру вхідного шару.

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

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

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


4
+1 дуже гарна відповідь. Кожного разу, коли вам потрібно налаштувати параметр моделі, ви можете використовувати техніку перехресної перевірки, як у першому підході. Це стає складнішим, коли у вас є кілька параметрів для оптимізації, прикладом цього є libSVM, який виконує пошук сітки по простору двох його параметрів за допомогою перехресної перевірки. Інші підходи використовували генетичний алгоритм для вивчення структури мережі, а також звичайних ваг.
Amro

44

На практиці це не складно (на основі кодування та навчання десятків MLP).

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

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

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

  • нечисленні параметри архітектури, які насправді можна налаштувати, майже завжди (на 100% часу, з мого досвіду) дуже обмежені цими фіксованими параметрами архітектури - тобто значення цих параметрів тісно обмежені значеннями max і min; і

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

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

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

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

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

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

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

У своєму питанні ви згадали, що з будь-якої причини ви не можете знайти оптимальну архітектуру мережі методом спроб і помилок. Іншим способом налаштування конфігурації NN (без використання методів спроб і помилок) є " обрізка"'. Суть цієї методики полягає у видаленні вузлів з мережі під час навчання шляхом виявлення тих вузлів, які, якщо їх вилучити з мережі, не помітно вплинуть на продуктивність мережі (тобто роздільну здатність даних). (Навіть не використовуючи офіційну техніку обрізки, ви можете отримати приблизне уявлення про те, які вузли не важливі, подивившись на свою матрицю ваги після тренування; шукайте ваги дуже близькі до нуля - це вузли на обох кінцях тих ваг, які Очевидно, що якщо ви використовуєте алгоритм обрізки під час навчання, тоді почніть з конфігурації мережі, яка, швидше за все, матиме надлишкові (тобто «обрізані») вузли - іншими словами, при прийнятті рішення про архітектуру мережі, помилитися на стороні більшої кількості нейронів, якщо додати крок обрізки.

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

Кількість вузлів, що складаються з прихованого шару

а як щодо кількості вузлів, що складають прихований шар? Звичайно, це значення є більш-менш необмеженим - тобто воно може бути меншим або більшим, ніж розмір вхідного шару. Крім цього, як ви, мабуть, знаєте, є гора коментарів до питання про конфігурацію прихованого шару в NN (чудовий підсумок цього коментаря див. У знаменитих NN FAQ ). Існує багато емпірично отриманих емпіричних правил, але з них найчастіше покладається на розмір прихованого шару між вхідним і вихідним шарами . Джефф Хітон, автор " Введення в нейронні мережі в Java"пропонує ще кілька, які читаються на сторінці, на яку я щойно посилався. Аналогічним чином, сканування орієнтованої на програми літератури з нейронних мереж, майже напевно виявить, що розмір прихованого шару зазвичай знаходиться між розмірами вхідного та вихідного шарів. Але між не означає посередині; насправді, як правило, краще встановити розмір прихованого шару ближче до розміру вхідного вектора. Причина полягає в тому, що якщо прихований шар занадто малий, мережа може важко сходитися. Для початкової конфігурації помиліться з більшим розміром - більший прихований шар надає мережі більшу пропускну здатність, що допомагає їй сходитися, порівняно з меншим прихованим шаром. Дійсно, це обґрунтування часто використовується для того, щоб рекомендувати розмір прихованого шару, більший ніж (більше вузлів) вхідного рівня - тобто, починайте з початкової архітектури, яка заохочуватиме до швидкої конвергенції, після чого ви зможете обрізати `` надлишкові '' вузли (визначте вузли в прихованому шарі з дуже низькими значеннями ваги та усуньте їх з вашого реконструйована мережа).


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

1
Так само, чи є у вас посилання на твердження про те, що розмір прихованого шару не обмежений? 1 вузол? 300 тис. Вузлів? Я тут пишний, але в цій відповіді є багато претензій, яким я хотів би пояснити.
Кріс

0

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

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