5. Свёрточный и полносвязный

5. Свёрточный и полносвязный#

Маше рассказали, что свёрточный слой — это полносвязный слой с некоторыми ограничениями. Она хочет разобраться, что это за ограничения. На вход в слой идёт чёрно-белое изображение размера \(4 \times 4.\) Каждый пиксель изображения — отдельная переменная.

../_images/img05_picture.png

а) Нарисуйте с помощью кругляшей и стрелочек полносвязный слой, который обрабатывает картинку. Подпишите все веса. Нарисуйте свёрточный слой в таком же формате. На картинке часть связей исчезнет. Часть весов станут одинаковыми.

Решение

Нарисуем в виде кругляшей полносвязный слой. На вход идёт картинка размера \(4 \times 4\). Это означает, что у неё \(16\) пикселей. Каждый пиксель — отдельная переменная. Нарисуем первые пять пикселей.

triangle

Каждый вход идёт в каждый из четырёх выходов со своим весом. Получается \(16 \cdot 4 = 64\) весов. Также мы будем обучать \(4\) свободных члена (константы) для каждого из нейронов скрытого слоя. Всего \(68\) параметров.

Нарисуем то же самое для свёрточного слоя. Попробуем наложить свёртку на картинку и посмотрим как формируются выходы из неё.

triangle

Давайте выпишем все элементы результата применения свёртки

\[\begin{multline*} a = w_{11} \cdot x_{11} + w_{12} \cdot x_{12} + w_{13} \cdot x_{13} + \\ + w_{21} \cdot x_{21} + w_{22} \cdot x_{22} + w_{23} \cdot x_{23} + \\ + w_{31} \cdot x_{31} + w_{32} \cdot x_{32} + w_{33} \cdot x_{33}. \end{multline*}\]

По аналогии

\[\begin{multline*} b = w_{11} \cdot x_{12} + w_{12} \cdot x_{13} + w_{13} \cdot x_{14} + \\ + w_{21} \cdot x_{22} + w_{22} \cdot x_{23} + w_{23} \cdot x_{24} + \\ + w_{31} \cdot x_{32} + w_{32} \cdot x_{33} + w_{33} \cdot x_{34}. \end{multline*}\]

По аналогии

\[\begin{multline*} c = w_{11} \cdot x_{21} + w_{12} \cdot x_{22} + w_{13} \cdot x_{23} + \\ + w_{21} \cdot x_{31} + w_{22} \cdot x_{32} + w_{23} \cdot x_{33} + \\ + w_{31} \cdot x_{41} + w_{32} \cdot x_{42} + w_{33} \cdot x_{43}. \end{multline*}\]

Ну и конечно же

\[\begin{multline*} d = w_{11} \cdot x_{22} + w_{12} \cdot x_{23} + w_{13} \cdot x_{24} + \\ + w_{21} \cdot x_{32} + w_{22} \cdot x_{33} + w_{23} \cdot x_{34} + \\ + w_{31} \cdot x_{42} + w_{32} \cdot x_{43} + w_{33} \cdot x_{44}. \end{multline*}\]

Посмотрим внимательнее на расчёт пикселя \(a\). В нём фигурируют не все \(x_{ij}\). Получается, что если мы захотим записать расчёт \(a\) в полносвязном виде, часть связей в слое исчезнет. Например, от \(x_{11}\) останется только одна связь, которая ведёт к \(a\).

Более того, веса \(w_{lk}\) постоянно переиспользуются. Получается, что они будут одинаковыми у многих связей слоя.

triangle

По аналогии можно нанести на каринку все оставшиеся связи. Получается, что свёрточный слой представляет из себя полносвязный слой с двумя ограничениями: мы выкидываем часть связей, а веса у каких-то определённых связей делаем одинаковыми. В свёртке мы используем \(9\) параметров. По аналогии с обычным нейроном, к свёртке можно добавить свободный член. Тогда параметров станет \(10\). В уравнении для каждого выхода появится дополнительный параметр \(w_0\)

\[\begin{multline*} a = w_0 + w_{11} \cdot x_{11} + w_{12} \cdot x_{12} + w_{13} \cdot x_{13} + \\ + w_{21} \cdot x_{21} + w_{22} \cdot x_{22} + w_{23} \cdot x_{23} + \\ + w_{31} \cdot x_{31} + w_{32} \cdot x_{32} + w_{33} \cdot x_{33}. \end{multline*}\]

