---
title: Сверточные нейронки
seo:
  title: Сверточные нейронки — Data Scientist
  description: Тема «Сверточные нейронки» для собеседования Data Scientist. Что такое ядро свёртки? Что такое pooling?
---

[Все темы Data Scientist](/data-scientist)

## <strong>Что такое ядро свёртки?</strong> [#q-14bee738d69b8103bd3dd817454eaeba]

Ядро свертки, также известное как фильтр или маска, представляет собой матрицу небольшого размера, которая скользит по входным данным (например, изображению) для выполнения операции свертки. Каждый элемент ядра представляет собой вес, который умножается на соответствующий пиксель во входных данных, а затем суммируется, чтобы получить выходное значение для конкретного пикселя в выходном изображении. Ядро свертки позволяет выделять различные характеристики входных данных, такие как границы, текстуры или общие шаблоны, и эффективно сжимать информацию за счет разделения параметров между пикселями.

:::note[Ссылки для изучения]

1. [Свёрточные нейронные сети](https://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8)
   :::

---

## <strong>Что такое pooling?</strong> [#q-14bee738d69b8184bf27cf71996b5645]

<strong>Pooling</strong> - это операция, которая выполняется после свертки в
сверточных нейронных сетях. Она используется для уменьшения размерности
пространства признаков путем агрегации информации из набора соседних пикселей
или признаков. Обычно в пулинге выбирается одно значение из набора соседних
пикселей или признаков (например, максимальное значение в случае максимального
пулинга, среднее значение в случае среднего пулинга) и используется как
представление для этого набора. Это позволяет уменьшить количество параметров и
вычислений в сети, улучшить инвариантность к масштабированию и улучшить
обобщающую способность модели.

:::note[Ссылки для изучения]

1. [Свёрточные нейронные сети](https://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8)
   :::

---

## <strong>Что такое Receptive Field?</strong> [#q-14bee738d69b81398a35fa6f0f217ea1]

Receptive Field (рецептивное поле) в контексте сверточных нейронных сетей представляет собой область входных данных, которая влияет на активацию определенного нейрона в слое. Он определяет, какие пиксели или признаки во входном изображении влияют на вывод определенного нейрона. Размер рецептивного поля определяется архитектурой сети и параметрами слоев, такими как размер ядра свертки и размеры пулинга. Увеличение размера рецептивного поля позволяет модели анализировать более широкие контексты входных данных.

:::note[Ссылки для изучения]

1. [Свёрточные нейронные сети](https://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8)
   :::

---

## <strong>Какие есть способы решения проблем оптимизации сверточных сетей?</strong> [#q-14bee738d69b81599041dfc2b40da1f3]

Вот несколько способов решения проблем оптимизации сверточных нейронных сетей&#58;

1. <strong>Использование предобученных моделей</strong>&#58; Используйте
   предварительно обученные модели, такие как <code>VGG</code>,
   <code>ResNet</code> или <code>Inception</code>, и проводите дообучение на
   своих данных. Это может помочь избежать проблем с сходимостью и ускорить
   обучение.

1. <strong>Использование адаптивных оптимизаторов</strong>&#58; Вместо
   классического градиентного спуска используйте адаптивные оптимизаторы, такие
   как <code>Adam</code>, <code>RMSProp</code> или <code>AdaGrad</code>. Они
   могут более эффективно адаптироваться к изменчивости градиентов и ускорить
   сходимость.

1. <strong>Регуляризация</strong>&#58; Применение <code>L1</code> или
   <code>L2</code> регуляризации может помочь предотвратить переобучение и
   улучшить обобщающую способность модели.

1. <strong>Уменьшение скорости обучения</strong>&#58; При необходимости
   уменьшайте скорость обучения во время обучения, чтобы сделать шаги
   оптимизации менее агрессивными и предотвратить расхождение.

1. <strong>Использование более глубоких или узких архитектур</strong>&#58;
   Иногда проблемы с оптимизацией могут быть связаны с архитектурными
   особенностями сети. Попробуйте изменить глубину или ширину сети и посмотрите,
   как это повлияет на процесс обучения.

1. <strong>Использование других функций активации</strong>&#58; Вместо
   стандартной функции активации <code>ReLU</code> попробуйте использовать
   другие функции, такие как <code>Leaky ReLU</code>, <code>ELU</code> или
   <code>SELU</code>, которые могут помочь в случае проблем с градиентами.

:::note[Ссылки для изучения]

1. [Свёрточные нейронные сети](https://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8)
   :::

---

## <strong>Как свертка будет обрабатывать цветное изображение?</strong> [#q-14bee738d69b819b9bddc4667f4f7e18]

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

:::note[Ссылки для изучения]

1. [Свёрточные нейронные сети](https://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8)
   :::

---

## <strong>Архитектура</strong> <code>AlexNet</code> <strong>и для какой задачи была изначально обучена?</strong> [#q-14bee738d69b81cfbd0efd775bc455b0]

Архитектура <code>AlexNet</code> представляет собой глубокую сверточную нейронную сеть, разработанную для классификации изображений. Она состоит из пяти сверточных слоев, сопровождаемых слоями подвыборки, а также трех полносвязных слоев. <code>AlexNet</code> была изначально обучена на наборе данных <code>ImageNet</code> для задачи классификации изображений. Она стала первой глубокой сверточной нейронной сетью, привлекшей широкое внимание сообщества машинного обучения и стала прорывом в области компьютерного зрения.

:::note[Ссылки для изучения]

1. [Свёрточные нейронные сети](https://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8)
   :::

---

## <strong>Зачем нужен пулинг в свертках, почему нельзя обойтись без него или использовать просто свертку со страйдом?</strong> [#q-14bee738d69b811baf44d334d45c29af]

Пулинг уменьшает пространственный размер карт признаков без обучаемого ядра и может повысить устойчивость к небольшим сдвигам. Он не обязателен&#58; свёртка со stride больше 1 тоже уменьшает размер и обучает способ агрегации. Ни один из этих вариантов сам по себе не гарантирует инвариантность к масштабу и позиции.

:::note[Ссылки для изучения]

1. [Свёрточные нейронные сети](https://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8)
   :::
