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


221

Тренуючи нейронну мережу, яку різницю має встановити:

  • розмір партії до і кількість повторень bab
  • порівняно з розміром партії до та кількістю повторень dcd

де ?ab=cd

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

Я усвідомлюю, що чим більший розмір партії, тим більше місця потрібно в пам'яті, і це часто робить обчислення швидшими. Але що стосується працездатності навченої мережі, яка різниця це має?


1
Перегляньте цей блог, де описано, як вибрати правильний розмір партії, порівнюючи ефекти різних розмірів партії на точність набору даних Cifar-10.
Teja Sreenivas

Відповіді:


207

Від Нітіш Ширіш Кескар, Дехеваца Мудігере, Хорхе Ночедал, Михайло Смелянський, Пінг Так Пітер Танг. Про великомасштабні навчання для глибокого навчання: узагальнення генералізації та різкі мінімуми. https://arxiv.org/abs/1609.04836 :

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

[…]

2f(x)2f(x)

[…]

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

Крім того, кілька хороших висновків від Ian Goodfellow, що відповідають на те, чому б не використовувати весь навчальний набір для обчислення градієнта? на Quora:

Розмір курсу навчання обмежується здебільшого такими факторами, як викривлення функції витрат. Ви можете вважати спуск градієнта таким, як лінійне наближення до функції витрат, а потім переміщення вниз по тій приблизній вартості. Якщо функція витрат сильно нелінійна (сильно вигнута), то наближення не дуже добре буде дуже далеко, тому безпечні лише невеликі розміри кроків. Детальніше про це ви можете прочитати у розділі 4 підручника з глибокого вивчення, про числові обчислення: http://www.deeplearningbook.org/contents/numerical.html

Коли ви кладете m приклади до міні-партії, вам потрібно зробити обчислення O (m) та використовувати O (m) пам'ять, але ви зменшите величину невизначеності в градієнті на коефіцієнт лише O (sqrt (m)). Іншими словами, зменшується гранична віддача від розміщення більшої кількості прикладів у міні-партії. Більше про це можна прочитати у розділі 8 підручника з глибокого навчання, про алгоритми оптимізації для глибокого навчання: http://www.deeplearningbook.org/contents/optimization.html

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

Пов’язано: Пакетний градієнтний спуск порівняно зі стохастичним градієнтом


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

@ user12348 Як ви будете переставляти набір даних? Як ви могли оцінити, що даний параметр даних буде виробляти конкретний вектор функції після навчання?
Хмара Чо

46

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

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

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

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

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

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

