Гончаров сравнивает Штольца с ключницей: та сразу выбирает нужный ключ из связки. На поясе у неё целый металлический оркестр, а дело решает один подходящий ключ. Для картинки тоже можно выбрать маленький инструмент под конкретный вопрос: где рядом стоят тёмное и светлое?

Представьте бумажный снимок: тёмная ставня слева, светлая стена справа. Палец сам останавливается на вертикальном стыке. Теперь положим поверх снимка прозрачную рамку из четырёх клеток. Её можно двигать вдоль стены и ставни, каждый раз рассматривая небольшой участок.

Свёрточные нейросети используют подобный принцип локальной обработки. Мы начнём с учебной иллюстрации одной операции: веса фильтра уже заданы, ничего обучать не будем. Зато весь путь от исходных клеток до результата можно проследить самостоятельно.

Картинка, которую удобно посчитать

Для первого прохода возьмём сетку из четырёх строк и четырёх столбцов. Слева в каждой строке стоят два нуля, справа — две единицы. Будем считать ноль тёмным, единицу светлой. Это маленькая условная картинка с вертикальной границей.

Фильтр состоит из четырёх чисел, уложенных квадратом. В левом столбце у него единицы, в правом — минус единицы. Он сравнивает две стороны своего окошка.

Сетка 4 на 4 с двумя тёмными и двумя светлыми столбцами и фильтр 2 на 2 с весами 1, −1, 1, −1

Вход и фильтр. Рамка в левом верхнем углу захватывает четыре нуля; следующим шагом она сдвинется на одну клетку вправо.

Числа исходной сетки по строкам:

0 0 1 1
0 0 1 1
0 0 1 1
0 0 1 1

Числа фильтра:

 1 -1
 1 -1

Порядок этих чисел дальше сохраняем. Свёрточные нейросети могут использовать много разных фильтров, но для понимания механизма нам хватит одного. Он поможет заметить именно различие левой и правой частей небольшого участка.

Ноль и единица здесь нужны ради простого счёта. В настоящем изображении значений больше, могут быть и разные цветовые каналы. Наш пример оставляет только один слой чисел, чтобы не прятать действие за сложностью фотографии.

Что делает фильтр в одном положении

Приложите квадрат 2×2 к левому верхнему углу входа. Под его левым верхним весом 1 окажется левый верхний ноль картинки, под правым весом −1 — соседний ноль. Нижние две клетки совмещаются точно так же. Теперь попарно умножьте совпавшие числа и сложите четыре результата.

В первом положении под фильтром четыре нуля. Получается:

0 × 1 + 0 × (−1) + 0 × 1 + 0 × (−1) = 0.

Все четыре произведения нулевые. Один ответ — ноль — записывается в верхнюю левую клетку новой карты. Саму входную картинку мы при этом не переписываем.

Это и есть небольшое повторяемое действие: взять участок, умножить его значения на веса фильтра, сложить. Свёрточные нейросети выполняют такие операции во многих положениях, а не выбирают один случайный квадрат на всю картинку.

Сдвинуть окошко к границе

Передвиньте фильтр на одну клетку вправо. Теперь в каждом из двух захваченных рядов слева стоит 0, справа — 1. Окошко пересекло границу тёмной и светлой половин.

Веса по-прежнему те же: слева 1, справа −1. Поэтому расчёт меняется:

0 × 1 + 1 × (−1) + 0 × 1 + 1 × (−1) = −2.

К нулю добавились две отрицательные единицы. Ответ для этого положения — −2. Его запишем рядом с первым нулём, в верхнюю среднюю клетку карты.

Один фильтр даёт ноль на ровном участке и −2 на окне, которое пересекает границу

Две позиции проверяются вручную. Фильтр сохраняет свои четыре веса; меняются только клетки под ним.

Минус появился из выбранного направления сравнения: светлые клетки справа умножаются на −1. Поэтому сохраните и величину, и знак ответа. Если записать просто 2, получится уже другая карта. Важная для нас разница — ровный участок дал ноль, а переход от тёмного слева к светлому справа дал −2.

