У меня тоже было некоторое замешательство некоторое время, и только после некоторого копания туман рассеялся.
Разница между сверткой с 1 каналом и сверткой с несколькими каналами
Это где мое понимание пошло не так. Я попытаюсь объяснить эту разницу. Я не эксперт, поэтому, пожалуйста, потерпите меня
Операция свертки с одним каналом
Когда мы думаем о простом изображении серой шкалы 32X32 и операции свертки, мы применяем 1 или более матриц свертки в первом слое.
Согласно вашему примеру, каждая из этих сверточных матриц размерности 5X5 создает матрицу 28x28 в качестве выходных данных. Почему 28X28? Потому что вы можете сдвинуть окно с квадратом 5 пикселей в 32-5 + 1 = 28 позиций, предполагая, что stride = 1 и padding = 0.
В таком сценарии каждая матрица свертки имеет 5X5 = 25 обучаемых весов + 1 обучаемое смещение . Вы можете иметь столько ядер свёртки, сколько захотите. Но каждое из ядер будет двухмерным, и каждое из ядер будет создавать выходную матрицу размера 28X28, которая затем подается на уровень MAXPOOL.
Сверточная работа с несколькими каналами
Что если изображение было бы изображением RGB 32X32? Согласно популярной литературе, изображение должно рассматриваться как состоящее из 3 каналов, и операция свертки должна выполняться на каждом из этих каналов. Я должен признать, что поспешно сделал некоторые вводящие в заблуждение выводы . У меня сложилось впечатление, что мы должны использовать три независимых матрицы свертки 5X5 - по 1 для каждого канала. Я был не прав .
Если у вас есть 3 канала , каждая ваша матрица свертки должна иметь размерность 3X5X5 - представьте, что это единое целое, состоящее из матрицы 5X5, сложенной 3 раза. Поэтому у вас есть 5x5x3 = 75 обучаемых весов + 1 обучаемое смещение .
Что происходит во втором сверточном слое?
В вашем примере мне было проще представить, что 6 карт объектов, созданных первым слоем CONV1 + MAXPOOL1, представляют собой 6 каналов. Поэтому, применяя ту же логику RGB, что и раньше, любое ядро свертки, которое мы применяем во втором слое CONV2, должно иметь размерность 6X5X5. Почему 6? Поскольку мы, CONV1 + MAXPOOL1, выпустили 6 карт характеристик. Почему 5x5? В вашем примере вы выбрали измерение windo 5x5. Теоретически я мог бы выбрать 3x3, и в этом случае размер ядра был бы 6X3X3.
Поэтому в текущем примере, если у вас есть N2 сверточных матриц в слое CONV2, тогда каждое из этих ядер N2 будет матрицей размера 6X5X5. В текущем примере N2 = 16 и операция свертки ядра измерения 6X5X5 на входном изображении с 6 каналами X 14X14 создаст N2 матрицы, каждая из которых имеет размер 10X10. Почему 10? 10 = 14-5 + 1 (шаг = 1, отступ = 0).
Теперь у вас есть N2 = 16 матриц, выстроенных для слоя MAXPOOL2.
Ссылка: архитектура LeNet
http://deeplearning.net/tutorial/lenet.html
Обратите внимание на окруженную область. Вы можете видеть, что во втором слое свертки показано, что операция распространяется на каждую из 4 карт объектов, созданных первым слоем.
Ссылка: лекции Эндрю Нг
https://youtu.be/bXJx7y51cl0
Ссылка: Как выглядит арифметика Convolution с несколькими каналами?
Я нашел другой вопрос SFO, который хорошо описал это.
Как сверточная нейронная сеть обрабатывает каналы
Обратите внимание, что в приведенном примере информация по 3 каналам сведена в двумерную матрицу. Вот почему ваши 6 карты объектов из слоя CONV1 + MAXPOOL1, похоже, больше не влияют на размер первого полностью связанного слоя.