Що таке Батч нейронні мережі

Що таке Батч нейронні мережі



Batch Normalization (батч-нормалізація) Що таке?

Вам щось каже термін внутрішній коварійний зсув:

internal covariance shift

Звучить дуже розумно, чи не так? І не дивно. Це поняття в 2015-му році ввели два співробітники корпорації Google:

Sergey Ioffe та Christian Szegedy (Іоффе та Сегеді)

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

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

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

А розподіл усієї безлічі кольорів машин, що зустрічаються в тестовій вибірці у вигляді синього графіка. Як бачите ці графіки мають різні МО та дисперсії. Ця різниця статистичних характеристик і призводить до підступного зрушення. І тепер ми розуміємо: якщо таке зрушення має місце, то це негативно позначається на роботі НР.

Але це приклад зовнішнього підступного зсуву. Його легко виправити, помістивши в навчальну вибірку потрібну кількість машин із різними кольорами. Є ще внутрішнє коварійне зрушення – це коли статистична картина змінюється всередині мережі від шару до шару:

Сама по собі така зміна статистик не несе жодних проблем. Проблеми виявляються в процесі навчання, коли при зміні ваги зв'язків попереднього шару статистичний розподіл вихідних значень нейронів поточного шару стає помітно іншим. І цей змінений сигнал йде на вхід наступного шару. Це схоже на те, наче на вхід прихованого шару надходять то машини чорного кольору, то машини червоного кольору чи якогось іншого. Тобто, вагові коефіцієнти в межах міні-батчу лише адаптувалися до чорних автомобілів, як у наступному міні-батчі їм доводиться адаптуватися до іншого розподілу – червоних машин і так постійно. У ряді випадків це може суттєво знижувати швидкість навчання і, крім того, для адаптації в таких умовах доводиться встановлювати мале значення кроку збіжності, щоб вагові коефіцієнти мали можливість підлаштовуватись під різні статистичні розподіли.

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

Залишилося з'ясувати: які показники і як слід нормувати. З теорії ймовірностей ми знаємо, що найзначніші їх – перші дві: МО і дисперсія. Так ось, в алгоритмі batch normalization їх призводять до значень 0 і 1, тобто формують розподіл з нульовим МО та одиничною дисперсією.Трохи пізніше я докладніше поясню як це робиться, а поки що відповімо на друге питання: для яких величин і в який момент проводиться це нормування? Розробники цього методу рекомендували мати нормування для величин перед функцією активації:

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

Що ж собою являє batch normalization і де статистики? Згадаймо, що НР навчається пакетами спостережень – батчами. І для кожного спостереження з batch на вході кожного нейрона виходить значення суми:

Тут m – це розмір пакета, кількість спостережень у батчі. Так ось статистики обчислюються для величин V в межах одного batch:

І, далі, щоб вектор V мав нульову середню та одиничну дисперсію, кожне значення перетворюють за очевидною формулою:

тут - невелике позитивне число, що виключає розподіл на нуль, якщо дисперсія буде близька до нульових значень. У результаті вектор

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

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

Тому нормовані величини додатково масштабуються та зміщуються відповідно до формули:

Параметри з початковими значеннями 1 і 0 підбираються в процесі навчання СР за допомогою того ж алгоритму градієнтного спуску.Тобто, у мережі з'являються додаткові змінні, що настроюються, крім вагових коефіцієнтів.

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

Спочатку будувати нейронні мережі без batch normalization (або dropout) і якщо спостерігається повільне навчання чи ефект перенавчання, можна спробувати додати batch normalization або dropoutале не обидва разом.

Реалізація batch normalization у Keras

Давайте тепер подивимося як можна реалізувати цей алгоритм у пакеті Keras. Для цього існує клас спеціального шару, який так і називається: keras.layers.BatchNormalization Він застосовується до виходів попереднього шару, після якого вказаний у моделі СР, наприклад:

