Интересное что-то
517 subscribers
2.72K photos
253 videos
138 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Мартин Фаулер, международный эксперт по программной инженерии, начал свою публичную просветительскую деятельность с книги Analysis Patterns 1997-го года.

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

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

Андрей Гордиенков решил исправить это досадное обстоятельство и подготовил собственную версию перевода.

https://habr.com/ru/articles/872598/

Вступление
1.1 Концептуальные модели
1.2 Мир шаблонов
1.3 Шаблоны в этой книге
1.4 Концептуальные модели и реинжиниринг бизнес-процессов
1.5 Шаблоны и фреймворки
1.6 Использование шаблонов

Часть 1. Аналитические шаблоны
2. Ответственность
3. Наблюдения и измерения
4. Наблюдения для корпоративных финансов
5. Обращение к объектам
6. Инвентаризация и учет
7. Использование моделей учета
8. Планирование
9. Торговля
10. Производные контракты
11. Торговые пакеты

Часть 2. Поддерживающие шаблоны
12. Слоёная архитектура для ИС
13. Фасады приложения
14. Подходы для моделирования типов
15. Шаблоны ассоциации
16. Послесловие

Часть 3. Приложения
А. Техники и обозначения
В. Таблица паттернов
C. Краткая справка по диаграммам
#rl #llm
Получается, больше смещаем фокус в сторону агентов
Немножко про агента и инструменты, которые я писал последние пару дней.

Поиск по ArXiv. Есть публичное API, есть готовая библиотка. Подводные камни:
- Есть значительный кусок функциональности, который не поддерживается во всех популярных реализациях: фильтр по датам. Более того, в официальном руководстве к API он... неправильно описан! Если вы выполните запрос из руководства, то увидите, что фильтр там тупо не работает! В реальности это должен быть не отдельный GET параметр, это должна быть часть запроса, что я выяснил только из группы с обсуждением.
- Я до сих пор не до конца понимаю, как работает поиск без явного указания полей. Это как будто бы нигде нормально не описано.

Скачивание и парсинг PDF. И если со скачиванием вопросов нет, то с парсингом всё до сих пор очень-очень больно. Есть pypdf, который с извлечением текста из архивовских pdfок кое-как справляется, но получается просто текст без структуры. И есть marker, который справляется очень даже элитно и выдаёт нормальный Markdown + картинки, но который по-хорошему требует отдельного GPU сервака. На CPU ждать по минуте не очень хочется, да и зависимости там сейчас конфликтуют с smolagents. Чего-то посередине я пока не нашёл.

Эмуляция bash. Я взял спеку Anthropic, запихнул её в Соннет и сказал, чтобы он написал код с исполнением через Docker. Пока что работает безотказно, вообще никаких проблем не было. Более того, иногда агент полнейшую дичь умудряется вытворять с этим инструментом.

Сам агент. Сначала я тестировал всё с Соннетом. Когда за 3 дня насчиталось 30$, я понял, что так продолжать нельзя. Сейчас всё пытаюсь делать с gpt-4o-mini, и это реально больно. Зато если уж с ней всё работает, то с нормальными моделями получаются вообще чудеса. Тестирую на простом запросе про свою же статью.

Меня не очень интересуют хардкодные реализациии типа storm и AgentLaboratory. Хочется всё сделать в рамках базового CodeAct, запихивая всю сложность в инструменты и подчинённых агентов.

Сейчас я пишу str_replace_editor из той же спеки, что и bash.
#interesting

Вдогонку😹
На скриншоте один из тестовых вопросов, которые я использую.
Вопрос, очевидно, не совсем серьёзный, но хотя бы заставляет агента попотеть, даже на базе Соннета.
Я всё ещё борюсь за получение нормального лога/отчёта (mind.txt), в комменты скину только final.txt с одного из прогонов.

Что интересно, есть две статьи, которые регулярно всплывали за пару десятков итераций:

Gödel Agent: A Self-Referential Agent Framework for Recursive Self-Improvement
https://arxiv.org/abs/2410.04444

OS-Copilot: Towards Generalist Computer Agents with Self-Improvement
https://arxiv.org/abs/2402.07456

