# Как ускорить обучение нейросетей на больших данных с помощью мини-пакетов

Источник: https://www.youtube.com/watch?v=4qJaSmvhxi8
Канал: DeepLearning.AI
Опубликовано: 25.08.2017

---

В современном глубоком обучении работа с большими данными — это залог успеха, но и главный вызов для инфраструктуры. Эндрю Ын, основатель DeepLearning.AI, объясняет, почему классический подход к обучению нейросетей становится препятствием при работе с миллионами примеров и как алгоритм Mini-Batch Gradient Descent (мини-пакетный градиентный спуск) позволяет значительно ускорить процесс оптимизации.

## 🚀 Проблема масштаба: почему обычный градиентный спуск замедляется
[[JUMP:00:00]]

Создание прикладных систем машинного обучения — это эмпирический процесс, требующий обучения множества моделей для поиска наилучшей архитектуры [00:00]. Однако глубокое обучение лучше всего проявляет себя в режиме «Big Data», когда наборы данных исчисляются миллионами записей [00:26].

Эндрю Ын выделяет фундаментальную проблему классического пакетного градиентного спуска (Batch Gradient Descent):

*   **Использование векторизации:** Хотя упаковка всех $M$ примеров в матрицы $X$ и $Y$ позволяет избежать явных циклов `for`, при $M = 5\,000\,000$ или $50\,000\,000$ вычисления становятся непозволительно долгими [01:35].
*   **Низкая частота обновлений:** В стандартном подходе необходимо пропустить через сеть все 5 миллионов примеров только для того, чтобы сделать один маленький шаг в сторону уменьшения функции потерь [01:49].
*   **Неэффективность:** Пока не обработан весь гигантский датасет, алгоритм не делает никакого прогресса в обновлении весов, что крайне замедляет работу исследовательских команд [02:01].

## 🧩 Концепция Mini-Batch: разделение датасета на части
[[JUMP:02:14]]

Для решения проблемы медленного обучения Эндрю Ын предлагает разделять обучающую выборку на небольшие группы, называемые «мини-пакетами» (mini-batches) [02:20].

Представим датасет из 5 миллионов примеров ($M = 5\,000\,000$):

1.  Мы разбиваем его на порции по 1000 примеров в каждой [02:30].
2.  Результатом становятся 5000 таких «мини-пакетов» [03:24].
3.  Каждый такой фрагмент данных обозначается новой нотацией: $X^{\{t\}}$ и $Y^{\{t\}}$, где $t$ — номер пакета [04:04].

Эндрю Ын подчеркивает разницу в синтаксисе для избежания путаницы [04:19]:

*   $X^{(i)}$ — $i$-й обучающий пример (круглые скобки).
*   $Z^{[l]}$ — значение в $l$-м слое нейросети (квадратные скобки).
*   $X^{\{t\}}$ — $t$-й мини-пакет данных (фигурные скобки) [04:45].

Размерность такого мини-пакета $X^{\{1\}}$ будет составлять $(n_x, 1000)$, где $n_x$ — количество признаков, а 1000 — количество примеров в пакете [05:02].

## ⚙️ Механика алгоритма в действии
[[JUMP:06:10]]

Работа Mini-Batch Gradient Descent строится на цикле по всем мини-пакетам [06:20]. Внутри этого цикла выполняется один стандартный шаг градиентного спуска, но не для всего датасета, а только для текущей порции данных.

Процесс внутри одной итерации (для пакета $t$) [06:40]:

*   **Forward Propagation (Прямое распространение):** Вычисляются активации слоев с использованием $X^{\{t\}}$. Вместо всей матрицы $X$ в формулы подставляется текущий пакет [07:18].
*   **Compute Cost (Расчет стоимости):** Вычисляется функция потерь $J^{\{t\}}$ для конкретной тысячи примеров. Если используется регуляризация, она также добавляется к этому локальному значению [08:25].
*   **Backpropagation (Обратное распространение):** Вычисляются градиенты относительно $J^{\{t\}}$ с использованием данных только текущего мини-пакета [09:42].
*   **Update weights (Обновление весов):** Параметры сети $W$ и $b$ обновляются по классической формуле: $W := W - \alpha \cdot dW$ [09:59].

## 🔄 Эпохи против итераций: в чем преимущество?
[[JUMP:10:15]]

Одним из ключевых понятий, вводимых Эндрю Ыном, является термин **«эпоха» (epoch)**. Это один полный проход через весь обучающий набор данных [10:27].

Главное преимущество нового метода заключается во времени прогресса:

*   При стандартном пакетном спуске (Batch Gradient Descent) одна эпоха позволяет сделать только **один шаг** обновления параметров [10:41].
*   При мини-пакетном спуске (Mini-Batch Gradient Descent) за ту же самую одну эпоху алгоритм делает уже **5000 шагов** обновления (в примере с пакетами по 1000) [10:54].

Эндрю Ын утверждает, что при работе с большими данными Mini-Batch Gradient Descent работает гораздо быстрее и на сегодняшний день является стандартом индустрии — его использует практически каждый специалист в области Deep Learning [11:19]. Для достижения сходимости обычно требуется выполнить несколько таких эпох, добавив внешний цикл по всему процессу [11:07].