Обучение нейросетей на основе SGD и Adam
SGD (Stochastic Gradient Descent)
SGD — это один из наиболее распространенных методов оптимизации для обучения нейросетей. Основная идея SGD заключается в следующем:
- Берется батч (подмножество) данных для обучения
- Вычисляется градиент функции потерь по отношению к весам модели
- Веса обновляются в направлении, противоположном градиенту, чтобы уменьшить функцию потерь
Математически один шаг SGD выглядит следующим образом:
w = w - η ∇Q(w;x,y)
где:
w — вектор весов модели
η — скорость обучения (learning rate)
∇Q(w;x,y) — градиент функции потерь по отношению к w
Преимущества SGD:
- Простота реализации
- Эффективность для больших данных, так как используются не все данные, а только батчи
Недостатки SGD:
- Медленная сходимость из-за шума при вычислении градиентов на маленьких батчах данных
- Необходимость правильной настройки скорости обучения
Adam
Adam (Adaptive Moment Estimation) — адаптивный алгоритм оптимизации, который вычисляет индивидуальные скорости обучения для каждого параметра модели.
Ключевые особенности Adam:
- Использует оценки первого (среднее) и второго (дисперсия) моментов градиента для адаптации скоростей обучения
- Сходится быстрее, чем классический SGD за счет адаптивности скоростей обучения
- Устойчив к резким изменениям градиента, так как придает больший вес градиентам с меньшей дисперсией
Формулы обновления весов в Adam:
m = β1*m + (1 - β1)*dx # обновление 1го момента (среднего) v = β2*v + (1 - β2)*(dx**2) # обновление 2го момента (дисперсии) x += - learning_rate * m / (np.sqrt(v) + eps)
где:
m — оценка 1го момента
v — оценка 2го момента
β1, β2 — коэффициенты сглаживания (обычно 0.9 и 0.999)
eps — малое число для стабильности
Преимущества Adam:
- Быстрая сходимость
- Малая чувствительность к выбору гиперпараметров (таких как скорость обучения)
- Хорошо подходит для обучения с большим количеством параметров и на больших объемах данных
Вопросы и ответы
В чем главное отличие между SGD и Adam?
Главное отличие в том, что SGD использует фиксированную скорость обучения, а Adam подстраивает скорость обучения для каждого параметра на основе оценок 1го и 2го моментов градиента. Благодаря этому Adam сходится быстрее и более устойчив к резким изменениям градиента.
Как выбрать скорость обучения в SGD?
Скорость обучения в SGD обычно выбирается эмпирически, на основе опыта. Хорошей стратегией является начать с небольшого значения (0.01) и увеличивать при необходимости. Слишком большая скорость обучения может привести к дивергенции и нестабильности обучения.
Какие гиперпараметры нужно настраивать в Adam?
В Adam основными гиперпараметрами являются скорость обучения, β1, β2. Скорость обучения можно оставить по умолчанию 0.001. β1 и β2 ставятся обычно около 0.9 и 0.999 соответственно. Их можно менять для ускорения или замедления адаптации скоростей обучения.