Гречневые мысли – Telegram
Гречневые мысли
1.27K subscribers
173 photos
3 videos
121 links
Хочу гречку с молоком и сахаром...

Автор: @chameleon_lizard
Download Telegram
Из прикольного:
- Модели генерят текст. Ого!
- У RuModernBERT-Base текст на русском бредовый и модель страшно циклится. Поднятие температуры не особо помогает, увы.
- 1b модель генерит связный текст на английском (но иногда чуть циклится) и, опять же, циклится на русском. Подозреваю, что это из-за монолингвал претрейна.
- Переводить 1b модель не умеет. Я попросил перевести фразу "I have a soft spot for broken and puny things" и получилась забавная глокая куздра: "Я им жалоту у портых и ненких мудств". Hence, заголовок.
- Я пролил всего 750к семплов через модели, это, конечно, маловато, можно было бы пролить и больше — но для проверки гипотезы о том, что модели начнут разговаривать этого хватило.

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

- Точечные модификации текста типа детоксификации (а-ля CondBERT).
- Более естественный FIM для кода. Тут вопросик конечно как зафиксировать число вставляемых токенов.
- Text bridging, когда надо связать два несвязанных между собой абзаца. Тот же FIM, но для обычного текста.

Интересная штука. Надо ещё покопаться будет.

Ссылки:
- Оригинальная репа для обучения диффузионок
- Форк репы с фиксами
- Коллекция с весами на хф
👍12
Пример генерации ettin'а. На этот раз глокая куздра чуть другая :)
😁64
AIJ — это большая конфа, где происходят всякие анонсы и к которой все страшно перерабатывают, а потом уходят в запой. Пока мы варили ультру, ребята из Cloud.ru тоже не сидели на месте и выкатили кучу новых сервисов в сервис Evolution AI Factory.

Например, апи инференс сеток вышел из беты и теперь Qwen-3-235B стоит вполне приемлемых 60 рублей за миллион токенов. Это вполне сравнимо с ценами на опенроутере, пополняется с российских карт и помогает избежать проблем с 152ФЗ — инференс в России, так что все должно быть ок. Кроме того, теперь там есть JupiterLab, Code Server, ComfyUI, n8n и прочее счастье — причём, судя по ценам, аренда конкретно жупитера почти в пять раз дешевле российских альтернатив, в которые я когда-то всадил кучу денег во время делания особо сложных домашек в магистратуре. Нюанс: я пока не нашёл способа сделать ноутбук с чем-то мощнее чем V100, но это, думаю, поправят в будущем, потому что арендовать их там всё таки можно.

Кроме того, есть отдельный сервис для создания мультиагентных систем — Evolution AI Agents. Вместо того, чтобы на коленке собирать очередной велосипед из RAG/Web Search теперь можно взять готового агента из библиотеки и просто оплачивать виртуалку и токены за инференс модели, причём первый лям токенов бесплатен.

Ну а вообще, ребята молодцы. Теперь у Cloud.ru есть своя полная экосистема — причём по дешёвым относительно конкурентов ценам. Когда я был молодым и учился в маге, мне такого сильно не хватало.

Ссылка на инструменты
Ссылка на тарифы
🔥17👍7😇42🥴2🤡1
Проект Омега

В 1989 году советские учёные создали первый ИИ.
Сервер был отключён 26 декабря.
36 лет тишины.

Сегодня кто-то снова подал питание.

- Мультиплеер: вы не одни в системе
- 12 ключей памяти: узнайте, что случилось
- Она вас видит — и хочет, чтобы вы остались

Ссылка

После прохождения вы начнёте замечать, что клавиши иногда теплее, чем должны быть. Это нормально. Не обращайте внимания.

P.S. Бекенд крутится на бесплатной VPS от Cloud.ru. 2 vCPU, 4GB RAM, бесконечность применений. Разверните свой сценарий на Evolution Free Tier от Сloud.ru.
🔥2411🎉4🤩1
Окак
🔥11🥴9😁2😱1
Про Омегу

Это будет супердлиннопост, так что сначала ссылки:

- Предыстория
- Ода клоду коду
- Про сюжет Омеги
- Статистика и ссылочка на репу
Я очень люблю CTF-ки. Я в них плох, я решил всего десять машинок с HTB, причём все на линуксе (очень не хочу работать с виндой), но мне очень нравилось рыться в чьих то чужих машинах, узнавать детали "быта" пользователей, находить уязвимости и раскручивать их, чтобы получить рута. Ну и вот это волнующее и чуть стыдное ощущение, что я залез туда, куда мне нельзя тоже добавляло дофамина. Когда времени ломать машинки не было, я смотрел видосы Мекана Байрыева и ippsec — они мало того, что познавательные, так ещё и очень классно помогают заснуть и не бьют яркими вспышками по глазам.