б) Запишите свёрточный слой с помощью перемножения матриц в виде \(H = X \cdot W.\) Как выглядит матрица \(W\)?

Решение

В полносвязном слое \(H = X \cdot W\). У нас на вход идёт картинка

\[\begin{equation*} \begin{pmatrix} x_{11} & x_{12} & x_{13} & x_{14} \\ x_{21} & x_{22} & x_{23} & x_{24} \\ x_{31} & x_{32} & x_{33} & x_{34} \\ x_{41} & x_{42} & x_{43} & x_{44} \end{pmatrix}. \end{equation*}\]

Давайте растянем её в вектор

\[\begin{equation*} X = (x_{11}, x_{12}, x_{13}, x_{14}, x_{21}, x_{22}, x_{23}, x_{24}, x_{31}, x_{32}, x_{33}, x_{34}, x_{41}, x_{42}, x_{43}, x_{44}). \end{equation*}\]

Если у нас в выборке будет несколько картинок, мы сможем записать каждую из них в виде строчки в матрицу \(X\).

В матрице весов мы должны занулить все неиспользуемые веса, а также не забыть, что одни и те же веса дублируются в матрице несколько раз

\[\begin{equation*} W^T = \begin{pmatrix} w_{11} & 0 & 0 & 0\\ w_{12} & w_{11} & 0 & 0\\ w_{13} & w_{12} & 0 & 0\\ 0 & w_{13} & 0 & 0\\ w_{21} & 0 & w_{11} & 0\\ w_{22} & w_{21} & w_{12} & w_{11}\\ w_{23} & w_{22} & w_{13} & w_{12}\\ 0 & w_{23} & 0 & w_{13}\\ w_{31} & 0 & w_{21} & 0\\ w_{32} & w_{31} & w_{22} & w_{21}\\ w_{33} & w_{32} & w_{23} & w_{22}\\ 0 & w_{33} & 0 & w_{23}\\ 0 & 0 & w_{31} & 0\\ 0 & 0 & w_{32} & w_{31}\\ 0 & 0 & w_{33} & w_{32}\\ 0 & 0 & 0 & w_{33} \end{pmatrix}. \end{equation*}\]

При перемножении \(X\) и \(W\) мы получим уравнения для \(a,b,c,d\).

в) Как через свёрточный слой можно сделать шаг обратного распространения ошибки?

Решение

Точно также, как и через полносвязный. Только надо не забывать про то, что веса повторяются. Вес \(w_{11}\) в нашем случае фигугрирует в четырёх местах. Получается, что

\[ \frac{\partial L}{\partial w_{11}} = \frac{\partial L}{\partial a} \cdot x_{11} + \frac{\partial L}{\partial b} \cdot x_{12} + \frac{\partial L}{\partial c} \cdot x_{21} + \frac{\partial L}{\partial d} \cdot x_{22}. \]

Для остальных весов в градиентах также будет \(4\) слагаемых. Выпишем ещё три градиента и заметим забавный факт

\[ \frac{\partial L}{\partial w_{12}} = \frac{\partial L}{\partial a} \cdot x_{12} + \frac{\partial L}{\partial b} \cdot x_{13} + \frac{\partial L}{\partial c} \cdot x_{22} + \frac{\partial L}{\partial d} \cdot x_{23}, \]
\[ \frac{\partial L}{\partial w_{21}} = \frac{\partial L}{\partial a} \cdot x_{21} + \frac{\partial L}{\partial b} \cdot x_{22} + \frac{\partial L}{\partial c} \cdot x_{31} + \frac{\partial L}{\partial d} \cdot x_{32}, \]
\[ \frac{\partial L}{\partial w_{12}} = \frac{\partial L}{\partial a} \cdot x_{22} + \frac{\partial L}{\partial b} \cdot x_{23} + \frac{\partial L}{\partial c} \cdot x_{32} + \frac{\partial L}{\partial d} \cdot x_{33}. \]

Можно продолжить выписывать подобные уравнения и аккуратно закодить алгоритм обратного распространения ошибки. А можно заметить, что матрица из производных – это свёртка, которая бежит по нашей картинке. Каждая производная по весу, которую мы получаем – результат этой свёртки.

triangle

Кроме производной по весам модели, для алгоритма обратного распространения ошибки, нам нужна производная по входам. Она, по аналогии, будет представлять из себя свёртку из производных. Попытайтесь понять, как именно она будет выглядеть.