sab123: (Default)
[personal profile] sab123
"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. Ну и то же самое с любой арифметикой.

Интересно, какие возражения такая идея вызывает у учоных: "но ведь разрешать выполнение питонного кода из вывода - небезопасно". То, что можно сделать не Питон, а любой свой безопасный язык, им просто в голову не приходит. На лицо еще один признак большого разрыва между Машинными Учоными и Компьюторными Учоными.

А вот еще интересен такой момент: я спрашивал в разных местах, и у всех генерация машинного кода искусственным интеллектом просиходит совершенно от балды этого ИИ. Но ведь машинный код - формальный язык. Грамматика и семантика его известна. Ничего не мешает генерировать сразу согласно грамматике - проверять каждую следующую лексему на соответствие грамматике, и если соответстие не найдено, то ее отбрасывать и выбирать другую, следующую по весу. Может полученный код и не будет правильно работать, но как минимум всегда будет соответствовать грамматике, и с небольшими дополнительными проверками - компилироваться. В одном из мест я видел примеры кода, сгенерированного моделями различной сложности, с качеством, растущим со сложностью модели. Но простая формальная проверка должна поднять качество кода, сгенерированного даже простыми моделями.

Date: 2025-02-17 12:57 am (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Смысл не в том, чтоб научить LLM совершать арифметические операции. Это умеет делать даже механический арифмометр.

Смысл в том, чтобы LLM научилась этому самостоятельно. В этом преимущество нового поколения reasoning моделей вроде DeepSeek r1. У них умение мыслить логически появилось само по себе, в результате тренировки, а не было заранее запрограммировано человеками.

При разговоре с r1 видно, как оно думает, можно отследить логическую цепочку мыслей. Даже когда оно ошибается, эти ошибки не такие, как раньше, где просто слова брались явно от балды. Может сказать "я не знаю", может зациклиться в рассуждениях и не найти ответа, как человек.

Date: 2025-02-17 02:16 am (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

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

Date: 2025-02-17 01:57 am (UTC)
lev: (Default)
From: [personal profile] lev
пусть считают по аксиомам Пеано

Date: 2025-02-17 02:03 am (UTC)
chapai: (Default)
From: [personal profile] chapai
еще надо смотреть, есть ли у LLM теже проблемы с разрядностью вещественными и накоплением ошибки. Во всяких матбиблиотеках довольно мучительно решали. Возможно вот таким фокусом обошли.

Date: 2025-02-17 02:46 am (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9
python3
Python 3.10.12 (main, Jan 17 2025, 14:35:34) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1+0.2-0.3
5.551115123125783e-17
>>> 

what is 0.1+0.2-0.3?

deepseek-r1-distill-qwen-7b: Alright, let's tackle this problem step by step. So, the question is: what is 0.1 + 0.2 - 0.3? Hmm, at first glance, it seems straightforward, but I want to make sure I do this correctly.

Okay, starting with adding 0.1 and 0.2. Let me visualize a number line in my head. If I have one-tenth and add two-tenths, that should give me three-tenths. So, 0.1 + 0.2 equals 0.3. That part seems simple enough.

Now, the next step is subtracting 0.3 from that sum. So, if I take 0.3 (which is the result of adding 0.1 and 0.2) and then subtract another 0.3, what do I get? Well, subtracting three-tenths from three-tenths should bring me back to zero.

Wait a second, let me double-check that. Sometimes with decimals, it's easy to make little mistakes. So, adding 0.1 and 0.2: 0.1 is like one dime, and 0.2 is two dimes. Together, that makes three dimes, which is 0.3. Then subtracting another three dimes would indeed leave me with zero.

Is there any chance I could have messed up the decimal places? Like, maybe thinking of them as whole numbers instead? Let's see: if I treated them as integers, 1 + 2 - 3 equals 0. So that still checks out.

Another way to look at it is by converting everything into fractions. 0.1 is 1/10, 0.2 is 2/10, and 0.3 is 3/10. Adding the first two gives me (1 + 2)/10 = 3/10, which is 0.3 again. Subtracting 3/10 from that leaves me with zero.

I think I'm pretty confident here. The operations are straightforward, and both methods—decimal addition and fraction conversion—lead to the same result. So, yeah, it looks like the answer should be zero.

The result of 0.1 + 0.2 - 0.3 is:

0

Step-by-Step Explanation:

Add 0.1 and 0.2: 0.1 + 0.2 = 0.3 Subtract 0.3 from the sum: 0.3 - 0.3 = 0 Therefore, the final answer is 0.

Date: 2025-02-17 04:23 am (UTC)
chapai: (Default)
From: [personal profile] chapai
да, хороший пример для чего.

Date: 2025-02-17 03:03 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Если задать тот же вопрос, но по другому основанию (не 10, а например 7 или -7), фразы "visualize in my head" в ответе нет. Ответы тоже правильные и тоже получены двумя разными способами (через десятичное приближение и дробями). И все рассуждения в ответе правильные. Оно даже проверяет, нет ли где переноса.

Вряд ли в обучающей выборке был точно такой же пример.

Date: 2025-02-17 08:57 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Как вы сформулируете запрос к внешнему вычислителю посчитать 0.1+0.2-0.3 по основанию -7? Я вот так навскидку не знаю синтаксис и функции стандартных библиотек в известных мне языках программирования для выполнения вычислений с отрицательным основанием.

Этот пример придуман мной вчера на ровном месте. Я очень удивлюсь, если где-то в обучающей выборке он есть. Если не верите, придумайте самостоятельно оригинальный вопрос и задайте его.

Также обратите внимание на то, что в десятичной базе r1 возвращает точный ответ, а внешний вычислитель на питоне делает это с ошибкой округления.

Date: 2025-02-17 09:23 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

bc не умеет, говорит "Runtime warning (func=(main), adr=6): negative ibase, set to 2".

Округление не исправляет ошибку, а только прячет её. Надо использовать recursive real arithmetic.

Date: 2025-02-17 02:42 am (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
"Гораздо более продуктивным занятием было ты научить ЛЛМы пользоваться калькулятором."

Калькулятор это приложение и его надо сначала запрограммировать, а пользоваться калькулятором, который поставляется с ОС не совсем корректно, только если это система не написана сама ИИ.

Date: 2025-02-17 05:06 am (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
Языки имеют тенденцию к изменениям и то, что сегодня безопасно, завтра оказывается опасно и когда калькулятор вдруг поломается по какой-то неизвестной причине надо будет запустить debugger и произвести troubleshooting. При этом вдруг выяснится, что debugger тоже заглючил и его надо исправлять… такой вот catch 22 понимашь…
rotbar: (Default)
From: [personal profile] rotbar
Вопрос, например, правильный.

Date: 2025-02-17 05:54 am (UTC)
selik: (Default)
From: [personal profile] selik
Проблема как раз в том, что ЛЛМ пытается мыслить логически, а математика нелогична.

Сделать отдельно калькулятор – просто. Но совместить с логическим мышлением не получается.

Почему так. Арифметика существует несколько тысячелетий, но у неё никогда не было логически непротиворечивых правил. Это упущение попытались устранить лет 150 назад и напоролись на теоремы Гёделя о противоречивости и неполноте.

Пример 1. Делить можно на любое число за исключением нуля. Это нарушение закона исключённого третьего. В логике не существует утверждений вида «все без исключения… за исключением…», «любой… кроме…». А ещё есть проблемы с единицей.

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

В общем совместить логику и математику даже у людей не получается. В подавляющем большинстве случаев люди этого не замечают, потому что логикой не владеют. А вот в ЛЛМ проблема проявилась во всей красе.

Date: 2025-02-17 03:23 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

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

Матан не перестал работать после того, как Вейерштрасс придумал одноимённую функцию. Законы Ньютона или Кеплера от этого открытия никак не пострадали. Они и так ломаются на квантовом уровне, а в рамках их применимости фрактальных функций не бывает.

Date: 2025-02-18 04:48 am (UTC)
selik: (Default)
From: [personal profile] selik
Не знаю такого доказательства у Гёделя. Он доказал, что любая сложная формальная система либо противоречива, либо неполна. А вот логика Аристотеля построена на аксиомах. Они по определению истинны, ни от чего не зависят, не доказываются и не ставятся под сомнение.

Я и не говорил, что математика не работает. На матане вся физика держится. Я говорю, что математика нелогична, как и физика. Сила науки проявляется в ее способности предсказывать будущее, а не в том, насколько она логична. Но здесь речь об ЛЛМ. Как ему совместить логику и математику?

Date: 2025-02-18 12:42 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Неполнота в данном контексте именно это и означает.

dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> В простейшем варианте, добавить поспроцессинг к выводу ЛЛМа

Правильнее добавить нейроны, представляющие калькулятор внутрь нейросети, чтобы эти нейтроны активизировались соответствующими текстовыми запросами, и чтобы эти нейроны могли сформировать посчитанный результат и добавить его в ответ.
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> Если эти нейроны получают в качестве входа текст и возвращают текст, то в чем разница от того, что я описал?

Разница в способе обработки информации.
Нейроны - непосредственная часть нейросети, которая работает с уже распарсенной информацией, которую удобно обрабатывать.

Текст - нужно сначала распарсить и создать контекст, и только потом - думать. После чего - снова преобразовать в текст.
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> В нейронном представлении нет чисел как таковых

Число для калькулятора можно представить одним нейроном, специально созданным для этого.
Также и число из калькулятора можно представить нейроном созданным для этого числа.
И сразу же связать эти нейроны друг с другом и остальным контекстом решаемой задачи.

> можно попробовать пропустить последний этап формирования текста и скармливать в парсер арифмометра непосредсвенно embeddings

Embeddings - это не совсем нейросеть. Embeddings - это лишь проекция нейросети на набор в ~1500 нейронов (dimensions).
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
В LLM нейроном совсем необязательно представлять все возможные числа.
Только те числа, которые используются.
Каждый нейрон может быть представлен Int32 ID (up to 4B neurons).

При кодировании числа в нейрон - записывать это число в специальную таблицу NeuronNumber { Id int, Number real}
Ну а когда этот нейрон больше не нужен - удалять из нейросети и удалять из таблицы NeuronNumber.
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> Так тоже не получается, нет ситуаций "нейрон нужен" и "нейрон не нужен".

Как это "нет"?
Если нам нужно что-то посчитать - мы нам нужен новый нейрон с числом и привязкой к калькулятору (через таблицу NeuronNumber).

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

После того, как результат осмыслен, превращён в текстовый ответ и забыт - этот нейрон больше не нужен.
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Где именно "все нейроны используются постоянно и соединения между ними фиксированные"?

Что мешает удалить ненужный нейрон?
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> сеть полагается на наличие и извесное действие всех нейронов

Почему ты считаешь, что количество нейронов в нейросети должно быть фиксированным?
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> Потому что сеть так устроена.

Какие-то нейросети имеют фиксированное количество нейронов.
Нейросеть, которую создавал я - имеет динамическое количество нейронов.

Нейросеть человеческого мозга - имеет динамическое количество нейронов.
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> извлечь этот документ и не сделать по нему еще один проход.

Можно и иногда (когда надо думать внимательнее) - полезно.

> Почему не сделать эту уточняющую фазу автматической?

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

> Но есть новомодное направление "агентов", когда ИИ строится из группы "личностей", которые задают друг другу уточнения и формулируют общий ответ.

Да, это перспективное направление, которое может заменить многие профессии.

June 2025

S M T W T F S
1 2 3 4 567
8 9101112 1314
15 16 1718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 19th, 2025 05:53 am
Powered by Dreamwidth Studios