Люди не вникают в подробности, когда дело доходит до расчета градиентов во время обратного распространения с использованием векторного исчисления. Обычно есть некоторые упрощения, которые выполняют работу за счет глубокого концептуального понимания.
Предположим, у нас есть простая нейронная сеть, уравнения которой имеют вид:
Где (в порядке переменная: имя, форма):
x
: входной вектор, m x 1
W
: матрица весов, n x m
b
: вектор смещения, n x 1
σ : функция активации, скажем, сигмоид.
a
: вектор активации, n x 1
y
: метка достоверности, n x 1
C
: функция стоимости, 1 x 1
Это довольно простая модель, вот выражение grad(W)
Форма градиента (W) будет n x m
Большинство учебных пособий в Интернете используют приемы и ярлыки, чтобы найти отдельные элементы приведенного выше выражения, здесь мы собираемся использовать стандартные операции векторного исчисления для получения grad (W).
C
— это функция, отображающая вектор a
формы 1 x n
в скалярное значение, поэтому dC/da
будет вектором Якоби формы 1 x n
Что касается da/dz
, то и a, и z являются векторами формы n x 1
, поэтому это будет матрица формы n x n
:
К dz/dW
z подходит вектор формы n x 1
, а W
- матрица формы n x m
, поэтому он переходит в тензор формы n x (n x m)
Мы знаем это,
Приведенный выше тензор содержит n
матриц формы n x m
, каждая из которых получена путем дифференцирования соответствующей строки вектора z
по каждому элементу W
.
Итак, теперь у нас есть:
dC/da
формы 1 x n
da/dz
формы n x n
dz/dW
формы n x (n x m)
Мы должны умножить каждый из трех вышеупомянутых градиентов, чтобы получить grad(W), обратите внимание, что da/dz
и dz/dW
являются 2D и 3D соответственно. Как нам умножить 2D-матрицу на 3D-матрицу?
Ответ заключается в изоморфизме векторного пространства:
Следовательно, мы можем преобразовать нашу матрицу n x (n x m)
в матрицу n x nm
, и как только мы закончим с нашим умножением, мы изменим результирующую матрицу в n x m
.
dC/da
* da/dz
* dz/dW
= 1 x n
* n x n
* n x nm
=> 1 x nm
=> n x m
Это довольно простой пример, мы можем распространить идею на более сложные случаи. Вот замечательная книга по математике для машинного обучения, попробуйте: https://mml-book.github.io/