Интуиция Backpropagation: как работают шесть ключевых уравнений нейросети

DeepLearning.AI 104 тыс. 15 мин 4 мин 25.08.2017
Главное

В новом уроке курса от DeepLearning.AI сооснователь компании и известный эксперт в области машинного обучения Эндрю Ын (Andrew Ng) детально разбирает интуицию, стоящую за алгоритмом обратного распространения ошибки (backpropagation). Хотя лектор называет это видео опциональным для тех, кто не планирует глубоко погружаться в математический вывод, он подчеркивает, что понимание этих процессов критически важно для эффективной отладки и настройки нейронных сетей.

🧠 От логистической регрессии к нейронным сетям 0:00

Процесс обучения нейронной сети во многом опирается на те же принципы, что и логистическая регрессия, но в более сложном, многослойном масштабе . В логистической регрессии мы имеем прямой проход (forward pass), где последовательно вычисляются промежуточное значение $Z$, активация $A$ и, наконец, функция потерь (loss) .

Для обновления параметров используется обратный проход (backward pass):

Как отмечает Эндрю Ын, формула для $da$ в логистической регрессии выводится через вычисление производной функции потерь: $L(a, y) = -(y \log a + (1 - y) \log(1 - a))$ . При применении правил исчисления это дает выражение: $da = -y/a + (1 - y)/(1 - a)$ .

Ключевым моментом здесь является переход от $da$ к $dz$. Согласно правилу цепного дифференцирования (chain rule), $dz = da \cdot G'(z)$, где $G(z)$ — функция активации (в данном случае сигмоида) . После упрощения для логистической регрессии эта формула всегда сводится к элегантному $dz = a - y$ .

🏗️ Архитектура двухслойной сети: двойной расчет 3:19

В полноценной нейронной сети с одним скрытым слоем расчеты фактически дублируются. Вместо одного этапа, как в логистической регрессии, мы проходим два шага вперед и, соответственно, два шага назад .

Прямой проход в двухслойной сети выглядит следующим образом:

  1. Вычисление $z^{[1]}$ на основе входных данных $X$ и параметров первого слоя ($W^{[1]}, b^{[1]}$) .
  2. Получение активаций первого слоя $a^{[1]}$ через функцию $G^{[1]}$.
  3. Вычисление $z^{[2]}$ с использованием весов второго слоя $W^{[2]}$ и активаций $a^{[1]}$.
  4. Получение финального прогноза $a^{[2]}$ и расчет функции потерь .

Алгоритм обратного распространения (backpropagation) движется строго в обратном порядке. Интересно, что Эндрю Ын в практической реализации рекомендует объединять шаги вычисления $da$ и $dz$, чтобы сразу получать итоговое значение ошибки на узле . Так, для выходного слоя $dz^{[2]} = a^{[2]} - y$ .

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

📏 Важность контроля размерности матриц 6:40

Переход к скрытому слою требует более сложных вычислений. Чтобы вычислить $dz^{[1]}$, необходимо передать ошибку от выходного слоя назад через веса $W^{[2]}$ .

Формула выглядит так: $dz^{[1]} = (W^{[2]T} \cdot dz^{[2]}) * G^{[1]'}(z^{[1]})$

Здесь символ «$$» обозначает поэлементное произведение (element-wise product). Эндрю Ын* подчеркивает, что проверка размерности матриц — это лучший способ найти ошибки в коде нейросети . Например, если у нас $n^{[1]}$ скрытых узлов и один выходной узел:

Результат вычисления $dz^{[1]}$ также должен быть вектором $(n^{[1]}, 1)$. По словам лектора, если вы просто убедитесь, что размерности ваших матриц совпадают на каждом этапе, вы автоматически устраните большинство багов в реализации алгоритма .

🏎️ Векторизация: обработка всех данных одновременно 11:14

В реальных задачах обучение происходит не на одном примере, а на всей выборке сразу. Для этого используется векторизация, где индивидуальные векторы $z, a$ и $x$ объединяются в большие матрицы $Z, A$ и $X$, где столбцы соответствуют различным тренировочным примерам .

Эндрю Ын представляет шесть ключевых векторизованных уравнений для обратного прохода:

  1. $dZ^{[2]} = A^{[2]} - Y$ .
  2. $dW^{[2]} = (1/m) \cdot dZ^{[2]} \cdot A^{[1]T}$ (здесь добавляется коэффициент $1/m$, так как функция стоимости $J$ является средним арифметическим потерь по всем примерам) .
  3. $db^{[2]} = (1/m) \cdot \text{np.sum}(dZ^{[2]}, \text{axis}=1, \text{keepdims=True})$ .
  4. $dZ^{[1]} = (W^{[2]T} \cdot dZ^{[2]}) * G^{[1]'}(Z^{[1]})$ .
  5. $dW^{[1]} = (1/m) \cdot dZ^{[1]} \cdot X^T$ .
  6. $db^{[1]} = (1/m) \cdot \text{np.sum}(dZ^{[1]}, \text{axis}=1, \text{keepdims=True})$.

По мнению Эндрю Ына, вывод алгоритма обратного распространения — это одна из самых сложных математических задач в машинном обучении . Она требует глубоких знаний линейной алгебры и матричного исчисления. Тем не менее, он отмечает, что многим практикам в области Deep Learning достаточно иметь интуитивное понимание на том уровне, который представлен в видео, чтобы эффективно строить работающие модели .

В завершение лектор анонсирует следующую важную тему: правильную инициализацию весов. Он утверждает, что инициализация параметров нулями является ошибкой, и объясняет, почему для обучения нейросетей критически важна случайная инициализация .

💬 Цитаты

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

«Вывод алгоритма backpropagation — это одна из самых сложных математических задач, которые я видел в машинном обучении.»

👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Backpropagation (обратное распространение)
Алгоритм вычисления градиентов функции потерь, необходимых для обновления весов в нейронной сети.
Chain Rule (правило цепи)
Математическое правило нахождения производной сложной функции.
Vectorization (векторизация)
Метод выполнения операций над целыми массивами данных вместо циклов, ускоряющий вычисления.
Element-wise product
Операция умножения матриц, при которой перемножаются соответствующие друг другу элементы (также известна как произведение Адамара).
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект Эндрю Ын DeepLearning.AI Backpropagation нейронные сети градиентный спуск