Заблуждение номер один: «внутренний калькулятор»
Спросите у ChatGPT: «Сколько будет 12345 + 67890?» Скорее всего, он ответит правильно. Создается впечатление, что модель умеет считать. Это иллюзия. Лингвистическая модель не вычисляет сумму. Она предсказывает последовательность символов, которые чаще всего следовали за подобными последовательностями в ее обучающих данных.
Главная ошибка – антропоморфизация. Мы приписываем ИИ человеческие когнитивные процессы: понимание, мышление, вычисление. На самом деле работает статистика на стероидах.
Механизм прост до безобразия. Модель видит токены «12345», «+», «67890», «=». Ее задача – предсказать следующий токен. В обучающем корпусе (интернет, книги, код) миллионы примеров сложения. Модель выучила статистическую корреляцию: после такой последовательности чаще всего идет «80235». Не потому что она посчитала, а потому что это самый вероятный следующий кусок текста.
Токенизация чисел: где ломается логика
Ключевой момент – токенизация. Современные модели (GPT, Claude, Llama) разбивают текст на токены. Это не символы и не слова. Для модели число «12345» – это один или несколько токенов, в зависимости от токенайзера.
# Пример токенизации через tiktoken (OpenAI)
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
print(enc.encode("12345")) # [9906, 123] - два токена!
print(enc.encode("123")) # [123] - один токен
print(enc.encode("456")) # [456] - один токен
Видите проблему? Числа «123» и «456» – отдельные токены с собственными ID. Модель не видит в них цифры. Она видит абстрактные идентификаторы. Связь между «123» (ID 123) и «124» (ID 124) для модели такая же случайная, как между словами «кот» и «собака». Никакой числовой последовательности.
1 Паттерны вместо алгоритмов
Вот эксперимент. Дайте модели задачу: «Если 2x + 5 = 15, то чему равен x?» Она ответит 5. Кажется, что она решила уравнение. На самом деле она распознала шаблон. В обучающих данных тысячи подобных школьных задач с ответами. Модель просто выдает наиболее вероятный ответ для этого шаблона.
Поменяйте числа на нестандартные: «Если 7x + 13 = 97, то чему равен x?» Точность падает. Модель начинает гадать. Потому что такой конкретный пример реже встречался в данных.
Почему они иногда правы? Слепая статистика
Успех в простой арифметике – побочный эффект масштаба. Обучающий корпус GPT-4 содержит триллионы токенов. Там есть практически все возможные комбинации небольших чисел. Модель запоминает ответы, а не учится считать.
| Задача | Точность GPT-4 | Причина |
|---|---|---|
| 7 + 5 | ~100% | Элементарный паттерн, миллионы примеров |
| 123 * 456 | ~70% | Реже встречается, модель аппроксимирует |
| √2 с точностью до 10 знаков | ~95% | Константа, ее значение есть в датасете |
| Простое число после 10^15 | ~0% | Нет в данных, вычислять не умеет |
Когда модель ошибается в 123*456, она не «считает неправильно». Она выбирает токен, который статистически менее вероятен, чем правильный ответ. Это как автозаполнение в телефоне: иногда оно предлагает странные слова, потому что редко встречало такой контекст.
2 Сложение больших чисел: игра в угадайку
Попробуйте сложить два 20-значных числа. Шансы на успех близки к нулю. Почему?
# Псевдокод работы модели при сложении
input_tokens = ["12345678901234567890", "+", "98765432109876543210"]
# Модель НЕ:
# 1. Конвертирует в числа
# 2. Складывает
# 3. Конвертирует обратно в строку
# Модель ДЕЛАЕТ:
# 1. Ищет в своих весах паттерны для этих токенов
# 2. Вычисляет вероятности для каждого следующего токена
# 3. Выбирает наиболее вероятную последовательность цифр
# 4. Это может быть 111111111111111111100 (неправильно)
У модели нет представления о числовой линии, разрядах, переносе единицы. Есть только статистика: какие цифры чаще следовали за подобными длинными последовательностями в Википедии и на форумах.
Chain-of-Thought: обманка, которая работает
Техника «рассуждения шаг за шагом» (Chain-of-Thought) улучшает математические способности. Но это не мышление. Это принудительное развертывание паттерна.
Когда модель пишет «Давайте посмотрим... 123 + 456 = 579», она не вычисляет. Она генерирует текст, который выглядит как вычисление. Разница фундаментальна.
Почему это помогает? Потому что разбивает сложный паттерн (сложение больших чисел) на простые (сложение по разрядам). Каждый шаг – более частый паттерн в данных. Складывать 3+6 модель видела чаще, чем 123+456.
- Шаг 1: «123 + 456» → токенизация
- Шаг 2: «Сначала сложим единицы: 3+6=9» → частый паттерн
- Шаг 3: «Десятки: 2+5=7» → еще один частый паттерн
- Шаг 4: «Сотни: 1+4=5» → третий частый паттерн
- Шаг 5: «Итого: 579» → сборка из предсказанных частей
Модель все еще не понимает арифметику. Она генерирует правдоподобный текст решения. Иногда ошибается в простейших шагах (3+6=8), потому что контекст сбивает с толку.
Последствия для разработчиков
Если вы строите систему, которая должна выполнять вычисления, никогда не полагайтесь на LLM как на калькулятор. Математические движки – отдельный слой.
Пример плохого подхода:
# НЕ ДЕЛАЙТЕ ТАК
response = llm.generate("Посчитай общую стоимость: 17 товаров по 245 рублей каждый")
total_cost = float(response) # Опасно!
Правильный подход:
# ДЕЛАЙТЕ ТАК
# 1. LLM извлекает числа из текста
numbers = extract_numbers("17 товаров по 245 рублей")
# 2. Математический движок вычисляет
from decimal import Decimal
total = Decimal(numbers["count"]) * Decimal(numbers["price"])
# 3. LLM форматирует ответ
response = llm.generate(f"Общая стоимость: {total} рублей")
Это разделение ответственности: LLM для языка, специализированные системы для вычислений. Подробнее о гибридных подходах читайте в статье про KEF и OpenAI o3.
Когда размер не помогает
Казалось бы, чем больше модель, тем лучше она должна считать. Но модели на триллионы параметров не решают фундаментальную проблему. Они лучше запоминают паттерны, но не обретают способность к вычислениям.
Предел запоминания: даже если модель запомнит все комбинации чисел до 10 цифр, что делать с 11 цифрами? С иррациональными числами? С динамическими вычислениями?
Что впереди: мир без вычислений?
Текущие LLM никогда не станут надежными математиками. Это не их предназначение. Будущее за гибридными системами, где языковая модель – интерфейс, а вычисления выполняют специализированные модули.
World Models – следующий шаг. Модели, которые понимают не только текст, но и правила физического мира. Они смогут симулировать последствия действий, а не предсказывать слова.
Пока же запомните: когда ИИ «решает» математическую задачу, он играет в угадайку с триллионами подсказок из прошлого опыта. Иногда угадывает. Часто ошибается. И никогда не понимает, что делает.
FAQ: частые вопросы без прикрас
Почему GPT-4 проходит тесты по математике?
Потому что тесты состоят из стандартных задач. Модель видела их варианты в обучающих данных. Это не интеллект, это распознавание паттернов.
Можно ли научить LLM считать?
Нет. Архитектура трансформеров фундаментально не подходит для вычислений. Можно улучшить запоминание паттернов, но не более. Нужна другая архитектура.
Почему Code Llama лучше считает?
Потому что в коде много математических выражений. Модель видит больше примеров вычислений. Но механизм тот же – предсказание следующего токена, не вычисление.
Есть ли исключения?
Да. Нейросети, специально обученные на математических задачах с пошаговыми решениями, могут лучше имитировать рассуждения. Но это все еще имитация. Как попугай, повторяющий сложные фразы без понимания.
Если ваша задача требует точных вычислений – используйте калькулятор, а не ChatGPT. Это сэкономит нервы и предотвратит ошибки. LLM для текста, Python для математики. Не смешивайте.