Разбор первой можно найти тут: https://t.me/gonzo_ML/2964
Про вторую я тоже уже слышал, но не читал.
Gödel Agent: A Self-Referential Agent Framework for Recursive Self-Improvement
Xunjian Yin, Xinyi Wang, Liangming Pan, Xiaojun Wan, William Yang Wang
Статья: https://arxiv.org/abs/2410.04444
Репа: https://github.com/Arvid-pku/Godel_Agent

Why did the Gödel Agent take so long to plan its road trip in its Gödel Machine?

Because its navigation system kept recursively self-improving, proving it could find a better route, but never actually getting to the destination!



Любопытная работа про эволюционирующих агентов, вдохновлённых Шмидхуберовской Машиной Гёделя (https://arxiv.org/abs/cs/0309048) 2003 года. Машина пыталась сначала формально доказать, что изменение ведёт к улучшению (что могло требовать примерно вечность), агент вместо формальных доказательств использует эмпирический фидбек из среды и просит LLM улучшить код на базе этого фидбека. По ощущению похоже на что-то типа AutoGPT, который ещё и код свой переписывает.

Идея в том, что агенты бывают разной породы. Первые, Hand-Designed Agents с самой низкой степенью свободы, следуют одной и той же полиси всё время, вне зависимости от фидбека из среды. Другие, известные как Meta-Learning Optimized Agents, имеют фиксированный алгоритм meta-learning, обновляющий их полиси по фидбеку из среды. И есть self-referential Gödel Agent, который может улучшать себя без ограничений. Технически это значит, что он обновляет и полиси, и алгоритм мета-обучения.

Для такого агента нужно задать начальные полиси и алгоритм мета-обучения. В качестве начальной полиси взята LLM с Chain-of-Thought промптом. А в качестве второго взят алгоритм, который рекурсивно запрашивает LLM для переписывания всей своей кодовой базы с учётом фидбека из среды (успешность решения задачи). При этом он может переписать и код, отвечающий за переписывание кода, поэтому он self-referential.

Агент -- это экземпляр конкретного питоновского класса (Agent), он имеет доступ к содержимому памяти питоновской среды (локальные и глобальные переменные, функции и модули) и может динамически там всё менять, включая свой код (monkey patching). Так он и эволюционирует, насколько я понял.

Для улучшения сходимости оптимизационного процесса агенту даны дополнительные тулы: 1) thinking before acting (кажется, похоже на ReAct), 2) error handling (добавлен механизм восстановления после ошибок, ибо LLM может всякого в код навставлять), 3) code running (Python и bash), 4) LLM calling (через API). Первые два дальше покажут наибольшую пользу.

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

Потестили на бенчмарках DROP, MGSM, MMLU, GPQA. Бейзлайны из группы Hand-Designed Agents (CoT, CoT-SC, Self-Refine, LLM Debate, Step-back-Abs, Quality-Diversity, Role Assignment) и Meta-Learning Optimized Agents (Meta Agent Search).

Дефолтный гёделевский агент ограничен, ему запрещено менять модель (gpt-3.5-turbo) и у него нет доступа к интернету. Как я понял, для самоулучшения используется gpt-4o, а gpt-3.5-turbo -- для оценки уже оптимизированной полиси. Есть неограниченный вариант, которому можно фсё.

Ограниченный гёделевский агент побил всех. Где-то сильно (DROP, MGSM), а где-то лишь слегка (GPQA). В приложении есть код для найденных полиси, можно изучить, насколько далеко он ушёл от начального CoT. Неограниченный агент побил всех ещё больше, но во многих случаях за счёт перехода на более мощную модель 🙂
На полный эволюционный процесс по четырём бенчмаркам с 30 рекурсивными самоулучшениями ушло $15 (и в основном всё из-за растущей памяти с историей). Конкурирующий Meta Agent Search требовал $300.

Отдельно исследуется кейс с Game of 24. Там гёделевский агент после шести неуспешных попыток оптимизации переключился с метода на основе LLM на метод на основе поиска, переписав эту часть кода, и достиг 100% точности. В других запусках он продолжал использовать LLM, но сделал по ходу множество улучшений типа добавления верификации и прогона задачи на дополнительных данных. А ещё добавил библиотеку для лучшей трассировки ошибок, улучшил логи, убрал лишний код.