Тепер давайте знайдемо середину, про яку ви питали. Ми можемо зрозуміти, що сучасні бібліотеки BLAS роблять обчислювальну векторну математику досить ефективною, тому обчислення 10 чи 100 зразків одночасно, припускаючи, що ви правильно векторизували свій код, буде ледве більшою роботою, ніж обчислення 1 зразка (ви отримуєте ефективність виклику пам'яті, а також обчислювальні трюки, вбудовані в найбільш ефективні математичні бібліотеки). І усереднення по партії 10, 100, 1000 зразків призведе до отримання градієнта, який є більш розумним наближенням справжнього, повного градієнта режиму. Таким чином, наші кроки тепер більш точні, тобто нам потрібно менше їх кількості для зближення, причому за ціною, яка лише незначно вище, ніж одноразовий GD.

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

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


22

TL; DR: Занадто великий розмір міні-партії зазвичай призводить до зниження точності!

Для тих, хто цікавиться, ось пояснення.

Існує два поняття швидкості:

  • Обчислювальна швидкість
  • Швидкість конвергенції алгоритму

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

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

По-перше, що означає зближення нашого алгоритму? Що ж, нам належить визначити і вирішити, коли ми задоволені точністю або помилкою, яку ми отримаємо, обчисленій на основі валідації. Ми можемо або визначити його заздалегідь, і чекати, коли алгоритм підійде до цього моменту, або ми можемо відстежувати навчальний процес і вирішити зупинити його, коли помилка перевірки починає значно зростати (модель починає переповнювати набір даних). Ми дійсно не повинні зупиняти це відразу, в перший момент, коли помилка починає зростати, якщо ми працюємо з міні-партіями, оскільки ми використовуємо Stochastic Gradient Descent, SGD. У випадку (повної партії) градієнтного спуску, після кожної епохи алгоритм встановлюється як мінімум, будь то локальний чи глобальний. SGD ніколи насправді не встановлюється як мінімум. Він постійно коливається навколо нього. Це може тривати нескінченно,

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

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

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

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

Якщо у вас є час, ознайомтеся з цією статтею: Систематичне оцінювання успіхів CNN у ImageNet Особливо перевірте "3.7. Розмір партії та швидкість навчання" та малюнок 8. Ви побачите, що великі розміри міні-пакетів призводять до гіршої точності , навіть якщо налаштування швидкості навчання на евристичну.

Взагалі, розмір партії 32 - це хороша відправна точка, і ви також повинні спробувати 64, 128 та 256. Інші значення (нижчі або вищі) можуть бути нормальними для деяких наборів даних, але заданий діапазон, як правило, найкраще почніть експериментувати з. Хоча під 32 років воно може надто повільно статися через значно меншу обчислювальну швидкість, оскільки не використовує векторизацію в повній мірі. Якщо у вас виникла помилка "поза пам'яттю", ви все одно спробуйте зменшити розмір міні-партії.

Отже, справа не просто у використанні найбільшого можливого розміру міні-партії, який вписується в пам'ять.

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

Не забувайте, що більш високий шум може допомогти йому вискочити з поганого локального мінімуму, а не залишити його в ньому.


14

Я додаю ще одну відповідь на це запитання, щоб посилатися на новий документ конференції ICLR (2018) від Google, який майже безпосередньо стосується цього питання.

Назва: Не знижуйте рівень навчання, збільште розмір партії

https://arxiv.org/abs/1711.00489

Реферат із наведеної статті копіюється тут:

Загальна практика знижувати рівень навчання. Тут ми показуємо, що зазвичай можна отримати однакову криву навчання як на навчальних, так і на тестових наборах, замість цього збільшуючи розмір партії під час тренінгу. Ця процедура є успішною для стохастичного градієнтного спуску (SGD), SGD з імпульсом, імпульсом Нестерова та Адама. Він досягає еквівалентної точності тесту після тієї ж кількості навчальних епох, але з меншою кількістю оновлень параметрів, що призводить до більшого паралелізму та скорочення часу навчання. Ми можемо додатково зменшити кількість оновлень параметрів, збільшивши швидкість навчання ϵ та зменшивши розмір партії B∝ϵ. Нарешті, можна збільшити коефіцієнт імпульсу m та шкалу B∝1 / (1 − m), хоча це, як правило, трохи знижує точність випробування. Принципово важливо, наші методи дозволяють нам змінити існуючі графіки тренувань для великих пакетних тренувань без налаштування гіперпараметрів. Ми тренуємо ResNet-50 на ImageNet до точності перевірки 76,1% за менше 30 хвилин.


1
Більша потреба в пам'яті здається поганою компромісною метою просто уникати зменшення значення. Також ІМХО, що збільшує слід пам’яті під час тренінгу, створює менший, не більше масштабований алгоритм.
P-Gn

3

Я показую деякі емпіричний досвід тут . Я здійснив експеримент із розміром партії 4 та розміром партії 4096. Розмір 4096 робить 1024x меншим розміром зворотних розповсюджень. Тож моя інтуїція полягає в тому, що більші партії роблять меншу кількість і більш чіткі кроки пошуку для оптимального рішення, і тому конструкція буде менше шансів сходитися на оптимальному рішенні.

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