Для чего нужен pooling слой?
Что проверяют
Понимаете ли вы, что pooling делает с тензором и зачем он нужен в классических CNN, и знаете ли, почему в современных архитектурах его стало меньше. Следом часто просят посчитать размер выхода или сравнить max и average pooling.
Как отвечать
Pooling это операция без обучаемых весов: окно скользит по карте признаков, и каждое окно сворачивается в одно число. Задачи у неё такие:
- уменьшить пространственный размер:
nn.MaxPool2d(kernel_size=2, stride=2)сокращает высоту и ширину вдвое, а объём вычислений следующих свёрток примерно вчетверо; - расширить рецептивное поле: после сжатия следующие свёртки видят больший участок исходного изображения;
- дать локальную устойчивость к сдвигам: небольшое смещение признака внутри окна не меняет максимум.
Виды стоит назвать с назначением:
- max pooling: берёт самый сильный отклик и сохраняет факт наличия признака. Градиент при обучении уходит только в элемент, который был максимумом;
- average pooling: усредняет окно, сглаживает карту;
- global average pooling: сворачивает каждую карту целиком в одно число.
nn.AdaptiveAvgPool2d(1)в PyTorch илиGlobalAveragePooling2Dв Keras заменяют тяжёлые полносвязные слои перед классификатором, так сделано, например, в ResNet.
Размер выхода считается как floor((H+2p-k)/s)+1, где k размер окна, s шаг, p паддинг.
Покажите, что знаете контекст: в современных сетях сжатие часто делают свёрткой с шагом 2, у неё веса обучаются. В трансформерах для изображений отдельного pooling-слоя нет вовсе, а в NLP пулингом называют сворачивание эмбеддингов токенов в один вектор, например усреднение для sentence embeddings.
Где спотыкаются
Говорят, что pooling уменьшает число параметров свёрточных слоёв. Параметры свёртки от размера карты не зависят, уменьшаются вычисления и параметры полносвязного слоя после flatten.
Называют главной целью борьбу с переобучением. Эффект есть, но косвенный, для этого существуют регуляризация, dropout и аугментации.
Обещают полную инвариантность к сдвигу. Она только локальная, а из-за прореживания без сглаживания сдвиг входа на пару пикселей способен заметно поменять ответ сети.