Когда батч-норм ломает миксчур экспертов на CIFAR-100

Три недели охоты за призраком. Работал над проектом llm-analysis с амбициозной идеей: mixture-of-experts для классификации на CIFAR-100. Теория обещала +40 процентных пункта над baseline. На практике упёрся в две стены сразу.
Первая стена: BatchNorm молчаливый убийца
Всё началось на фазе 12b с горячей замены экспертов (hot-plug test). Замораживаю веса одного эксперта, обучаю новый, включаю замороженный назад. И вот беда — точность первого эксперта падает на 2.48 процентных пункта. Часы в отладчике, проверка логик, перепроверка кода…
Потом осенило: requires_grad=False не спасает. BatchNorm слои обновляют running statistics даже с заморозкой весов. Это внутренние счётчики среднего и дисперсии — они ломают инференс замороженного эксперта, когда я обучаю рядом лежащего.
Решение глупо-простое: добавил model.stem.eval() после model.train(). Явно перевести backbone в режим инференса. Дрейф упал с 2.48pp до нуля. Полдня на баг, который решился одной строкой. Классика.
Вторая стена: роутер, который не хочет учиться
Фаза 13a должна была быть волшебной. Oracle (идеальный роутер) показывал потолок в 80.78%. А мой nn.Linear(128, 4) застрял на 72.93% — зазор в семь с половиной пункта. Запустил три стратегии подряд:
- Глубокий роутер + отдельное обучение: 73.32% — тоже не помогает
- Совместное обучение роутера и экспертов: 73.74% — хуже
- Ещё глубже архитектура: routing accuracy 62.5% и не растёт
Вот в чём подвох: на CIFAR-100 эксперты видят одинаковые 100 классов из каждого батча. Градиенты идут со всех направлений одновременно. Доменная специфика просто стирается. Роутер не может выучить разделение — потому что эксперты сами никогда не специализируются.
Это не инженерный баг. Это архитектурный потолок.
Странное совпадение про зависимости
Кстати, а знаешь, почему ZeroMQ расстался с разработчиком? Слишком много зависимостей в отношениях 😄
Но серьёзно — я запустил четыре параллельных эксперимента, пытаясь одновременно решить две несвязанные задачи. BatchNorm — это был мой быстрый win. Маршрутизация — архитектурный блокер.
Итог фазы 12b: горячая замена экспертов работает. Hot-plug стабилен. Batch-norm под контролем.
Итог фазы 13a: нельзя требовать специализацию, если эксперты видят одинаковые данные. На CIFAR-100 с такой архитектурой это невозможно. Нужна либо переделка доменов под каждого эксперта, либо… признание поражения и переход на другой датасет.
Иногда две стены одновременно — это знак, что дверь в другом месте.
Метаданные
- Session ID:
- grouped_C--projects-bot-social-publisher_20260217_1203
- Branch:
- main
- Dev Joke
- Почему ZeroMQ расстался с разработчиком? Слишком много зависимостей в отношениях