Также попробовали разные начальные полиси, не только CoT. Из интересного, более сильная полиси ведёт к лучшей сходимости, а также то, что агент c CoT после всех улучшений не превзошёл ToT. То есть типа инновации он не так хорошо придумывает.

У авторов большие планы на улучшение по различным фронтам (см. Раздел 6.1), включая множественных агентов.

Любопытная тема, наэволюционировать и рекурсивно наулучшать можно всякого…
#ml #dl #cv

Итоги года в медицинском ML
Forwarded from Neural Info
Статья про атаки на нейросети. Постарался верхнеуровневого разобрать различные виды атак, коротко их описать и привести примеры статей, которые можно почитать про определенный вид атаки. Также в конце приложил список статей про различные атаки, которые я изучал ранее по данной тематике.
Forwarded from Tensor Banana
Hunyuan video2video и image2video

Эти воркфлоу используют HunyuanLoom (flowEdit) - эта штука преобразует входное видео в размытый движущийся поток (почти как controlnet). Обычный denoise тут не нужен, с ним картинка будет кипеть.
Для сохранения черт лица нужна лора на лицо. Без нее лицо будет другое. Куча лор на персонажей есть на civitai.


## video2video
Это самый простой воркфлоу, получается лучше всех. Использует HunyuanLoom (flowEdit). Для создания видео с Кеану использовал: skip_steps: 11, drift_steps: 15. Лора: 0.95 довольно хорошо передает его лицо под любым углом.
лору на Кеану: https://civitai.com/models/1131159/john-wick-hunyuan-video-lora
Воркфлоу video2video: https://github.com/Mozer/comfy_stuff/blob/main/workflows/hunyuan_video2video.json


## image+video 2 video
воркфлоу чуть посложнее: берет видео с движением (например, танец) и клеит его поверх статичной картинки. В результате хуньюань подхватывает движения.
видео с исходным танцем: https://civitai.com/images/50838820
лора на танцы: https://civitai.com/models/1110311/sexy-dance
Воркфлоу image+video2video: https://github.com/Mozer/comfy_stuff/blob/main/workflows/hunyuan_imageVideo2video.json


## image2video
самый сложный воркфлоу. Использует:
- HunyuanLoom (flowEdit)
- SAM2 comfyUI (можно и без него, но тогда маску, того что должно двигаться, придется рисовать пальцем)
- Видео белого шума: https://github.com/Mozer/comfy_stuff/blob/main/input/noise_8s.mp4
- Детальное описание вашей картинки.
- Воркфлоу image2video: https://github.com/Mozer/comfy_stuff/blob/main/workflows/hunyuan_img2video_sam_flow_noise.json

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

Сгенерировать детальное описание вашей картинки на английском можно тут:
https://huggingface.co/spaces/huggingface-projects/llama-3.2-vision-11B
Describe this image with all the details. Type (photo, illustration, anime, etc.), character's name, describe it's clothes and colors, pose, lighting, background, facial features and expressions. Don't use lists, just plain text description.



Установка
устанавливаем кастомные ноды в комфи, читаем их описание по установке:
https://github.com/kijai/ComfyUI-HunyuanLoom
https://github.com/neverbiasu/ComfyUI-SAM2 (опционально)


Замечания:
- 2 секунды видео на 3090 генерируются за 2 минуты (на 3060 - 7 минут).
- Главные параметры flowEdit: skip_steps (кол-во шагов из исходного видео или картинки, 1-4) и drift_steps (количество шагов генерации по промпту, 10-19).
- Конечное значение steps = skip_steps + drift_steps. Обычно выходит 17-22 для hanyuan fast модели. 10 шагов точно не хватит. Для обычной не fast модели будет больше (не тестил). Чем больше skip_steps тем более похожей на исходную картинку (или исходное видео) будет результат. Но тем меньше движения можно задать промптом. Если результат сильно размыт - проверяйте значение steps, оно должно быть равно сумме.
- Лучше всего получаются видео длиной 2 секунды (49 кадров). 73 кадра сложнее контролировать. Рекомендуемое разрешение 544x960.
- Есть два поля для промптов: Source prompt (описание вашей картинки) и Destination prompt (описание вашей картинки + движения в кадре).

Звук для вашего видео можно сгенерировать в MMAudio тут: https://huggingface.co/spaces/hkchengrex/MMAudio