Это статья о двух месяцах исследовательской работы над одним вопросом: может ли языковая модель 3B накапливать компетентность не за счёт роста весов. Здесь есть числа, код и баги. Все результаты воспроизводимы: сиды, хеши и протоколы заморожены до прогонов.

Доставка верифицированного решения похожей задачи в контекст 3B-модели даёт +30 п.п. к решаемости (53% → 83%), повторено на 3 сидах

Дообучение на верифицированных решениях (через маленькие адаптеры LoRA, один цикл) даёт эффект +0.145: прирост на новых задачах минус изменение на старых (95-процентная вилка значений: от +0.0575 до +0.250). Эффект есть, но это одна точка, а не кривая

Сейчас идёт эксперимент: 4 цикла переучивания × 2 траектории × 200 задач. Первый замер формы кривой (рост / плато / затухание)

Попутно: почему нейросеть тормозит, когда видеопамять кончается, и как мы поймали ошибку «не-число» в метрике удивлённости на 100% попыток

Постановка

Мейнстрим растит модели масштабом. Мы меряем противоположное: можно ли растить компетентность маленькой модели без роста весов, через верифицированную память и локальное обучение, с жёстким потолком ресурсов (бытовая GPU 12 GB).

Ключевое различие, вокруг которого построены все эксперименты:

доставка знаний: решение похожей задачи кладётся в контекст, модель его потребляет;

интернализация: модель учится на решениях так, чтобы решать без доставки;

рост через повторение: несколько циклов обучения на одном корпусе (в литературе это называется кривой обучения).

Это три разных явления, и они требуют трёх разных измерений.

Методология, которая спасала нас чаще, чем идеи

Каждый эксперимент фиксируется до запуска: критерии, сиды, пулы задач, файл замораживается хешем. После идёт независимый пересчёт из сырых логов кодом, который не писал автор эксперимента.

Это не бюрократия. Два примера, где это окупилось конкретно:

Баг «слепого к веткам резюме». Ключ возобновления прогона не включал имя экспериментальной группы: рестарт прогона молча пропускал контрольные группы как «уже посчитанные». Мы потеряли бы контрольные данные целого эксперимента и узнали бы об этом через сутки GPU. Поймал CPU-тест полного цикла на крошечной модели за 13 секунд.

«Не-число» в метрике удивлённости на 100% попыток. На игрушечной модели в тестах энтропия считалась идеально. На живой 3B, «не-число» на каждой попытке: модель изредка выдаёт бесконечные значения, и формула энтропии на них даёт «ноль умножить на минус бесконечность». Классика, но мы её поймали не глазами, а анализатором, который считает нечисловые значения громко.

Теперь эти проверки постоянные: монитор, который ничего не изменяет, перечитывает живой лог каждые 15 минут.

Методологическая дисциплина (то, что останется при любом исходе)

Верификация-центричность. Надёжность ответа определяется свойствами верификатора, а не генеративной политикой. Первый полигон: синтетическое программирование: компиляция → тесты → интеграция → регресс. «Мы не знаем» тоже допустимый ответ.

Предрегистрация и заморозка. Критерии приёма, сиды, пулы задач фиксируются с хешами ДО прогона. Интерпретация по замороженной таблице, а не задним числом. Реестр того, где прошлые выводы оказались НЕВЕРНЫМИ, ведётся и не переписывается задним числом.

Разделение трёх явлений. «Сработала память» ≠ «система научилась» ≠ «изменились веса». Каждый замер спроектирован так, чтобы различать хотя бы два из трёх.

Самоулучшение без права испортить. Обучение и память не имеют права портить подтверждённую компетентность: транзакция «подготовить → проверить → принять или откатить», у каждого состояния контрольная сумма и история происхождения.

Два бага, которые окупили всю дисциплину

  1. Ключ возобновления, слепой к веткам. Ключ рестарта прогона не включал имя экспериментальной группы, рестарт молча пропускал контрольные группы как «посчитанные». Контрольные данные целого эксперимента были бы потеряны; поймал CPU-тест полного цикла на крошечной модели (13 секунд) до расходования GPU-часов.

  2. «Не-число» в метрике удивлённости на 100% попыток. На игрушечной модели в тестах энтропия считалась идеально. На живой 3B модель изредка выдаёт бесконечные значения, и формула энтропии на них даёт «ноль умножить на минус бесконечность». Поймал не глазами, а анализатором, который считает нечисловые значения громко. Теперь монитор, который ничего не изменяет, перечитывает живой лог каждые 15 минут.

