- BrainTools - https://www.braintools.ru -

На шаг ближе к Скайнету: научились ли нейросети умножать?

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

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

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

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

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

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

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

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

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

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

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

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

Сеть может «угадать» правильный ответ за счёт глубины и количества нейронов, запомнив паттерны, но математической операции умножения 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/ [3] не просто так добавили вход 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 и другие современные модели.

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

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

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

Так что же нового произошло в 2020 году? Речь идёт про статью Ноема Шазира (Noam Shazeer) «GLU Variants Improve Transformer» (https://arxiv.org/pdf/2002.05202 [6]). В ней впервые предложено заменить стандартные функции активации (такие как 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 современные модели стали значительно «умнее» и лучше сходятся при обучении [7].

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

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

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

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

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

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

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

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

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

Выводы

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

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

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

Автор: Dmitry_Barovik

Источник [11]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/28294

URLs in this post:

[1] интеллекта: http://www.braintools.ru/article/7605

[2] нейрона: http://www.braintools.ru/article/6020

[3] https://playground.tensorflow.org/: https://playground.tensorflow.org/

[4] математику: http://www.braintools.ru/article/7620

[5] внимания: http://www.braintools.ru/article/7595

[6] https://arxiv.org/pdf/2002.05202: https://arxiv.org/pdf/2002.05202

[7] обучении: http://www.braintools.ru/article/5125

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

[9] https://t.me/Futuris/4101: https://t.me/Futuris/4101

[10] https://t.me/nova_cortex: https://t.me/nova_cortex

[11] Источник: https://habr.com/ru/articles/1019500/?utm_campaign=1019500&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100