Pull to refresh

Comments 5

Вдруг кому пригодится.

Вот свёртка через умножение матриц.

Обновление коэффициентов ядер свёртки (для нейросетей).

Только не надо строить эти матрицы заранее. Их легко можно (и нужно!) строить прямо «на лету».
А вот так выглядит свёртка RGB-изображений нагрядно:

Здесь вверху показан прямой проход по сети (Image сворачивается с ядрами
Kernel и получается тензор свёртки, с глубиной равной количеству ядер).

В середине показан процесс вычисления поправок к элементам ядер, зная ошибку (Delta).
Ну а внизу показан процесс вычисления ошибок при обратном проходе через
свёрточный слой. Тут Delta предыдущего слоя сворачивается с повернутыми
на 180  ядрами.

А не подскажите источник таких картинок? Может есть какая-нибудь стоящая литература именно с пояснениями на матричном уровне

Да я их рисовал для себя, чтобы не запутаться.
Там пояснять особо нечего.

Например, по первой для прямой свёртки. Есть картинка размерностью [Ix,Iy,Iz]. Сворачиваем её N ядрами размерностью [Kx,Ky,Kz], при этом должно быть Iz=Kz. Чтобы такую свёртку сделать, нужно сделать умножение двух матриц. Первая - матрица ядер, она собирается по X как компоненты тензора каждого ядра. По Y такая матрица имеет размерность количества ядер. Вторая матрица - матрица изображения. Она собирается по X и Y как элементы изображения, для которых будут применяться ядра (так как ядра размерности Kz=Iz, то вертикаль делается для всех размерностей). Так как умножение матриц строка на столбец, это даёт ту самую свёртку.

А умножение матриц используется потому что эта операция очень хорошо оптимизирована для той же CUDA.

Картинка няшная. Но вот про паддинг... то что на первой картинке котя в траурной рамке заметят и поймут только те, кто zero padding уже знает. А на второй имеется в виду nearest neighbour? Для данной картинки лучше всего подошёл бы константный паддинг на цвет фона (на самом деле, надо знать выборку образцов).

Спасибо за ваш комментарий. Поправила картинку. Надеюсь, стало понятнее.

Sign up to leave a comment.

Articles