Фрагмент скорера наклона (метод Тейла-Сена: берём все пары точек кривой, считаем наклон линии между каждой парой и берём средний. Если один цикл прогона выдал мусор, он портит не всю оценку, а только свою пару):

def theil_sen(points): pts = sorted(points) slopes = [(y2 - y1) / (x2 - x1) for i, (x1, y1) in enumerate(pts) for (x2, y2) in pts[i+1:]] slopes.sort() m = len(slopes) return slopes[m // 2] if m % 2 else (slopes[m//2 - 1] + slopes[m//2]) / 2

И транзакционная запись в память: подготовить → проверить → принять или откатить (отказ записи не портит состояние):

def submit_episode(self, episode, verifier): vr = verifier(episode) if not vr.ok: # невалидное не пишется self._journal(rec | {“decision”: “reject-unverified”}) return rec entry = self.op.prepare_write(working, episode) if not self.op.gate(working, episode, signal): # «фильтр удивлённости» return rec # отложено: записано в журнал self.snapshot = self._commit(entry) # новая версия состояния

Что тут происходит: попытка записи сначала проходит проверку. Не прошла, отказ записывается в журнал, и состояние не трогается. Прошла проверку, но сработал «фильтр удивлённости» (мы ещё не решили, по какому сигналу его включать, поэтому сейчас он выключен), запись откладывается. Всё остальное, новая версия состояния с контрольной суммой, к которой всегда можно откатиться.

Замер 1: доставка знаний работает, и дистанция решает

Архитектура замера: 200 свежих задач одного семейства, никогда не виденных моделью. Для каждой, верифицированное решение соседней задачи: близкой (много общих действий) и дальней (почти без общих). Модель решает задачу в 4 попытках, успех, прохождение полного набора тестов в песочнице.

Результаты (40 задач, сравнение пар «было/стало», с поправкой на то, что сравнений несколько):

Группа

Решаемость

Разница

базовая

50%

нет

+ решение близкой задачи

80%

+30 п.п. (p=0.004)

+ решение дальней задачи

45%

разница статистически незначима

+ готовый ответ этой же задачи

100%

потолок

Затем воспроизведение на 3 настройках генератора задач: в среднем +18.3 п.п. (p=0.0003). Форма подтверждена на промежуточной дистанции (45% → 67.5% → 80%).

Вывод: перенос знания через контекст работает и критически зависит от дистанции. Это канал доставки, он дешевле и предсказуемее обучения и предсказуемее обучения.

Замер 2: обучение в весах, один цикл

Дообучение через маленькие адаптеры LoRA (40 шагов) на 80 верифицированных решениях, затем экзамен без доставки:

экзамен: 52.75% → 57.25% (+4.5 п.п., парный статистический тест p=0.011)

регрессия на старых задачах: −10 п.п. (улучшение, не деградация)

итоговый показатель: прирост на новых задачах минус изменение на старых = +0.145 (95-процентная вилка значений: от +0.0575 до +0.250)

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

Замер 3 (идёт): форма кривой роста

Дизайн: 4 цикла переучивания на фиксированном корпусе × 2 траектории × 3 группы (копит веса / стартует с нуля каждый цикл / вообще не учится). Экзамен 200 задач, фиксированный, идентичный между циклами. Первичная метрика: наклон экзаменационной траектории (метод Тейла-Сена, описан выше), с доверительным интервалом, посчитанным на случайных подвыборках траекторий.

Промежуточно (данные ещё неполные, без выводов): траектория 0: 53% → 59% → 55.5% → 54% → 57.5%; вторая траектория повторяет форму. Похоже на «скачок первого цикла → плато», но финальный вердикт по полному набору данных, а не на глаз.

Инфраструктура, которая осталась

независимая проверка целостности прогона: 17 типов проблем (дубликаты, правильность сидов, смешение групп, чекпоинты, «не-числа» в данных), тестами, которые специально ломают данные и смотрят, заметит ли проверка, доказано, что ловит все 15 классов порчи

пересчёт всех исторических результатов из сырых данных: 51/51 проверок сошлись

транзакционный слой памяти: запись → проверка → принять или откатить, у каждого состояния контрольная сумма и история происхождения (7 контрактов как исполняемые тесты)

Что не работает / что не знаем

Обучаемый интерфейс без доставки: +10 п.п., разница статистически незначима, эффект не подтверждён

Доставка на другие семейства задач: не измерена (мощности не хватает, нужен дизайн)

Растут ли знания в весах при повторении: решает текущий прогон

Сколько циклов нужно для «настоящего роста» не определено, ждёт данных

Репозиторий и код

Протоколы, сырые данные и анализаторы открыты: экспериментальные скрипты, проверка целостности, независимый пересчёт всех результатов, тесты (286 штук). Задаю вопросы в комментариях, особенно интересен опыт людей, которые меряли непрерывное обучение (continual learning) на малых моделях.

Вопросы к сообществу (то, ради чего постим)

Непрерывное обучение на малых моделях. Кто мерял форму кривой при многократном дообучении на фиксированном наборе? Наш ранний паттерн, «скачок первого цикла → плато», это у вас тоже было, или мы видим артефакт протокола?

Подсказка против дообучения. Есть ли у кого-то строгий протокол разделения «сработала память» / «система научилась» / «изменились веса»? Мы делаем это через три группы сравнения (одна копит знания от цикла к циклу, одна стартует с нуля каждый цикл, одна не учится) — видим ли вы дыры?

Проверка как единственный источник правды. Мы проверяем только программные задачи (песочница + тесты + контроль подменой решений). Как вы решаете задачу проверки для областей, где правильный ответ автоматически не проверить?

Отрицательные результаты. Как вы их публикуете и структурируете, чтобы их вообще читали? Наш реестр неверных выводов — половина ценности проекта, но честный ноль в статье всегда выглядит слабее, чем цифра.

Любая критика методологии самый ценный комментарий, который мы можем получить.

Комментарии (19)


  1. ToxaBes
    05.10.2026 12:39

    Эм, немного странные эксперименты.

    Во-первых, использовать такие небольшие модели просто не имеет смысла, не хватает информационной емкости, вы будете видеть больше шума чем реальных смещений. Значимые результаты достигаться на моделях в 10 раз большего размера, т. е. ~30B, а хоть какой-то реальный практический результат начинается от 9-12B.

    Во-вторых, LoRA-адаптация (не имеет отношения к дистилляции) смещает предпочтения модели, за счет забывания ненужных доменов знания, размазанного по весам модели.

    И в-третьих, многократное переучивание на одном и том же корпусе это отложенная лоботомия модели. От переобучения не спасут даже негативные примеры и примеры из других доменов знаний.

    Это все вроде как база создания и обучения моделей, не совсем понятно, зачем вы ее проверяете.

    На вопросы отвечу, надеюсь, что смогу сэкономить вам время:

    Continual learning на малых моделях. Кто мерял форму кривой при многократном переучивании на фиксированном корпусе? Наш ранний паттерн — «скачок первого цикла → плато» — это у вас тоже было, или мы видим артефакт протокола?

    Итеративное самообучение дает основной прирост за 1-2 итерации. Дальше идет насыщение (плато), а затем деградация из-за переобучения. Это известное и изученное явление. Можете не тратить на это время.

    Доставка vs интернализация. Есть ли у кого‑то строгий протокол разделения «память помогла» / «научилось» / «изменились веса»? Мы делаем это через контрольные группы (CARRY/RESET/BASE) — видим ли вы дыры?

    Обучение на решениях, которые модель в основном и так находит, увеличивает pass@1 без роста pass@k. Нужна кривая pass@k хотя бы до k=32, если она не поднимается, то это обычное сужение распределения (sharpening). Также нужно учитывать, что LoRA всегда меняет веса, но это не значит, что модель научилась чему-то новому.

    Тут поможет плацебо-ветка. Берете ваши 80 задач и перемешиваете у них решения между условиями задач. Получаете те же решения, тот же формат, тот же объем, те же гиперпараметры. Но пары составлены так, что научиться решать задачи по ним нельзя. Тогда разность между обычной веткой и плацебо покажет, что дал именно смысл данных, а не сам факт дообучения. Есть разные варианты сравнения placebo с base, почитайте и выберите подходящий вариант для себя.

    Верификатор как единственный источник правды. Мы верифицируем только программные задачи (песочница + тесты + мутационный контроль). Как вы решаете задачу верификации для неверифицируемых доменов?

    LLM-судья. В запущенных случаях перекрестная проверка из двух судей. Важно чтобы судья был из другого семейства моделей.

    Отрицательные результаты. Как вы их публикуете и структурируете, чтобы их вообще читали? Наш реестр неверных выводов — половина ценности проекта, но честный ноль в статье всегда выглядит слабее, чем цифра.

    Самый сложный вопрос. В моих исследованиях даже не половина, а под 90% неподтвержденных тестами идей и неопровдавших доверие методов. Не вижу смысла их публиковать если нет значимого результата помимо отрицательного.

    Вместо этого я структурирую и сохраняю такие результаты в отдельный RAG, чтобы модель-критик качественнее прожаривала мои идеи еще до начала тестов.


    1. Ka463
      05.10.2026 12:39

      Эм, немного странные эксперименты.

      Наверное потому что их делала нейросеть, как и сам пост, судя по построению слога и то что там половина не понятно из за жаргона, вроде "но судит финальный CI, а не глаза." и остальные перлы.


      1. ToxaBes
        05.10.2026 12:39

        Да, я заметил невычищенный ИИ слоп, но тк тема мне очень близка решил ответить.


        1. Ejukk Автор
          05.10.2026 12:39

          Да, слоп есть, не скрываю. Писалось с нейронкой, глянул поверх и выложил — а вычистить как следует уже не хватило рук. Но тема близкая и не ответить по существу не смог: по первому комменту сверху прогнал pass@k по сырым попыткам — по первой попытке эффект доставки нулевой, весь прирост на повторных попытках. Плацебо-ветку забрал в протокол, спасибо.


          1. Ka463
            05.10.2026 12:39

            Но тема близкая и не ответить по существу не смог

            Отвечает на комменты тоже Клод или ГПТ чат ? =))))


            1. Ejukk Автор
              05.10.2026 12:39

              Примерно +-


          1. DeadAtreides
            05.10.2026 12:39

            Если весь прирост на повторных попытках, то честный контроль - те же попытки без доставки решения. У меня на модедях от 360M до 1,7B один только пересэмпл кода, без всяких подсказок, поднял решаемость с 0,833 на одной попытке до 0,958 на восьми. Засчитывал, если хоть одна попытка прошла эталонные тесты. Попытки сами по себе покупают очень много. и бюджет я бы сравнивал по каждому вызову, а не суммами. У меня равные суммы трижды прятали перекос: одна ветка просто чаще упиралась в лимит токенов.


            1. Ejukk Автор
              05.10.2026 12:39

              Тут как раз всё просто. Те же попытки без доставки это и есть наша контрольная группа M0: те же 4 попытки, тот же протокол, только без референса в контексте. Пересэмпл сам по себе покупает столько же, сколько у тебя: база с 32.5% на одной попытке доходит до 50% на четырёх. Твои 0.833 → 0.958 на восьми это та же картина, так что тут мы независимо сошлись.

              И +30 п.п. доставки это дельта уже поверх такого контроля, при одинаковом числе попыток на задачу.

              По бюджету согласен, сравнивать надо по каждому вызову, а не суммами. У нас бюджет на вызов одинаковый во всех группах (одинаковый лимит на генерацию), референс добавляет только входные токены: в среднем 243 против 176 у базы. Это цена метода, и мы её показываем отдельно.

              Про упирание в лимит проверил по логам отдельно, потому что у тебя был ровно такой перекос. У нас упёршихся в лимит генерации 0% во всех группах (в Path-4 на 400 задачах 0.09% и 0.29%). Так что перекос «одна ветка чаще резалась лимитом» у нас не вылез. Но проверку на это добавили в обязательные на каждый прогон.


      1. Ejukk Автор
        05.10.2026 12:39

        Справедливо. Текст помогал писать нейронкой и вычистил не до конца, мой косяк. CI — это доверительный интервал, согласен, что без расшифровки выглядит как жаргон на жаргоне.

        Числа в статье настоящие, из логов экспериментов — а вот слог перепишу по-человечески, замечание принял.


        1. Ka463
          05.10.2026 12:39

          Да, перепишите, потому что читать это невозможно, это выглядит как будто ИИ разговаривает сам с собой на своем диалекте, на будущее, просите нейронку написать для человека который не разу не видел ваш проект и незнает о чем он, без жаргона, получите более менее нормальный связанный текст.


          1. Ejukk Автор
            05.10.2026 12:39

            Переписал чутка


    1. Ejukk Автор
      05.10.2026 12:39

      Спасибо за развёрнутый ответ, реально полезно.

      По ёмкости модели спорить не буду — 3B это осознанный выбор, а не попытка сэкономить. Вопрос который нас грызёт наоборот про жёсткий потолок: сколько можно выжать из маленькой модели, если знания держать снаружи в памяти, а не пихать в веса. Что происходит на 30B — интересно, но во вторую очередь, сначала понять работает ли сам принцип на доступном железе.

      По переобучению — тут ты по сути закрыл наш вопрос. Форма «скачок → плато → потом деградация» у нас и вылезает на промежуточных данных, обе траектории дают одно и то же. Смысл был не открыть это явление, а померять его на нашем пайплайне с нормальным контролем: одна группа переучивается, одна стартует с нуля каждый цикл, одна вообще не учится. Теперь есть цифры, а не ощущение.

      По pass@k — это самое ценное в твоём комменте. Проверил по сырым логам попыток. По первой попытке разницы между базой и с референсом в контексте вообще нет — 32.5% и 32.5%. Весь эффект вылезает на повторных: с референсом к четвёртой попытке 80% против 50%. То есть да, похоже это не «модель стала умнее», а «модель начала восстанавливаться на ретраях когда видит похожее решение». Это реально меняет то, как мы про доставку думали.

      Плацебо-ветку с перемешанными решениями забираем, это самый дешёвый способ отделить смысл данных от самого факта дообучения.


      1. ToxaBes
        05.10.2026 12:39

        3B это осознанный выбор, а не попытка сэкономить.

        Дело в том, что на таком размере вы большую часть времени будете исследовать шум, а не реальные смещения. Ниже 9B очень много времени будет уходить на очиску от шума (что вы сейчас вообще не делаете), а сам сигнал будет прыгать около стат погрешности. Рассмотрите вариант хотя бы 9B модели, ниже скорее всего вы не найдете ничего статистически значимого.


        1. Ejukk Автор
          05.10.2026 12:39

          Тут два вопроса, отвечу по обоим.

          Про шум. Наши эффекты не в шуме: доставка даёт +30 п.п., p=0.004 по точному критерию Мак-Немара, повторено трижды на разных сидах независимо. Плюс все исторические результаты пересчитаны из сырых логов отдельным кодом, не тем, что делал эксперимент (сошлось 51 из 51 проверок). Очистка от шума как раз есть: контрольные группы, критерии заморожены до прогона, повтор на сидах. На 3B сигнал ловится нормально, вопрос скорее в размере эффекта.

          Где ты прав. Слабые эффекты на 3B мы можем просто не заметить. У дообучения прирост маленький (+4.5 п.п.), и не исключено, что это потолок ёмкости, а не отсутствие эффекта. Тут не поспорю.

          Про 9B и 30B упрёк мимо: у нас бытовая карта на 12.9 ГБ. 7B в полном формате это около 14 ГБ, то есть уже не влезает. 30B это ~60 ГБ. На этом железе 3B это физический потолок для такого эксперимента, а не жадность. Дойдём до большой карты, вопрос про 9B+ встанет честно.

          И почему вообще 3B. Мы специально задаём вопрос «сколько можно выжать из маленькой модели, если знания держать снаружи». На большой модели ответ всегда «купи больше параметров», и это ничего не говорит о том, работает ли сам принцип.


          1. ToxaBes
            05.10.2026 12:39

            Ладно, я больше не буду отвечать LLM-обезьянке. Либо пишите свои мысли, либо не пишите совсем.

            ИИ-слопные комментарии без попытки вникнуть в суть это просто неуважение к собеседнику.

            У меня теплилась надежда, что пусть с ИИ, но вы понимаете, что исследуете. Я ошибся.


            1. Ejukk Автор
              05.10.2026 12:39

              Несколько месяцев я плаваю в этом проекте, обьем далеко уже ушел в перед за пределы статьи , паралельно ведеться большая работа над этим проектом, плацебо-ветку взял в протокол, за это спасибо .
              Касательно pass@1, у базы и с референсом одинаковый (32.5%), весь прирост я увидел на попытках 2–4.
              Так же я считаю у дообучения наоборот: максимум на первой попытке, тает к четвёртой. Прошу прощения, если вас неустроил мой ответ при помощи айти техологий на айти сайте , но в целом вы абсолютно правы.


            1. Ejukk Автор
              05.10.2026 12:39

              Я лишь хотел понять на сколько мимо или не мимо я двигаюсь, по сколько задача стоит очень амбициозная, хотелось узнать может кто то делает нечто подобное


              1. Ka463
                05.10.2026 12:39

                Странно что за это время, не додумались ознакомиться с исследованиями того что вы пытаетесь переоткрыть, все давно измерено, в том числе и людьми из гугла, хотя.. нечего странного, если во главе проекта стоит нейросеть а не человек.


                1. Ejukk Автор
                  05.10.2026 12:39

                  Вообще прежде чем начать проект, наобарот проресерчил что подобные исследование быпи, но по скольку проект ушел сильно дальше нужен был взгляд так сказать со тороны