Эндрю Ын: «Лист бумаги — лучший инструмент отладки размерностей нейросетей»

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

Правильное определение размерностей матриц — один из самых критически важных навыков при построении глубоких нейронных сетей. В этом обучающем материале Эндрю Ын, основатель DeepLearning.AI и один из самых известных экспертов в области искусственного интеллекта, делится своей методикой отладки кода через проверку размерностей векторов и матриц.

📝 Главный инструмент отладки: лист бумаги и карандаш 0:00

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

Для иллюстрации процесса рассматривается пример нейронной сети с пятью слоями ($L=5$). В этой архитектуре:

Размерности слоев (количество нейронов в каждом) в примере распределены следующим образом:

📏 Формула весов: как определить размерность $W$ 1:40

Ключевым уравнением для каждого слоя является расчет $Z^{[l]} = W^{[l]} \cdot A^{[l-1]} + b^{[l]}$. На первом этапе анализа Эндрю Ын предлагает временно игнорировать смещение ($b$) и сосредоточиться на параметрах весов ($W$) .

Для первого скрытого слоя уравнение выглядит так: $Z^{[1]} = W^{[1]} \cdot X$.

Чтобы результат умножения матрицы на вектор $(2, 1)$ дал вектор $(3, 1)$, матрица $W^{[1]}$ по правилам матричного умножения обязана иметь размерность $(3, 2)$ .

На основе этого выводится общее правило: размерность матрицы весов $W^{[l]}$ для любого слоя $L$ должна составлять $(n^{[l]}, n^{[l-1]})$ .

Примеры для слоев рассматриваемой сети:

➕ Смещение и градиенты: векторы $b$ и производные 4:46

Размерность вектора смещения $b$ определяется проще. Поскольку результат операции $W \cdot A$ дает вектор размерности $(n^{[l]}, 1)$, то и вектор $b$, который суммируется с ним, должен иметь ту же размерность .

Основные выводы по параметрам:

  1. Матрица $W^{[l]}$: размерность $(n^{[l]}, n^{[l-1]})$ .
  2. Вектор $b^{[l]}$: размерность $(n^{[l]}, 1)$ .
  3. Градиенты: размерности $dW$ и $db$ всегда должны в точности совпадать с размерностями соответствующих параметров $W$ и $b$ .

Эндрю Ын также отмечает, что в стандартных сетях размерности $Z^{[l]}$ и $A^{[l]}$ идентичны, так как функция активации применяется поэлементно и не меняет форму матрицы .

🚀 Векторизация: переход от одного примера к обучающей выборке 6:56

При переходе от вычислений для одного примера к векторной реализации для всей обучающей выборки (размером $m$), размерности некоторых параметров меняются. Однако размерности весов $W$, смещений $b$ и их производных $dW$ и $db$ остаются неизменными .

Изменения касаются векторов активаций и входных данных, которые превращаются в матрицы:

Важное замечание касается параметра $b$. Несмотря на то, что $b$ остается вектором $(n^{[l]}, 1)$, при сложении с матрицей $W \cdot X$ (размером $n^{[l]}, m$) в Python срабатывает механизм broadcasting (транслирование) . Программа автоматически дублирует вектор $b$ нужное количество раз, чтобы превратить его в матрицу $(n^{[l]}, m)$ для поэлементного сложения .

🛠 Заключение: борьба с багами 10:10

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

В следующем материале автор обещает разобрать вопрос, почему именно глубокие нейронные сети (deep networks) демонстрируют такую высокую эффективность по сравнению с «мелкими» (shallow) моделями .

💬 Цитаты

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

Эндрю Ын 0:00

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

👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Broadcasting (Транслирование)
Механизм в Python (библиотека NumPy), позволяющий выполнять арифметические операции над массивами разных, но совместимых размерностей.
Forward Propagation (Прямое распространение)
Процесс передачи входных данных через слои нейронной сети для получения предсказания.
Backpropagation (Обратное распространение ошибки)
Алгоритм вычисления градиентов для обновления весов нейронной сети.
Векторизация
Метод ускорения вычислений путем замены циклов на операции над целыми матрицами и векторами.
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект DeepLearning.AI Andrew Ng матрицы нейронные сети векторизация