model  = keras.Sequential([ Flatten(input_shape=(28,
28,
1)), Dense(300, activation='relu'), BatchNormalization(), Dense(10, activation='softmax')
])

Тут нормалізація застосовується до виходів прихованого шару, що складається з 300 нейронів. Щоправда в такій простій СР нормалізація, швидше, негативно позначається на навчанні. Цей метод зазвичай допомагає при великій кількості шарів, тобто при deep learning.

Нейросеть: у чому різниця між Batch та Epoch

Стохастичний градієнтний спуск – це алгоритм навчання, який має низку гіперпараметрів.
Два гіперпараметри, які часто плутають новачків, – це розмір пакету та кількість епох. Вони обидва є цілими значеннями і, здається, відображають те саме.
Підкреслимо різницю між партіями та епохами у стохастичному градієнтному узвозі.
У чому різниця між Партією та Епохою у Нейронній мережі?

Стохастичний Градієнтний спуск

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

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

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

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

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

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

Перш ніж ми поринемо в серії та епохи, давайте подивимося, що ми маємо на увазі під зразком.

Дізнайтесь більше про градієнтний спуск тут:

Градієнтний Узвіз Для Машинного Навчання

Приклад - це один рядок даних.

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

Навчальний набір даних складається з множини рядків даних, наприклад, множини вибірок. Зразок також може називатися екземпляром, спостереженням, вектором вхідним або вектором ознак.

Тепер, коли ми знаємо, що таке зразок, визначимо партію.
Що таке партія?

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

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

Набір навчальних даних може бути поділено на один або кілька пакетів.

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

Пакетний Градієнтний Узвіз. Розмір пакета = Розмір навчального набору
Стохастичний Градієнтний Узвіз. Розмір партії = 1
Міні-пакетний градієнтний спуск. 1

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

Що робити, якщо набір даних не ділиться рівномірно за розміром пакета?

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

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

Для отримання додаткової інформації про відмінності між цими варіантами градієнтного спуску див.

Коротке введення в Градієнтний спуск Міні-пакетів та Як налаштувати розмір пакету

Для отримання додаткової інформації про вплив розміру пакета на процес навчання див.

Як контролювати швидкість та стабільність навчання нейронних мереж Розмір пакета

Пакет включає оновлення моделі з використанням зразків; Далі давайте розглянемо епоху.
Що таке Епоха?

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

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

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

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

Зазвичай створюються лінійні графіки, які показують епохи вздовж осі x як час, і навіть помилки чи навички моделі по осі y. Ці графіки іноді називають кривими навчання. Ці графіки можуть допомогти визначити, чи є модель надмірно вивченою, недостатньо вивченою або придатною для навчального набору даних.

Для отримання додаткової інформації про діагностику за допомогою кривих навчання в мережах LSTM див.

М'яке введення у криві навчання для діагностики продуктивності моделі

Якщо це все ще неясно, давайте розглянемо різницю між партіями і епохами.
У чому різниця між Партією та Епохою?

Розмір партії – це кількість зразків, оброблених до оновлення моделі.

Кількість епох - це кількість повних проходів через навчальний набір даних.

Розмір пакета повинен бути більшим або дорівнює одиниці і менше або дорівнює кількості вибірок в навчальному наборі даних.

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

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

Ви повинні вказати розмір пакета та кількість епох для алгоритму навчання.

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

Нарешті, конкретизуємо це на невеликому прикладі.

Припустимо, у вас є набір даних з 200 зразками (рядками даних), і ви вибираєте розмір пакета від 5 до 1000 епох.

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

Це також означає, що одна епоха включатиме 40 пакетів або 40 оновлень моделі.

З 1000 епохами модель буде піддана впливу або пройде через весь набір даних 1000 разів. Це 40 000 партій за весь навчальний процес.
Подальше Читання

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

