Основы свёрточных сетей
Основы CNN (convolutional neural network) - проверка, понимаешь ли ты, почему свёртки победили полносвязные сети на картинках. Любимая арифметика собеса: размер выхода и число параметров слоя - считается в уме за десять секунд.
// Ключ к половине вопросов: параметры свёртки не зависят от размера картинки.
Свёртка: локальность и разделяемые веса
Свёртка - скользящее окно обучаемых фильтров. Две встроенные идеи: локальность (пиксель связан с соседями, а не со всей картинкой) и разделяемые веса (один фильтр едет по всему изображению). Отсюда мало параметров и инвариантность к сдвигу.
Арифметика: размер выхода = (W − K + 2P)/S + 1; padding сохраняет размер, stride уменьшает. Параметры слоя: K·K·C_in·C_out (+ bias) - от размера входа не зависят вовсе.
// Каналы глубже - паттерны абстрактнее: границы → текстуры → части объектов → объекты. Это и есть иерархия признаков.
- разделяемые веса
- один фильтр на всю картинку - мало параметров, инвариантность к сдвигу
Receptive field и пулинг
Receptive field - участок входа, который «видит» нейрон глубокого слоя; растёт с глубиной. Стек мелких 3×3 покрывает область большого фильтра дешевле по параметрам и с большей нелинейностью - так строятся все современные сети.
Пулинг (max/avg) агрегирует локально: меньше размерность, устойчивость к мелким сдвигам. В новых архитектурах его часто заменяют stride-свёртками.
// Для задач точной локализации агрессивный пулинг вредит - пространственная информация теряется, а она и есть ответ.
- receptive field
- область входа, видимая нейрону; растёт с глубиной
1×1-свёртки и голова без раздувания
1×1-свёртка - смеситель каналов: межканальные взаимодействия без пространственного контекста и главный инструмент снижения размерности (bottleneck-блоки).
Global average pooling вместо flatten + полносвязный слой: карта признаков усредняется в вектор - меньше параметров на порядки, вход любого размера, меньше переобучение головы.
// Полносвязная голова на большой карте признаков - миллионы лишних параметров и главный источник переобучения старых архитектур.
- GAP
- global average pooling: карта → вектор без гигантского FC (fully connected)
Как отвечать: «Почему для картинок свёртки, а не полносвязные слои?»
Полносвязный слой на картинке 224×224 это миллионы параметров на один слой и ноль знания о структуре: он не в курсе, что пиксель связан с соседями. Свёртка встраивает два правильных предположения: локальность - паттерны локальны, и разделяемые веса - один и тот же фильтр полезен в любом месте картинки. Получаем на порядки меньше параметров, инвариантность к сдвигу и иерархию признаков от границ к объектам. Число параметров свёрточного слоя вообще не зависит от размера входа - только от размера ядра и числа каналов.
Ответ через встроенные предположения о данных плюс арифметический факт про параметры - уровень «понимаю конструкцию».
На чём валят
- −Считать параметры свёртки зависящими от размера картинки - только K, C_in, C_out.
- −Глубокая сеть без нормализации и резидуалов - сигнал затухает, обучение стоит.
- −Max-pool везде «по традиции» - точной локализации агрессивный пулинг вредит.
- −Полносвязная голова на большой карте признаков вместо GAP (global average pooling) - миллионы лишних параметров.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 13, остальные разбираются в тренажёре.
- Что такое рецептивное поле нейрона и почему оно важно для детекции объектов разного размера?A)Это яркость отдельного пикселя на входном изображении, которую конкретный нейрон сети умеет измерять точнее прочихB)Область входного изображения, влияющая на активацию нейрона; мелкие объекты требуют мелких полей/ранних слоёв, крупные — глубокихC)Число обучаемых параметров в одном свёрточном фильтре, которое напрямую задаёт максимальный размер распознаваемого объектаD)Часть экрана, на которую смотрит пользователь при разметке, определяющая качество итоговой обучающей выборки изображений
показать ответ и разбор
+B)Область входного изображения, влияющая на активацию нейрона; мелкие объекты требуют мелких полей/ранних слоёв, крупные — глубоких// разбор: Рецептивное поле — область входного изображения, которая влияет на значение конкретного нейрона. У ранних слоёв оно маленькое (видят детали), у глубоких — большое (видят крупные структуры). Для детекции это ключево: мелкие объекты теряются на глубоких слоях с большим полем, крупные — не помещаются в мелкое. Отсюда мультимасштабные подходы (FPN), объединяющие признаки разных уровней.
- Зачем в свёрточном слое добавляют padding (например, 'same')?A)Чтобы случайным образом занулить часть входа ради дополнительной регуляризации сети при обученииB)Чтобы увеличить число каналов на выходе слоя, не меняя ширину и высоту карты признаковC)Чтобы карта на выходе не сжималась по краям и граничные пиксели участвовали полноценноD)Чтобы перемешать пиксели по краям изображения перед подачей их в следующий слой сети
показать ответ и разбор
+C)Чтобы карта на выходе не сжималась по краям и граничные пиксели участвовали полноценно// разбор: Без паддинга каждая валидная свёртка отрезает рамку по краям: карта уменьшается, а угловые пиксели попадают под ядро реже центральных. padding='same' достраивает (обычно нулевую) рамку, так что выход сохраняет размер входа, а границы обрабатываются полноценно. 'valid' — без паддинга, с усадкой. На число каналов паддинг не влияет — это про пространственный размер.
- Как страйд (stride) свёртки влияет на размер выходной карты признаков?A)Никак: страйд меняет число обучаемых весов в фильтре, но не размер выходной картыB)Пропорционально увеличивает выходную карту, повышая её пространственное разрешениеC)Влияет лишь на глубину (число каналов) выхода, оставляя ширину и высоту неизменными у итоговой выходной карты признаков после свёрткиD)Больше страйд — реже позиции фильтра — меньше карта: примерно вход, делённый на страйд
показать ответ и разбор
+D)Больше страйд — реже позиции фильтра — меньше карта: примерно вход, делённый на страйд// разбор: Страйд — шаг, с которым фильтр скользит по входу. При страйде 2 фильтр встаёт вдвое реже, и выходная карта примерно вдвое меньше по каждой оси (точно (W−K+2P)/S+1). Так страйд, как и пулинг, снижает пространственный размер и расширяет рецептивное поле. Число весов фильтра от страйда не зависит, каналы задаёт число фильтров.
- Зачем в сетях используют свёртки 1×1 (например, в bottleneck-блоках)?A)Чтобы увеличить рецептивное поле, охватив одним фильтром заметно больший кусок входа сразуB)Чтобы сгладить изображение, усредняя соседние пиксели в пределах окна один на один и убрать из карты признаков высокочастотный шумC)Чтобы смешать и сжать/расширить каналы и добавить нелинейность, не трогая пространственный размерD)Чтобы заменить собой операцию пулинга, уменьшив ширину и высоту карты признаков вдвое
показать ответ и разбор
+C)Чтобы смешать и сжать/расширить каналы и добавить нелинейность, не трогая пространственный размер// разбор: Свёртка 1×1 не смотрит на пространственных соседей (окно один пиксель), зато линейно комбинирует значения по всем каналам в каждой точке — дешёвый способ поменять число каналов (сжать в bottleneck или расширить) и добавить нелинейность через активацию. Рецептивное поле она не растит и размер карты не меняет. Отсюда её роль в Inception и ResNet-bottleneck.
- За счёт чего depthwise separable свёртки (MobileNet) резко сокращают вычисления?A)Разбивают свёртку на пространственную по каждому каналу отдельно и 1×1 по каналам — сумма дешевле полнойB)Убирают свёртки, заменяя их полносвязными слоями меньшего размераC)Считают свёртку на каждом втором пикселе входа, пропуская половину позицийD)Обучаются сразу в пониженной точности int8, отчего и работают в несколько раз быстрее
показать ответ и разбор
+A)Разбивают свёртку на пространственную по каждому каналу отдельно и 1×1 по каналам — сумма дешевле полной// разбор: Обычная свёртка одновременно смешивает пространство и каналы — дорого. Depthwise separable факторизует её: depthwise (отдельный пространственный фильтр на каждый канал) плюс pointwise 1×1 (смешивание каналов). Сумма операций в разы меньше полной свёртки при близком качестве — отсюда лёгкие мобильные сети. Это факторизация, а не квантизация и не пропуск пикселей.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.