Занимаясь созданием систем искусственного интеллекта, не перестаешь удивляться, из каких порой «костылей» состоят настоящие чудеса прогресса. Например, знаете ли вы, что даже самые современные нейросети фундаментально не умеют перемножать два числа? Они не считают в привычном нам смысле, а скорее запоминают и аппроксимируют ответы.

Как так вышло, что ИИ пишет код и сочиняет стихи, но буксует на таблице умножения? Давайте разбираться.

Фундаментальная проблема: сложение вместо умножения

Самым распространенным видом искусственного интеллекта сегодня являются нейронные сети. Любую нейронную сеть можно описать схематично:

Входы → Магия (слои нейронной сети) → Выходы

Заявляется, что нейросети — универсальные аппроксиматоры, т.е. способны вычислить ответ для любой задачи. Хорошо, пусть нам надо вычислить стоимость товара, зная цену и количество. Что необходимо сделать? Правильно, умножить цену на количество.

Казалось бы, простейшая задача: два входа (цена и количество) и один выход (стоимость). Нейронная сеть должна справиться. Да? Но если взглянуть на архитектуру базового нейрона (персептрона), мы заметим проблему. Внутри сети входные значения складываются, а не перемножаются.

Простейшая (но не работающая) нейронная сеть для вычисления стоимости товара по его цене и количеству
Простейшая (но не работающая) нейронная сеть для вычисления стоимости товара по его цене и количеству

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

Увеличение количества скрытых слоев не приводит к умножению входов
Увеличение количества скрытых слоев не приводит к умножению входов

Сеть может «угадать» правильный ответ за счёт глубины и количества нейронов, запомнив паттерны, но математической операции умножения x1​⋅x2​ внутри классического персептрона не происходит.

Что происходит внутри нейрона? (Для любопытных)

Давайте заглянем внутрь «чёрного ящика». Ниже я подробно расписал, что происходит с сигналами при прохождении через слои.

Осторожно, много формул!

Что происходит внутри нейрона?

В нейроне h1(1)​ происходит сложение Цены и Количества. Повторюсь – именно сложение. Правда, перед этим цена была увеличена (или уменьшена) в некое число раз (на схеме это число обозначено значком w11(1)​), а количество было отмасштабировано в w12(1)​ раз.

Первый скрытый слой:

h1(1)=x1⋅w11(1)+x2⋅w12(1)

h2(1)​=x1​⋅w21(1)​+x2​⋅w22(1)​

Верхний индекс в скобках это номер скрытого слоя. Веса отмечаются цифрами «куда» «откуда», т.е. w12(1) это вес, который идет к нейрону 1 на следующем слое от нейрона 2 на текущем слое.

Переходя ко второму слою:

h1(2)​=h1(1)​⋅w11(2)​+h2(1)​⋅w12(2)

Если подставим значения из первого слоя, то получим:

h1(2)​=(x1​⋅w11(1)​+x2​⋅w12(1)​)⋅w11(2)​ +

  +(x1​⋅w21(1)​+x2​⋅w22(1)​)⋅w12(2)​

Приведем подобные слагаемые:

h1(2)​=x1​⋅(w11(1)​⋅w11(2)​+w21(1)​⋅w12(2)​)+

    +x2​⋅(w12(1)​⋅w11(2)​+w22(1)​⋅w12(2)​)

Вывод: Перемещаясь вглубь слоёв и к выходу, мы по-прежнему видим сумму взвешенных входов (x1​и x2). Веса перемножаются между собой, складываются в сложные комбинации, но Цена и Количество так и остаются разделёнными знаком «плюс». Они никогда не встречаются в виде произведения. Добавление слоёв и нейронов не помогают.

Математическая хитрость: как получить умножение через сложение

Так что нам делать, если нейронная сеть не умеет умножать? Конечно, можно вручную подать на вход уже перемноженные значения. Но это «инженерный костыль»: в реальной задаче много входов и мы заранее не знаем, какие комбинации понадобятся.

Правда такими «костылями» пользуются многие, по сути подгоняя ответ под известное решение. Например, создатели Tensorflow в своей демонстрации https://playground.tensorflow.org/ не просто так добавили вход x1*x2.

Демонстрация работы библиотеки Tensorflow
Демонстрация работы библиотеки Tensorflow

Кстати, а почему на скриншоте выше вместо (или кроме) умножения еще предлагается использовать возведение в квадрат? Дело в том, что зная квадраты входов, нейронная сеть сможет сымитировать умножение, используя известную школьную формулу:

(x + y)2 = x2 + 2xy + y2

Отсюда выражаем произведение:

x⋅y = 1/2 * ( (x+y)2 −x2 −y2 )

Таким образом, умножение сводится к комбинации трех операций: сложение, вычитание и возведение в квадрат. Вот как выглядело бы перемножение входов, если в качестве функции активации использовать возведение в квадрат.

