Нейросеть — плохой калькулятор, и это не баг
Коллега прислал скриншот: попросил модель перемножить два шестизначных числа, та выдала ответ мгновенно, уверенно и с ошибкой аккурат в середине числа — первые и последние цифры правильные, серединка выдуманная. Подпись под скриншотом была короткая: «И вот этому мы доверяем юнит-экономику?» Вопрос риторический, но он вскрывает недопонимание, которое я встречаю постоянно, в том числе у технарей: от языковой модели ждут поведения калькулятора, а потом обижаются. Давайте разберём, почему арифметика для LLM — противоестественное занятие, почему она при этом «иногда работает» и что индустрия с этим делает. Спойлер: делает, и довольно успешно, просто не там, где кажется.
Начать придётся с банальности, которую все знают и мало кто продумывает до конца: языковая модель предсказывает следующий токен, а не исполняет алгоритм. Умножение в столбик — это процедура: разряды, переносы, промежуточные суммы, строгий порядок операций. Процессор её исполняет, школьник исполняет, а трансформер за один проход — нет: он порождает текст, похожий на правильный ответ, опираясь на статистику виденных примеров. Для коротких чисел этой статистики навалом — таблица умножения и мелкая арифметика встречаются в обучающих данных миллионы раз, поэтому «7 × 8» модель выдаёт безошибочно. Но это работа памяти, а не вычислителя: примерно как вы отвечаете «пятьдесят шесть», не перемножая ничего в голове. С ростом разрядности похожие примеры из данных заканчиваются, и модель начинает делать то, что умеет, — правдоподобно продолжать. Отсюда фирменный почерк ошибок: верные крайние цифры (их проще выучить как паттерн) и каша в середине, где нужно честно тащить переносы.
Источник: https://habr.com/ru/articles/1056936/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1056936