Прежде всего, я могу порекомендовать это введение в CNN. Может быть, с этим лучше понять идею.
Чтобы ответить на некоторые ваши вопросы вкратце:
Допустим, вы хотите использовать CNN для классификации изображений. Картинка состоит из NxM пикселей и имеет 3 канала (RBG). Чтобы нанести сверточный слой на него, вы используете фильтр. Фильтры - это матрицы (обычно, но не обязательно) квадратичной формы (например, PxP) и количество каналов, равное количеству каналов представления, к которому оно применяется. Следовательно, первый фильтр уровня Conv также имеет 3 канала. Каналы - это количество слоев фильтра, так сказать.
При применении фильтра к изображению вы делаете нечто, называемое дискретной сверткой. Вы берете свой фильтр (который обычно меньше вашего изображения) и шаг за шагом скользите по нему и вычисляете свертку. Это в основном матричное умножение. Затем вы применяете функцию активации к нему и, возможно, даже к пулу. Важно отметить, что фильтр для всех выполненных сверток на этом слое остается тем же самым, поэтому у вас есть только параметры P * P на слой. Вы настраиваете фильтр таким образом, чтобы он как можно лучше соответствовал тренировочным данным. Вот почему его параметры называются общими весами. При применении GD вы просто должны применить его к упомянутым весам фильтра.
Также вы можете найти хорошее демо для сверток здесь .
Реализация этих вещей, безусловно, возможна, но для начала вы можете попробовать тензорный поток для экспериментов. По крайней мере, так я изучаю новые понятия:)