Entry tags:
ИИ и формализмы
"Transformers Can Do Arithmetic with the Right Embeddings"
https://neurips.cc/virtual/2024/poster/94565
LLMов научили арифметике, как я понимаю, через специальное кодирование чисел. Это интересный трюк, поскольку у обычных ЛЛМов даже счет не получается, и да у людей научиться арифмерике занимает годы. Так что интересно с точки зрения понимания, как оно работает.
Но одновременно у меня возникает вопрос (который, как оказалось, авторам этой бумаги в голову не пришел): накойхер их учить арифмерике, если у них есть под боком компьютер, который может посчитать все то же самое легко и эффективно? Гораздо более продуктивным занятием было ты научить ЛЛМы пользоваться калькулятором. В простейшем варианте, добавить поспроцессинг к выводу ЛЛМа, который выцепит и выполнит вычислительные инструкции, и научить ЛЛМ генерить эти инструкции. Ну вот например, недавно народ активно рассуждал про "посчитать буквы r в слове strawberry". Это задание можно поделить на две части: (1) выцепить буквы r, (2) посчитать их. ИИ мог бы генерить что-то типа
$(wc r r r)
и получить на выходе 3. Ну и то же самое с любой арифметикой.
Интересно, какие возражения такая идея вызывает у учоных: "но ведь разрешать выполнение питонного кода из вывода - небезопасно". То, что можно сделать не Питон, а любой свой безопасный язык, им просто в голову не приходит. На лицо еще один признак большого разрыва между Машинными Учоными и Компьюторными Учоными.
А вот еще интересен такой момент: я спрашивал в разных местах, и у всех генерация машинного кода искусственным интеллектом просиходит совершенно от балды этого ИИ. Но ведь машинный код - формальный язык. Грамматика и семантика его известна. Ничего не мешает генерировать сразу согласно грамматике - проверять каждую следующую лексему на соответствие грамматике, и если соответстие не найдено, то ее отбрасывать и выбирать другую, следующую по весу. Может полученный код и не будет правильно работать, но как минимум всегда будет соответствовать грамматике, и с небольшими дополнительными проверками - компилироваться. В одном из мест я видел примеры кода, сгенерированного моделями различной сложности, с качеством, растущим со сложностью модели. Но простая формальная проверка должна поднять качество кода, сгенерированного даже простыми моделями.
https://neurips.cc/virtual/2024/poster/94565
LLMов научили арифметике, как я понимаю, через специальное кодирование чисел. Это интересный трюк, поскольку у обычных ЛЛМов даже счет не получается, и да у людей научиться арифмерике занимает годы. Так что интересно с точки зрения понимания, как оно работает.
Но одновременно у меня возникает вопрос (который, как оказалось, авторам этой бумаги в голову не пришел): накойхер их учить арифмерике, если у них есть под боком компьютер, который может посчитать все то же самое легко и эффективно? Гораздо более продуктивным занятием было ты научить ЛЛМы пользоваться калькулятором. В простейшем варианте, добавить поспроцессинг к выводу ЛЛМа, который выцепит и выполнит вычислительные инструкции, и научить ЛЛМ генерить эти инструкции. Ну вот например, недавно народ активно рассуждал про "посчитать буквы r в слове strawberry". Это задание можно поделить на две части: (1) выцепить буквы r, (2) посчитать их. ИИ мог бы генерить что-то типа
$(wc r r r)
и получить на выходе 3. Ну и то же самое с любой арифметикой.
Интересно, какие возражения такая идея вызывает у учоных: "но ведь разрешать выполнение питонного кода из вывода - небезопасно". То, что можно сделать не Питон, а любой свой безопасный язык, им просто в голову не приходит. На лицо еще один признак большого разрыва между Машинными Учоными и Компьюторными Учоными.
А вот еще интересен такой момент: я спрашивал в разных местах, и у всех генерация машинного кода искусственным интеллектом просиходит совершенно от балды этого ИИ. Но ведь машинный код - формальный язык. Грамматика и семантика его известна. Ничего не мешает генерировать сразу согласно грамматике - проверять каждую следующую лексему на соответствие грамматике, и если соответстие не найдено, то ее отбрасывать и выбирать другую, следующую по весу. Может полученный код и не будет правильно работать, но как минимум всегда будет соответствовать грамматике, и с небольшими дополнительными проверками - компилироваться. В одном из мест я видел примеры кода, сгенерированного моделями различной сложности, с качеством, растущим со сложностью модели. Но простая формальная проверка должна поднять качество кода, сгенерированного даже простыми моделями.
Как встроить калькулятор в LLM
Правильнее добавить нейроны, представляющие калькулятор внутрь нейросети, чтобы эти нейтроны активизировались соответствующими текстовыми запросами, и чтобы эти нейроны могли сформировать посчитанный результат и добавить его в ответ.
Re: Как встроить калькулятор в LLM
Re: Как встроить калькулятор в LLM
Разница в способе обработки информации.
Нейроны - непосредственная часть нейросети, которая работает с уже распарсенной информацией, которую удобно обрабатывать.
Текст - нужно сначала распарсить и создать контекст, и только потом - думать. После чего - снова преобразовать в текст.
Re: Как встроить калькулятор в LLM
Но можно попробовать пропустить последний этап формирования текста и скармливать в парсер арифмометра непосредсвенно embeddings, и его результат конвертировать тоже в embeddings. В этом смысле исследования оптимального представления эмбеддингов для кодирования чисел может быть полезно.
Re: Как встроить калькулятор в LLM
Число для калькулятора можно представить одним нейроном, специально созданным для этого.
Также и число из калькулятора можно представить нейроном созданным для этого числа.
И сразу же связать эти нейроны друг с другом и остальным контекстом решаемой задачи.
> можно попробовать пропустить последний этап формирования текста и скармливать в парсер арифмометра непосредсвенно embeddings
Embeddings - это не совсем нейросеть. Embeddings - это лишь проекция нейросети на набор в ~1500 нейронов (dimensions).
Re: Как встроить калькулятор в LLM
> Число для калькулятора можно представить одним нейроном, специально созданным для этого.
Нельзя. Оно так не работает. Начиная с того, что диапазон значений, используемых в нейроне ограничен чем-то более или менее близким к [-1, +1].
Re: Как встроить калькулятор в LLM
Только те числа, которые используются.
Каждый нейрон может быть представлен Int32 ID (up to 4B neurons).
При кодировании числа в нейрон - записывать это число в специальную таблицу NeuronNumber { Id int, Number real}
Ну а когда этот нейрон больше не нужен - удалять из нейросети и удалять из таблицы NeuronNumber.
Re: Как встроить калькулятор в LLM
Моделировать какую-то функцию на нейросети - безусловно возможно. Это довольно базовая вещь, хоть и как оказывается на практике, тоже с приключениями. Для уменьшения приключений я даже придумал новую V-образную функцию активации. Но тут весь этот кусок оказывается изначально посвящен одной функции, на конкретно которую он натренировывается. Это не общая нейросеть.
Re: Как встроить калькулятор в LLM
Как это "нет"?
Если нам нужно что-то посчитать - мы нам нужен новый нейрон с числом и привязкой к калькулятору (через таблицу NeuronNumber).
После того, как посчитали и получили ответ - нужен новый нейрон с результатом из калькулятора.
После того, как результат осмыслен, превращён в текстовый ответ и забыт - этот нейрон больше не нужен.
Re: Как встроить калькулятор в LLM
Re: Как встроить калькулятор в LLM
Что мешает удалить ненужный нейрон?
Re: Как встроить калькулятор в LLM
Переменное количество нейронов
Почему ты считаешь, что количество нейронов в нейросети должно быть фиксированным?
Re: Переменное количество нейронов
Re: Переменное количество нейронов
Какие-то нейросети имеют фиксированное количество нейронов.
Нейросеть, которую создавал я - имеет динамическое количество нейронов.
Нейросеть человеческого мозга - имеет динамическое количество нейронов.
Re: Как встроить калькулятор в LLM
Можно и иногда (когда надо думать внимательнее) - полезно.
> Почему не сделать эту уточняющую фазу автматической?
Автоматической по условию (не всегда) - можно.
Автоматической всегда - не нужно, потому что жрёт ресурсы, а в простых ситуациях пользы от дополнительных прогонов - нет.
> Но есть новомодное направление "агентов", когда ИИ строится из группы "личностей", которые задают друг другу уточнения и формулируют общий ответ.
Да, это перспективное направление, которое может заменить многие профессии.