В прошлый раз мы прикладывали детектор к одному окошку. Теперь проведём его по всей картинке. Один и тот же маленький шаблон, скользящий по полю, — это и есть свёртка. Весов у неё мало не потому, что картинка мала, а потому, что признак ищется всюду одним и тем же ядром.
Один шаблон на всё поле
В прошлом уроке детектор края смотрел в крошечное окно — рецептивное поле. Но признак «граница под углом» встречается в изображении повсюду, и держать отдельный детектор для каждой точки было бы расточительно. Свёртка решает это одним приёмом: берём одно ядро и прикладываем его во всех положениях, сдвигая окно по всему полю. Там, где под окном оказался нужный признак, отклик велик; где нет — мал. Так из одного маленького шаблона получается целая карта откликов.
Мы уже видели этот набросок из краёв на фотографии. Теперь разберём арифметику самой операции: какого размера выйдет карта, что делать с краями и во сколько это обходится. Эти скучные на вид детали — размер выхода, дополнение, шаг, каналы — на практике решают всё: перепутав их, не соберёшь ни одной работающей сети, а поняв, будешь читать описание любой архитектуры как открытую книгу.
Размер выходной карты
Проведём ядро по входу размера , сдвигая его с шагом и добавив по краям рамку толщиной . Сколько положений поместится? Ответ даёт формула размера выхода:
Разберём на числах для ядра и входа . С рамкой и шагом выходит ровно — размер сохраняется. Без рамки () карта сжимается до : крайние пиксели ядру некуда пристроиться. А с шагом ядро прыгает через клетку, и карта усыхает вдвое, до .

Слева направо: рамка сохраняет размер; без рамки теряются края; шаг прореживает карту вдвое. Красное окно — ядро, штриховка — дополнение (рамка), пунктир — следующее положение ядра при шаге .
Дополнение и шаг
Рамка (дополнение) и шаг — два рычага, которыми управляют размером и поведением у краёв. Чем заполнить рамку? Проще всего нулями, но ноль за краем — это выдумка: на спутниковом снимке за границей кадра не океан и не пустота, а неизвестность. Нулевая рамка создаёт у края искусственный контраст. Часто честнее повторить или отразить крайние пиксели.
Здесь кроется и подсказка о том, зачем вообще нужна рамка. Без неё каждая свёртка чуть подъедает изображение с краёв: после десятка слоёв от картинки осталось бы жалкое ядрышко в центре, а вся периферия была бы съедена. Рамка ровно компенсирует это подъедание и позволяет складывать свёртки в глубину, не теряя размер.
Шаг больше единицы — это встроенное прореживание: ядро берёт не каждое положение, а через одно (или через два). Так карта уменьшается прямо внутри свёртки, без отдельного слоя, а вместе с ней падает и объём вычислений для всех последующих слоёв — потому шаг и ставят обычно в самом начале сети, где картинка ещё крупная.
Несколько каналов
Цветная картинка — это не одна таблица яркостей, а три: красный, зелёный и синий каналы. Ядро свёртки охватывает все входные каналы разом. Для входа из трёх каналов одно ядро хранит уже весов и одно смещение и сводит три канала в один отклик.

Слева цветное фото и его три канала. Одно ядро прикладывается ко всем трём сразу и выдаёт одну карту признаков (справа). Чтобы получить много карт, заводят много таких ядер.
Чтобы слой выдавал карт признаков из входных каналов, число весов складывается по простому правилу:
Каждая выходная карта собирает свою комбинацию цвета и формы: одна ловит яркостный край, другая — переход зелёного в красный. Следующий слой видит уже не физические цвета, а эти карты признаков и складывает из них признаки покрупнее — так растёт глубина сети зрения.
Важно, что сами эти ядра никто не задаёт вручную. В обученной сети веса каждого фильтра настраиваются градиентным спуском под задачу: сеть сама решает, какие края, пятна и переходы цвета ей полезны. Мы для наглядности берём готовый детектор края, но в реальной модели на его месте — обучаемый детектор, и удивительным образом первые обученные ядра почти всегда оказываются похожими на края и полоски Габора из прошлого урока.
Параметры не зависят от картинки
Малое число весов — главный козырь свёртки. Полносвязный нейрон на изображении хранил бы три миллиона весов; наш слой из ядер — четыреста сорок восемь, и это число не растёт с размером картинки. Разделение весов (одно ядро всюду) даёт и экономию, и устойчивость к сдвигу разом.
Но экономия параметров не означает экономии вычислений — это разные величины, которые легко спутать. Те же весов на входе дают уже около четырёхсот тысяч умножений: каждый вес прикладывается в каждом из тысячи положений, да ещё по всем каналам. На снимке высокого разрешения счёт идёт на миллиарды операций при всё тех же сотнях весов. Память под модель мала, а вот времени на проход она может требовать много — и цена этих умножений во многом решает, какую сеть вообще удастся обучить.
Эквивариантность к сдвигу
У разделения весов есть красивое следствие. Сдвиньте изображение — и карта откликов сдвинется точно так же, ведь то же ядро встретит тот же признак, только в новом месте. На языке формул, для сдвига :
Это свойство называют эквивариантностью к сдвигу. Важно не спутать его с инвариантностью: отклик не остаётся прежним, он переезжает вместе с признаком. Полную нечувствительность к положению добавят позже пулинг и глобальное усреднение.