Свёрточные нейросети работают с числовыми признаками. Даже когда результат удобно раскрасить, внутри остаются числа. На нашей карте цвет лишь помогает быстрее увидеть средний столбец, в котором появились значения −2.

Почему получается девять ответов

Ещё один сдвиг вправо захватит четыре единицы. Получится 1 − 1 + 1 − 1 = 0: обе стороны одинаковы, их вклады взаимно погасились. Верхняя строка результата теперь готова: 0, −2, 0.

Дальше верните окошко к левой стороне и опустите на одну клетку вниз. Представьте движение карандаша по строке: дошли до правого края, вернулись к началу следующего ряда. Там снова три положения — слева, посередине и справа. Затем таким же образом обработайте последний допустимый ряд.

На входе четыре клетки по ширине, а ширина окна — две. Полностью поместить окно можно с началом у первой, второй или третьей клетки. У четвёртой начало уже не подойдёт: правая часть выйдет за пределы входа. По высоте всё устроено так же.

Итак, по три положения в каждом направлении: 3 × 3 = 9. Мы не добавляем вокруг картинки рамку из нулей и сдвигаемся на одну клетку. Именно при этих условиях выход имеет размер 3×3.

Свёрточные нейросети позволяют задавать размер окна, шаг и способ обработки краёв. Когда условия меняются, меняется и размер результата. В нашем опыте достаточно каждый раз видеть, целиком ли маленькое окошко ещё помещается на большой сетке.

Карта отклика: где обнаружился перепад

Все четыре строки входа одинаковы, поэтому и три строки результата совпадут. Полная карта выглядит так:

Положение по высоте Слева Посередине Справа
Верхнее 0 −2 0
Среднее 0 −2 0
Нижнее 0 −2 0

Карта отклика 3 на 3: средний столбец содержит три значения −2, остальные клетки нулевые

Средний столбец соответствует окнам, пересёкшим вертикальную границу. На однородных участках отклик этого фильтра нулевой.

Свёрточные нейросети собирают такие локальные ответы в карты. В этой карте уже легче выделить конкретное свойство исходника: перепад между тёмной и светлой половинами проходит вертикально. Для нашего выбранного фильтра он заметен в середине каждого ряда.

Отдельная клетка карты относится к положению окна: в её расчёте участвовали четыре входные клетки. Если обвести верхнюю среднюю −2, на входе ей будет соответствовать целый квадрат поперёк границы. Новая карта меньше исходной и отвечает на другой вопрос — как заданное сравнение сработало в каждом месте.

На большом изображении небольшое правило можно применять во многих местах. Одни и те же четыре веса не приходится заново выбирать для каждого квадрата. Воображаемому обходчику фасада выдали крошечную рамку и карандаш: заглянул, отметил, шагнул дальше. В кармане всё тот же инструмент, а пометки относятся к новым местам. Так легче представить повторное использование фильтра.

Если хочется пройти вычисление вместе с помощником

Можно открыть DeepSeek и передать ему обе маленькие сетки из статьи. Начните с одной позиции, в которой хотите разобраться, и скопируйте такую просьбу:

Помоги понять движение фильтра по этой сетке. Вход: четыре одинаковые строки 0 0 1 1. Фильтр: первая строка 1 −1, вторая 1 −1. Шаг одна клетка, края не дополняем, фильтр не переворачиваем. Покажи сначала левое верхнее окно: четыре пары чисел, их произведения и сумму. Дай только этот шаг и дождись моего ответа. Затем я попрошу сдвинуть окно к границе.

Сверьте первый ответ с нулевым расчётом выше. После этого попросите следующее положение вправо и сравните его с −2. Теперь у вас есть два опорных места, на которых можно проверить объяснение.

Если непонятен знак минус, попросите показать отдельно правые две клетки и их веса. Если ответ не совпал, назовите отличие: «В окне стоят 0 и 1 в каждом ряду, а ты взял четыре единицы». Короткий вопрос к конкретному квадрату сохраняет весь остальной ход понятным.

