Який розмір партії в нейронній мережі?


174

Я використовую Python Keras packageдля нейронної мережі. Це посилання . Чи batch_sizeдорівнює кількості тестових зразків? З Вікіпедії ми маємо цю інформацію:

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

Наведена вище інформація описує дані тесту? Це те саме, що і batch_sizeв керах (Кількість зразків на оновлення градієнта)?


3
Добре бачити курс class.coursera.org/ml-005/lecture/preview , особливо для вас 4-6 + тиждень. 10. Вікіпедія може бути не таким цінним ресурсом для вивчення нейронних мереж.
404піо

Відповіді:


228

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

Наприклад, скажімо, що у вас є 1050 зразків тренувань, і ви хочете встановити batch_sizeрівне 100. Алгоритм бере перші 100 зразків (від 1-го до 100-го) з навчального набору даних та тренує мережу. Далі він бере другі 100 зразків (від 101-го до 200-го) і знову тренує мережу. Ми можемо продовжувати виконувати цю процедуру, поки не розповсюдимо всі зразки через мережу. Проблема може статися з останнім набором зразків. У нашому прикладі ми використали 1050, яке не ділиться на 100 без залишку. Найпростіше рішення - просто отримати останні 50 зразків і провести навчання мережі.

Переваги використання розміру партії <кількість всіх зразків:

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

  • Зазвичай мережі тренуються швидше за допомогою міні-пакетів. Це тому, що ми оновлюємо ваги після кожного поширення. У нашому прикладі ми розповсюдили 11 партій (10 з них мали 100 зразків, а 1 - 50 проб), і після кожної з них ми оновили параметри нашої мережі. Якщо ми використовували всі зразки під час поширення, ми зробили б лише 1 оновлення для параметра мережі.

Недоліки використання розміру партії <кількість всіх зразків:

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

Вказівки градієнта для різних налаштувань партії

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


Дякую за відповідь ти працюєш Keras? все-таки встановити дані тесту в цьому пакеті?
користувач2991243

3
Ні, я цього не зробив. Це популярна методика в нейронних мережах, і цю термінологію ви можете побачити в різних бібліотеках, книгах та статтях. Ви хочете перевірити помилку даних тесту в кожну епоху або просто перевірити модель після навчання?
itdxer

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

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

1
Зазвичай, коли люди кажуть, що вони навчаються в Інтернеті batch_size=1. Ідея онлайн-навчання полягає в тому, що ви оновлюєте свою модель, як тільки побачите приклад. З більшим розміром партії це означає, що спочатку ви переглядаєте кілька зразків, перш ніж проводити оновлення. У RNN розмір партії може мати різні значення. Зазвичай прийнято розділяти навчальну послідовність на вікно фіксованого розміру (наприклад, 10 слів). У цьому випадку включення 100 таких вікон під час навчання означатиме, що у вас є batch_size=100.
itdxer

151

У термінології нейронної мережі:

  • одна епоха = один перехід вперед і один зворотний прохід з усіх прикладів тренувань
  • розмір партії = кількість навчальних прикладів в одному проході вперед / назад. Чим більший розмір партії, тим більше місця в пам'яті вам знадобиться.
  • кількість ітерацій = кількість проходів, кожен прохід, використовуючи [batch size] кількість прикладів. Щоб було зрозуміло, один прохід = один передній прохід + один зворотний прохід (ми не вважаємо прохідний і зворотний прохід як два різні проходи).

Приклад: якщо у вас 1000 прикладів тренувань, а розмір вашої партії становить 500, то для завершення 1 епохи знадобиться 2 повторення.

FYI: Розмір партії компромісу порівняно з кількістю ітерацій для тренування нейронної мережі


Але яка різниця між використанням прикладів [розмір партії] та тренуванням мережі на кожному прикладі та продовження наступних прикладів [розмір партії] чисел. Оскільки ви передаєте один приклад через мережу і застосовуєте SGD і приймаєте наступний приклад і так далі, це не матиме значення, якщо розмір партії 10 або 1000 або 100000. Після [batch size] кількість прикладів робиться наступним прикладом буде наступна партія. Це має значення лише в тому випадку, якщо кількість прикладів [batch size] кількість прикладів передасть [кількість ітерацій] разів мережі, а потім продовжить наступні приклади [batch size].
Ерхард Діньобл

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

Чим відрізняється епоха від ітерацій?
Goldname

1
Епоха @Goldname 1 включає всі приклади навчання, тоді як 1 ітерація включає лише [кількість партії] кількість навчальних прикладів.
Франк Дернонкурт

3

Вирішуючи задачу оптимізації за допомогою процесора, ви інтерактивно застосовуєте алгоритм над деякими вхідними даними. У кожному з цих ітерацій ви зазвичай оновлюєте метрику вашої проблеми, роблячи деякі обчислення даних. Тепер, коли розмір ваших даних великий, для завершення кожної ітерації може знадобитися значна кількість часу, і це може зайняти багато ресурсів. Тому іноді ви вирішите застосувати ці ітеративні обчислення до частини даних, щоб заощадити час та обчислювальні ресурси. Ця частина - batch_size, і процес називається (в нейронній мережі Lingo) пакетної обробки даних. Якщо ви застосовуєте свої обчислення для всіх своїх даних, ви здійснюєте обробку даних в Інтернеті. Я здогадуюсь, що термінологія походить з 60-х, і навіть раніше. Хтось пам'ятає. bat файли DOS? Але, звичайно, концепція втілена, щоб означати потік або частину даних, які будуть використовуватися.


2

Документацію Kerasпро розмір партії можна знайти в fitфункції в моделях (функціональний API) сторінка

batch_size: Цілий чи ні. Кількість зразків на оновлення градієнта. Якщо не вказано, batch_size за замовчуванням буде 32.

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

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