заглушки Що таке градієнтний спуск? - Об'єднуйтесь.AI
Зв'язатися з нами
Майстер-клас ШІ:

AI 101

Що таке градієнтний спуск?

mm
оновлений on

Що таке градієнтний спуск?

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

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

Що таке градієнти?

Припустімо, що існує графік, який відображає кількість помилок, які робить нейронна мережа. Нижня частина графіка представляє точки з найменшою похибкою, а верхня частина графіка – це місце, де похибка є найвищою. Ми хочемо рухатися від верхньої частини графіка донизу. Градієнт — це лише спосіб кількісного визначення співвідношення між помилкою та вагами нейронної мережі. Зв'язок між цими двома речами можна позначити на графіку як нахил, а неправильні ваги створюють більше помилок. Крутизна схилу/градієнта показує, наскільки швидко модель навчається.

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

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

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

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

Обчислення градієнтів і градієнтного спуску

Градієнтний спуск починається з місця великих втрат і шляхом кількох ітерацій робить кроки в напрямку найменших втрат, прагнучи знайти оптимальну конфігурацію ваги. Фото: Роман Сузі через Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Щоб здійснити градієнтний спуск, градієнти спочатку повинні бути обчислені. В порядку для розрахунку градієнта, нам потрібно знати функцію втрати/вартість. Ми використаємо функцію витрат, щоб визначити похідну. У обчисленні похідна просто стосується нахилу функції в даній точці, тому ми просто обчислюємо нахил пагорба на основі функція втрат. Ми визначаємо втрати, пропускаючи коефіцієнти через функцію втрат. Якщо ми представляємо функцію збитків у вигляді «f», тоді можна стверджувати, що рівняння для обчислення збитків виглядає наступним чином (ми просто запускаємо коефіцієнти через вибрану нами функцію витрат):

Втрата = f(коефіцієнт)

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

дельта = похідна_функція (втрата)

Тепер ми визначили напрямок спуску до точки найменших втрат. Це означає, що ми можемо оновити коефіцієнти в параметрах нейронної мережі та, сподіваємось, зменшити втрати. Ми оновимо коефіцієнти на основі попередніх коефіцієнтів за мінусом відповідної зміни значення, визначеного напрямком (дельта) та аргументом, який контролює величину зміни (розмір нашого кроку). Аргумент, який керує розміром оновлення, називається «рівень навчання” і ми представимо його як “альфа”.

коефіцієнт = коефіцієнт – (альфа * дельта)

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

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

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

Типи градієнтного спуску

Тепер, коли ми розуміємо, як взагалі працює градієнтний спуск, давайте подивимося на деякі відмінності види градієнтного спуску.

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

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

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

Блогер і програміст зі спеціальностями в машинне навчання та Глибоке навчання теми. Деніел сподівається допомогти іншим використовувати силу ШІ для суспільного блага.