Чи існує стандартний і прийнятий метод вибору кількості шарів та кількості вузлів у кожному шарі в нейронній мережі, що передається? Мене цікавлять автоматизовані способи побудови нейронних мереж.
Чи існує стандартний і прийнятий метод вибору кількості шарів та кількості вузлів у кожному шарі в нейронній мережі, що передається? Мене цікавлять автоматизовані способи побудови нейронних мереж.
Відповіді:
Я усвідомлюю, що на це питання було дано відповідь, але я не думаю, що наявна відповідь справді залучає це питання, окрім вказівки на посилання, загалом пов'язане з темою питання. Зокрема, посилання описує одну техніку для програмної конфігурації мережі, але це не " [a] стандарт і прийнятий метод " для конфігурації мережі.
Дотримуючись невеликий набір чітких правил, можна програмно встановити грамотну мережеву архітектуру (тобто кількість і тип нейронних шарів та кількість нейронів, що складаються з кожного шару). Виконуючи цю схему, ви отримаєте грамотну архітектуру, але, мабуть, не оптимальну.
Але як тільки ця мережа ініціалізована, ви можете ітеративно налаштовувати конфігурацію під час тренування, використовуючи ряд допоміжних алгоритмів; одне сімейство цих робіт шляхом обрізки вузлів на основі (малих) значень вагового вектора після певної кількості навчальних епох - іншими словами, усунення непотрібних / зайвих вузлів (докладніше про це нижче).
Отже, кожен NN має три типи шарів: вхідний , прихований та вихідний .
Отже, створення архітектури NN означає створення значень для кількості шарів кожного типу та кількості вузлів у кожному з цих шарів.
Шар введення
Просте - у кожної НН є саме одна з них - немає винятків, про які я знаю.
Що стосується кількості нейронів, що містять цей шар, цей параметр визначається повністю і однозначно, як тільки ви дізнаєтесь форму своїх тренувальних даних. Зокрема, кількість нейронів, що містять цей шар, дорівнює кількості ознак (стовпців) у ваших даних . Деякі конфігурації NN додають один додатковий вузол для терміна зміщення.
Вихідний шар
Як і вхідний шар, кожен NN має рівно один вихідний шар. Визначити його розмір (кількість нейронів) просто; це повністю визначається обраною конфігурацією моделі.
Чи буде ваш NN працювати в машинному режимі або в режимі регресії (умова ML про використання терміна, який також використовується в статистиці, але присвоєння йому іншого значення дуже заплутано). Машинний режим: повертає мітку класу (наприклад, "Преміум акаунт" / "Основний рахунок"). Режим регресії повертає значення (наприклад, ціну).
Якщо NN є регресором, то вихідний шар має єдиний вузол.
Якщо NN є класифікатором, то він також має єдиний вузол, якщо не використовується softmax , в цьому випадку у вихідного шару є один вузол на мітку класу у вашій моделі.
Приховані шари
Тож ці кілька правил встановлюють кількість шарів та розмір (нейрони / шар) як для вхідного, так і вихідного шарів. Це залишає приховані шари.
Скільки прихованих шарів? Добре, якщо ваші дані лінійно відокремлюються (про що ви часто знаєте до того моменту, як починаєте кодувати мережу NN), тоді вам зовсім не потрібні приховані шари. Звичайно, для вирішення своїх даних вам також не потрібна мережа мереж, але це все одно зробить цю роботу.
Крім того, як ви, напевно, знаєте, є гора коментарів до питання про конфігурацію прихованого шару в NN (див. Шалено ретельний та проникливий NN FAQ для відмінного резюме цього коментаря). Одне питання в цій темі, щодо якого існує консенсус, - це відмінність продуктивності від додавання додаткових прихованих шарів: ситуацій, в яких продуктивність покращується за допомогою другого (або третього тощо) прихованого шару, дуже мало. Одного прихованого шару достатньо для великої більшості проблем.
То як щодо розміру прихованого шару (ив) - скільки нейронів? Є кілька емпірично отриманих правил, серед яких найчастіше покладається " оптимальний розмір прихованого шару, як правило, між розміром вхідного та розміром вихідних шарів ". Джефф Хітон, автор « Введення в нейронні мережі на Java», пропонує ще кілька.
Підсумовуючи, для більшості проблем, ймовірно, можна отримати гідну продуктивність (навіть без другого кроку оптимізації), встановивши приховану конфігурацію шару, використовуючи лише два правила: (i) кількість прихованих шарів дорівнює одному; та (ii) кількість нейронів у цьому шарі є середнім значенням нейронів у вхідному та вихідному шарах.
Оптимізація конфігурації мережі
Обрізкаописує набір методів для обрізання розміру мережі (за вузлами, не за шарами) для поліпшення обчислювальної продуктивності, а іноді і для вирішення ефективності. Суть цих методів полягає у видаленні вузлів з мережі під час тренінгу шляхом ідентифікації тих вузлів, які, якщо їх видалити з мережі, не помітно вплинуть на продуктивність мережі (тобто, роздільну здатність даних). (Навіть не використовуючи офіційну техніку обрізки, ви можете отримати приблизне уявлення про те, які вузли не важливі, дивлячись на матрицю ваги після тренування; дивіться ваги дуже близько до нуля - це вузли на будь-якому кінці тих ваг, які часто видаляється під час обрізки.) Очевидно, що якщо ви використовуєте алгоритм обрізки під час тренування, то починайте з конфігурації мережі, яка, швидше за все, має надлишкові (т. е. "піддатливі" вузли - іншими словами,
По-іншому, застосовуючи алгоритм обрізки до вашої мережі під час тренінгу, ви можете наблизитись до оптимальної конфігурації мережі; чи можете ви це зробити в одному "передньому" (наприклад, алгоритмі, заснованому на генетичному-алгоритмі), я не знаю, хоча я знаю, що наразі ця двоетапна оптимізація є більш поширеною.
@ відповідь Дуга спрацювала на мене. Існує ще одне додаткове правило, яке допомагає вирішувати проблеми з навчанням. Зазвичай ви можете попередити перенапруження, якщо кількість нейронів утримується нижче:
= кількість вхідних нейронів. = кількість вихідних нейронів. = кількість зразків у наборі даних про навчання. = довільний коефіцієнт масштабування, як правило, 2-10.
Інші рекомендують встановлювати на значення від 5 до 10, але я вважаю, що значення 2 часто працюватиме без надмірного розміщення. Ви можете вважати альфу ефективним фактором розгалуження або кількістю ненульових ваг для кожного нейрона. Шари випадання принесуть "ефективний" коефіцієнт розгалуження від фактичного середнього коефіцієнта розгалуження для вашої мережі.
Як пояснюється цим відмінним текстом проекту NN , ви хочете обмежити кількість вільних параметрів у вашій моделі (її ступінь або кількість ненульових ваг) лише невеликою часткою ступенів свободи ваших даних. Ступінь свободи ваших даних - це кількість вибірок * ступенів свободи (розміри) у кожному зразку або (якщо всі вони незалежні). Тож - це спосіб вказати, наскільки загальною ви хочете бути вашою моделлю, або наскільки ви хочете запобігти надмірному розміщенню.
Для автоматизованої процедури ви почнете з альфа-2 (вдвічі більше ступеня свободи у ваших навчальних даних, ніж ваша модель) і відпрацюєте свій шлях до 10, якщо помилка (втрата) для вашого навчального набору даних значно менша, ніж для ваш тестовий набір даних.
N_h
(середня кількість прихованих нейронів на шар) рішення цього N_s = (N_i + N_o) * N_h ^ N_hidden_layers
. Але я все одно не використовував би цю формулу. Це стосується лише основних проблем (проблем із іграшками), коли ви не плануєте застосовувати будь-які інші підходи до регуляризації.
Від Введення в нейронні мережі для Java (друге видання) по Джефф Хітон - попередній перегляд в вільному доступі на Google Books і раніше на сайті автора :
Кількість прихованих шарів
Справді слід прийняти два рішення щодо прихованих шарів: скільки прихованих шарів насправді має в нейронній мережі та скільки нейронів буде у кожному з цих шарів. Спочатку ми вивчимо, як визначити кількість прихованих шарів для використання з нейронною мережею.
Проблеми, які потребують двох прихованих шарів, трапляються рідко. Однак нейронні мережі з двома прихованими шарами можуть представляти функції будь-якої форми. В даний час немає теоретичних причин використовувати нейронні мережі з більш ніж двома прихованими шарами. Насправді для багатьох практичних проблем немає підстав використовувати більше, ніж один прихований шар. У таблиці 5.1 підсумовані можливості архітектур нейронної мережі з різними прихованими шарами.
Таблиця 5.1: Визначення кількості прихованих шарів
| Кількість прихованих шарів | Результат | 0 - Тільки здатні представляти лінійні роздільні функції або рішення. 1 - може наближати будь-яку функцію, яка містить суцільне відображення від одного кінцевого простору до іншого. 2 - Може представляти довільну межу рішення до довільної точності з раціональними функціями активації і може наближати будь-яку гладку відображення до будь-якої точності.Вирішення кількості прихованих шарів нейрона - лише невелика частина проблеми. Ви також повинні визначити, скільки нейронів буде в кожному з цих прихованих шарів. Цей процес висвітлюється в наступному розділі.
Кількість нейронів у прихованих шарах
Визначення кількості нейронів у прихованих шарах є дуже важливою частиною рішення вашої загальної архітектури нейронної мережі. Хоча ці шари безпосередньо не взаємодіють із зовнішнім середовищем, вони мають величезний вплив на кінцевий вихід. Необхідно уважно враховувати як кількість прихованих шарів, так і кількість нейронів у кожному з цих прихованих шарів.
Використання занадто мало нейронів у прихованих шарах призведе до того, що називається недостатнім. Недостатня кількість виникає, коли в прихованих шарах є занадто мало нейронів, щоб адекватно виявити сигнали у складному наборі даних.
Використання занадто багато нейронів у прихованих шарах може призвести до декількох проблем. По-перше, занадто багато нейронів у прихованих шарах може призвести до надмірного прилягання. Перенастроювання виникає тоді, коли нейронна мережа має стільки можливостей для обробки інформації, що обмеженого обсягу інформації, що міститься у навчальному наборі, недостатньо для тренування всіх нейронів у прихованих шарах. Друга проблема може виникнути навіть тоді, коли даних про навчання достатньо. Невелика кількість нейронів у прихованих шарах може збільшити час, необхідний для тренування мережі. Кількість тренувального часу може збільшитися до того, що неможливо адекватно тренувати нейронну мережу. Очевидно, що слід досягти певного компромісу між занадто великою і занадто малою кількістю нейронів у прихованих шарах.
Існує безліч методів, що визначають правильність визначення правильної кількості нейронів для використання в прихованих шарах, таких як:
- Кількість прихованих нейронів має бути між розміром вхідного шару та розміром вихідного шару.
- Кількість прихованих нейронів має бути на 2/3 розміром вхідного шару плюс розмір вихідного шару.
- Кількість прихованих нейронів має бути менше, ніж удвічі більше, ніж розмір вхідного шару.
Ці три правила дають вам початок для розгляду. Зрештою, вибір архітектури для вашої нейронної мережі зводиться до спроб та помилок. Але що саме мається на увазі під пробою та помилками? Ви не хочете починати кидати у вашу мережу випадкові числа шарів та нейронів. Для цього було б дуже багато часу. Розділ 8, “Обрізання нейронної мережі” вивчить різні способи визначення оптимальної структури нейронної мережі.
Я також хотів наступний уривок з відповіді я знайшов в researchgate.net , який транспортує багато всього кілька слів:
Steffen B Petersen · Ольборзький університет
[...]
Для забезпечення можливості мережі узагальнювати кількість вузлів потрібно утримувати якомога менше. Якщо у вас є надлишок вузлів, мережа стає банком пам’яті, який може нагадати навчальний набір досконало, але не працює на зразках, які не входили до навчального набору.
Я зараз працюю над емпіричним дослідженням цього (наближаючись до процесорного моделювання століття нашого HPC!). Моя порада буде використовувати "велику" мережу та регуляризацію, якщо ви використовуєте регуляризацію, тоді мережева архітектура стає менш важливою (за умови, що вона є достатньо великою для відображення основної функції, яку ми хочемо захопити), але вам потрібно налаштувати регуляризацію параметр належним чином.
Однією з проблем підбору архітектури є те, що це дискретний, а не безперервний контроль складності моделі, і тому може бути трохи тупим інструментом, особливо коли ідеальна складність низька.
Однак, це все підпорядковане теоремам "без вільного обіду", хоча регуляризація ефективна в більшості випадків, завжди знайдуться випадки, коли вибір архітектури працює краще, і єдиний спосіб з'ясувати, чи це правда проблеми, що існує спробувати обидва підходи та перехресне підтвердження.
Якби я будував автоматизований конструктор нейронних мереж, я використовував би байєсовський підхід на основі відбору проб «Гібрид Монте-Карло» (HMC) Radford Neal і використовував би велику мережу та інтегрувався за вагами, а не оптимізував ваги однієї мережі. Однак це обчислювально дорого і трохи "чорне мистецтво", але результати, які доводить професор Ніл, припускають, що воно того варте!
Наскільки мені відомо, немає способу автоматично вибрати кількість шарів та нейронів у кожному шарі. Але є мережі, які можуть будувати свою топологію автоматично, як EANN (Evolutionary Artificial Neural Networks, які використовують генетичні алгоритми для еволюціонування топології).
Існує декілька підходів, більш-менш сучасний, який, здавалося б, дає хороші результати, був NEAT (Neuro Evolution of Augmented Topologies) .
• Кількість прихованих вузлів: не існує магічної формули для вибору оптимальної кількості прихованих нейронів. Однак деякі правила великого пальця є для обчислення кількості прихованих нейронів. Грубе наближення може бути отримане правилом геометричної піраміди, запропонованим Masters (1993). Для тришарової мережі з n вхідними і m вихідними нейронами прихований шар матиме нейрони.
Довідка:
1 Майстри, Тимофій. Практичні рецепти нейронної мережі в C ++. Морган Кауфман, 1993.
[2] http://www.iitbhu.ac.in/facturing/min/rajesh-rai/NMEICT-Slope/lecture/c14/l1.html
Автоматизовані способи побудови нейронних мереж за допомогою глобального пошуку за параметрами:
Вхідні та вихідні шари мають фіксований розмір.
Що може відрізнятися:
Для цієї дискретної оптимізації може використовуватися кілька методів , при цьому мережа не є вибірковою помилкою як функція витрат.
Вибачте, що поки не можу розмістити коментар, тож будь ласка, покладіть мене. У всякому разі, я наткнувся на цю дискусійну тему, яка нагадувала мені документ, який я бачив зовсім недавно. Я думаю, що це може зацікавити людей, які беруть участь тут:
AdaNet: Адаптивне структурне навчання штучних нейронних мереж
Корінна Кортес, Ксав'є Гонсалво, Віталій Кузнецов, Мегряр Мохрі, Скотт Ян; Праці 34-ї міжнародної конференції з машинного навчання, PMLR 70: 874-883, 2017.
Анотація Ми представляємо нову основу для аналізу та вивчення штучних нейронних мереж. Наш підхід одночасно та адаптивно вивчає як структуру мережі, так і її ваги. Методика ґрунтується і супроводжується сильними теоретичними гарантіями навчання, залежними від даних, так що кінцева архітектура мережі, очевидно, адаптується до складності будь-якої задачі.
Я перерахував багато способів навчання топології в магістерській роботі, глава 3 . Великі категорії:
Я хотів би запропонувати менш поширений, але надто ефективний метод .
В основному, ви можете використовувати набір алгоритмів, що називаються "генетичними алгоритмами", які випробовують невелику підмножину потенційних варіантів (випадкова кількість шарів і вузлів на шар). Потім вона розглядає цю групу варіантів як "батьків", які створюють дітей, поєднуючи / мутуючи одного або декількох батьків так само, як розвиваються організми. Найкращі діти та кілька випадкових дітей у порядку зберігаються в кожному поколінні та протягом поколінь, найкращі виживають.
Для ~ 100 або менших параметрів (таких як вибір кількості шарів, типів шарів та кількості нейронів на один шар) цей метод є надзвичайно ефективним. Скористайтеся ним, створивши ряд потенційних мережевих архітектур для кожного покоління та частково навчаючи їх до тих пір, поки не може бути оцінена крива навчання (100-10 к міні-пакетів, як правило, залежно від багатьох параметрів). Через кілька поколінь, можливо, ви захочете розглянути момент, коли поїзд і валідація починають суттєво відрізнятися від частоти помилок (переобладнання) як вашої цільової функції вибору дітей. Можливо, буде корисно використовувати дуже малий підмножину ваших даних (10-20%), поки ви не виберете остаточну модель, щоб швидше досягти висновку. Крім того, використовуйте єдине насіння для ініціалізації мережі, щоб правильно порівняти результати.
10-50 поколінь повинні дати чудові результати для гідного розміру мережі.
Кількість прихованих шарів та чого вони можуть досягти:
0 - Тільки здатні представляти лінійні роздільні функції або рішення.
1 - може наближати будь-яку функцію, яка містить безперервне відображення від одного кінцевого простору до іншого.
2 - Може представляти довільну межу рішення до довільної точності за допомогою раціональних функцій активації та може наближати будь-яке плавне відображення до будь-якої точності.
Більше 2 - Додаткові шари можуть вивчити складні подання (на зразок автоматичної інженерії функцій) для шарів шарів.