Градієнтний Узвіз Для Машинного Навчання
Як контролювати швидкість та стабільність навчання нейронних мереж Розмір пакета
Коротке введення в Градієнтний спуск Міні-пакетів та Як налаштувати розмір пакету
М'яке введення у криві навчання для діагностики продуктивності моделі
Стохастичний градієнтний спуск у Вікіпедії
Зворотне поширення у Вікіпедії

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

Зокрема, ви дізналися:

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

У вас є якісь питання?

Ось найпопулярніші коментарі:


Чи змінюється наповнення пакетів від епохи до епохи?


Так. Зразки перемішуються в кінці кожної епохи, і партії в різні епохи розрізняються з точки зору зразків, що містяться в них.


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


Ви можете оцінити це, перетасувавши зразки, а не перетасувавши зразки, подані в LSTM під час навчання або виведення.


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


Ні. Кожен зразок має одну можливість, яку можна використовувати для оновлення моделі в кожну епоху.

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

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

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

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

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


Так, якщо ви хочете, щоб модель навчалася в декількох підпослідовності.

Я маю кілька повідомлень, які демонструють це за розкладом.

дякую вам за ваше пояснення дійсно дуже велике дякую ще раз


Це дуже ясно. Дякую.
Я також бачу "steps_per_epoch" у деяких випадках, що це означає? Це те саме, що й партії?


Кількість пакетів, які потрібно витягти з генератора, щоб визначити епоху.


Ми любимо приклади! Велике вам спасибі!

Привіт,
В даний час я працюю з Word2Vec. У зв'язку з епохами та розміром партії я все ще не зовсім розумію, що таке зразок. Вище ви описали, що зразок є одним рядком даних. У своїй програмі я спочатку редагую свій текстовий файл за допомогою SentenceIterator, щоб отримати одну пропозицію на рядок, а потім використовую маркер для отримання окремих слів у цих рядках. Чи є зразок у Word2Vec словом з набору даних чи це рядок (що містить пропозицію)? Заздалегідь велике вам спасибі?


Термінологія samples/epoch/batch не відповідає word2vec. Натомість у вас просто є навчальний набір даних тексту, з якого ви вивчаєте статистику.
Відповісти


Але за допомогою програми Word2Vec у вас є гіперпараметри Епох, ітерацій і розміру пакета, які ви можете встановити… Чи не здається вам, що вони також впливають на результати Word2Vec.
Як я тепер зрозумів, набір, який передається як пакет, містить одну пропозицію. Однак я здивований, що кількість ітерацій не змінюється, якщо змінюю кількість епох і розміри пакетів, але не визначаю ітерації конкретно. Ти знаєш, як це працює?


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

Після кожної епохи точність або покращується, або іноді ні. Наприклад, епоха 1 досягла точності 94, а епоха 2 досягла точності 95. Після закінчення епохи 1 ми отримуємо нові ваги (тобто оновлені після останньої партії епохи 1). Чи означає це, що нові ваги, які використовуються в епоху 2, починають покращувати його з 94% до 95%? Якщо так, то це причина того, що якась епоха отримує нижчу точність порівняно з попередньою епохою через узагальнення ваг для всього набору даних? Ось чому ми отримуємо хорошу точність після проходження стільки епох завдяки кращому узагальненню?


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

Іноді може бути гарною ідеєю припинити тренування раніше

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


Зазвичай дані перемішуються перед кожною епохою.

Зазвичай ми не вибираємо зразки із заміною, оскільки це призведе до зміщення навчання.


Якщо я маю 1000 навчальних вибірок і мій розмір пакета =400, то мені потрібно видалити 200 вибірок
виходячи з моїх тренувальних даних, мої тренувальні дані завжди повинні бути кратні розміру пакета


Ні, зразки будуть перемішуватися перед кожною епохою, тоді ви отримаєте 3 партії, 300, 300 та 200.

Краще вибрати розмір партії, який ділить зразки рівномірно, якщо це можливо, наприклад, 100, 200 або 500 у вашому випадку.


