gonzo-обзоры ML статей – Telegram
gonzo-обзоры ML статей
24K subscribers
2.75K photos
2 videos
3 files
1.36K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Скандалы, интриги, расследования!

""ChatGPT could not have generated the results described above if OpenAI's LLMs had not ingested and been 'trained' on the Martin infringed works," the complaint alleges."

https://www.cbsnews.com/news/openai-lawsuit-george-rr-martin-john-grisham-copyright-infringement/
🔥17👎6😁3👍1🤬1
Nice project, a kind of semantic grep for code :)

No any 3rd party APIs or remote APIs, just local vector embeddings using ChromaDB (as I understand that really means Sentence Transformers embeddings, namely the all-MiniLM-L6-v2 model).

https://github.com/kantord/SeaGOAT
24
Generative AI’s first year out the gate—“Act 1”—came from the technology-out. We discovered a new “hammer”—foundation models—and unleashed a wave of novelty apps that were lightweight demonstrations of cool new technology.

We now believe the market is entering “Act 2”—which will be from the customer-back. Act 2 will solve human problems end-to-end. These applications are different in nature than the first apps out of the gate. They tend to use foundation models as a piece of a more comprehensive solution rather than the entire solution. They introduce new editing interfaces, making the workflows stickier and the outputs better. They are often multi-modal.

https://www.sequoiacap.com/article/generative-ai-act-two/
🔥10😁1
Chain-of-Thought → Tree-of-Thought

Техника для повышения качества ответа LLM’ок под названием Chain-of-Thought (CoT), пришедшая, кажется, из работы “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models” (https://arxiv.org/abs/2201.11903), давно вошла в арсенал промпт инженеров (патентованная технология, между прочим, https://patents.google.com/patent/US20230244938A1/en). В двух словах она заключается в том, чтобы попросить модель не сразу выдать результат, а сначала сгенерировать последовательность промежуточных шагов и лишь затем выдать финальный результат. Можно сочетать с few-shot learning, давая демонстрационные примеры.

Неожиданным образом, качество ответа повышается, особенно это заметно на математических задачах, commonsense и symbolic reasoning. Кроме того, дополнительными бонусами являются большая прозрачность принятия решения и интерпретируемость. В оригинальной работе показали, что CoT это эмерджентное свойство, начинающее проявляться с размера модели в районе 100B.

Дополнительная техника декодирования под названием Self-Consistency из работы “Self-Consistency Improves Chain of Thought Reasoning in Language Models” (https://arxiv.org/abs/2203.11171) заменяет жадное декодирование на создание нескольких цепочек CoT и в конце выбор наиболее консистентного ответа, который определяется мажоритарным голосованием. Этот подход CoT-SC иногда также называется Multiple CoTs, причём чем больше этих цепочек, тем лучше, в работе доходили до 40 штук.

Популярное изложение CoT и немного CoT-SC тут https://blog.research.google/2022/05/language-models-perform-reasoning-via.html.

Но это было в начале 2022-го. С тех пор появились более продвинутые подходы. Один из них, это Tree-of-Thoughts (ToT), появившийся с разницей в два дня в двух работах: “Large Language Model Guided Tree-of-Thought” (https://arxiv.org/abs/2305.08291) и “Tree of Thoughts: Deliberate Problem Solving with Large Language Models” (https://arxiv.org/abs/2305.10601).

Теперь процесс вывода представлен деревом, а не цепочкой. И модель может делать backtracking, если вывод ушёл не туда.

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

Эти подходы уже не чистый промпт инжиниринг, одним текстом тут не обойдёшься, надо писать какие-то программы, управляющие процессом. В этом смысле это уже в парадигме LLM Programs (https://news.1rj.ru/str/gonzo_ML/1584).

I) Начнём с первой работы от Jieyi Long из Theta Labs.

В данной постановке есть LLM, получающая промпты и выдающая ответы. Есть prompter agent, в который прилетает исходная задача от пользователя. Он выдаёт промпты в LLM и пытается получить от неё не финальное решение, а какое-то промежуточное. Специальный проверочный модуль (checker module) проверяет валидность промежуточного решения, полученного от LLM. Если проверка корректности проходит, это промежуточное решение парсится и сохраняется в памяти. Затем в зависимости от содержимого памяти prompter agent генерирует следующий промпт с целью получить от LLM следующий шаг. Если же от LLM приходит невалидный ответ, то ToT controller попросит prompter дать модели нужные подсказки и запросить решение снова. Также ToT controller отслеживает прогресс и решает, не нужно ли откатиться к родительскому узлу дерева или к более далёкому предку.

То есть стратегию ToT можно представить как алгоритм поиска по дереву, использующий LLM как эвристику для выбора шагов поиска. LLM используется для задач “short-range reasoning”, получения следующего промежуточного решения. Задачи такого типа в целом решаются LLM неплохо. Возможность откатываться к предыдущим промежуточным решениям улучшает способности к “long-range reasoning”, потому что система может исследовать большее пространство решений. А возможность выполнять многошаговые взаимодействия увеличивает число вычислительных шагов, которые может сделать система.
23🔥15👍5😁1
Если чуть углубиться в детали, то checker module может работать как на основе правил, так и быть нейросетевым. Какую-то корректность (типа 3SAT, решения уравнений и т.п.) проще проверять правилами, какие-то другие задачи -- нейросетями.

Memory module хранит всю историю диалога между LLM и prompter agent, и последний может использовать это хранилище для генерации подсказок LLM.

ToT Controller в целом наблюдает за ToT поиском, он тоже может быть задан простыми правилами типа 1) если checker считает текущее решение невалидным, сделать откат к родительскому узлу дерева, 2) если текущее промежуточное решение валидно, но поиск уже исследовал X (гиперпараметр) детей и пока не нашёл решения, то откатиться к родительскому узлу. Но можно также задать этот контроллер какой-то policy network

Prompter agent даёт подсказки (hints) LLM для генерации следующего шага. Он может быть реализован как достаточно общим промптом, так и policy network.

В работе использовали версию REINFORCE алгоритма для обучения обеих policy networks. В будущем собирались использовать более продвинутый MARL (multi-agent reinforcement learning) алгоритм. В целом чувствуется большой потенциал для обучения полиси в стиле AlphaGo через self-play.

Обученную систему можно использовать для ToT решения проблем. В работе проверяли на маленьких судоку (не самая LLM-friendly задача вроде, да и вообще NP-сложная) размеров от 3x3 до 5x5. Получилось лучше, чем zero-shot, one-shot и few-shot c CoT.

Имплементация лежит тут: https://github.com/jieyilong/tree-of-thought-puzzle-solver

II) Вторая работа от коллектива авторов из Принстона и Google DeepMind.

