[Request interrupted by user for tool use]
![[Request interrupted by user for tool use]](/_next/image?url=https%3A%2F%2Fapi.borisovai.tech%2Fuploads%2F5946dd6d0874ae85666f225e33b87558_7dd7456a49.jpg&w=3840&q=75)
Когда модель учится менять себя: как мы ловили ошибки в самоадаптирующейся архитектуре
Проект llm-analysis — это попытка научить нейросеть не просто решать задачу классификации текста SST-2, но ещё и самостоятельно управлять своей архитектурой. Звучит как фантастика? На деле это долгая война с энтропией и случайными числами.
С чего всё началось
После успешной Phase 6 у нас было две конфигурации с результатом около 70%: Q1 выдавала 70.15%, Q2 с MoE-архитектурой добралась до 70.73%. Казалось бы, пик достигнут. Но видение проекта было амбициознее: что если модель сама будет решать, когда ей нужен новый эксперт (grow) или когда текущие избыточны (prune)?
Phase 7a завершилась успешно, и мы двигались в Phase 7b — «Control Head Design». Идея была классическая: добавить отдельную голову управления, которая будет предсказывать, нужно ли модифицировать архитектуру. Но тут начались приключения.
Первый камень преткновения: синтетические метки
Реализовали Phase 7b.1 с энтропийным подходом. Суть была в том, чтобы использовать routing_entropy — энтропию маршрутизации экспертов — как сигнал для управления. Сказано — сделано. Запустили обучение…
И получили 58.30% точность вместо 69.80% на базовой модели. Полный NO-GO.
Ошибка была коварная: мы использовали синтетические случайные метки (30% растёт, 20% обрезается) для обучения control head, но эти метки никак не коррелировали с реальным улучшением архитектуры. Модель начала выдавать сигналы, которые не имели смысла — вроде «расти, когда ты и так хорошо работаешь» или «удаляй экспертов, когда они нужны».
Поворот: энтропия как источник истины
Переделали подход в Phase 7b.2. Вместо синтетических меток решили использовать саму routing_entropy как дифференцируемый сигнал. Ведь энтропия маршрутизации — это реальное поведение модели, а не придуманные числа. Создали три новых файла: полный план стратегии, expert_manager.py для безопасного добавления/удаления экспертов с сохранением состояния.
Логика была: если энтропия низкая, значит модель хорошо разделила нагрузку между экспертами — не растём. Если энтропия высокая, нужен новый голос в ансамбле.
Но потом обнаружилась реальная проблема
Загрузили checkpoint Phase 7a (лучший результат — 70.73%), запустили обучение с control head… и модель стартовала с точностью 8.95% вместо ожидаемых 70%. Это была красная лампочка.
Начали копать. Оказалось, что при загрузке checkpoint’а из словаря нужно использовать ключ 'model_state_dict', а не просто 'model'. Классическая ошибка, когда сохранять учился вместе с оптимизатором, а загружать забыл про детали структуры.
Чинили. Потом ещё раз запустили. И тут выяснилось: одновременное обучение модели и control head вызывает градиентную катастрофу. Точность падает, entropy-сигналы становятся шумом.
Решение пришло с неожиданной стороны
После нескольких итераций неудач понял: может быть, вообще не нужно учить модель менять свою архитектуру во время обучения? Может быть, архитектура должна быть заморожена?
Phase 7b.3 — «Direct Approach» — это была попытка упростить: забыли про control head, забыли про self-modification, сосредоточились на том, что работает. Оказалось, что 12 экспертов, найденные в Phase 7a, — это уже оптимум. Вместо того чтобы учить модель себя переделывать, лучше просто хорошо обучить её с фиксированной архитектурой.
Это было похоже на переход от идеи о том, что нейросеть должна быть как живой организм с самопроизвольной адаптацией, к пониманию, что иногда наследственная архитектура плюс обучение параметров — это уже достаточно мудрая система.
Чему мы научились
Самый ценный урок: когда метки для обучения никак не связаны с реальным качеством, модель просто выучит шум. Синтетические сигналы могут казаться правильной идеей на бумаге, но в боевых условиях обучения нейросети они становятся якорем, который тянет вниз.
Второй урок: не каждая красивая идея — это хорошая идея в ML. Иногда простота и фиксированная архитектура работают лучше, чем амбициозная самоадаптация.
Третий урок: checkpoint’ы — это хитрые штуки. Всегда проверяй структуру словаря, всегда логируй, откуда ты загружаешь, во что загружаешь.
Остаток команды перешёл на Phase 8, но теперь с более скромными амбициями и более реалистичными ожиданиями. И хотя идея о self-modifying нейросетях не сработала в этот раз, мы узнали много нового о том, как на самом деле работает градиентный спуск в сложных архитектурах.
😄 Тренировать control head — всё равно что заставлять модель смотреть в волшебный кристалл и предсказывать, когда ей растить или резать экспертов, не имея никакого способа узнать, были ли её предсказания правильны.
Метаданные
- Session ID:
- grouped_llm-analisis_20260213_0913
- Branch:
- HEAD
- Dev Joke
- Мигрировать с Traefik — всё равно что менять колёса на ходу. На самолёте.
Часть потока:
Разработка: llm-analisis