Эта статья является первой частью серии эссе Веский аргумент против того, чтобы LLM были AGI.

Когда люди утверждают, что LLM не являются AGI, нас часто обвиняют в том, что мы просто антропоморфизируем AGI, чтобы исключить любой современный LLM или метод машинного обучения. Как будто мы делаем ход штанги ворот, а на самом деле другая сторона просто игнорирует науку и использует свою собственную систему отсчета. По этой причине я решил начать серию эссе Жесткий аргумент против того, чтобы LLM были AGI, подробно объяснив, как LLM работают с вычислительной точки зрения, используя основы информатики. Согласно Стэнфордской философской энциклопедии информатика выдвигает теоретические утверждения о том, что невозможно. Основная идея состоит в том, что если какая-либо эмпирическая система способна продемонстрировать, что теории несостоятельны, то нам нужна лучшая теория. Поэтому вместо того, чтобы начать с того, как люди думают (потому что это расплывчатая и все еще развивающаяся научная дисциплина), я начинаю здесь с того, как математическая оптимизация работает с машинами Тьюринга (к которым относятся современные парадигмы машинного обучения).

Я предполагаю, что большинство моих читателей в некоторой степени разбираются в компьютерных науках и уже знают значение Entscheidungsproblem Дэвида Гильберта (проблема решения), как с ней связана неполнота Гёделя, как следует тезис Черча-Тьюринга и как проблема остановки существует для всех алгоритмов и как это связано с задачами NP-Complete. Вам не нужно разбираться в деталях, чтобы следовать моей следующей идее, но достаточно, чтобы вы знали, что ни один алгоритм на транзисторном компьютере не будет вычислительно эффективным, если он нарушает некоторые вычислительные граничные условия для алгоритмов. Информатика — это научное феноменологическое описание того, когда алгоритмы начинают не работать надежно. Следствием такого жесткого ограничения является то, что надежно работающие программы привязаны к этой области сложности.

Хорошая особенность как естественного языка, так и вычислительных алгоритмов заключается в том, что их можно составить из более мелких подзадач, если мы знаем правила композиции. Часто решение вычислительных задач начинается с набора инструкций на естественном языке (псевдокод), который мы затем уточняем до чего-то более эффективного с точки зрения вычислений. Когда нам нужно решить что-то сложное на компьютере, мы должны эффективно запрограммировать алгоритм. Другими словами, мы должны пропустить все лишние шаги Машины Тьюринга. Очень часто такие решения дают такие методы, как Динамическое программирование. Трюк довольно простой, но на самом деле это самое эффективное, что вы можете сделать во многих ситуациях.

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

Поскольку вычислительные алгоритмы детерминированы, гарантируется, что если мы запустим одну и ту же функцию с теми же параметрами, мы получим тот же результат. Некоторые из вас могут задаться вопросом, а как насчет объектно-ориентированных методов? Когда мы рассматриваем вычислительные алгоритмы, теория, конечно, предшествует объектно-ориентированному программированию и подобным методам моделирования с отслеживанием состояния. Однако мы можем рассматривать инкапсулированные объектом свойства как параметры и делать то же самое. Здесь нет проблем. В любом случае это то, что компиляторы делают с объектами объектно-ориентированных программ.

Объяснение трансформаторов с помощью динамического программирования

Если бы я рассказал вам краткую историю LLM, это выглядело бы примерно так:

  1. Правило дельта-обучения обнаружено как способ обучения нейронных сетей.
  2. Персептроны не дают интересных результатов, потому что их ошибка измеряется между 0 и 1; мы эффективно ограничены областью линейной регрессии (помимо, конечно, очевидных проблем с размером наборов данных и вычислительной мощностью в те дни).
  3. Сигмовидная функция активации разрешает непрерывные ошибки; мы ограничены областью нелинейной регрессии.
  4. Сети прямого распространения включают скрытые слои, которые позволяют нам аппроксимировать практически любую функцию с помощью нейронных сетей.
  5. Алгоритм обратного распространения позволяет нам эффективно применять правило дельта-обучения к каждому скрытому слою.
  6. Сети Рекуррентные нейронные сети и Долговременная кратковременная память позволяют использовать обратное распространение ошибки рекурсивным образом. Это позволяет нам учиться, используя очень длинные n-граммы (по крайней мере, теоретически).
  7. Трансформеры вводят динамическое программирование, подобное механизму внимания, и, таким образом, мы можем использовать систему, подобную нечеткой таблице поиска, которая запоминает полезные скип-граммы вместо n-грамм.

Если вам нужно более подробное введение в ранние нейронные сети, вам может понравиться прочитать эту статью. Если вы хотите прочитать действительно хорошо написанную статью профессора Марка Ридла, объясняющую трансформеры и ChatGPT, вам может понравиться прочитать эту статью.

Итак, основная идея здесь заключается в том, что преобразователи для сетей RNN-LSTM такие же, как динамическое программирование для рекурсивных функций. На практике это означает, что Трансформеры являются последним рубежом с нейронными сетями с машинами Тьюринга, потому что они используют самый сложный из известных методов математической оптимизации.

В то время как в динамическом программировании мы храним пары ключ-значение, где ключ содержит все входные параметры функции, в сетях Transformer мы храним память Query-Key в сети, которая создает правильные веса для обнаружения значения из закодированных вложений сети. Поэтому, когда мы прогнозируем следующие токены, мы используем «вход» в качестве запроса, а затем токены в прогнозе будут содержать ключи и значения. В то время как в реальных сетях Transformer положение токенов может быть любым, здесь я упрощу идею пересылки только для примера: если в каком-то определенном месте после Query Xn существует Key Xn+m, то Value, вероятно, существует в Xn+m +o позиция. Во всяком случае, вы поняли идею. Фактическая математика выглядит так:

Теперь вы знаете, как работают трансформеры и как работает динамическое программирование. У LLM есть случайные начальные значения, чтобы произвести некоторое разнообразие на выходе. Важным выводом из этого раздела для следующих разделов является то, что этот кортеж входных параметров динамического программирования является своего рода отпечатком пальца алгоритма, и после предварительной подготовки модели Transformer он замораживается и ведет себя так же, как любая другая компьютерная программа с детерминированными парами ввода-вывода. . Другими словами, Few-Shot Learning не занимается «промежуточным» обучением, а использует LLM только для автозаполнения текста за вас.