# Саймон Корнблит из GoogleAI об архитектуре SimCLR и будущем компьютерного зрения

Источник: https://www.youtube.com/watch?v=1EqJyMy0LnE
Канал: Machine Learning Street Talk
Опубликовано: 06.12.2020

---

Саймон Корнблит (Simon Kornblith), исследователь из GoogleAI и один из авторов прорывной работы SimCLR, прошел путь от изучения мозга обезьян в MIT до анализа «внутренностей» кремниевых нейросетей. В этом глубоком техническом интервью он объясняет, почему современные архитектуры часто страдают от избыточности, как правильно «готовить» самообучение (self-supervised learning) и почему язык Julia может быть эффективнее Python для машинного обучения.

## 🧠 От нейробиологии к нейросетям: почему кремний понятнее углерода
[[JUMP:22:13]]

Саймон Корнблит начал свою карьеру как нейробиолог, стремясь понять природу сознания и механизмы формирования внутреннего представления внешнего мира [0:34]. Проведя семь лет в MIT, работая с обезьянами, он пришел к выводу, что прогресс в этой области крайне медленен из-за технических ограничений [23:41].

Основные трудности нейробиологии, по мнению гостя:

*   **Ограниченность данных:** Крайне сложно записывать активность всех нейронов в живом организме одновременно [1:13].
*   **Невозможность манипуляций:** В биологическом мозге нельзя произвольно менять «архитектуру» или «функцию потерь», чтобы увидеть результат [25:39].
*   **Шум:** Данные МРТ-сканирования крайне зашумлены, а время сканирования каждого пациента ограничено [25:00].

Саймон Корнблит утверждает, что переход в Machine Learning (ML) был логичным шагом: в искусственных нейросетях исследователь имеет полный доступ ко всем весам и активациям, система полностью детерминирована, что делает её более подходящим объектом для фундаментального изучения интеллекта [26:45]. При этом гость призывает не впадать в антропоморфизм: хотя нейросети вдохновлены биологией, они не работают в точности как мозг [1:40]. В частности, мозг не использует обратное распространение ошибки (backprop) в чистом виде, хотя может реализовывать некие схожие принципы [29:21].

## 📊 Метрика CKA: как сравнить «представления» внутри моделей
[[JUMP:01:52]]

Одной из главных заслуг Саймона Корнблита стала разработка метода сравнения слоев нейросетей — **Centered Kernel Alignment (CKA)**. До этого исследователи пытались использовать канонический корреляционный анализ (CCA), но он давал точность всего около 1.4% при попытке сопоставить соответствующие слои в двух сетях с разной инициализацией [31:17].

Суть метода CKA:

1.  **Матрица сходства примеров:** Вместо того чтобы сравнивать активации нейронов напрямую (которые могут быть перемешаны), строится матрица того, насколько похожи разные примеры (изображения) друг на друга с точки зрения конкретного слоя [33:53].
2.  **Инвариантность:** Полученная матрица (Gram matrix) позволяет сравнивать слои даже в сетях с разной архитектурой или разным количеством нейронов [34:30].
3.  **Нормализация:** Метрика нормализуется так, чтобы изменение масштаба признаков не влияло на итоговый показатель сходства (от 0 до 1) [34:55].

Саймон отмечает, что использование RBF-ядер (ядерных функций) в CKA особенно полезно для трансформеров, так как позволяет модели игнорировать глобальные расстояния между далекими примерами, фокусируясь на локальной структуре [36:15].

## 🧊 «Блочность» и патологии глубоких сетей
[[JUMP:03:00]]

Используя CKA, Саймон Корнблит обнаружил феномен «блочности» (blockiness) в матрицах сходства [31:42]. Когда на визуализации видны большие квадраты вдоль диагонали, это означает, что репрезентации в последовательных слоях перестают эволюционировать — они становятся идентичными друг другу.

Ключевые выводы исследования:

*   **Избыточная параметризация:** Появление блоков — признак того, что сеть «насытилась» и перестала уточнять признаки [42:12].
*   **Возможность удаления слоев:** Саймон утверждает, что слои внутри таких блоков можно удалять из сети практически без потери точности, так как они не несут новой информации [32:15].
*   **Предел глубины:** В сетях без остаточных связей (ResNets) точность начинает падать именно в тот момент, когда в анализе CKA появляются эти блоки [41:59].

## 📉 Влияние функции потерь на архитектуру признаков
[[JUMP:06:56]]