Использование гипотетической функции активации «возведение в квадрат» для имитации умножения
Использование гипотетической функции активации «возведение в квадрат» для имитации умножения

Отлично? Нет. Проблема в том, что такую функцию активации как возведение в квадрат никто не использует, а классические функции активации (ReLU, Sigmoid, Tanh и т.д.) даже близко не похожи на функцию f(z) = z2.

Революция Трансформеров и скрытая сила GLU

Перенесемся к Трансформеру — современной архитектуре нейронных сетей, благодаря которой произошла настоящая революция искусственного интеллекта. Именно на Трансформерах работают чаты GPT и другие современные модели.

Долгое время считалось, что и они лишь «угадывают» математику, но на самом деле они могут умножать (если конечно захотят).

Все слышали про статью Google под названием Attetion is All You Need, вышедшую в 2017 году. Да, это действительно революция. Но эта революция НЕ привела к появлению чатов GPT (в конце 2022 года).

Для создания чата GPT потребовалась еще одна мини-революция, произошедшая в 2020 году. Многие пропустили её, сосредоточившись только на механизме внимания (Attention).

Так что же нового произошло в 2020 году? Речь идёт про статью Ноема Шазира (Noam Shazeer) «GLU Variants Improve Transformer» (https://arxiv.org/pdf/2002.05202). В ней впервые предложено заменить стандартные функции активации (такие как ReLU) на так называемые вентили (Gates): ReGLU, GEGLU, SwiGLU.

В указанной статье всего 4 страницы. Но обратите внимание на эту таблицу:

Скриншот из статьи «GLU Variants Improve Transformers»
Скриншот из статьи «GLU Variants Improve Transformers»

Как говорится, вызовем пояснительную бригаду. Верхняя строчка – это использовавшаяся ранее в Трансформерах функция активации ReLU. Да да, если вы её до сих пор используете в 2026 году, то вы проспали последние лет 6. В трех последних строчках использованы современные вентили (gates) ReGLU, SwiGLU, GEGLU. Цифры справа – это по сути оценки ошибок сети, т.е. чем ниже цифра, тем качество сети лучше. Видно, что все варианты вентилей (GLU), работают лучше, чем ReLU.

В статье жирным шрифтом выделены два наилучших вентиля это GEGLU и SwiGLU, именно они используются в полносвязной части всех современных трансформеров. При этом предпочтение отдается SwiGLU, т.к. она вычислительно работает быстрее, чем GEGLU.

В чем суть вентилей вместо функций активации?

Смысл механизма GLU (Gated Linear Unit) в том, что входной сигнал не просто проходит через функцию активации. Он «размножается», проходит двумя разными путями через линейные проекции и «обычные» функции активации, а затем эти пути перемножаются друг с другом.

Схематичное отображение вентиля активации SwiGLU
Схематичное отображение вентиля активации SwiGLU

Формула для SwiGLU выглядит так:

SwiGLU(x)=Swish(x⋅W+b)⋅(x⋅V+c)

Здесь происходит поэлементное умножение результатов двух линейных преобразований. Это дает сети возможность моделировать квадратичные зависимости (возведение в квадрат) и, следовательно, при необходимости имитировать умножение входов. Именно благодаря архитектуре SwiGLU современные модели стали значительно «умнее» и лучше сходятся при обучении.

Это «побочное» открытие осталось мало замеченным широкой публикой, но именно оно позволило трансформерам выйти на новый уровень понимания зависимостей в данных. Это новшество позволяет ввести в нейронные сети понятие умножения, пусть и очень странным способом, настолько странным, что нейронная сеть не всегда его находит при обучении (не выбирает нужные параметры для W, b, V и c).

Реальность: калькулятор в кармане ИИ

Означает ли это, что теперь ChatGPT идеально считает? Не совсем. Несмотря на способность архитектуры моделировать умножение, точность все еще страдает. Нейросеть, особенно генеративная большая языковая модель — это вероятностная, размышляющая, модель. Для неё «2 + 2 = 4» — это как наиболее вероятный токен, но не строгий логический вывод.

Поэтому, когда вы просите современный чат-бот решить сложный пример, он часто поступает как человек: не считает в уме, а берет калькулятор. Точнее говоря, внешний инструмент, выполняющий код на языке Python в отдельной песочнице. Если программа скомпилируется, то нейросеть узнает точный результат. Это долго и требует дополнительных ресурсов и вообще говоря не всегда работает.

Будущее: ИИ как компьютер

Куда мы движемся дальше? В последнее время появились эксперименты по интеграции исполняемых сред прямо в архитектуру модели Трансформера (например, через WebAssembly). Идея в том, чтобы нейросеть могла не просто эмулировать вычисления, а делегировать их нативному коду внутри своего контекста выполнения. Т.е. делать это «родным» образом, а не на дополнительном компьютере. Кто не боится английского языка и вообще не боится трудностей, добро пожаловать в подробности.

Ссылка для смелых

https://www.percepta.ai/blog/can-llms-be-computers

За «наводку» на статью спасибо телеграмм каналу: https://t.me/Futuris/4101

Выводы

Если вы создаёте чат GPT, опираясь на старинные книжки, в которых написано ReLU, поищите более качественную книгу, где используются вентили.

Если вы обучаете ML модель, а она принципиально не хочет «учиться», попробуйте использовать вентили, вместо функций активации.

Подписывайтесь на канал https://t.me/nova_cortex, закрытое сообщество ИИ экспертов из Республики Беларусь. Там мы будем делиться другими тайнами.

Комментарии (10)


  1. Kamil_GR
    05.04.2026 12:57

    https://habr.com/ru/articles/1001244/ линейная алгебра в нейросети


  1. Rezzet
    05.04.2026 12:57

    Кстати хороший вопрос, почему самый бы не использовать самый лучший способ умножения - это дать модели встроенный или внешний MCP?

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


    1. AnonimYYYs
      05.04.2026 12:57

      Если внутри нейронки будет исполняемый код, то производительность улетит на альфу-центавра. Сейчас то с обычной линейной алгеброй нужны целые датацентры чтобы обучить новую болталку10.89.в8, а когда там вместо простых сигмоид дадут "случайный исполняемый код"....


      1. Dmitry_Barovik Автор
        05.04.2026 12:57

        Крутой коммент! В статье с webassembly есть анимации. Исполняемый код внутри нейронки выполняется со скоростью 30 тысяч токенов в секунду. Это прям быыыыстрооо.


      1. Rezzet
        05.04.2026 12:57

        Эти "новые болталки" пишут код лучше человека и анализируют на несколько порядков быстрее. Исполняемый код нужен не для того что бы нейронка "думала", он нужен для того что бы она умела "получать результат" того о чем она подумала. Если на пальцах, вам задают вопрос о умножение чисел, вы помните только таблицу умножения от 1 до 10, че вы делаете? Можете предсказать результат, ну типа примерно "несколько тысяч", так же может плюс минус и нейронка, но если вам надо посчитать точно, вы берете ручку и бумажку и начинаете исполнять алгоритм умножения в столбик и получаете точный результат. Вот ровно это хотят дать нейронке. Сейчас это можно сделать через тот же MCP, но не факт что нейронка им решит воспользоваться, MCP должен быть настроен и прочее, а так это будут внутренние MCP серверы о которых нейронка всегда знает и они всегда под рукой. Некоторые нейронки уже работают похожим образом, та же Kimi, когда от нее чето просят что она не сильно знает - она берет пишет код на питоне, исполняет его и дает результат.


  1. Real_Egor
    05.04.2026 12:57

    хочется спросить... А есть человека попросить умножить 37 на 121, как он поступит? Разложит на составляющие 37*100 + 37*10*2 + 37*1 и сложит. Не так ли действует ИИ? Раскладывает на "знакомые паттерны" и "сложение".

    просто нейросеть (что в голове человека, что в весах ЛЛМ) не умеет выполнять операцию умножения, зато отлично умеет выполнять операцию сложения (хотя и тоже не так отлично, как хотелось бы, особенно с длинными числами. ЛЛМ разбивает на "чанки" и путается. Человек делает хорошо только контролируя каждый разряд отдельно - воспроизводя сложение в столбик в своей оперативке)

    так что тут удивительного то в итоге?


    1. Dmitry_Barovik Автор
      05.04.2026 12:57

      Отличный вопрос. Заставляет задуматься... В случае 37 * 121 - сети надо было посчитать один раз умножение (что она не очень умеет делать). Если сеть пойдет по "человеческому пути", то ей же придется три раза умножать (37 * 100, и еще потом 37*10*2). Умножить на 100 и на 10 легко, это верно, но вот на 2 в данном случае - уже не очевидно.


      1. Real_Egor
        05.04.2026 12:57

        сложение двуз 37*10 =) изи


  1. runaway
    05.04.2026 12:57

    Хочется спросить: а как умножать не через сложение и не через заученную таблицу?

    Скажем, 4*8?

    Только не говорите, что это 32, это в таблице умножения написано. А вот сделайте прям расчёт, и без сложения. Задача со звёздочкой, так-то.


  1. DaneSoul
    05.04.2026 12:57

    ИМХО, попытка запихнуть все в саму нейросеть тупиковая.
    Нейросеть должна распознавать задачу и активно использовать дополнительные источники.
    Если требуется математика - задействовать отдельный математический софт, который существует уже десятилетия и работает четко и предсказуемо. Если в задаче запрос каких-то конкретных справочных знаний - запросить эти данные из встроенной базы знаний.