Конспект лекций Белой / Разработка ИИ. Конспект лекции №6. Белая
.docxГрадиентный спуск (Gradient descent)
1. Зачем нужен градиентный спуск?
При обучении нейронной сети мы ищем такие значения весов, при которых функция потерь (ошибка) минимальна. Градиентный спуск — это основной итерационный алгоритм оптимизации, позволяющий находить минимум функции многих переменных. В глубоком обучении он используется для обновления весов сети на каждом шаге обучения.
2. Постановка задачи
Дана функция потерь f(x_1, x_2, ..., x_n) : R^n -> R, например, среднеквадратичная ошибка или кросс-энтропия.
Требуется найти её локальный минимум (в идеале — глобальный).
Для простоты рассмотрим двумерный случай f(x_1, x_2), где x_1, x_2 — параметры модели (веса). Все выводы легко обобщаются на произвольное число измерений.
3. Градиент функции
Градиент ∇f — это вектор частных производных. Он указывает направление наискорейшего возрастания функции в данной точке.
∇f(x_1, x_2) = ( ∂f/∂x_1 (x_1, x_2) ; ∂f/∂x_2 (x_1, x_2) )
Примечание: в ваших фото ошибочно указана матрица 2×2. Правильно — вектор-столбец из двух компонент.
4. Идея метода градиентного спуска
Чтобы спуститься в минимум, нужно двигаться против градиента, то есть в сторону наискорейшего убывания функции.
Обновление параметров выполняется по правилу:
x_new = x_old - η · ∇f(x_old)
где:
· x = (x_1, x_2) — вектор параметров,
· η > 0 — скорость обучения (learning rate) — малый положительный параметр, задающий размер шага,
· ∇f(x_old) — градиент в текущей точке.
В ваших конспектах параметр обозначен как n или f, но стандартное обозначение — η (эта) или α.
5. Двумерный пример (иллюстрация)
Пусть f(x_1, x_2) = x_1^2 + x_2^2. Тогда:
∇f = ( 2·x_1 ; 2·x_2
Правило обновления:
x_1 ← x_1 - η · 2·x_1 = (1 - 2η)·x_1
x_2 ← x_2 - η · 2·x_2 = (1 - 2η)·x_2
При 0 < η < 1 каждая итерация приближает нас к минимуму в точке (0, 0).
6. Что означает «малый параметр»?
Скорость обучения η должна быть достаточно маленькой, чтобы мы не «перепрыгнули» минимум, но и не слишком маленькой, иначе сходимость будет крайне медленной. На практике η часто выбирают в диапазоне 10^{-4} ... 10^{-1} и могут адаптивно уменьшать в процессе обучения.
7. Алгоритм (кратко)
Вход: функция f, начальная точка x^(0), скорость η, точность ε или число итераций.
Выход: приближённое положение минимума x^*.
1. k = 0
2. Повторять:
· Вычислить градиент ∇f(x^(k))
· Обновить параметры: x^(k+1) = x^(k) - η · ∇f(x^(k))
· k = k + 1
3. Пока ||∇f(x^(k))|| > ε (или не достигнуто максимальное число итераций)
8. Замечания и особенности для нейросетей
· Стохастический градиентный спуск (SGD) — использует оценку градиента по одному случайному примеру или мини-батчу, что намного быстрее для больших данных.
· Проблемы: локальные минимумы, седловые точки, овраги. Для их решения применяют модификации: момент (Momentum), AdaGrad, Adam и др.
· Градиентный спуск лежит в основе алгоритма обратного распространения ошибки (backpropagation) в глубоких сетях.
9. Итог
Метод градиентного спуска — это простой и мощный итерационный алгоритм:
x_{t+1} = x_t - η · ∇f(x_t)
Он позволяет минимизировать функцию потерь, последовательно двигаясь против градиента. Понимание этой формулы — ключ к обучению любых нейронных сетей.