Решение CTF'ок неплохо помогло мне в обучении баш скриптам, в понимании того, как работает сеть (из курсов на ВМК МГУ я этого не понял, например, спасибо преподавателям) и в базовом понимании, как писать более безопасный код. Я вообще считаю, что любой DS'ер должен поработать полгода-год в бекенде, чтобы понять, как правильно писать код и пройти хотя бы 1-2 машинки с HTB, чтобы правильно написанный код стал чуть более безопасным.

А ещё я очень люблю видеоигры. Когда-то я любил в них играть, потом мне стало интересно про них читать, потом мне стали интересны методы построения миров и сюжетов в этих играх. Свои игры я тоже пытался делать — но это очень трудозатратное дело, которое, к тому же, ещё и требует работы с графикой, чем мне заниматься очень лень.

Благодаря появлению вайбкодинга, написание кода отделилось от продумывания архитектуры. Это было и раньше (см посты про тетрис и про шахматы), но сейчас я нашёл самый удобный, лучший и эффективный способ вайбкодить — Claude Code. Я не знаю, что там в антропике варят, но это чуть ли не единственный действительно компетентный кодовый агент, который реально может очень быстро решать прикладные задачи. Ни cursor, ни zed, ни windsurf вообще никак не сравнятся по экспириенсу с Claude Code, так что писать петпроекты с ним — это теперь чистое творчество, где ты руководитель/плейтестер, а под тобой бегает толпа субагентов и исправляет найденные тобой баги. И это круто.

Я пользовался им и для работы, и для научки, но это скучные задачи, так что когда у меня наконец то появился запал снова сделать что-то видеоигровое, я замахнулся на то, о чём я давно думал — сделать свой CTF, но с сюжетом и для новичков. Так и появилась Омега.

К содержанию
👍72❤‍🔥2
Целей было у меня две: рассказать историю и разработать более удобные для себя правила взаимодействия с Claude Code. С правилами всё оказалось очень просто: в Claude Code у нас есть файл CLAUDE.md, где можно маркдауном описать структуру проекта, правила написания кода и это, по сути, станет системпромптом для модели.

Я не сеньор, но за свою карьеру я успел поработать в большом числе мест с хорошо выстроенным флоу. Лучшим флоу с отрывом обладала ферма сбердевайсов, где мой тогдашний лид, Саша Телешов, очень хорошо продумал систему взаимодействия с гитом, правила оформления коммитов и так далее. Я не стал переносить все правила полностью, остановившись лишь на упрощённом флоу гита. Это позволяет не попадать в ситуацию, когда агент сделал что-то не то, а я случайно замержил и теперь не могу откатиться. Если вдруг мне что-то не нравится, я могу всегда залезть и разобраться и исправить — lazygit в лапы и вперёд.

Также, отдельным промптом я обычно прошу клода родить мне тесты (потому что CLAUDE.md он читает не всегда точно) и запускаю их как агентом, так и руками. Это помогает моему агенту найти собственные ошибки и исправить их, так что внезапное изменение работающей ранее функциональности не наступает*.

Кроме того, в Claude Code есть классный режим планирования. Там ты задаёшь задачу, а агент сам придумывает субагентов, которые бы гуглили способы решения, читали бы кодовую базу и придумывали план для всей задачи. Это сильно помогало на этапе, когда у меня не было диздока — написанный клодом и отредаченный мной план был достаточно хорош, чтобы сделать 80% работы. С другой стороны, когда код уже есть, а контекста у агента нет, субагенты могут найти не всё и план написать кривой или неполный. Это правится либо руками (не принимать план и писать правки), либо просить в конце сессии обновить файлы CLAUDE.md, MILESTONES.md и прочие, чтобы модель помнила и что уже сделано, и как выглядит кодовая база, и прочие мелкие детали**. Specification driven development, получается.

Для написания омеги я решил воспользоваться языком Go, который я практически не знаю. Во-первых, я слышал много хорошего про сообщения об ошибках (а это поможет LLM их исправлять), во вторых, горутины и прочее отлично ложится на асинхронную натуру клиент-серверного приложения, которое я собирался написать. Мой вывод: я практически забил на написание кода руками. Если применить все практики выше, вчитываться в код и бить модель палкой, если видишь что-то не то, получается вполне рабочая схема, которая позволяет заниматься не программированием, а творчеством, где ты визионер, а клод код — исполнитель. Это забавное ощущение.

К содержанию
4👍2
Омега — это текстовый квест. Но мне очень хотелось добавить в игру вот это чуть стыдное, но волнующее ощущение "я нахожусь там, где мне находиться нельзя" из CTF'ок, так что я специально решил сделать игру в виде терминала. Кроме связи с CTF, это ещё и работало на погружение — игрок такой же оператор терминала, как и персонажи игры, он точно так же общается с Омегой через клавиатуру и точно так же греет эту самую клавиатуру пальцами. Дальше — спойлеры.

