У кошки и собаки есть и шерсть, и глаза, и уши. Что нужно, чтобы различить два объекта с похожими низкоуровневыми признаками? Покрутив картинку в 3D, увидим, почему перцептрон и SVM упираются в одну плоскость, и посмотрим, как скрытый слой меняет координаты. Затем проследим весь путь, которым CNN превращает фото в вероятности, и её обучение, а потом своими руками попробуем аугментацию данных, которая вклеивает ключевой кусочек и смешивает ответы (Attentive CutMix).
У обеих есть шерсть, два глаза и стоячие уши. Одних низкоуровневых признаков мало, чтобы их различить. Что должна надстроить модель, чтобы развести эти два класса?
В 4-2 кошка и человек различались уже на уровне низкоуровневых признаков — шерсть и кожа. С кошкой и собакой всё иначе. Шерсть есть у обеих, поэтому карты границ похожи, а разница — в форме частей: длине морды, размере носа, контуре головы.
В этом выпуске три темы: почему после добавления слоёв разделяется то, что не делилось одной плоскостью (раздел 2), как CNN превращает фото в вероятности (разделы 3–4) и аугментация данных, которая учит модель сосредотачиваться на ключевых частях, — Attentive CutMix с рисунка (разделы 5–6).
На рисунке из фото кошки выбирается кусочек, на который модель отреагировала сильнее всего (возле глаз и ушей), вклеивается в фото собаки, а ответ смешивается пропорционально вклеенной площади. Из 49 клеток 6 — кошачьи, поэтому ответ — «кошка 6/49, собака 43/49». В разделе 6 попробуем сами.
Перцептрон и SVM из 4-1 проводят одну плоскость. В исходных пиксельных координатах классы одной плоскостью не разделить. Решение — сменить координаты, и именно то, кто выбирает способ смены, отличает ядерный SVM от многослойной нейросети.
Линейный классификатор проводит в пространстве признаков одну плоскость (в 2D — прямую, в 3D — плоскость, в больших размерностях — гиперплоскость) и отвечает по тому, с какой стороны лежит точка. Однослойный перцептрон и линейный SVM устроены именно так, и оба находят веса w и смещение b. Различается лишь критерий выбора плоскости: перцептрон останавливается, когда не остаётся ошибочных точек, а SVM выбирает плоскость с самым широким промежутком до обеих групп (зазором). Поэтому то, что они находят веса, их не различает.
Проще говоря, это как разделить одной линейкой перемешанные на столе чёрные и белые бусины. Если чёрные собраны в центре, а белые окружают их кольцом, то как ни клади линейку, какую-то часть она разрежет. А если прогнуть стол так, чтобы середина ушла вниз, чёрные бусины опустятся, белые останутся наверху — и их можно разделить одной горизонтальной пластиной. Ядерный SVM — это когда человек говорит, как прогнуть стол, а многослойная нейросеть сама учится, как его прогнуть.
Точки двух групп: группа в центре и группа, окружающая её кольцом (вымышленные данные для объяснения). Переключайте метод кнопками и вращайте рисунок, перетаскивая его. Скрытый слой в ③ (3 нейрона) действительно обучается в браузере при открытии этой страницы.
● группа в центре ● группа по кругу фиолетовая поверхность = граничная плоскость. Щёлкнув по рисунку, его можно вращать и клавишами со стрелками.
| Метод | Форма границы | Кто задаёт координаты (признаки) | На сырых пикселях фото | Появление |
|---|---|---|---|---|
| Однослойный перцептрон | Одна плоскость | Не меняются | Плохо | 1958 |
| Линейный SVM | Одна плоскость (максимальный зазор) | Не меняются | Плохо (обычно лучше перцептрона) | 1990-е |
| Ядерный SVM | Изогнутая граница в исходном пространстве | Человек, через выбор ядра | Хорошо на простых изображениях (рукописные цифры), на естественных фото — предел | 1992~ |
| Многослойный перцептрон · CNN | Изогнутая граница в исходном пространстве | Выучиваются на данных | Хорошо (нужно достаточно данных) | С 1986, рывок CNN в 2012 |
На рукописных цифрах (MNIST) ядерный SVM даже на одних пикселях давал ошибку около 1% (сравнение LeCun и др., 1998). Но чем сложнее фото, тем труднее человеку подобрать подходящее ядро. И наоборот, если к векторам признаков, извлечённым обученной CNN, приставить линейный SVM, классификация тоже идёт хорошо (Razavian и др., 2014). Значит, качество определил не тип классификатора, а признаки.
«Перцептрон появился, потому что SVM не справлялся» — порядок как раз обратный. Перцептрон (1958) появился раньше, а SVM стал основным методом в 1990–2000-х, когда многослойные нейросети было трудно обучать. В 2012 году глубокая CNN с большим отрывом обошла методы на основе SVM в крупномасштабной классификации фото, и ситуация снова изменилась.
«Перцептрон точен, потому что находит веса» — верно лишь наполовину. Веса находит и SVM. Однослойный перцептрон — такой же классификатор с одной плоскостью, как линейный SVM, и на сырых пикселях фото упирается в тот же предел. Хорошо работают многослойный перцептрон со скрытым слоем и CNN.
Итак, разница не в том, SVM это или перцептрон, а в том, задаёт ли координаты (признаки) человек или они выучиваются на данных. Пиксельное правило выбирает бессмысленные клетки фона (4-4), потому что пиксели — плохие координаты, а фильтры из 4-2 и CNN из этого выпуска — устройства, которые меняют эти координаты обучением. Победе CNN помогло не только добавление слоёв, но и общие веса свёртки, большие объёмы размеченных данных и вычисления на GPU.
Q1. Как верно описать связь однослойного перцептрона и линейного SVM?
Q2. В чём главное различие ядерного SVM и многослойного перцептрона?
Q3. Что будет, если убрать из скрытого слоя σ (функцию активации)?
Один нейрон скрытого слоя создаёт одну новую координату по схеме «взвешенная сумма → функция с изломом (tanh, ReLU)». Обучение подправляет сам способ создания этих координат, чтобы последняя плоскость хорошо разделяла классы. В коде 1 на одних и тех же точках линейный SVM дал 57.7% верных ответов, SVM с добавленной человеком x₁² + x₂² — 98.8%, а многослойный перцептрон с 3 скрытыми нейронами — 99.2%. Свёрточные слои CNN выполняют ту же «смену координат», приспособленную к фото.
Если повторять свёртку → ReLU → пулинг, фото уменьшается, а число карт признаков растёт. В конце их выпрямляют и подают в слой перцептронов — получаются оценки для каждого класса.
Свёрточная нейросеть (CNN) — модель, собранная из деталей 4-2 (свёртка·пулинг), и версия многослойной нейросети из раздела 2 («сменить координаты обучением, а затем провести плоскость»), специально для фото. Если многократно повторять [свёртка → ReLU → пулинг], фото становится всё меньше, зато число карт признаков (каналов) растёт. Последнюю карту признаков вытягивают в одну строку и подают в полносвязный слой (несколько перцептронов) — для каждого класса получается одна оценка, а софтмакс превращает эти оценки в вероятности с суммой 1.
Проще говоря, это система отчётности в компании. Рядовые сотрудники (1-й слой) докладывают мелкие факты вроде «здесь есть линия», руководители групп (2–3-й слои) объединяют эти доклады и передают наверх «здесь есть глаза и уши», а директора (полносвязный слой) смотрят только на сводку и решают: «с вероятностью 93% это кошка». Чем выше уровень, тем короче отчёт и абстрактнее его содержание.
| Этап | Что делает | Размер выхода | Количество чисел | Обучаемые числа (параметры) |
|---|---|---|---|---|
| Вход | Матрица пикселей | 56 × 56 × 3 | 9,408 | 0 |
| Свёртка1 | 16 фильтров 3 × 3, паддинг по краям | 56 × 56 × 16 | 50,176 | 3·3·3·16 + 16 = 448 |
| Пулинг1 | Max-пулинг 2 × 2 | 28 × 28 × 16 | 12,544 | 0 |
| Свёртка2 + пулинг2 | 32 фильтра → вдвое меньше | 14 × 14 × 32 | 6,272 | 3·3·16·32 + 32 = 4,640 |
| Свёртка3 + пулинг3 | 64 фильтра → вдвое меньше | 7 × 7 × 64 | 3,136 | 3·3·32·64 + 64 = 18,496 |
| Выпрямление | В одну строку | 3,136 | 3,136 | 0 |
| Полносвязный | 2 оценки | 2 | 2 | 3,136·2 + 2 = 6,274 |
| Софтмакс | В вероятности | 2 | 2 | 0 (всего 29,858) |
Запомните, что последняя карта признаков имеет размер 7 × 7. У широко используемой на практике ResNet-50 при входе 224 × 224 последняя карта признаков — тоже сетка 7 × 7 (2,048 каналов), и Attentive CutMix в разделе 6 использует именно эти 49 клеток.
Проследите за числами в таблице. Фото 56 × 56 × 3 трижды проходит свёртку и пулинг и становится 7 × 7 × 64, а выпрямленные 3,136 чисел проходят полносвязный слой и превращаются в 2 оценки. Всего обучаемых чисел — 29,858. У широко используемой ResNet-50 их около 25 миллионов, но последняя карта признаков у неё — та же сетка 7 × 7 [R4].
Последние оценки софтмакс превращает в вероятности, а фильтры и веса подправляются на величину расхождения с правильным ответом (кросс-энтропию).
Выберите фото сверху. Карты признаков 1-го слоя и результат пулинга вычислены на этой странице, применением фильтров к настоящему фото. Отклики дальних слоёв и итоговые вероятности — примерные значения, заданные, чтобы показать ход процесса.
Подвигайте две оценки, выданные полносвязным слоем. Считаем, что верный ответ — кошка.
В начале числа фильтров K и веса W полносвязного слоя CNN — случайные. Даже если подать фото кошки, вероятности выйдут примерно пополам.
Когда сообщают правильный ответ, вычисляют функцию потерь L = −log pверный и градиентным спуском из предыдущего выпуска понемногу подправляют все числа в направлении уменьшения потерь. Этот градиент передаётся от выхода ко входу, слой за слоем в обратную сторону (обратное распространение).
Если повторить это на десятках тысяч фото, то без всяких указаний фильтры 1-го слоя принимают форму фильтров границ, а фильтры дальних слоёв начинают реагировать на глаза и уши. То, что даже «на какие признаки смотреть» выучивается из данных, — главное отличие от подхода, где признаки задавал человек.
Q1. Как обычно меняется форма карт признаков по мере прохождения CNN?
Q2. Каковы вероятности софтмакса при оценках z = (2.0, 2.0)?
Q3. Что подправляется во время обучения?
Софтмакс превращает оценки в вероятности с суммой 1. Кросс-энтропия даёт тем больший штраф, чем меньшую вероятность получил правильный ответ. Обучение — это понемногу подправлять все числа фильтров и веса так, чтобы этот штраф уменьшался, а градиент передаётся от выхода ко входу, слой за слоем в обратную сторону (обратное распространение) [R3].
Низкоуровневые признаки (границы шерсти) похожи. Различают признаки частей, которые видят слои с 3-го и дальше: длина морды, размер носа, контур головы.
На этот раз низкоуровневые признаки похожи. У обеих есть шерсть, поэтому карта силы границ густая по всему фото, и два глаза со стоячими ушами тоже одинаковы. Одних признаков 1–2-го слоёв мало, чтобы их различить.
Разница — в форме частей. У собаки морда далеко выдаётся вперёд, нос крупный, а из открытой пасти иногда виден язык. У кошки голова круглая, нос и рот маленькие. Различают их признаки слоёв с 3-го и дальше, которые смотрят на «расположение глаз, носа и морды».
Поэтому появились методы, которые учат модель сосредотачиваться не на общем впечатлении от фото (цвет шерсти, фон), а на таких ключевых частях. Раздел 6 — это Attentive CutMix с изображения из раздела 1.
Если в парном сравнении переключиться на вид «Сила границы», у обоих фото карта границ густая из-за шерсти. Посмотрите и на то, что исчезает первым, если снизить разрешение до 7. Чтобы модель смотрела на части морды, а не на лёгкие подсказки вроде цвета шерсти или фона (газон), важно, какие обучающие данные ей давать. Об этом — аугментация данных в разделе 6.
Когда фото мало или модель опирается на посторонние подсказки, обучающие фото меняют или смешивают, чтобы научить её, «на что смотреть».
| Метод | Что делает | Ответ? | Чему учит |
|---|---|---|---|
| Отражение·обрезка·поворот | Отражаем по горизонтали или вырезаем и увеличиваем часть | Без изменений | Объект тот же, даже если положение и направление меняются |
| Изменение яркости·цвета | Делаем похожим на фото при другом освещении | Без изменений | Смотреть на форму, а не на освещение |
| Cutout | Стираем один прямоугольник | Без изменений | Угадывать, даже если часть закрыта |
| Mixup | Накладываем два фото полупрозрачно | Смешиваем в той же пропорции | Меньше излишней уверенности [R7] |
| CutMix | Вклеиваем прямоугольный кусочек другого фото | Смешиваем по вклеенной площади | Узнавать даже по части [R5] |
| Attentive CutMix | Вклеиваем только кусочки с сильным откликом | Смешиваем по вклеенной площади | Сосредотачиваться на ключевых частях [R6] |
В коде 2 для Colab, если обучить одну и ту же CNN всего на 20 рукописных цифрах на класс (200 фото), тестовая точность без изменений — 93.3%, а с CutMix — 95.2% (среднее по 3 сидам). Это пример того, как смешивание и вклеивание помогает при малом числе фото. При других данных и моделях величина эффекта будет другой.
Метод состоит из четырёх шагов. (1) Подаём фото кошки в уже обученную CNN и получаем последнюю карту признаков 7 × 7. (2) Из 49 клеток выбираем k клеток с самым сильным откликом. (3) Соответствующие этим клеткам кусочки фото кошки вклеиваем на те же места случайного фото собаки. (4) Ответы тоже смешиваем по доле площади. При k = 6 получается кошка 6/49, собака 43/49.
Внимание: в статье кусочки выбираются по реальным откликам ResNet-50, обученной на ImageNet. Здесь вместо обученной модели как замена отклика используется «средняя сила границ в клетке». Поэтому могут выбираться клетки, где просто много границ, например полоски на лбу или границы фона, а не только глаза и нос. Настоящая обученная модель может выбрать другие клетки.
Аугментация данных — способ повысить качество, меняя только обучающие фото, без изменения устройства модели. Она даёт эффект регуляризации, уменьшая переобучение, то есть чрезмерную подгонку под одни лишь обучающие фото. Помните, что в практике выше вместо обученной ResNet-50 как замена отклика использовалась «сила границ в клетке».
Оба кода используют только библиотеки, предустановленные в Colab, и встроенные данные. Нажмите «Скачать ноутбук (.ipynb)» и откройте его в Colab через Файл → Загрузить блокнот или скопируйте код и вставьте в ячейку нового ноутбука.
Сравниваем на двух группах (центр и кольцо) перцептрон, линейный SVM, преобразование, выбранное человеком, SVM с RBF-ядром и многослойный перцептрон с 3 скрытыми нейронами (обратное распространение вручную на numpy), а также вычисляем софтмакс и кросс-энтропию.
На рукописных цифрах 8 × 8 для обучения берём всего 20 изображений на класс, обучаем одну и ту же CNN как есть / с CutMix и сравниваем тестовую точность по 3 сидам. Чтобы перейти на фото кошек и собак, выберите в keras.datasets.cifar10 классы 3 (кошка) и 5 (собака) и замените форму Input на (32, 32, 3).
Промпты для вставки в ИИ-ассистента вроде ChatGPT, Qwen или Claude. При нажатии «Копировать» выбранный код добавляется после промпта. Замените текст в 〔 〕 на описание своей ситуации.
Ответ ИИ — лишь отправная точка. Предложенные статьи, числа и функции библиотек обязательно проверяйте по первоисточникам и официальной документации. Если вы пользовались помощью ИИ в конкурсной работе или статье, укажите факт и объём использования по правилам организаторов или журнала.
Тот же словарь, что и у жёлтых пунктирных подчёркиваний в тексте. Во всей серии используются одни и те же термины. Нажмите на название раздела, чтобы перейти к месту первого упоминания.
Аналогия — первый шаг к пониманию, но и семя заблуждения. Для аналогий с глазом и мозгом человека указана степень соответствия. Прямое есть данные, что там действительно происходит то же самое · Частичное похожи лишь некоторые свойства · Нет соответствие неизвестно
| Понятие | Бытовая аналогия | Аналогия с глазом·мозгом | Где аналогия не работает |
|---|---|---|---|
| Скрытый слой | Расправить мятый лист бумаги и разделить его линейкой | Нет | Бумагу расправляет человек, а скрытый слой сам учится, «как расправлять». К тому же на деле это происходит в сотнях измерений, и глазами этого не увидеть |
| Слои CNN | Цепочка отчётности: рядовой сотрудник → руководитель группы → топ-менеджер | Отчасти зрительный путь тоже устроен так: сетчатка → первичная зрительная кора → высшие области; чем дальше, тем шире участок и сложнее формы, на которые реагируют нейроны | В мозге много обратных связей и внимания. CNN считает только в одном направлении |
| Софтмакс | Перевести число голосов в доли голосов | Нет | Доля голосов — реальный итог голосования, а вероятность софтмакса — лишь «степень уверенности» модели, и она может не совпадать с вероятностью оказаться правой |
| Обратное распространение | Когда результат ошибочен, разбирать ответственность в обратном порядке, начиная с последнего этапа производства | Нет | Насколько «распределить» ответственность, точно вычисляется через производные. Виноватого определяет не человек |
| CutMix | Коллаж из двух вырезанных фото, где и правильный ответ делится пропорционально площади вставленного куска | Нет | Если вставленный кусок — один фон, получается ложный ответ «кошка 30%». Attentive CutMix уменьшает такие случаи |
E-1 Об авторе · E-2 Научные источники · E-3 Источники иллюстраций·данных
Рекомендации для преподавателей, наставников OJT и репетиторов. Время указано ориентировочно — подстройте его под реальное занятие.
| Аудитория | Студенты и специалисты, прошедшие 4-1·4-2. Практики, которым нужно объяснить, «почему глубокое обучение должно быть глубоким» |
|---|---|
| Необходимые знания | Перцептрон·SVM из 4-1, свёртка из 4-2. Смысл экспоненты e^z |
| Цели обучения | ① Привести пример данных, на которых линейный классификатор бессилен, и объяснить, как скрытый слой меняет координаты ② Рассчитать размер выхода и число параметров каждого слоя CNN ③ Вычислить софтмакс·кросс-энтропию и объяснить смешивание ответов в CutMix |
| Ориентировочное время | Чтение 45–55 мин · демонстрация практики 25 мин · практика в Colab 30 мин (код 1 — 10 мин, код 2 — 1 мин запуска + 19 мин разбора) |
Вступление 5 мин (раздел 1) → трёхмерный рисунок раздела 2 — 15 мин → таблица размеров раздела 3 — 10 мин → калькулятор софтмакса раздела 4 — 10 мин → CutMix раздела 6 — 5 мин → вопросы «Проверь себя» — 5 мин.
Заменить раздел 2 на «случай, не разделимый плоскостью» из наших данных и обсудить — 20 мин → по таблице раздела 3 рассчитать число параметров для нашего размера входа — 15 мин → выбрать в таблице аугментаций раздела 6 подходящие для наших фото методы — 20 мин → переделать код 2 под ситуацию, когда у нас мало фото, и запустить — 35 мин.
Начинающим — только разделы 1·2·4. Продвинутых попросите заново вручную пересчитать число параметров в таблице раздела 3 и построчно сопоставить три строки обратного распространения в коде 1 с формулами.
| Раздел | Вопрос, на котором стоит остановиться | Совет по работе с интерактивом |
|---|---|---|
| 1 Задача | «Что общего у кошки и собаки?» | Сначала спросите, откуда на изображении взялось 6/49 |
| 2 Зачем складывать слои | «Почему, где бы мы ни поставили плоскость, одна группа всё равно разрезается?» | Нажимайте ① → ② → ③ по порядку и вращайте рисунок |
| 3 Устройство CNN | «Сколько обучаемых чисел в слое пулинга?» | Пройдитесь сверху вниз по столбцам размеров и параметров таблицы |
| 4 Вероятности | «Если баллы равны, какими будут вероятности?» | В калькуляторе софтмакса сделайте два балла одинаковыми |
| 5 Кошка vs собака | «Что плохого в том, чтобы различать только по цвету шерсти?» | Посмотрите на силу границы в парном сравнении и разрешение 7 |
| 6 Аугментация данных | «Если кусок кошки занимает 10 клеток, какой правильный ответ?» | Двигайте ползунок k от 1 → 15 и следите за столбиками ответа |
| Заблуждение | Верное объяснение | Что показать |
|---|---|---|
| Достаточно сложить слои, и граница станет изогнутой | Без функции с изломом (активации) сколько слоёв ни складывай, получится одна плоскость | Раздел 2, «Проверь себя», Q3 |
| SVM не умеет нелинейную классификацию | Ядерный SVM строит изогнутую границу. Правда, ядро выбирает человек | ② в разделе 2 и результат RBF в коде 1 |
| Вероятность софтмакса = вероятность правильного ответа | Это лишь уверенность модели, она может расходиться с реальной долей правильных ответов (проблема калибровки) | В калькуляторе раздела 4 сильно разведите баллы |
| CNN хорошо работает, потому что у неё много обучаемых чисел | Один и тот же фильтр используется повторно, поэтому их гораздо меньше, чем в полносвязной сети | 29 858 в таблице раздела 3 |
| Аугментация данных лишь увеличивает число фото | Это регуляризация, которая учит, на что смотреть. Есть и методы со смешиванием ответов | Таблица аугментаций раздела 6 и код 2 |
Граница — это одна плоскость (в двумерном случае прямая), поэтому, как её ни ставь, она разрежет кольцевую группу надвое. В коде 1 получилось 57.7%.
3 × 3 × 16 × 32 + 32 (смещения) = 4 640.
Вероятности (0.5, 0.5). Потери −log 0.5 ≈ 0.693.
Кошка 10/49 ≈ 0.204, собака 39/49 ≈ 0.796.
Обучающих фото мало — 200, поэтому обе модели могут угадать их все. Разница проявляется на тестовых фото, которые модель видит впервые (это степень переобучения).
В коде 1 поменяйте число скрытых нейронов на 1, 2, 3, 8, сведите точность в таблицу и напишите, начиная с какого числа удаётся разделить «центр·кольцо» и почему.
Поменяйте PER_CLASS в коде 2 на 10, 20, 50, 100 и на 3 сидах доложите, как эффект CutMix (разница в точности на тестовой выборке) зависит от числа фото.
| Начинающим | Таблицу раздела 3 и формулы раздела 4 можно пропустить. Обязательно разберите трёхмерный рисунок раздела 2 и практику CutMix в разделе 6 |
|---|---|
| Углублённо | Пусть добавят в код 2 и Mixup, и CutMix, сравнят их и расскажут, как аугментация со смешиванием ответов меняет уверенность модели (максимум софтмакса) |
| Что изучать дальше | 3-3 Изображения и CNN · 4-4 Чихуахуа vs маффин (высокоуровневые признаки и ограничения модели) |
| Материалы для преподавателя | Критерии оценки вопросов «Проверь себя» и примеры ответов к заданиям — на странице ответов для преподавателей (4-3) |
Вы дочитали выпуск «4-3 Кошка vs собака» до конца. Обитатели лаборатории подведут итоги — каждый в одной фразе.