Свёртки и устройство CNN
ЧерновикМатериалы дорабатываются и будут дополняться.
Представим две рукописные семёрки. Одну написали в центре листа, другую — немного правее. Мы узнаём обе цифры по знакомым штрихам. Как научить нейросеть обнаруживать такие детали независимо от того, в какой части изображения они находятся?
Для обработки изображений часто используют свёрточные нейронные сети, или CNN — от английского convolutional neural network. Они выделяют небольшие детали изображения, а затем объединяют сведения о них, чтобы распознать изображённый объект.
Как представить изображение числами
Цифровое изображение состоит из пикселей. Каждому пикселю соответствует цвет. Изображение в оттенках серого можно представить таблицей яркостей: в наших примерах 0 означает чёрный цвет, 1 — белый, а промежуточные значения задают серые оттенки.
Цветное изображение обычно описывают тремя таблицами — для красной, зелёной и синей составляющих. Их называют каналами. Такую запись цвета обозначают RGB: red, green, blue. Каждому пикселю RGB-изображения соответствуют три числа.
Рассмотрим стену домика на рисунке 1. В красном канале её пикселям соответствует значение 1, в зелёном — 0,5, в синем — 0. Вместе эти составляющие дают оранжевый цвет. Чтобы узнать цвет любого другого пикселя, нужно взять значения из той же позиции во всех трёх таблицах.
В полносвязную сеть можно передать все яркости в виде одного длинного списка. Для изображения размером
Зачем нужен свёрточный слой
При распознавании цифр полезно замечать небольшие детали: штрихи, границы, изгибы. Свёрточный слой обрабатывает изображение по участкам. Вычисление повторяется в каждом положении небольшого окна, которое последовательно перемещают по изображению.
Правило вычисления задаёт фильтр, или ядро свёртки, — таблица весов. Значение яркости в каждой клетке окна умножают на вес в соответствующей клетке фильтра. Затем произведения складывают. Полученная сумма — отклик фильтра в этом положении.
Один фильтр применяется во всех допустимых положениях окна. Поэтому знакомую деталь можно искать и слева, и справа, как на рисунке 2. Веса остаются прежними, меняется только участок изображения. Такое повторное использование весов обычно позволяет обойтись меньшим их количеством, чем в полносвязном слое.
Вычислим небольшую свёртку
Возьмём учебное изображение размером
Сначала поместим окно в левый верхний угол изображения. Под ним только нули, поэтому сумма произведений равна 0. Передвинем окно на одну клетку вправо: теперь в его левой колонке нули, а в правой — единицы. Фильтр оказался на границе между двумя областями.
В этом положении каждую яркость умножаем на вес в той же позиции:
Ещё один шаг вправо — и под окном только единицы. Теперь получим
Таблицу откликов называют картой признаков. В нашем примере положительные значения отмечают вертикальную границу: слева от неё тёмная область, справа — светлая. На однородных участках положительные и отрицательные слагаемые компенсируются, и отклик равен нулю. Если поменять чёрное и белое местами, на границе получится
Такое преобразование изображения в нейросетях называют свёрткой.
Почему фильтров несколько
До сих пор мы использовали один фильтр: он сравнивал левую и правую части окна. Обозначим его буквой А. Возьмём второй фильтр, Б: в его верхней строке запишем два веса
Применим оба фильтра к тому же изображению с вертикальной границей. На рисунке 6 показаны исходные числа, веса каждого фильтра и полученные карты. В обоих случаях окно перемещается с шагом 1, без дополнения по краям.
Фильтр А даёт уже знакомую карту: в каждом положении на границе отклик равен 2. У фильтра Б все отклики нулевые. Разберём, почему так происходит. В окне на границе верхняя строка содержит числа 0 и 1, нижняя — тоже 0 и 1. Умножим их на веса фильтра Б:
Верхняя и нижняя строки одинаковы, поэтому их вклады компенсируются. Фильтр Б не обнаружил здесь горизонтальной границы. Если же расположить тёмную область сверху, а светлую снизу, на переходе сработает именно он.
Таким образом, одни и те же исходные числа дают разные карты при разных весах фильтра. Для распознавания цифры нужны сведения о разных деталях, поэтому свёрточный слой обычно использует несколько фильтров. Каждый фильтр создаёт одну карту признаков. Например, восемь фильтров дадут восемь карт — восемь выходных каналов.
В учебном примере мы выбрали веса вручную. В нейросети веса фильтров подбираются при обучении: постепенно изменяются так, чтобы сеть реже ошибалась. При этом не каждый обученный фильтр выделяет отдельную линию или границу: он может реагировать на более сложное сочетание пикселей.
Обычно к сумме произведений добавляют ещё одно обучаемое число — смещение. Для одного фильтра оно одинаково во всех положениях. В наших ручных вычислениях смещение равно нулю.
Если входных каналов несколько, фильтр обрабатывает их вместе. У RGB-изображения три канала, поэтому нужны три таблицы весов — по одной на канал. Произведения из всех таблиц складывают в один отклик. Число выходных карт определяется числом фильтров и не обязано совпадать с числом входных каналов.
Как управлять размером карты
В ручном примере фильтр
Дополнение нулями, или padding, — рамка из нулевых пикселей вокруг изображения. Она позволяет обработать положения окна, которые иначе выходили бы за его границы. Шаг, или stride, — длина сдвига ядра свёртки в пикселях. При шаге 1 ядро сдвигается на один пиксель, при шаге 2 — на два.
Рассмотрим изображение
Добавим рамку из нулей толщиной в одну клетку. Теперь по каждой стороне стало семь клеток, а у окна — по пять допустимых положений. Получится карта
Наконец, уберём рамку и увеличим шаг до 2. Окно сможет начинаться только в первой и третьей колонках; то же верно для строк. Карта уменьшится до
Дополнение и шаг выбирают при построении сети. Например, фильтр
Область видимости свёрток
Один отклик фильтра зависит лишь от тех значений, которые попали в его окно. Например, для фильтра
Следующий свёрточный слой получает уже карты признаков. Его окно
Проследим это на рисунке 8. Пусть все три слоя используют фильтры
На схеме
Если добавить третий такой слой, область видимости увеличится до
Что мы выяснили
Свёрточная сеть ищет детали с помощью фильтров, которые применяются в разных частях изображения. Дополнение нулями и шаг влияют на размер карты признаков. Следующие свёрточные слои обрабатывают эти карты, а область видимости отдельных значений постепенно расширяется.
Один и тот же фильтр может обнаруживать знакомую деталь в разных частях изображения. Однако это не делает сеть нечувствительной к любым изменениям: сдвиг, поворот или изменение размера могут повлиять на её предсказание.
Самопроверка
Проверено 0 из 10
Подсказка
Вспомните названия каналов.
Решение
B. Три числа — красная, зелёная и синяя составляющие. Вместе они задают цвет одного пикселя.
Подсказка
Сложите два отрицательных и два положительных слагаемых.
Решение
A.
Подсказка
Проверьте три положения окна.
Решение
D.
Подсказка
У фильтров могут различаться веса.
Решение
B. Нет, разные фильтры могут давать разные карты. Каждый из них реагирует на своё сочетание значений в окне.
Подсказка
Вспомните, чем измеряется длина сдвига ядра.
Решение
C. Ядро сдвигается на два пикселя за один шаг. Размер самого ядра при этом не меняется.
Подсказка
Сначала посчитайте клетки вместе с рамкой, затем — допустимые положения окна.
Решение
A. Получится карта
Подсказка
Отметьте начало окна в первой и третьей клетках.
Решение
B. Два положения. Следующее окно вышло бы за границу строки.
Подсказка
Участки исходного изображения для соседних значений первого слоя перекрываются.
Решение
D. Область видимости имеет размер
Подсказка
Подумайте, что изменится внутри окна.
Решение
C. Нет. При повороте расположение пикселей меняется, и те же фильтры могут дать другие отклики.
Самопроверка завершена
Файлы
Дополнительные материалы
- Яндекс — Свёрточные нейросети
- Яндекс — Область видимости свёрток (иллюстрация)
- Dive into Deep Learning — Convolutions for Images
- Dive into Deep Learning — Multiple Input and Multiple Output Channels
- UC Berkeley CS 189, Fall 2025 — Lecture 18, CNN
- Christopher M. Bishop, Hugh Bishop — Deep Learning: Foundations and Concepts, глава 10