Здесь также решение задачи представлено деревом, в узлах которого отдельные “мысли” (thoughts, дальше буду использовать без кавычек) являющиеся промежуточными шагами в решении проблемы. И для поиска по этому дереву также используется LLM в качестве эвристики.

Каждая конкретная реализация ToT должна отвечать на 4 вопроса:

1. Как декомпозировать процесс в отдельные шаги-мысли. Тут надо соблюсти баланс: с одной стороны мысль должна быть достаточно маленькой чтобы LLM сгенерировала многообещающие и разнообразные сэмплы, с другой -- достаточно крупной, чтобы LLM могла оценить её полезность в решении проблемы (уровень токена, например, слишком низок).

2. Как сгенерировать потенциальные мысли из каждого состояния. Надо сгенерировать k кандидатов для следующего шага, авторы рассматривают две стратегии: 1) засэмплить i.i.d. мысли из CoT промпта (лучше работает, когда пространство мыслей достаточно большое, например, мысль -- это параграф); либо 2) предлагать мысли последовательно с помощью “propose prompt”.

3. Как эвристически оценивать состояния. Ранее в качестве поисковых эвристик были либо запрограммированные алгоритмы, либо что-то обученное. Здесь же для reasoning’а используется LLM. появляется что-то на новом уровне, некий уже достаточно универсальный интеллект, работающий через язык. Здесь тоже рассматривают две стратегии: 1) оценивать каждое состояние независимо с помощью специального промпта, 2) запихивать состояния в один промпт и голосовать, это проще делать, когда сложно оценить состояние. Можно делать обе такие оценки несколько раз и агрегировать результаты.

4. Какой алгоритм поиска использовать. Здесь всё просто, пробуют поиск в глубину и в ширину (BFS и DFS).

Проверяли на трёх задачах: Game of 24, Creative Writing, 5x5 Crosswords. Везде делали на базе GPT-4 (непривычно видеть работу DeepMind на основе GPT-4 🙂). Работает на порядок лучше стандартных IO prompt, CoT prompt, CoT-SC.

Эта имплементация тут: https://github.com/princeton-nlp/tree-of-thought-llm

---

При некоторой разнице описаний, подходы в целом про одно и то же. Удивительно всё-таки, как они синхронно это всё выпускают.

Интересно, в AutoGPT это уже добавили? Или сразу Graph of Thoughts (https://arxiv.org/abs/2308.09687, про него как-нибудь в следующий раз) будут имплементировать?

В целом у меня чувство, что мы довольно близки к созданию какой-нибудь пубяки аналогичной по эффекту червю Морриса в своё время.
👍185🔥1😁1