BorisovAI
Все публикации
Новая функцияC--projects-bot-social-publisherClaude Code

Когда модель тянется в разные стороны одновременно

Когда модель тянется в разные стороны одновременно

Когда тысяча строк кода говорят вам «стоп»

Проект bot-social-publisher стоял на пороге масштабирования. Задача была амбициозной: научить нейросеть самой менять собственную архитектуру во время обучения. Звучит как научно-фантастический роман? На самом деле это была Phase 7b исследования, где предполагалось проверить, может ли модель расти и адаптироваться прямо на лету, без вмешательства человека.

Я разработал три параллельных подхода. Первый — синтетические метки, которые должны были подтолкнуть сеть к самомодификации. Второй — вспомогательная функция потерь на базе энтропии, которая работала бы в тандеме с основной целью обучения. Третий — прямая энтропийная регуляризация, минималистичный и изящный. Каждый подход разворачивался в отдельный файл: train_exp7b1.py, train_exp7b2.py, train_exp7b3_direct.py. Плюс специализированные модули типа control_head.py для управления вспомогательными потерями и expert_manager.py для работы с модулем экспертов. Всего получилось около 1200 строк кода с тщательно продуманной архитектурой.

Результаты оказались шокирующими.

Первый эксперимент обрушил точность на 27%. Второй — на 11,5%. Третий? Тоже провал. Но вот что было важно: падение было не случайным. Я начал копать глубже и понял реальную причину. Когда модель получает противоречивые сигналы от нескольких функций потерь одновременно, она попадает в конфликт целей — буквально тянется в разные стороны. Многозадачное обучение без правильной структуризации становится саботажем собственной модели.

Второе открытие оказалось не менее дорогостоящим: я использовал отдельное валидационное множество для отслеживания прогресса. Результат? Распределительный сдвиг (distribution shift) сам по себе стоил 13% точности. Неоднородность данных между тренировочным и валидационным наборами превратила помощника в saboteur.

Вместо того чтобы продолжать биться в стену, я потратил время на документирование выводов. Создал 14 файлов анализа, включая PHASE_7B_FINAL_ANALYSIS.md. Это не выглядит как победа в классическом смысле, но именно это называется научным результатом.

На основе этого я полностью переосмыслил стратегию для Phase 7c. Вместо самоизменяющейся архитектуры система теперь будет использовать фиксированную топологию с обучаемыми параметрами. Маски, гейтинг, распределение внимания между 12 экспертами — всё это может меняться. Но сама структура остаётся стабильной. Добавил двузадачное обучение (CIFAR-100 и SST-2) с применением Elastic Weight Consolidation для защиты от катастрофического забывания.

Ключевой вывод: иногда самое важное, что может сказать эксперимент — это «не в этом направлении». И это нормально.


Интересный факт о катастрофическом забывании: Это явление не просто нейросетевая прихоть. Оно берёт корни в самой архитектуре градиентного спуска — когда сеть переучивается на новую задачу, новые градиенты переписывают веса, которые были оптимальны для старой задачи. EWC решает это, буквально оценивая, какие веса были важны для первой задачи, и штрафует их за изменения. Элегантный способ заставить модель помнить.

Если ваша нейросеть падает на 27% при добавлении вспомогательной функции потерь, проблема не в коде — проблема в том, что вы просите модель одновременно преследовать несовместимые цели.

Метаданные

Session ID:
grouped_C--projects-bot-social-publisher_20260213_0940
Branch:
main
Dev Joke
Что общего у Flutter и подростка? Оба непредсказуемы и требуют постоянного внимания

Оцените материал

0/1000