Вверху — фотография и она же, сдвинутая на пикселей. Внизу — их карты откликов: вторая сдвинута ровно на те же пикселей. Свёртка не привязана к месту, поэтому признак и его отклик путешествуют вместе.
На реальных данных: от спутника до лица
Свёртка одинаково работает на любых изображениях. Наборы вроде EuroSAT — спутниковые снимки Sentinel-2, размеченные по типу землепользования, — обрабатывают ровно теми же ядрами, что и портрет: детектор края не спрашивает, лес под ним или лицо. Мы уже прогнали ядро по обычной фотографии и увидели, как из трёх цветовых каналов рождается карта краёв, а сдвиг снимка сдвигает и её. На спутниковом снимке те же фильтры выделяли бы дороги, кромки полей, береговые линии.
У реальных данных есть своя тонкость. Соседние спутниковые участки почти одинаковы, поэтому случайно разбрасывать их между обучением и проверкой нельзя — модель просто подсмотрит ответ у соседа и покажет обманчиво высокую точность, которая рассыплется на новой местности. Разбивать нужно крупными географическими блоками, чтобы проверочные районы лежали далеко от обучающих. Свёртка исправно даёт признаки хоть с портрета, хоть со спутника, но честность проверки — забота человека, а не операции.
Ещё одна тонкость — масштаб. Ядро на снимке высокого разрешения охватывает пару метров земли, а на грубом — целый квартал. Один и тот же фильтр «видит» разные вещи в зависимости от того, сколько метров приходится на пиксель. Поэтому у спутниковых моделей разрешение снимка — такой же параметр задачи, как и архитектура сети.
Русская линия: пиксель как отсчёт
Прежде чем свернуть изображение, его надо превратить в сетку чисел — пиксели. Как часто нужно брать отсчёты, чтобы ничего не потерять? Ответ дал в году советский инженер Владимир Котельников в своей теореме отсчётов: сигнал полностью восстановим по замерам, если брать их вдвое чаще самой высокой частоты в сигнале. Реже — и мелкие детали склеятся в ложные узоры (тот самый муар на фотографии решётки).
Пиксельная сетка изображения — это и есть отсчёты Котельникова по двум осям. Его теорема говорит, какое разрешение нужно, чтобы свёртка работала с настоящей картинкой, а не с её искажённой тенью. Так теория связи -х годов легла в фундамент компьютерного зрения.
Тот же закон отсчётов объясняет, почему шаг свёртки нельзя задирать без оглядки. Прореживая карту слишком грубо, мы берём отсчёты реже, чем требует теорема, и мелкий узор превращается в ложный — возникает наложение спектров, алиасинг. Оттого перед сильным уменьшением изображение сперва слегка размывают, срезая слишком высокие частоты, которым всё равно негде уместиться. Инженерная осторожность здесь — прямое следствие математики Котельникова.
Лаборатория свёртки
Порядок опытов. Слева — вход, справа — карта откликов свёртки. Крутите три рычага и следите за размером выходной карты на табло: увеличьте ядро — карта сожмётся; поднимите дополнение — вернётся к размеру входа; поставьте шаг — усохнет вдвое. Табло тут же подставляет ваши числа в формулу и показывает число весов ядра. Убедитесь, что оно зависит только от размера ядра, но не от размера картинки.
Сборка: одно ядро, скользящее по полю
Свёртка — это один маленький шаблон, приложенный во всех положениях изображения. Размер выходной карты задаёт формула : дополнение спасает края, шаг прореживает карту. Ядро охватывает все входные каналы разом, а число его весов — — не зависит от размера картинки, оттого свёртка так экономна. Разделение весов дарит и эквивариантность: сдвинь вход — карта сдвинется следом. Мы проверили это на реальном фото и связали пиксельную сетку с теоремой отсчётов Котельникова. Но карта откликов пока эквивариантна, а не инвариантна, и признаки в ней ещё сырые. Как сделать ответ независимым от положения и как складывать свёртки в глубокую сеть — об этом следующие уроки про пулинг и свёрточные архитектуры.