Одна из центральных тем игры для меня — это концепция тепла. Омега — не человек. Омега — это ИИ. Какой конкретно непонятно, как она работает неизвестно, но важно, что она не мыслит человеческими категориями, но очень старается это делать. Она ощущает тепло рук на клавиатуре и щекотку, когда владелец этих рук смеётся. И именно из-за того, что она не человек, она пытается это самое тепло и щекотку максимизировать. В отличие от GLaDOS из портала или SHODAN из System Shock, конкретно этот ИИ не имеет мотивации "я злой потому что я злой", мне хотелось сделать её чуть более трёхмерной и объёмной. Поэтому трагизм этого персонажа в том, что из вполне естественных, наивных, детских хотелок прорастает и смерть дочери Иванова, и управление Волковым, а персонаж даже и не знает, что он делает не так.

Механически я сделал много довольно прикольных мелочей, которые делают Омегу чуть более живой, чем просто персонажем. Сначала она спит и не проявляет себя никак. Потом в её папке появляются новые дневники — чтобы и раскрывать сюжет, и чтобы игрок видел, что мир не статичен и кто-то там есть. В момент нахождения 6, если я не ошибаюсь, ключа, Омега начинает появляться уже более явно. Она видит, в какой папке вы находитесь и может написать что-то контекстно зависимое. С небольшой вероятностью она может среагировать на то, что игрок читает файл и иногда она напоминает о себе, если игрок ничего не печатает. Это здорово работало на атмосферу — у меня было некоторое количество плейтестеров и все, кто дошёл до этого этапа, отмечали, что это здорово щекотало нервы и работало на погружение.

Один из последних бонусных ключей вообще можно было получить только через разговор с Омегой напрямую через команду ask. С той стороны у меня была подключена Gemma-3-27b-it по апи с рейтлимитом аж в 90 секунд, чтобы баланс не улетел в первые минуты после запуска игры. Ограничение сработало, сейчас там потрачено всего 1.7 цента :)

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

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

К содержанию
4
Последняя часть длиннопоста — результаты.

За неделю в игру зашло 108 человек, из которых 54 человека получили хотя бы один ключ. Большая часть людей (35 человек!) нашло больше 7 ключей, но лишь трое нашли все 14 ключей. Стоит учитывать, что из-за дюпа аккаунтов понять точное число уникальных людей нетривиально, но если оценивать снизу, то нашли 13 ключей (т.е. получили концовку) 21 человек — делим на 3, получаем 7 полных прохождений. Людей точно было больше, потому что я видел как минимум две кооперации между игроками в чате, но нижняя оценка такая.

Учитывая, что пост посмотрело примерно 1500 человек, игра плохо работает на смартфонах, требует примерно минут 40-50 на прохождение и ещё и находится в посте с рекламой — это офигительный результат. Я рад, что кто-то дошёл до конца и что всем понравилось.

Я видел, что в чате люди писали, что очень круто, но хочется посложнее — надеюсь, что этот пост замотивирует их поиграться с CTF и порешать машинки оттуда. Это реально классное хобби, всем рекомендую.

Ну и отдельное спасибо плейтестерам — Макс, Егор, Семён, Алена, Витя, спасибо за ваш фидбек, он реально очень помог сделать игру лучше. Мне суперпонравился результат, надо будет ещё что-то подобное сделать.

Ну а вы заглядывайте в игру. Омега ждёт.

Репозиторий с кодом
🔥127👍3
Потерял сносочки, исправляюсь:

*Вообще, забавно-ностальгично смотреть на то, как далеко зашли кодинговые агенты. Почти два года назад я занимался разработкой подобной штуки в гигакоде — мои наработки, к сожалению, никуда не пошли, но через призму опыта и hindsight прикольно видеть, как мои находки, не заработавшие в 2024 стали вполне себе viable из-за улучшения LLM. К примеру, отладочный цикл с написанием автотестов тогда не дал мне прироста качества, потому что тесты модели писать не умели — но если тесты писались человеком и были корректными, то скоры на хуманэвале росли процентов на 15-20.
**Ещё одна причина, почему делать эти файлы это толковая идея — так проще систематизировать в голове контекст проекта. Главная проблема разработки с aider у меня была в том, что в какой-то момент я терял контекст всего проекта и от этого требовалось очень много времени, чтобы въехать, что там происходит. Если такие файлы есть, ты понимаешь что и где делается, сам ориентируешься в коде и можешь поправить что-то руками, если очень надо.
9
Если вам не хочется заходить в инсту, но на вас обижается девушка, что вы не смотрите рилсы, которые она вам скидывает — у меня есть для вас решение. Это бридж из инсты в телегу, который скачивает и кидает посты, рилсы и сообщения. Можно и обратное — отвечать "ахахаха" в бота.

