# Разбор алгоритма SCAN: трехэтапная кластеризация изображений без учителя

Источник: https://www.youtube.com/watch?v=hQEnzdLkPj4
Канал: Yannic Kilcher
Опубликовано: 03.06.2020

---

Эта статья посвящена разбору научной работы «SCAN: Semantic Clustering by Adopting Nearest Neighbors», представленной ведущим YouTube-канала [Янником Кильхером (Yannic Kilcher)](https://www.youtube.com/@YannicKilcher). В центре внимания — алгоритм, позволяющий нейросетям классифицировать изображения по категориям (например, отделять кошек от собак), полностью игнорируя размеченные метки данных и обучаясь «с нуля» на основе структуры самих изображений.

## 🧠 Проблема классификации без учителя
[[JUMP:02:20]]

Традиционное глубокое обучение опирается на «ground truth» — размеченные вручную данные, где человек заранее указал, что на картинке изображена лягушка или самолет. [Янник Кильхер (Yannic Kilcher)](https://www.youtube.com/@YannicKilcher) ставит вопрос: можно ли автоматически классифицировать изображения, если мы не только не имеем меток, но даже не знаем априори, какие классы существуют в наборе данных? [02:20]

С технической точки зрения такая задача сводится к кластеризации — объединению схожих точек данных в группы [03:01]. Однако стандартная кластеризация (например, k-means) на основе яркости пикселей не работает для сложных изображений: два разных кота могут иметь меньше общего в пиксельном пространстве, чем белый кот и белый холодильник [05:17].

Предыдущие попытки, такие как метод **Deep Cluster**, использовали итеративный подход:

1. Сеть извлекает признаки.
2. Алгоритм группирует их.
3. Эти группы объявляются «псевдо-метками» для переобучения сети.

По мнению ведущего, проблема таких методов в том, что они часто зацикливаются на низкоуровневых признаках (цвет пикселя в углу), игнорируя семантический смысл объекта [08:21]. Новый алгоритм SCAN предлагает разделить обучение на три независимых этапа, чтобы избежать этой ловушки [04:36].

## 🛠 Трехэтапный метод SCAN
[[JUMP:09:28]]

### 1. Самообучаемое представление (Self-Supervised Learning)
На первом этапе задача состоит в том, чтобы заставить нейросеть «понимать» контент, не используя метки. Используется метод **Pretext Task** [30:04].

*   Берется исходное изображение, к нему применяются трансформации (T): случайное кадрирование (random crop), поворот или изменение цвета [10:06].
*   И оригинал, и трансформированная версия пропускаются через одну и ту же сеть $\Phi_{\theta}$.
*   Сеть обучается минимизировать расстояние (Euclidean distance или inner product) между их скрытыми представлениями [11:15].
*   **Логика:** если мы обрезали картинку так, что нижний правый угол исчез, сеть больше не может полагаться на него. Она вынуждена искать инвариантные признаки — те, что остаются неизменными при любых искажениях (форму ушей, текстуру шерсти) [12:07].

### 2. Семантическая кластеризация через соседей (SCAN)
[[JUMP:13:39]]
После того как получены хорошие признаки, авторы вводят новую сеть $\Phi_{\eta}$. Вместо того чтобы просто сравнивать картинку с её искаженной копией, они сравнивают её с «соседями» по набору данных.

*   Для каждого изображения в наборе находятся **k ближайших соседей** (по умолчанию $k=5$) в пространстве признаков, полученном на первом этапе [16:49].
*   Целевая функция заставляет сеть выдавать одинаковые прогнозы для изображения и его ближайших соседей [17:47].
*   Сеть предсказывает распределение вероятностей по $C$ классам (количество классов $C$ задается как гиперпараметр или оценка сверху) [18:17].
*   **Энтропийный член:** чтобы сеть не «схлопнулась» и не отправила все картинки в один-единственный кластер, в формулу добавляется максимизация энтропии. Это заставляет алгоритм распределять изображения по кластерам максимально равномерно [22:14].

### 3. Саморазметка и уточнение (Self-labeling)
[[JUMP:28:04]]
Финальный этап — «тонкая настройка» (fine-tuning). Сеть использует свои собственные предсказания из второго этапа как временные метки.

*   Алгоритм фильтрует данные, оставляя только те изображения, в которых сеть максимально уверена (порог уверенности около 0.7) [32:11].
*   На этих «уверенных» данных сеть дообучается через стандартную кросс-энтропийную потерю (cross-entropy loss) [31:44].
*   Это позволяет провести более четкие границы между классами, которые на этапе кластеризации могли быть «размытыми» [28:43].

## 📊 Результаты и эффективность
[[JUMP:33:57]]

На наборе данных **CIFAR-10** (10 классов) метод SCAN показал точность **83.5%** [33:57], а при использовании дополнительных технических приемов — до **88.6%** [38:01]. Для сравнения: простая кластеризация k-means выдает лишь около 35.9% [32:35].

Основные наблюдения:

*   **ImageNet:** Алгоритм протестировали на подмножествах в 50, 100 и 200 классов. При 50 классах точность составила 81%, что лишь на 5% хуже, чем обучение с учителем (86%) [38:55].
*   **Корреляция конфиденциальности:** [Янник Кильхер (Yannic Kilcher)](https://www.youtube.com/@YannicKilcher) отмечает, что чем более уверена сеть в своем предсказании, тем выше реальная точность этого предсказания. Это подтверждает, что сеть действительно находит внутреннюю структуру данных, а не просто гадает [35:29].
*   **Ошибка собаки:** Матрица путаницы (confusion matrix) на ImageNet показывает, что сеть часто путает разные породы собак между собой, но почти никогда не путает собаку с насекомым. Это говорит о том, что сеть формирует «суперкластеры» по биологическому принципу [40:30].

## 🧪 Скрытые сложности и критика ведущего
[[JUMP:41:10]]

Несмотря на впечатляющие результаты, [Янник Кильхер (Yannic Kilcher)](https://www.youtube.com/@YannicKilcher) указывает на несколько критических нюансов метода.

1.  **Проблема избыточности классов:** Если мы заставим сеть искать 20 классов там, где их всего 10 (overclustering), точность падает [41:51]. Ведущий выразил удивление этим фактом, так как теоретически более мелкое деление при «мягкой» оценке должно было бы давать больше шансов на попадание в верную категорию [43:02].
2.  **Хрупкость порогов:** Третий этап (саморазметка) сильно зависит от порога уверенности. Если установить его слишком низким, сеть начнет обучаться на ошибочных метках, что приведет к деградации модели [36:12].
3.  **Неявное использование меток:** Ведущий подчеркивает: хотя алгоритм не видит меток во время обучения, сами исследователи используют метки, чтобы подбирать гиперпараметры (архитектуру, типы аугментации, коэффициенты регуляризации) [44:39]. [Янник Кильхер (Yannic Kilcher)](https://www.youtube.com/@YannicKilcher) считает сомнительным утверждение, что метод будет работать так же эффективно в ситуации «полного неведения», когда у нас нет тестового набора для проверки качества подбора параметров [45:07].

Тем не менее, автор признает работу «очень крутой», так как она успешно объединяет инструменты самообучения и кластеризации, наглядно показывая, что семантику объектов можно извлечь из визуальных данных без прямого участия человека [43:58].