Сохраните рядом два расчёта и соответствующие им окна. Тогда позднее будет видно, какое число картинки умножалось на какой вес. В каждом случае проверка остаётся маленькой: четыре произведения и их сумма. Можно восстановить нужный шаг, даже когда разговор с помощником давно закончился.

Как свёрточные нейросети используют разные фильтры

Свёрточные нейросети обычно соединяют несколько способов обработки: разные фильтры создают разные карты, следующие слои используют полученные признаки. Между операциями появляются и другие действия, в том числе нелинейные преобразования. Так модель может работать с более сложными сочетаниями, чем один перепад яркости.

В нашем примере веса 1, −1, 1, −1 выбраны заранее. В обучаемой модели веса подстраиваются на данных под задачу. Маленькая демонстрация показывает сам проход фильтра и объясняет, откуда берутся числа карты; готового распознавания ставни мы из неё не получили.

Свёрточные нейросети называют также CNN — от английского convolutional neural networks. Узнать название полезно, но основа уже видна на нашем листке: одно окошко, одни веса, последовательные положения и собранные ответы.

Определения фильтра и попарного умножения есть в учебном словаре Google, а русское объяснение движения окна — в главе учебника Яндекса. В практическом первом проходе вам хватит собственной маленькой сетки.

Уточнение о названии операции

В этом примере фильтр не переворачивается. Строго такая операция называется взаимной корреляцией, или cross-correlation. Многие библиотеки машинного обучения используют её под названием convolution. Отличие от математической свёртки с переворотом ядра разобрано в разделе 9.1 Deep Learning Book. Для наших расчётов порядок весов всё время остаётся тем, который показан в исходнике.

Вопросы и ответы о маленьком фильтре

Почему на границе ответ отрицательный?

Наши правые веса равны −1, а светлые клетки находятся справа. Поэтому произведения дают отрицательные слагаемые. Если изменить направление перепада или веса, знак может измениться. Здесь мы проверяем именно заданный фильтр.

Нулевой отклик означает, что на участке ничего нет?

Он означает нулевой результат выбранного сравнения. Четыре единицы тоже дали ноль, хотя значения там есть. Свёрточные нейросети используют разные признаки; один фильтр отвечает на свой небольшой вопрос.

Зачем нужна одинаковая проверка во всех местах?

Признак может встретиться в разных частях картинки. Один и тот же фильтр позволяет искать одинаковое локальное соотношение в каждом допустимом окне. В нашем случае три разных окна пересекают одну вертикальную границу.

Можно ли понять пример без программирования?

Да. Нарисуйте сетку, вырежьте рамку 2×2, запишите веса и пройдите два расчёта вручную. Полную карту можно сверить с таблицей выше. Код для первого понимания не нужен.

Почему окно нельзя начинать с последней клетки?

Тогда часть окна окажется за пределами сетки. Мы договорились края не дополнять, поэтому берём только положения, в которых весь фильтр помещается внутри. Отсюда три начала по ширине и три по высоте.

Окошко, за которым видно действие

Свёрточные нейросети перестают быть одним загадочным названием, когда вы можете показать пальцем участок, веса и получившееся число. Начните с нуля в углу, затем найдите −2 на границе. Это законченный маленький результат, который можно объяснить другому человеку.

Если после механизма хочется попробовать ИИ на своём снимке, следующий практический шаг — получить описание видимой сцены. Там вопрос уже в том, какие детали действительно видны на фотографии.

Для следующего вопроса пригодится приём постановки задачи помощнику. А на практике первых шагов можно выбрать продолжение со своими материалами и постепенно расширять понимание ИИ. В условиях участия в «Первопроходцах» описаны постепенные уроки, вопросы и работа над собственными проектами.

Ключница у Гончарова сразу знала, каким ключом открыть дверь. Мы выбрали свой маленький инструмент для одного перепада, передвинули его по сетке и получили карту. Обходчик уже сложил карандаш, а три −2 остались стоять ровным столбиком. На этом крошечном фасаде границу теперь легко показать.