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

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

Показанная выше нейронная сеть содержит один входной слой, четыре скрытых слоя и один выходной слой.

Входные данные X для сети содержат m выборок, каждая из которых содержит n𝕩 (в данном примере = 2) признаков.

На рисунке показан только один образец, который представлен слоем l₀.

Скрытый слой

l₁ содержат n₁ (=4) нейронов,

l₂ содержит n₂ (=5) нейронов,

l₃ содержит n₃ (=3) нейронов,

l₄ n₄ (=2) нейронов и

l₅ n₅ (=1) выход.

Вес между слоями

l₀ и l₁ определяются как w⁽¹⁾,

между l₁ и l₂ определяется как w⁽²⁾

и так далее до w⁽⁵⁾ между слоями l₄ и l₅.

Соответствующие точки пересечения: b⁽¹⁾,b⁽²⁾…b⁽⁵⁾.

Функции активации на каждом уровне задаются g⁽ⁿ⁾(), где n представляет номер слоя.

Первый слой входного вектора x может быть представлен активацией a⁽⁰⁾, а последующие активации могут быть заданы a⁽¹⁾, a⁽²⁾…a⁽⁵⁾.

Шаги прямого распространения:

  1. z⁽¹⁾ = w⁽¹⁾x + b⁽¹⁾

Учитывая только один образец, размеры

x имеет форму (n𝕩,1), а z⁽¹⁾ имеет форму (n₁,1).

Это означает, что форма w⁽¹⁾ должна быть такой, что когда скалярное произведение w⁽¹⁾ взято с x в форме (n𝕩,1), результирующая матрица имеет форму (n₁,1).

Итак, используя правила умножения матриц,

(матрица A в форме (m,n), умноженная на матрицу B в форме (n,k), дает матрицу в форме C (m,k) )

форма w⁽¹⁾ будет задана (n₁,n𝕩).

Форма b⁽¹⁾ будет такой же, как у z⁽¹⁾, то есть (n₁,1).

2. a⁽¹⁾ = g⁽¹⁾(z⁽¹⁾)

поскольку a⁽¹⁾ является функцией z⁽¹⁾, форма

a⁽¹⁾ будет таким же, как и z⁽¹⁾, то есть (n₁,1).

3. z⁽²⁾ = w⁽²⁾.a⁽¹⁾ + b⁽²⁾

Здесь размеры a⁽¹⁾ равны (n₁,1), а размеры z⁽²⁾ равны (n₂,1). Таким образом, используя правило умножения матриц, как указано выше, форма

w⁽²⁾ равно (n₂, n₁), а b⁽²⁾ равно (n₂, 1).

Тот же процесс будет продолжаться до выходного слоя. Итак, форма

z⁽³⁾, a⁽³⁾, b⁽³⁾ ⟹ (n₃,1)

z⁽⁴⁾, a⁽⁴⁾, b⁽⁴⁾ ⟹ (n₄,1)

z⁽⁵⁾, a⁽⁵⁾, b⁽⁵⁾ ⟹ (n₅, 1)

и, форма

w⁽³⁾ ⟹ (n₃, n₂)

w⁽⁴⁾ ⟹ (n₄, n₃)

w⁽⁵⁾ ⟹ (n₅, n₄)

Другими словами, форма весовых матриц w для слоя l может быть задана следующим образом:

w⁽ˡ⁾ ⟹ (n⁽ˡ⁾, n⁽ˡ⁻¹⁾),

и для перехватов b :

b⁽ˡ⁾ = (n⁽ˡ⁾,1),

где

n⁽ˡ⁾ ⟹ количество нейронов в слое l

n⁽ˡ⁻¹⁾ ⟹ количество нейронов в слое (l-1).

Во время обратного распространения, используя «a», «z», рассчитанные во время прямого распространения, мы вычисляем частные производные функции потерь, «da», «dz», пока не получим значения «dw» и «db». Форма этих градиентов будет такой же, как у соответствующих им матриц «a», «z», «w» и «b».

Векторизация

До сих пор мы рассматривали только одну выборку из входных данных X, в которой всего m выборок. Вместо использования цикла for для перебора m выборок весь процесс можно векторизовать, что означает, что мы можем передать все m выборки, имеющие n₀ признаки, одновременно в наша нейронная сеть. Это более эффективно с вычислительной точки зрения, чем использование цикла for, как показано выше.

В случае векторизации наши входные данные становятся X с формой (n𝕩,m), и мы представляем векторизованные операции, используя заглавные буквы, поэтому происходят следующие соответствующие изменения формы:

A⁽⁰⁾ ⟹ (n𝕩,m)

Z⁽¹⁾, A⁽¹⁾ ⟹ (n₁,m)

Z⁽²⁾, A⁽²⁾ ⟹ (n₂,m)

Z⁽³⁾, A⁽³⁾ ⟹ (n₃,m)

Z⁽⁴⁾, A⁽⁴⁾ ⟹ (n₄,m)

Z⁽⁵⁾, A⁽⁵⁾ ⟹ (n₅, m)

Форма весовых матриц W и пересечений b остается неизменной, даже когда мы используем векторизацию.

Таким образом, для нейронной сети L-слоя с входом X формы (n𝕩, m) форма весовых матриц, векторов смещения и других промежуточных членов может быть задана следующим образом:

Один из вопросов, который может возникнуть, заключается в том, как вектор b⁽ˡ⁾ с формой (n⁽ˡ⁾,1) добавляется к произведению w⁽ˡ⁾ с формой (n⁽ˡ⁾, n⁽ˡ⁻¹⁾) и A⁽ˡ⁻¹⁾ формы (n⁽ˡ⁻¹⁾, м) в следующем уравнении:

Z⁽ˡ⁾ = w⁽ˡ⁾A⁽ˡ⁻¹⁾ + b⁽ˡ⁾

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

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