После завершения курса № 4 специализации Coursera Deep Learning я хотел написать краткое изложение, чтобы помочь вам понять / освежить в памяти концепцию сверточной нейронной сети (CNN).
Давайте разберемся с CNN на примере –
Рис. 1. Пример CNN — источник: специализация Coursera DL
Допустим, у вас есть изображение 32×32 цифр от 0 до 10 с 3 каналами (RGB). Вы пропускаете его через фильтр размера f в 1-м сверточном слое (CL1).
Каков размер выходного изображения фильтра?
Размер выходного изображения рассчитывается по следующей формуле:
Источник: Средний |
В нашем случае предположим, что отступ равен 0, а шаг равен 1. Приведенная выше формула дает выходной размер 28×28 как для высоты, так и для ширины изображения. Хорошо, это хорошее начало! Давайте продолжим.
Обратите внимание на размерность 6 на выходе слоя 1.
Откуда мы берем третье измерение?
Третье измерение — это не что иное, как количество фильтров в слое. Учитывая фильтр размера f. В слое имеется #f фильтров, и размерность КАЖДОГО фильтра равна размерности fxfxnс
Где нс количество каналов/объем в предыдущем слое. В случае первого уровня предыдущий уровень имеет 3 канала.
Теперь, если в слое 1 есть 6 таких фильтров, каждый фильтр производит нвне хпвне х 1 выход, и учитывая, что у нас есть 6 фильтров – выход сверточного слоя 1 нвне хпвне х 6.
Что делает Max Pooling?
Объединение — это метод сжатия информации, думайте о высоких значениях пикселей как о большем количестве информации, а о низких значениях пикселей — как о меньшем количестве информации. Max Pooling используется для выбора максимального элемента в окне фильтра при свертывании выходных данных предыдущего слоя.
Источник: ComputerScienceWiki |
Рис. 2. Сводная информация о структуре CNN — источник: специализация Coursera DL.
Как вы можете заметить, размер активации Сети постепенно уменьшается до 10 активаций на выходе Softmax для классификации чисел от 0 до 9, а количество параметров значительно меньше, чем было бы, если бы мы чтобы реализовать этот классификатор со всеми слоями как полностью связанными.
Больше чтений:
http://cs231n.github.io/convolutional-networks/