Как Mini-batch Gradient Descent ускоряет обучение нейросетей в тысячи раз

DeepLearning.AI 73,9 тыс. 11 мин 3 мин 25.08.2017
Главное

В новом видеоуроке от образовательного проекта DeepLearning.AI подробно разбираются механизмы работы алгоритма градиентного спуска по мини-пакетам (Mini-batch Gradient Descent). Автор курса объясняет, почему этот метод стал «золотой серединой» между классическим пакетным и стохастическим подходами, а также дает конкретные рекомендации по выбору гиперпараметров для ускорения обучения нейросетей.

📈 Визуализация стоимости и проблема шума 0:00

При использовании классического пакетного градиентного спуска (Batch Gradient Descent) функция стоимости $J$ должна уменьшаться на каждой итерации . Если на каком-то этапе график идет вверх, это однозначно сигнализирует о проблеме, например, о слишком большой скорости обучения (learning rate) .

Однако в Mini-batch Gradient Descent ситуация иная. Поскольку на каждой итерации обрабатывается не весь набор данных, а лишь его часть ($X^{{t}}$, $Y^{{t}}$), график функции стоимости $J$ становится «шумным» . По мнению автора, такие колебания естественны:

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

⚖️ Две крайности: Batch против Stochastic 2:14

Размер мини-пакета — это гиперпараметр, который критически влияет на поведение алгоритма. Существуют два экстремальных значения:

  1. Batch Gradient Descent (Размер пакета = $m$): Весь обучающий набор рассматривается как один гигантский пакет. Главный недостаток — слишком долгое время обработки одной итерации при больших объемах данных .
  2. Stochastic Gradient Descent (Размер пакета = 1): Каждый обучающий пример становится отдельным пакетом. В этом случае прогресс заметен уже после первого примера, но алгоритм становится чрезвычайно шумным .

Эндрю Ын отмечает, что стохастический градиентный спуск никогда не сходится к истинному минимуму окончательно . Он будет «блуждать» и осциллировать в окрестностях оптимальной точки, но не остановится в ней. Для решения этой проблемы иногда применяют постепенное снижение скорости обучения .

🚀 Почему Mini-batch — оптимальный выбор 5:07

В практических задачах размер мини-пакета выбирается в диапазоне между 1 и $m$. Это позволяет использовать преимущества обоих подходов:

По словам эксперта, это обеспечивает максимально быстрое обучение на практике . Алгоритм движется к минимуму более уверенно, чем стохастический спуск, хотя и сохраняет небольшие колебания .

🛠 Практические рекомендации по настройке 8:16

Выбор конкретного размера мини-пакета зависит от размера вашего обучающего набора и аппаратного обеспечения. Автор предлагает следующие ориентиры:

  1. Для малых наборов данных: Если в вашей выборке менее 2000 примеров, нет смысла использовать мини-пакеты. Используйте обычный Batch Gradient Descent .
  2. Типичные размеры для больших выборок: В индустрии приняты значения от 64 до 512 .
  3. Магия степеней двойки: Поскольку компьютерная память организована определенным образом, код часто работает быстрее, если размер пакета является степенью двойки: 64, 128, 256 или 512 . Хотя Andrew Ng использовал число 1000 в примерах, на практике он рекомендует 1024 ($2^{10}$) .

Критический фактор: необходимо следить, чтобы весь мини-пакет ($X^{{t}}$, $Y^{{t}}$) полностью помещался в память CPU или GPU . Если данные не влезают в память, производительность алгоритма резко упадет («рухнет с обрыва»), так как системе придется обращаться к диску или использовать неэффективные методы подкачки .

В завершение автор подчеркивает, что размер мини-пакета — это такой же гиперпараметр, как и скорость обучения. Его стоит подбирать экспериментально, пробуя несколько значений (степеней двойки) и выбирая то, которое наиболее эффективно снижает функцию стоимости .

💬 Цитаты

«Если размер мини-пакета равен размеру всей выборки, вы просто возвращаетесь к пакетному градиентному спуску.»

«Ваш код может работать быстрее, если размер мини-пакета является степенью двойки.»

👥 Спикер
📖 Термины
Mini-batch
Подмножество обучающих данных, используемое для одной итерации обновления весов модели.
Epoch (Эпоха)
Один полный проход через весь обучающий набор данных.
Векторизация
Метод оптимизации вычислений, позволяющий выполнять операции над целыми массивами данных одновременно.
Stochastic Gradient Descent (SGD)
Вариант градиентного спуска, где обновление весов происходит после каждого отдельного примера.
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект Mini-batch Gradient Descent DeepLearning.AI векторизация гиперпараметры функция стоимости