ПРЕДУПРЖДЕНИЕ : Автору 14 лет он плохо разбираеться в технологиях и программировании но основную теорию проекта придумал сам очень хотелось бы услышать критику конструктивную

Всем здрайвствуйте я Titled и я создал форк llama.cpp где реализовал все свои жаветные мечты сейчас расскажу что это было и почему я написал такооой длиный заголовок.

Сначала стоило бы пройтись по терминам вообще потому что без них читать эту статью будет не прям интерестно. Основная речь пойдет о движке запуска нейросети в который вшиты все архитектуры и вы можете сами его скачать и запустить любую нейросеть его название llama.cpp, и как принято все делают форки успешных проектов . Я не стал исключением и создал свой форк но с нестандартной идеей.

Что помогает нейросети так думать ?

Я решил использовать реккурентность очень интерестный и гипер недооцененый инструмент который я пытаюсь продвинуть уже очень много времени если кратко обьяснять как это работает то легче показать это наглядно.

Рисовал от руки так что простите но здесь наглядно видно что мы получаем вход проходим чеерз слои и получаем выход чтобы добавить больше ума нам нужно добавить больше слоев но тогда будет больше вычислений. Изза ограниченых возможностей моей видеокарты я физически не смог поставить больше слоев дообучением тогда появилась идея я буду зацикливать слой! Лдано идея не моя я украл ее из OpenMythos но в отличии от них я применил это на реальных моделях и это не все я модифицировал систему!

Так происходит на OpenMythos это странно ведь они зацикливают один слой который может технически отвечать за чтото неважное поэтому я подумал и решил делать сразу 3 слоя которые я буду зацикливать. Хардкод здесь не пеоможет и я придумал (попросил дипсик и обговорил с ним) формулу Адаптивной выборки слоев!

Для умных людей я просто оставлю эту формулу здесь. а для нормальных поясню краче
Она делит все на 4 блока и 1 блок выкидывает зацикливает средне слои сумма циклов всегда равна параметру D а чтобы выбрать слой парметр эффективности S от 1 до 100

формула

1. Разбиение на 4 блока

  • N — всего слоёв.

  • k = ⌊N/4⌋, r = N mod 4.

  • Размеры блоков: [k, k, k, k+r].

  • Стартовые индексы: 0, k, 2k, 3k.

2. Выбор слоя в каждом блоке (параметр S ∈ [0,100])

  • Для блока i:
    offset_i = ⌊ S/100 · (size_i − 1) ⌋
    L_i = start_i + offset_i

  • L₁ — отбрасывается (используется только для начального «понимания»).

3. Рекуррентные слои и циклы

  • Активные слои: L₂, L₃, L₄.

  • Общая глубина D (число циклов).
    Распределение по весам (1 : 3 : 2):

text

c₂ = round(D · 1/6)
c₃ = round(D · 3/6)
c₄ = D − c₂ − c₃

Итог: слой L₂ повторяется c₂ раз, L₃c₃, L₄c₄.
При D=12 получаем (2, 6, 4), при D=16(3, 8, 5) и т.д.

Вот разоюрались с формулой но что нам делать если мы просто так зациклим слои два варианта или получиться бред или прироста не будет или мы взорвемся (градиенты имееется ввиду ) вобьщем мы должны юзать вот такую имбу -

Эйлеровое маштабирование

  • Вдохновлено численным решением ОДУ:
    h_{t+1} = h_t + (1/iters) · f(h_t)

  • Мы применяем это как адаптивный шаг внутри цикла:
    cur = alpha cur + (1 - alpha) inpSA, где alpha = 1.0 / iters.

  • Это не даёт сигналу взорваться и сохраняет баланс residual-потоков, даже при большом D.

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

KV КЕШ В ДВЕНАДЦАТЬ РАЗ БОЛЬШЕ ЧТОООО?!?!?!?!?

вучит пугающе но для этого мы взяли крутую шутку это KV-декапплинг (отвязка кеша от рекуррентности) тоесть кеш не связан с рекурентностью я могу вам обьяснить это сам конечно же а давайте я это и сделаю !

Если кратко запись кеша доступна только на первой итерации на всех остальных только чтение но зачем это кроме веса все изза того что на каждой итерации перезапись ключей/значений (KV) ломала внимание. Это было неприятно но легко чиниться но это не конец идем далее.

Как нам не взорвать градиенты

Надеюсь обьяснять что такое градиенты мне не нужно поэтому просто скажу они взрываються без иньекций поэтому мы даем ей лекарство

  • Добавляем линейную комбинацию:
    h_new = alpha h_cur + beta h_inp, где beta = 1 - alpha.

  • Это якорь, который возвращает состояние к исходному вектору, предотвращая семантический дрейф.

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

Пруфы

Смотря эту статью вы зададитесь двумя вопросами Почему так кратко и Где пруфы на второй я отвечу прямо сейчас-

ВОТ ОН

А чтобы подтвердить все я сделал базовый бенчмар gms8k и получил на маленькой модели впечатляющие результаты поэтому вот и они :

GSM8K Benchmark Results (N=500)

Evaluating DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M:

Configuration

GSM8K Accuracy

Correct Answers

Baseline ( D = 0 )

39.20%

196 / 500

Recurrent ( D = 12 )

77.20%

386 / 500

Using Euler step scaling and KV cache decoupling to prevent semantic drift across iterations.

Да это выреза из README !!

Да это явно пруфы я думаю насчет второго вопроса отвечу - Я сделаю вторую часть где обьясню больше крутых моментов именно по разработке и переписи код на ручной C++ а не иишный вобщем так я надеюсь что ктото найдет время зайти посмотреть репозиторий и дать советы по улучшению и да по моим тестам данный форк увеличивает скорость гедто на ~10% так что юзайте на здоровье !

Спасибо за прочтение !

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


  1. TomskDiver
    29.07.2026 07:29

    Все не любят нейрослоп, но для данной статьи он был бы спасением:)) Вы ненавидите запятые? Попросите ИИ проставить знаки препинания, вернуть потерянные буквы и поправить орфографию.


    1. WenTech
      29.07.2026 07:29

      Для этого и Word 6.0 хватило бы, не надо ИИ.

      А вот практическую часть ждём - пусть аффтырь напугает нас тестами! )))

      =============================================================

      PS: 29 июля 2026 года автору 14 лет.

      ПРЕДУПРЖДЕНИЕ : Автору 14 лет 

      А 8 апреля 2025 года ему было 11 лет.

      В этом вашем IT год за 3 идет, как в полярных войсках? Срочно запретить IT!!! :)))


      1. SimpleTitled Автор
        29.07.2026 07:29

        В реальности мне 13 день рождение 17 мая просто я увеличиваю возраст чтобы люди не думали что я малолетка


        1. WenTech
          29.07.2026 07:29

          В инете возраст так-то вообще значения не имеет, и более того...

          ...«В интернете никто не знает, что ты кот» (с) ;)


    1. SimpleTitled Автор
      29.07.2026 07:29

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


  1. vazir
    29.07.2026 07:29

    для получения 77.20% - на сколько дольше модель стала думать?


    1. SimpleTitled Автор
      29.07.2026 07:29

      на 10% быстрее довольно странный результат но это правда вы можете сами скачать и проверить я сам в шоке