В своей работе «What's in a Loss Function for Image Classification» Саймон Корнблит исследовал, как разные лосс-функции (Softmax, MSE, Label Smoothing) влияют на то, чему учится сеть.

Результаты оказались неожиданными:

*   **Правило двух третей:** Функция потерь влияет только на последнюю треть сети (ближе к выходу). Первые две трети слоев обучаются практически идентичным «общим» признакам вне зависимости от того, используете вы Softmax или среднеквадратичную ошибку [7:09, 43:29].
*   **Парадокс переноса знаний:** По мнению Корнблита, существует обратная корреляция между точностью на ImageNet и эффективностью переноса знаний (transfer learning) [46:54]. Лосс-функции, дающие рекордную точность, заставляют предпоследний слой слишком сильно разделять классы ImageNet, что делает признаки слишком узкоспециализированными [47:57].
*   **Преимущества стандартного Softmax:** Он оставляет классы менее разделенными, сохраняя в признаках информацию, полезную для других задач [48:35].

## 🖼️ SimCLR: Рецепт эффективного самообучения
[[JUMP:50:48]]

Проект SimCLR (Simple Framework for Contrastive Learning) доказал, что нейросети могут учиться на изображениях без меток так же эффективно, как и с ними [51:00]. В основе лежит контрастивное обучение: мы берем одно изображение, делаем из него два разных «вида» (augmentations) и заставляем сеть понять, что это один и тот же объект, одновременно «отталкивая» его от всех остальных картинок в батче [52:59].

Золотой рецепт SimCLR от Саймона Корнблита:

1.  **Две критические аугментации:** Случайная обрезка (crop) и агрессивное искажение цвета (color distortion) [10:48]. Без искажения цвета сеть просто учит цветовые гистограммы, что является «читерством» и не дает понимания объектов [1:03:28].
2.  **Проекционная голова (Projection Head):** MLP-слой поверх основного энкодера. Для финальных задач этот слой отбрасывается, так как он слишком специализируется на задаче контрастивного обучения, а признаки на слой ниже — более универсальны [56:54].
3.  **Размер батча:** В оригинальном SimCLR использовался батч из 4096 изображений, что давало 8190 «негативных» примеров для сравнения [54:17].

Саймон выражает скепсис по поводу использования GAN для аугментации данных. По его мнению, GAN не создает новых данных, а лишь иначе кодирует существующие индуктивные смещения (inductive biases). Простые геометрические аугментации эффективнее, так как в них человек напрямую вкладывает знание о семантической эквивалентности [1:25:34, 1:26:39].

## 🧪 SimCLR v2 и дистилляция знаний
[[JUMP:1:15:11]]

Вторая версия фреймворка сфокусировалась на задаче полуавтоматического обучения (semi-supervised), когда размеченных данных очень мало (например, 1% или 10%).

Эффективный пайплайн SimCLR v2:

*   **Этап 1:** Обучение гигантской модели (ResNet-152, в 3 раза шире стандартной) без меток [1:16:42].
*   **Этап 2:** Тонкая настройка (fine-tuning) на небольшом количестве размеченных данных.
*   **Этап 3:** Дистилляция. Гигантская модель становится «учителем», размечая весь массив неразмеченных данных для маленькой модели-«ученика» (например, ResNet-50) [1:17:20].

Этот подход позволяет маленькой модели достичь точности, сопоставимой с обучением на полном наборе данных с учителем [1:22:33].

## 🚀 Будущее: Видео и язык Julia
[[JUMP:1:13:41]]

Саймон считает, что следующим прорывом станет обучение на видео [14:43]. В видео информация о границах объектов заложена в их движении: то, что движется вместе, скорее всего, является одним объектом. Главным препятствием здесь остается вычислительная сложность обработки множества кадров одновременно [1:14:33].

В завершение беседы Корнблит объясняет свою приверженность языку Julia для исследований [17:55]:

*   **Скорость:** Julia позволяет писать код, который работает так же быстро, как C, без необходимости использовать Cython или Numba [1:27:32].
*   **Множественная диспетчеризация (Multiple Dispatch):** Это позволяет эффективно работать со сложными структурами данных, например, разреженными матрицами, выбирая нужный метод на лету без потери производительности [1:28:12].
*   **Прощание с ООП:** По мнению Саймона, объектно-ориентированный подход Python, где функции «привязаны» к данным, не идеален для ML. Julia предлагает разделение структур данных и функций, что более естественно для математических вычислений [1:29:44].