В чём заключалась главная сложность для классических программ

Компьютер видит любую цифровую картинку исключительно как двумерную или трёхмерную таблицу чисел. Для цветного снимка размером 300 на 300 пикселей эта матрица содержит 270 тысяч значений яркости красного, зелёного и синего каналов. Если кот повернёт голову, ляжет на спину или отойдёт в тень, почти все эти 270 тысяч чисел кардинально изменятся, хотя животное останется прежним.

Классические алгоритмы 1990-х и 2000-х годов пытались опереться на строгие правила. Программисты вручную писали детекторы прямых углов, искали перепады контраста и создавали шаблоны силуэтов. Этот подход терпел крах при малейшем изменении ракурса, смене освещения или появлении на заднем плане посторонних предметов. Длинношёрстная собака на фоне пледа превращалась для такого кода в неразрешимую задачу.

Анатомия свёрточной сети и принцип послойного зрения

Прорыв произошёл благодаря свёрточным нейронным сетям (CNN). Архитектура таких сетей копирует принципы работы зрительной коры млекопитающих, описанные биологами Дэвидом Хьюбелом и Торстеном Визелем ещё в 1960-х годах. В мозге отдельные нейроны реагируют на ориентацию линий, а другие объединяют эти сигналы в целостный образ.

В искусственной нейросети этот процесс разделён на несколько последовательных этапов, каждый из которых выполняет собственный слой математических преобразований.

Свёртка и карты признаков

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

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

Пулинг и сжатие пространства

За свёрткой следует слой субдискретизации, или пулинг. Чаще всего применяют операцию Max Pooling с окном 2х2. Алгоритм делит карту признаков на блоки по четыре пикселя и сохраняет только максимальное значение из четырёх, отбрасывая остальные три.

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

Полносвязные слои и принятие решения

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

Этот вектор попадает в классическую полносвязную нейросеть. На самом последнем выходе находится слой с функцией Softmax или Sigmoid, который превращает числовые сигналы в вероятности двух классов. Сеть выдаёт вердикт вида 97% вероятности для кошки и 3% для собаки.

Как проходит обучение на миллионах примеров

Изначально веса всех фильтров заполняются случайными числами. Если подать на вход такой «сырой» сети снимок хаски, она выдаст случайный шум с вероятностью 50 на 50. Чтобы сеть поумнела, используют контролируемое обучение с учителем.

  1. Прямой проход: картинка проходит через все фильтры, сеть делает текущее предсказание.
  2. Расчёт ошибки: функция потерь (обычно бинарная кросс-энтропия) вычисляет разницу между предсказанием сети и правильной меткой файла.
  3. Обратное распространение ошибки: с помощью правила дифференцирования сложных функций градиент ошибки передаётся от выхода к первым слоям.
  4. Корректировка весов: метод градиентного спуска слегка сдвигает значения каждого фильтра так, чтобы ошибка на этом изображении стала меньше.

Эту процедуру повторяют сотни тысяч раз на датасетах вроде ImageNet или Kaggle Dogs vs Cats, содержащих десятки тысяч размеченных фотографий. Процесс требует огромных вычислительных мощностей, поэтому вычисления параллелят на графических процессорах (GPU).

Исторический перелом на соревновании ImageNet

Идею свёртки сформулировал учёный Ян Лекун в 1998 году, создав сеть LeNet-5 для распознавания рукописных цифр на почтовых конвертах. Однако для сложных цветных снимков мощностей компьютеров конца XX века категорически не хватало.

Исторический скачок произошёл осенью 2012 года на международном конкурсе ImageNet Large Scale Visual Recognition Challenge. Команда Алекса Крижевского и Джеффри Хинтона представила архитектуру AlexNet. Эта сеть состояла из пяти свёрточных и трёх полносвязных слоёв и обучалась на двух игровых видеокартах NVIDIA GeForce GTX 580.

AlexNet снизила долю ошибок классификации с прежних 26% до рекордных 15,3%. Это доказало практическое превосходство глубокого обучения над любыми классическими методами компьютерного зрения.

Проблема переобучения и методы защиты

Нейросеть обладает огромным числом настраиваемых параметров, доходящим до десятков миллионов. Из-за этого возникает эффект переобучения (overfitting). Алгоритм начинает досконально запоминать обучающие картинки вплоть до фоновых деталей вместо поиска общих признаков вида.

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

Для борьбы с переобучением инженеры применяют аугментацию данных. Каждое изображение перед подачей в сеть случайно поворачивают, отражают по горизонтали, обрезают края, меняют контрастность и баланс белого. Также используют слои Dropout, которые во время каждого шага обучения принудительно отключают случайные 20-50% нейронов, заставляя сеть распределять признаки равномерно.

Частые вопросы

Сколько картинок нужно нейросети, чтобы научиться различать кошек и собак?

Для качественного обучения собственной свёрточной сети с нуля требуется минимум по 1000–2000 разнообразных фотографий каждого класса. При использовании готовой предобученной модели и техники переноса знаний (Fine-tuning) достаточно иметь буквально по 50–100 качественных примеров на каждый класс.

Почему кошек и собак путают чаще, чем автомобили и самолёты?

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

В чём разница между классификацией и детекцией на фото?

Классификация даёт один ответ на всё изображение целиком (например, на фото изображён кот). Детекция решает более сложную задачу: находит точные координаты объекта на снимке, обводит его прямоугольной рамкой (bounding box) и указывает класс, даже если на одной фотографии рядом сидят три собаки и две кошки.

На каком языке программирования чаще всего пишут такие нейросети?

Абсолютным стандартом в индустрии и учебных проектах стал язык Python. Для работы с архитектурами свёрточных сетей используют библиотеки PyTorch, TensorFlow и Keras, а предварительную обработку картинок ведут с помощью OpenCV и Pillow.