Я розумію, що стохастичний градієнтний спуск може бути використаний для оптимізації нейронної мережі за допомогою зворотного розповсюдження шляхом оновлення кожної ітерації іншим зразком навчального набору даних. Яким повинен бути розмір партії?
Я розумію, що стохастичний градієнтний спуск може бути використаний для оптимізації нейронної мережі за допомогою зворотного розповсюдження шляхом оновлення кожної ітерації іншим зразком навчального набору даних. Яким повинен бути розмір партії?
Відповіді:
«Розмір вибірки» ви говорите, називається розміром партії , . Параметр розміру партії - це лише один із гіпер-параметрів, які ви будете налаштовувати, коли ви тренуєте нейронну мережу з міні-пакетним стохастичним градієнтним зниженням (SGD) і залежить від даних. Найбільш основний метод пошуку гіпер-параметрів - це пошук сітки за швидкістю навчання та розміром партії, щоб знайти пару, яка змушує мережу зближуватися.
Щоб зрозуміти, яким повинен бути розмір партії, важливо побачити залежність між похилом градієнта партії, онлайн-SGD та міні-пакетним SGD. Ось загальна формула для кроку оновлення ваги в міні-пакетному SGD, що є узагальненням усіх трьох типів. [ 2 ]
Зауважимо, що з 1 функція втрат більше не є випадковою величиною і не є стохастичним наближенням.
SGD перетворюється швидше, ніж звичайний "пакетний" градієнтний спуск, оскільки оновляє ваги після перегляду випадково вибраного підмножини тренувального набору. Нехай - наш навчальний набір, і нехай . Розмір партії - це просто кардинальність :.
Пакетний градієнт спуску оновлює ваги використовуючи градієнти всього набору даних ; тоді як SGD оновлює ваги, використовуючи середнє значення градієнтів для міні-партії . (Використання середнього на відміну від суми заважає алгоритму робити занадто великі кроки, якщо набір даних дуже великий. Інакше вам потрібно буде скорегувати швидкість навчання, виходячи з розміру набору даних.) Очікуване значення цього стохастичне наближення градієнта, використовуваного в SGD, дорівнює детермінованому градієнту, що використовується при партійному градієнті спуску. .
Кожен раз, коли ми беремо зразок і оновлюємо вагу, це називається міні-партією . Кожен раз, коли ми пробігаємо через весь набір даних, це називається епохою .
Скажімо, у нас є деякий вектор даних , початковий вектор ваги, який параметризує нашу нейронну мережу, і функція втрати що ми намагаємося мінімізувати . Якщо у нас є приклади тренінгу та розмір партії , то ми можемо розділити ці приклади тренінгу на міні-партії C:
Для простоти можна припустити, що Т рівномірно ділиться на В. Хоча, коли це не так, як це часто не відбувається, належну вагу слід присвоїти кожній міні-партії як функцію її розміру.
Ітераційний алгоритм для SGD з епохами наведено нижче:
Примітка. У реальному житті ми читаємо дані навчальних прикладів із пам’яті, і завдяки попередньому вибору кешу та інших хитростях пам’яті, виконаних вашим комп’ютером, ваш алгоритм буде працювати швидше, якщо доступ до пам’яті зведений , тобто коли ви читаєте пам'ять щоб не стрибати навмання. Отже, більшість реалізацій SGD перетасовують набір даних і потім завантажують приклади в пам'ять у тому порядку, коли вони будуть прочитані.
Основними параметрами для ванільного (без імпульсу) SGD, описаного вище, є:
Мені подобається думати про епсилон як функцію від кількості епох до рівня навчання. Ця функція називається графіком курсу навчання .
Якщо ви хочете, щоб рівень навчання був фіксований, просто визначте epsilon як постійну функцію.
Розмір партії визначає, скільки прикладів ви дивитесь, перш ніж оновлювати вагу. Чим він нижчий, тим гучнішим буде тренувальний сигнал, чим він вищий, тим довше буде потрібно для обчислення градієнта для кожного кроку.
Посилання та додаткове читання:
For simplicity we can assume that D is evenly divisible by B
. Ви не маєте на увазі, що Т повинен бути рівномірно поділений на В?
B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.
(з статті Бенджіо 2012)