дякую за вашу чудову статтю, і я маю питання
якщо я маю наступні налаштування і я використовую функцію fit_generator
епохи = 100
дані = 1000 зображень
партія = 10
крок_пер_пошти = 20
я знаю, що маю встановити значення step_per_epochs = (1000/10)= 100, але якщо я встановлю його рівним 20

Чи означають ці налаштування, що модель навчатиметься з використанням лише частини навчальних даних (у кожну епоху будуть використовуватися ті самі 200 зображень (пакет*step_per_epochs)), а не всі 1000 зображень?
або він буде використовувати перші 200 зображень у наборі даних у першу епоху, потім наступні 200 зображень у другу епоху і так далі (розділить 1000 зображень на кожні 5 епох), і модель буде навчена 20 разів з використанням всього навчального набору даних у 100 епохах
Дякую


Так, використовуватиметься лише 200 зображень за епоху.

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

Якби я створював свої власні пакети користувача, скажімо, в методі model.fit_generator().

Чи ми створюємо нові випадково відібрані партії для кожної епохи, чи ми просто створюємо партії в __init__ і використовуємо їх без будь-яких змін протягом усього навчання?

Який спосіб, що рекомендується?

P.S. Якщо я довільно відбираю партії у кожну епоху, я бачу сплески в val_acc, але не впевнений, що це через це!

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

Якщо ні, ви будете переміщати ваги всюди чи вперед/назад при кожному оновленні, а не узагальнювати добре.


Дякую вам за вашу відповідь.

Я також тільки що підтвердив, що Keras розділить наданий X у міні-пакетах лише один раз, перш ніж увійти до циклу епохи.


Сьогодні мені на думку спало одне питання.

Що відбувається під час навчання нейронної мережі в міні-пакетах, коли мітки класів незбалансовані. Чи повинні ми розшаровувати партії?

Тому що здається, що мій NN передбачає лише домінуючий клас, що б я не робив!

Чудове питання. У нас бувають погані часи!

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

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

Я обов'язково подивлюся на цю книгу.

До речі, я справді займаюся рейтинговим бізнесом. Так що в мене дуже мало 1-го та 2-го рангу, але багато 3-го та вище, десь як (10%, 10%, 80%) відповідно.

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

У мене є питання – Якщо я правильно зрозумів, ваги та усунення оновлюються після виконання пакета, тому будь-які зміни після запуску пакета застосовуються до наступного пакету? І так продовжується і далі.


Зараз я перебуваю в середині вивчення практичного машинного навчання, і частина 2 у розділі 11 я не можу зрозуміти значення пакетної обробки. Спочатку я думаю, що нейронна мережа повинна навчатися за зразком один за одним. Але вони сказали “партію”, і я не можу зрозуміти на землі.
Але ваша стаття дає мені гарне уявлення про партію.
Я повністю розумію вас лише з одного питання.
Як я можу використати метод градієнта з пакетною обробкою?
Я маю на увазі, що в одному прикладі це зрозуміло.
Але з пакетною обробкою я не розумію як оцінити помилку.
Дякую.


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

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

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

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

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

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

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


Дякую, що поділилися.


Це блискуче та прямолінійно. Дякую за міні-курс


Я радий, що це допомогло.


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

Так, якщо ви хочете, щоб модель навчалася в декількох підпослідовності.

Я маю кілька повідомлень, які демонструють це за розкладом.


дякую вам за ваше пояснення дійсно дуже велике дякую ще раз


Я радий, що це допомогло.


Я читав багато блогів, написаних вами про такі речі. Це мені дуже допомагає, дякую!

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

Я також бачу "steps_per_epoch" у деяких випадках, що це означає? Це те саме, що й партії?


Кількість пакетів, які потрібно витягти з генератора, щоб визначити епоху.


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

Глибока оптимізація згорткових нейронних мереж: Аналіз методів покращення моделі на прикладі CIFAR-10