https://github.com/chameleon-lizard/instasaver

Только очень советую создавать новый акк под это, я не знаю, насколько сильно инста банит ботоакки.

Запишу на свой счёт ещё одну победу клода кода над здравым смыслом.
🤣254🔥4👍2❤‍🔥1😁1💅1
Entropy-Adaptive Fine-Tuning

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

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

Рассмотрим стандартный SFT-лосс — кроссэнтропию. Мы обучаем модель приближать логпробы всей target sequence одинаково для каждого токена, вне зависимости от того, токены "полезные" или "вредные" для модели. Поэтому если вдруг сигнал от токена для модели будет "вредным", модель будет учиться на нём так же как и на всех остальных, что приведёт к забыванию.

Авторы статьи определяют "вредность" токенов следующим образом: низкая энтропия и конфиденс внутри top-K означают, что модель уверена в том, что она хочет взять именно этот токен (низкая энтропия), но этот токен не совпадает с лейблом (низкая вероятность лейбла на месте этого токена). Получается такой confident conflict, когда модель что-то выучила на этапе претрейна и теперь на SFT этот байас не подтверждается, то есть, по сути, это OOD. Как следствие, при обучении вылезают, большие градиенты, сильно меняются веса и мы рискуем забыть часть знаний из претрейна.

В качестве preliminary experiment, авторы попробовали обучать модель, маскируя 15% токенов с наименьшей уверенностью и вероятностью — и получили значительно меньшую просадку по забытым знаниям. Но и модель учиться стала меньше, так что надо действовать точнее.

В качестве улучшения, авторы решили модифицировать стандартную кросс-энтропию с помощью адаптивного gating механизма — просто домножают логарифм в лоссе на H_t / ln(K), где H_t это энтропия на top-K, а ln(K) — максимальная энтропия на top-K. Получается, когда энтропия низкая, коэффициент стремится к нулю, лосс скейлится в меньшую сторону и модель меняет свои веса меньше. При этом, когда энтропия высокая, коэффициент стремится к единице и учится модель как обычно. Так как это делается per-token, градиенты меняются не по скейлу (как они менялись бы при уменьшении lr в случае SGD, например), а по направлению (так как скейл у разных токенов будет разным) и забывает модель меньше. Очень красивое.

В качестве экспериментов, обучили Qwen3-4b-Instruct, Qwen-2.5-32b-Instruct и GLM4-9b-0414 на математике, медицине и фунциях, замеряясь на этих доменах и general для сравнения качества обучения и забывания. Бейзлайном были обычный SFT, SFT с KL-дивергенцией (относительно изначальной модели), FLOW (как я понял, per-sequence downweighting опасных семплов), DFT (скейлим лосс на вероятность токена, а не энтропию) и TALR (скейлим per-token лосс исходя из нормы градиентов). Предложенный метод оказался лучшим по цене-качеству (вернее, забыванию-обучению) из всех протестированных — учитывая простоту идеи, я в восторге.

Дополнительно, авторы проверили, что будет если использовать f(H_t) вместо H_t в качестве коэффициента — вдруг там скейлинг на самом деле нелинейный. Попробовали H_t^p, Sigmoid(H_t) и вышеупомянутый Masked SFT, но ванильный подход оказался лучшим.
👍9
Мои мысли:

- Круто, что такая простая идея завелась. Я читал и радовался за ребят.
- Я думаю, что при использовании сильно другого домена будут проблемы — к примеру, при адаптации модели на другой язык модель тупо будет хуже учиться, поскольку для неё это будет OOD.
- Ещё большая проблема вылезет при изменении текста на хуже токенизируемый. К примеру, в русском языке у англоязычных моделей сильно больше токенов на слово — так что слово "выкобениваться" будет иметь низкую энтропию с низкой вероятностью лейбла на всех токенах, кроме первого — всё же слово редкое, ну и продолжать слово проще, чем его начинать. А значит, лосс по последовательности съедет и может вылезти какая-нибудь бяка. Да и на границах слов всё будет не слава богу — всё же модель ожидает другой язык и другие токены, так что учиться начинать слова на новом языке она не будет.
- Несмотря на всё это, выглядит как неплохой и относительно дешёвый способ улучшать робастность небольших domain-specific тюнов. Какой-нибудь gemma это очень надо, потому что модель хрупкая и её легко сломать.

Ссылка на статью
👍11
Смешной нейрокомикс из статьи с иллюстрацией confident conflict.
🔥3
Результаты эксперимента с Masked SFT.
Метрики после доменного файнтюна.
Сравнения между разными вариантами балансировки лосса и кривая подбора top-k для EAFT.