Згорткові нейронні мережі (CNN) стали основою для обробки зображень та комп'ютерного зору. Однак їхнє навчання вимагає ретельного налаштування архітектури та гіперпараметрів, що може бути складним завданням, особливо при роботі з великими наборами даних. У цій статті ми докладно розглянемо кілька методів оптимізації, які використовуються для підвищення продуктивності CNN на прикладі набору даних CIFAR-10, і покажемо, як різні техніки впливають на втрати та точність моделі. Ми протестуємо аугментацію даних, різні архітектурні рішення, такі як Batch Normalization та Dropout, та адаптивні підходи до навчання.

Набір даних CIFAR-10 та передобробка

CIFAR-10 - це один із найпопулярніших наборів даних для навчання моделей комп'ютерного зору. Він містить 60,000 зображень розміром 32x32 пікселів, розділених на 10 класів, що робить його чудовим кандидатом для тестування ефективності різних методів оптимізації.

import torch from torch.utils.data import DataLoader from torchvision import datasets, transforms # Визначення перетворень для набору даних CIFAR-10 transform_cifar = transforms.Compose([ transforms.RandomHorizontalFlip(), transforms.RandomCrop(42) .ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) # Завантаження набору даних cifar10_train = datasets.CIFAR10(root='data', train=True, transform= , download=True) cifar10_loader_train = DataLoader(cifar10_train, batch_size=32, shuffle=True)

Для експерименту ми застосували кілька різних перетворень, включаючи аугментацію із передобробкою на основі наборів даних Fashion-MNIST та SVHN.

# Завантаження кожного набору даних з передобробкою cifar10_loader = DataLoader(cifar10_train, batch_size=32, shuffle=True) e) # Додаємо трансформацію для повторення каналу в Fashion-MNIST transform_fmnist_rgb = transforms.Compose([ transform_fmnist, # Поточні трансформації для FMNIST Lambda(lambda x: x.repeat(3, 1, 1)) # Завантажуємо канал 3 рази ]) -MNIST з трансформацією повторення каналів fmnist_cifar_transform = DataLoader( datasets.FashionMNIST(root='data', train=True, transform=transform_fmnist_rgb, download=True), batch_size=32, shuffle=True ) svhn_lo , shuffle=True) # Завантаження CIFAR-10 з альтернативною передобробкою cifar10_fmnist_transform = DataLoader(datasets.CIFAR10(root='data', train=True, transform=transform_fmnist, download=True), batch_size=31 DataLoader(datasets.CIFAR10(root='data', train=True, transform=transform_svhn, download=True), batch_size=32, shuffle=True) # Завантаження Fashion-MNIST з альтернативною передобробкою #fmnist_cifar_transform = DataLoader( root='data', train=True, transform=transform_cifar, download=True), batch_size=32, shuffle=True) fmnist_svhn_transform = DataLoader(datasets.FashionMNIST(root='data', train=True, transform=transform_svhn) =True), batch_size=32, shuffle=True) # Завантаження SVHN з альтернативною передобробкою svhn_cifar_transform = DataLoader(datasets.SVHN(root='data', split='train', transform=transform_cifar, download=True), batch_size=3 , shuffle=True) svhn_fmnist_transform = DataLoader(datasets.SVHN(root='data', split='train', transform=transform_fmnist, download=True), batch_size=32, shuffle=True)

Експеримент 1: Вплив передопрацювання даних

Різні методи попередньої обробки можуть впливати на те, які особливості зображень витягує модель.Ми протестували кілька варіантів, включаючи стандартну передобробку CIFAR-10, а також трансформації адаптовані з інших наборів даних:

  • Оригінальна передобробка CIFAR-10
  • Передобробка на основі Fashion-MNIST
  • Передобробка на основі SVHN

Навчання CIFAR-10 з власною передобробкою:

Подібні статті

Останні статті

Категорії