Ранее в этом году Мэтт Уэлш объявил, что программирование подходит к концу. Он написал в ACM Communications:
Я считаю, что традиционная идея «написания программ» умирает, на самом деле, для всех, кроме очень специализированных приложений, в том виде, в котором мы его знаем, большая часть программного обеспечения будет заменена обученными системами искусственного интеллекта. В некоторых случаях, когда нужны только «простые» программы (ведь не все требует моделей сотен миллиардов параметров, работающих на GPU-кластерах), сами программы будут генерироваться непосредственно ИИ, а не закодированы вручную.
Несколько недель спустя, в своей речи, Уэйлс расширил свои наблюдения за смертью. Уходит в могилу не только искусство программирования, но и информатика в целом. Вся информатика «обречена». (На рисунке ниже показан скриншот выступления.) )
Передатели этих печальных посланий, по-видимому, не охвачены горем. Несмотря на то, что Уэлш стал преподавателем и практиком информатики (в Гарварде, Google, Apple и других университетах), он, похоже, хочет перейти к следующему шагу. "В любом случае, написание кода - отстой!" — заявил он.
Я не столь оптимистичен в отношении будущего постпрограммирования. Во-первых, я скептически отношусь к этому. Я не думаю, что мы перешагнули порог для того, чтобы машины научились самостоятельно решать интересные вычислительные задачи. Я не думаю, что мы еще близки к этому, или мы движемся в правильном направлении. Более того, если окажется, что моя точка зрения неверна, я побуждаю не смириться, а сопротивляться. С одной стороны, я не приветствую нашего нового повелителя ИИ. Даже если они окажутся лучшими программистами, чем я, я все равно продолжу использовать свой редактор кода и компилятор, спасибо. «Программирование — отстой?» Для меня это уже давно стало источником радости и вдохновения. Я также считаю его ценным инструментом для понимания мира. Я никогда не уверен, что понимаю это, пока не смогу свести идею к коду. Чтобы извлечь пользу из этого опыта, мне пришлось написать программу, а не просто произнести несколько волшебных слов и вызвать джинна из лампы искусственного интеллекта Аладдина.
Большая языковая модель
Идея о том, что программируемые машины могут писать свои собственные программы, глубоко укоренилась в истории вычислительной техники. Чарльз Бэббидж намекнул на такую возможность еще в 1836 году, обсуждая свой план аналитической машины. Когда Фортран был представлен в 1957 году, его официальное название было «Автоматическая система кодирования FORTRAN». Его заявленная цель состоит в том, чтобы компьютеры «кодировали проблемы для себя и создавали программы, которые были бы так же хороши (но без ошибок), как и программисты-люди».
Фортран не избавляет от трюков (или ошибок) программирования, но делает процесс менее утомительным. Более поздние языки и другие инструменты принесли дальнейшие улучшения. И мечта о полностью автоматизированном программировании никогда не была разрушена. Машины, по-видимому, лучше приспособлены к программированию, чем большинство других. Компьютеры методичны, привязаны к правилам, привередливы и буквальны — все эти черты (правильные или неправильные) ассоциируются с опытными программистами.
По иронии судьбы, системы искусственного интеллекта, готовые к решению задач программирования, странным образом не похожи на компьютеры. Их личности больше похожи на Дианну Трой, чем на коммандера Дейту. Логическая последовательность, причинно-следственные рассуждения и тщательное внимание к деталям не являются их сильными сторонами. У них бывают невероятно блестящие моменты, когда кажется, что они обдумывают глубокие мысли, но у них также есть потенциал для поразительных неудач — вопиющих, наглых ошибок разума. Они напоминают мне старую шутку: люди совершают ошибки, и для того, чтобы что-то испортить, нужен компьютер.
Новейшая система искусственного интеллекта называется Big Language Model (LLM). Как и большинство других недавних изобретений ИИ, они построены на искусственных нейронных сетях, многослойной структуре, вдохновленной структурой мозга. Узлы сети похожи на биологические нейроны, а связи между узлами действуют как синапсы, которые являются точками соединения, где сигналы передаются от одного нейрона к другому. Тренировочная сеть может регулировать прочность или вес соединения. В языковой модели обучение осуществляется путем принудительного ввода большого количества текста в сеть. Когда процесс завершен, весовые коэффициенты соединения кодируют подробную статистику по лингвистическим особенностям обучающего текста. В самой большой модели количество весов составляет 100 миллиардов и более.
В этом случае термин «модель» может ввести в заблуждение. Этот термин не относится к масштабным моделям или миниатюрным моделям, таким как модели самолетов. Вместо этого он относится к прогностическим моделям, таким как математические модели, обычно встречающиеся в науке. Точно так же, как атмосферные модели предсказывают завтрашнюю погоду, языковые модели предсказывают следующее слово в предложении.
Самой известной масштабной языковой моделью является ChatGPT, которая была выпущена для публики осенью прошлого года и привлекла большое внимание. Аббревиатура GPT Gee Pee Tee: Мой язык постоянно спотыкается об эти три рифмующихся слога. Другие продукты с искусственным интеллектом имеют милые имена, такие как Барт, Клод, Лама; Жаль, что я не могу переименовать GPT в том же духе. Я бы назвал его Джеппетто, и он перекликается с узором согласных. Аббревиатура GPT расшифровывается как Generative Pre-Trained Transformer (генеративный предварительно обученный трансформатор); Чат-версия системы оснащена разговорным HMI. ChatGPT был разработан компанией OpenAI, которая была основана в 2015 году, чтобы освободить ИИ из-под контроля нескольких богатых технологических компаний. OpenAI успешно выполнила эту миссию до такой степени, что стала богатой технологической компанией.
ChatGPT вызывает восхищение и шокирует своей формулировкой, умением хорошо говорить, беглым владением английским и другими языками. Чат-бот может подражать известным авторам, рассказывать анекдоты, писать любовные письма, переводить стихи, рассылать спам, «помогать» студентам с домашними заданиями и придумывать дезинформацию для политической дезинформации. Хорошо это или плохо, но эти языковые способности представляют собой удивительные технологические достижения. Компьютеры, которые когда-то изо всех сил пытались построить понятное предложение, внезапно стали мастерами слов. То, что говорит GPT, может быть правдой, а может и нет, но это почти всегда хорошо сформулировано.
Вскоре после того, как ChatGPT был выпущен, я был удивлен, обнаружив, что его владение языком распространяется и на языки программирования. Обучающий набор модели, по-видимому, включает в себя не только несколько естественных языков, но и большой объем исходного кода программ из общедоступных репозиториев, таких как GitHub. На основе этого ресурса GPT умеет писать новые программы на основе команд. Меня это удивило, потому что компьютеры очень придирчивы и неумолимы к вводу данных. Несмотря на то, что компьютеры иногда допускают небольшие ошибки, такие как орфографические ошибки, читатели с трудом понимают предложение. Но если компьютер получит ввод даже с одной запятой или несовпадающей скобкой, его выдаст искаженная рвота. Языковые модели с потенциально статистическими или вероятностными свойствами вряд ли смогут поддерживать требуемую точность за пределами нескольких строк.
Я снова ошибся в этом вопросе. Ключевое новшество в больших языковых моделях — механизм внимания — решает эту проблему. Когда я сам начал экспериментировать с ChatGPT, я быстро обнаружил, что он действительно может генерировать программы без небрежных грамматических ошибок.
Но за этим последовали и другие проблемы.
Восхождение по лестнице слов
Когда вы садитесь поболтать с машиной, вы сразу сталкиваетесь с неудобным вопросом: «О чем нам говорить?». Я ищу тему, которая справедливо измеряет возможности программирования ChatGPT. Мне нужна задача, которую можно решить вычислительными средствами, но для этого не требуется много арифметики, которая считается одной из слабых сторон больших языковых моделей. Я выбрал анаграмму, изобретенную Льюисом Кэрроллом 150 лет назад и глубоко проанализированную Дональдом Кнутом в 90-х годах 20 века.
В приведенной ниже стенограмме каждый обмен с моей стороны помечен как BR; Розетка — это логотип OpenAI, который указывает на ответ ChatGPT.
Когда я увидел, как эти предложения разворачиваются на экране — чат-бот печатает их слово в слово, немного беспорядочно, как будто останавливаясь, чтобы разобраться в моих мыслях, — я сразу же был поражен знанием английского языка системой. GPT перечисляет все основные черты словесной лестницы в простой, мощной прозе: это игра или головоломка, где вы переходите от слова к слову, меняя одну букву за раз, каждая ступенька лестницы должна быть английским словом, и цель состоит в том, чтобы найти кратчайшую возможную последовательность от начального слова до целевого слова. Я сам не могу объяснить это лучше. Наиболее полезным является рабочий пример COLD-> WARM.
Не только отдельные предложения создают впечатление о языковых способностях. Предложения организованы в абзацы, которые нанизываются друг на друга, образуя связный дискурс. Это здорово!
Также примечательна способность робота обрабатывать нечеткие и небрежные данные. Мой первоначальный запрос был сформулирован как вопрос «да» или «нет», но ChatGPT правильно интерпретировал его как просьбу: «Расскажите мне, что вы знаете о слове лестница». Моя вторая инструкция игнорирует любые типографские признаки, указывающие на то, что СВИНЕЦ и ЗОЛОТО следует понимать как слова, а не как металл. Чат-бот должен был предоставить мне рецепты алхимии, но он предоставил недостающие цитаты.
Однако, отбросив в сторону всю эту лингвистическую и риторическую сложность, я действительно хотел проверить способность программы решать задачу о лестнице слов. Оба примера из приведенной выше расшифровки можно найти в Интернете, поэтому они, скорее всего, появятся в обучающих данных ChatGPT. Другими словами, большие языковые модели могут просто запоминать решения, а не строить их. Поэтому я отправил еще более сложное задание:
На первый взгляд, кажется, что ChatGPT снова одержал победу, решив головоломку, с которой, я уверен, он никогда раньше не сталкивался. Но присмотритесь внимательнее. MARSH -> MARIS ТРЕБУЕТ ЗАМЕНЫ НА ДВЕ БУКВЫ, КАК И PARIL -> APRIL. Статус MARIS и PARIL как «действительных слов» также может быть поставлен под сомнение. Я жаловался:
Ой! Робот предлагает скользкие признания и извинения, но «правильная» лестница безумна, как никогда. Это выглядит так, как будто мы играем в «Эрудит» с Шалтаем-Болтайем в детском стишке «Матушка Гусыня», а также заявляем: «Я говорю, что APRCHI — это слово, он — это слово!» Затем разложите все плитки.
Это не отдельный, уникальный сбой. Все мои попытки решить словесную лестницу с помощью ChatGPT сбивались с пути, хотя и не всегда одинаково. В одном случае я попросил лестницу от REACH до GRASP. Эксперты по искусственному интеллекту придумали такое решение:
REACH -> НАУЧИТЬ -> ПЕРСИК -> PEACE -> PACES -> PARES -> PARSE -> PARSE -> PARSE -> PARSE -> PARKS -> PARKS -> PARKS -> PARKS -> PARES -> GRASP.
Теперь мы лепещем, как маленькие дети, которые только научились считать: «Раз, два, три, четыре, четыре, три, четыре, четыре, семь, синий, десять!» "
Все результаты, которые я показал до сих пор, задокументированы в ChatGPT версии 3.5. Я также попробовал новую и улучшенную версию 4.0, которая вышла в марте. Обновленный робот излучает ту же дружелюбную уверенность, но, боюсь, у него те же тенденции, впадающие в случайную бессвязность:
Лестница хорошо начинается с четырех ступеней, соблюдая все правила. Но потом ИИ отвлекается. ПЕРЕХОД С PLAGE НА PAGES ТРЕБУЕТ ЗАМЕНЫ ИЗ ЧЕТЫРЕХ БУКВ. КРОМЕ ТОГО, ЕСТЬ PASES, КОТОРОЕ НЕ ЯВЛЯЕТСЯ СЛОВОМ (НАСКОЛЬКО Я ЗНАЮ) И В ЛЮБОМ СЛУЧАЕ ЗДЕСЬ НЕ НУЖНО, ТАК КАК ПОСЛЕДОВАТЕЛЬНОСТИ МОГУТ ПЕРЕХОДИТЬ ПРЯМО СО СТРАНИЦ В ПАРЫ. За этим последовала еще одна глупость. Тем не менее, я ценю информационную заметку о PLAGE.
Недавно у меня также была возможность попробовать Llama 2, LLM, опубликованную Meta (люди из Facebook). Несмотря на то, что эта модель была разработана независимо от GPT, она, похоже, имеет некоторые из тех же психологических особенностей, таких как создание правил, а затем их игнорирование. Когда я попросила лестницу, соединяющую REACH и GRASP, Лама 2 предложила следующее:
Мэтт Уэлш упоминает два режима работы вычислительных систем, построенных на больших языковых моделях. До сих пор мы работали в том, что я называю пророческим режимом, когда вы задаете вопрос, а компьютер выдает ответ. Вы вводите пару слов, и система находит лестницу, которая соединяет их, и выполняет все вычисления, необходимые для того, чтобы добраться до нее. Вы приносите обувную коробку, полную финансовых документов, а компьютер заполняет вашу форму 1040. Вы собираете исторические климатические данные, и компьютер предсказывает среднюю глобальную температуру в 2050 году.
Альтернативой ИИ-оракулам является AI Code Monkey. Во втором режиме машина напрямую не отвечает на ваши вопросы и не выполняет ваши расчеты; Вместо этого он создает программу, которая может работать на обычном компьютере. Вместо лестницы слов от бота вы возвращаете программу, которая генерирует лестницу слов, написанную на выбранном вами языке программирования. Вместо того, чтобы заполнять полную налоговую декларацию, вы получаете программное обеспечение для подготовки налогов; Климатические модели заменяют прогнозы температуры.
Давайте попробуем это с ChatGPT 3.5:
Вы можете использовать функцию wordLadder для решения головоломок с лестницей. Вот пример использования:
Его выходные данные:
Обратите внимание, что это базовая демонстрация, и для больших лестниц или более сложных сценариев могут потребоваться дополнительные оптимизации или алгоритмы, такие как поиск в ширину.
Опять же, беглый взгляд на выходные данные показывает, что производительность была успешной. ChatGPT, похоже, так же свободно владеет Java, как и английским. Он знает синтаксис операторов if, while и for, а также все правила пунктуации и скобок. Кажется, что машинные программы объединяют все эти компоненты для выполнения определенной задачи. Также обратите внимание на большое количество пояснительных комментариев, которые безусловно идут нам на пользу, а не на пользу. Аналогично описательные имена переменных (currentWord, newWord, ladder).
ChatGPT также активно включает инструкции по запуску программы на конкретном примере (с марта по АПРЕЛЬ) и выводит результат, который соответствует ответу, данному в нашем предыдущем обмене. Генерируется ли этот вывод фактическим запуском программы? ChatGPT не говорит об этом прямо, но утверждает, что если вы запустите программу в соответствии с инструкциями, вы получите отображаемые результаты (во всей нелепой красе).
Мы можем проверить это утверждение, загрузив программу в веб-браузер или другую среду выполнения Java. Вывод: поймали! Программа запустилась, но не выдала указанного результата. РЕАЛЬНЫЙ РЕЗУЛЬТАТ ПРОГРАММЫ: МАРТ -> AARCH -> АПРЧ -> АПРХ -> АПРЕЛЬ. Эта последовательность не так уж и странна, потому что она следует правилу изменения только одной буквы за раз, а все «слова» имеют ровно пять букв. С другой стороны, в английских словарях не найти ни одного промежуточного «слова».
СУЩЕСТВУЕТ ПРОСТОЙ АЛГОРИТМ, КОТОРЫЙ ГЕНЕРИРУЕТ ПОСЛЕДОВАТЕЛЬНОСТИ МАРТ -> AARCH -> APRCH -> APRIH -> APRIL. Просто пройдитесь по начальному слову шаг за шагом слева направо, изменяя букву в каждой позиции, чтобы она соответствовала соответствующей букве в целевом слове. Следуя этому правилу, любую пару пятибуквенных слов можно расположить шагами не более чем в пять шагов. МАРТ -> АПРЕЛЬ делает всего четыре шага, потому что букву R посередине менять не нужно. Я не могу представить себе более простого способа составить лестницу слов – при условии, конечно, что вы готовы сделать так, чтобы любая смесь букв считалась одним словом.
Программа, созданная ChatGPT, может использовать эту быструю и грязную процедуру, но она делает нечто гораздо более утомительное: она строит все возможные лестницы, первая из которых является начальным словом, и продолжает расширять эти лестницы, пока не наткнется на ту, которая содержит целевое слово. Это расточительный алгоритм грубой силы. Каждая буква начального слова может быть изменена 25 способами. Таким образом, слово из 5 букв имеет 125 возможных преемников. Когда вы достигнете пятиступенчатой лестницы, у вас будет 190 миллионов возможностей. (ПРИМЕРЫ, КОТОРЫЕ Я ПРИВЕЛ ЗДЕСЬ, ТАКИЕ КАК МАРТ-> АПРЕЛЬ И REACH-> GRAMP, ИМЕЮТ НЕИЗМЕНЯЕМУЮ БУКВУ, ПОЭТОМУ РЕШЕНИЕ ЗАНИМАЕТ ВСЕГО ЧЕТЫРЕ ШАГА.) Попытки вычислить полное пятиступенчатое решение истощили мое терпение. )
Кодовая обезьяна 4-го поколения
Давайте попробуем то же упражнение по кодированию с ChatGPT 4. Получив ту же подсказку, новый бот отвечает следующим образом:
Программа имеет одинаковую общую структуру (цикл while с двумя вложенными циклами for внутри) и использует ту же алгоритмическую стратегию (генерация всех строк, отличающихся от заданного слова, в одном месте). Но у версии GPT-4 есть большое новшество: распознавание списка слов имеет важное значение. Благодаря этому изменению у нас наконец-то появилась надежда создать лестницу реальных слов.
Несмотря на то, что GPT-4 признает необходимость в списке, он предоставляет только заполнитель, последовательность из 10 слов, которую он настраивает для приведенного выше примера REACH-> GRASP. Заглушки этого списка слов мало что дают, даже для того, чтобы воссоздать фальшивую лестницу «REACH-to-GRASP». Если вы попытаетесь это сделать, программа сообщит, что лестницы не существует. В этом результате нет ничего плохого, потому что заданные 10 слов не образуют эффективного пути для изменения только одной буквы за шаг.
Даже если слова в списке тщательно подобраны, словарный запас в 10 человек очень незначителен. Создание больших списков слов кажется простой задачей для языковых моделей. Ведь LLM обучается на огромном корпусе текстов, где почти все английские слова, скорее всего, встречаются хотя бы один раз, в то время как обычные слова появляются миллионы раз. Неужели робот не может взять репрезентативную выборку этих слов? Ответ очевиден: нет. Хотя можно сказать, что GPT «прочитал» весь этот текст, он не хранит эти слова в какой-либо легкодоступной форме. (То же самое относится и к читателям-людям.) Можете ли вы составить список из 10 самых распространенных пятибуквенных слов в вашем словарном запасе, оглядываясь на опыт чтения на протяжении всей жизни?
Когда я попросил ChatGPT 4 сгенерировать список слов, он извиняющимся тоном возразил: «Извините за путаницу, но как ИИ, разработанный OpenAI, я не могу напрямую получить доступ к базе данных слов или получить возможность получать данные из внешних источников...» Поэтому я попробовал несколько трюков и попросил робота написать историю из 1000 слов, а затем отсортировать слова истории по частоте. Трюк сработал, но образец был слишком мал, чтобы быть полезным. До тех пор, пока я придерживаюсь этого, я, возможно, смогу выудить приемлемый список из GPT, но я иду по короткому пути. В конце концов, я не ИИ, разработанный OpenAI, и у меня есть доступ к внешним ресурсам. Я присвоил себе список из 5757 пятибуквенных английских слов, составленный Кнутом для его эксперимента со словесной лестницей. С помощью этого списка программы, написанные на GPT-4, найдут следующую девятиступенчатую лестничную диаграмму:
ОХВАТ -> ПЕРСИК -> МИР -> МЕСТО -> САМОЛЕТ -> ПЛАНЫ -> ГЛАНЫ -> СТЕКЛО -> ТРАВА -> ЗАХВАТ
Этот результат в точности совпадает с результатом собственной лестничной программы Кнута, которую он опубликовал 30 лет назад в Stanford Graphbase.
На данный момент я должен признать, что с небольшой посторонней помощью ChatGPT наконец-то выполнил мою просьбу. Он пишет программу, которая может построить допустимую лестницу слов. Но у меня все же есть оговорки. Несмотря на то, что GPT-4 и Knuth пишут программы, которые выдают один и тот же результат, сами программы не эквивалентны и даже не похожи.
Кнут подошел к этой проблеме в противоположном направлении, начав не с набора всех возможных пятибуквенных строк (которых насчитывается менее 12 миллионов), а со своего гораздо меньшего списка из 5757 распространенных английских слов. Затем он строит граф (или сеть), где каждое слово является узлом, а два узла соединены ребрами тогда и только тогда, когда соответствующие слова отличаются на одну букву. На следующем рисунке показан фрагмент такой диаграммы.
На схеме лестница слов представляет собой последовательность ребер от начального узла до целевого узла. Лучшая лестница — это кратчайший путь, проходящий наименьшее количество сторон. Например, лучший путь от поводка до рвоты - это поводок -> выщелачивание -> досягаемость -> рвота, но есть и более длинные пути, такие как поводок -> выщелачивание -> пляж -> персик -> дойти до -> ряпка. Чтобы найти кратчайший путь, Кнут использовал алгоритм, разработанный Эдсгером В. Дейкстрой в 50-х годах 20 века.
Программа Кнута требует предварительных вложений для преобразования простого списка слов в таблицу. С другой стороны, он позволяет избежать напрасной генерации тысяч или миллионов пятибуквенных строк, которые не могут быть элементами последних. При решении задачи REACH-> GRASP программа GPT-4 произвела 219 180 таких строк; Только 2 792 из них (чуть более 1%) являются реальными словами.
Если различные процедуры лестницы слов, которые я описываю, представлены студентами, то я поставлю неудовлетворительную оценку версии без списка слов. Программа GPT-4 со списком пройдет, но ради эффективности и элегантности я поставлю программе Кнута только самые высокие оценки.
Почему чат-боты предпочитают некачественные алгоритмы? Вы можете просто погуглить «программа лестницы слов», чтобы получить подсказки. Почти все результаты в топе были получены с таких сайтов, как Leetcode, GeeksForGeeks и RosettaCode. Эти сайты явно предназначены для тех, кто ищет работу и участвует в соревнованиях по программированию, с решениями, которые требуют генерации всех 125 однобуквенных вариантов каждого слова, как и программы GPT. Из-за того, что таких сайтов очень много – кажется, их сотни – они более важны, чем другие источники, такие как книга Кнута (если текст действительно появляется в обучающей выборке). Значит ли это, что мы должны винить Leetcode в неправильном выборе алгоритма, а не GPT? Вместо этого я хотел бы указать на неизбежные слабости протокола, наиболее распространенными из которых являются правильный ответ по умолчанию.
Всякий раз, когда я думаю о том, что для всего нашего программного обеспечения пишутся большие языковые модели, меня преследует другая связанная с этим проблема. Откуда берутся новые алгоритмы? Языковая модель колледжа может быть креативной в ремиксах элементов существующих проектов, но я не вижу никакого способа, которым она может изобрести что-то совершенно новое и лучшее.
** Довольно слова «лестница»! **
Я признаю, что зашел слишком далеко, мучая ChatGPT слишком большим количеством вариантов конкретной (и не относящейся к делу) проблемы. Возможно, языковые модели колледжей лучше справляются с другими вычислительными задачами. Я пробовал несколько, но с неоднозначными результатами. Я просто хочу обсудить один из них, и я нахожу усилия ChatGPT довольно острыми.
В ChatGPT 3.5 я запрашиваю значение 100-го числа Фибоначчи. Обратите внимание, что мой вопрос был задан в режиме Oracle; Я прошу это число, а не программу, которая его вычисляет. Тем не менее, ChatGPT добровольно пишет программу Фибоначчи, а затем визуализирует выходные данные этой программы.
Алгоритм, реализованный этой программой, математически корректен; Оно напрямую вытекает из определения последовательности Фибоначчи, которая является членом последовательности, начинающейся с {0, 1}, где каждый последующий элемент равен сумме первых двух элементов. Ответ также правильный: 354224848179261915075 действительно 100-е число Фибоначчи. Так в чем же проблема? Это среднее предложение: «Когда вы запустите этот код, он выведет 100-е число Фибоначчи». Это не так. Если вы запустите код, то получите неверное значение 354224848179262000000. В последних версиях Java для решения этой проблемы предусмотрен тип данных BigInt, но BigInt должен быть явно указан, чего программы ChatGPT не делают. Причина этой аномалии заключается в том, что Java использует арифметику с плавающей запятой даже для целочисленных значений. Согласно стандарту чисел с плавающей запятой IEEE, максимальное целое число, которое может быть представлено без потери точности, равно 253−1; 100-е число Фибоначчи примерно равно 268. Это то, что я называю острым мышлением: ChatGPT дает правильный ответ, но метод, который, как он утверждает, использует для вычисления этого ответа, его не предоставляет. Бот должен был найти правильное значение каким-то другим способом, но точный способ не был раскрыт.
Если мы дадим ту же задачу ChatGPT 4.0, мы отправимся в еще более странное путешествие. В следующем взаимодействии я активировал Code Interpreter, плагин ChatGPT, который позволяет системе тестировать и запускать часть написанного ею кода. Судя по всему, робот воспользовался этой особенностью, сначала придумав программу, которая по неизвестным причинам дала сбой:
Здесь ChatGPT написан на Python, основном языке программирования, поддерживаемом Code Interpreter. Первая попытка написать программу была основана на возведении в степень матриц Фибоначчи:
Это известный и эффективный метод, и программа реализует его правильно. Однако по загадочным причинам интерпретатор кода не может выполнить программу. (Код хорошо работает в стандартной среде Python и возвращает правильный ответ.) )
В этот момент робот развернется в совершенно новом направлении и взлетит, предложив вычислить требуемое значение Фибоначчи с помощью математического тождества, называемого формулой Бине. Она писала математические выражения, но потом передумала. Она правильно предвидит проблему численной точности: при точном значении квадратного корня из 5 формула даст точный результат, но это неосуществимо.
Поэтому теперь ChatGPT выбрал другую стратегию, используя тот же итеративный алгоритм, что и версия 3.5. На этот раз мы получили правильный ответ, потому что Python (в отличие от Java) не имеет проблем с большими целыми числами.
Я был впечатлен этим выступлением не только правильным ответом, но и мужественным упорством системы. Несмотря на проблемы ChatGPT, он выстоял, озадаченный неожиданными трудностями, но отказался сдаваться. «Что ж, этот матричный метод должен работать. Но, в любом случае, давайте попробуем формулу Бине... Ой, подождите, я забыл... Во всяком случае, не нужно так сильно фантазировать по этому поводу. Давайте сделаем это очевидным, медленным способом. Мне кажется, что это очень человечный подход к решению проблем. Странно видеть такое поведение в машинах.
Запись оценок успехов и неудач
Мой небольшой эксперимент заставил меня усомниться в утверждении о том, что оракулы ИИ и обезьяны с ИИ-кодом вот-вот вытеснят людей-программистов. Я видел некоторые успехи, но больше провалов. Эта безрадостная запись была составлена по относительно простым вычислительным задачам, решения которых хорошо известны и широко опубликованы.
Другие дали более широкую и глубокую оценку генерации кода LLM. В библиографии в конце этой статьи я перечисляю пять таких исследований. Хотел бы вкратце подытожить некоторые результаты, о которых они доложили.
Два года назад Марк Чен и более 50 коллег из OpenAI приложили много усилий для измерения точности Codex, форка ChatGPT 3, предназначенного для написания кода. (С тех пор Codex стал движком, на котором работает GitHub Copilot, «помощник программиста».) ) создал набор из 164 задач, которые можно выполнить, написав программы на Python. Эти задания в основном представляют собой упражнения из учебников, соревнования по программированию и типы из (ошеломляющей) литературы о том, как преуспеть в программировании на собеседованиях при приеме на работу. Большинство задач можно выполнить с помощью всего нескольких строк кода. Пример: Вычислите количество гласных в данном слове, определите, является ли целое число простым или составным.
Команда профессора Чена также поразмышляла над критериями определения успеха и неудачи. Поскольку процесс LLM является недетерминированным (выбор слов основан на вероятности), модель может сгенерировать ошибочную программу с первой попытки, но в конечном итоге выдаст правильный ответ, если попытка будет продолжена. Параметр, называемый температурой, управляет степенью неопределенности. При нулевой температуре модель всегда выбирает наиболее вероятное слово на каждом шаге; По мере повышения температуры вводится случайность, позволяющая выбирать маловероятные слова. Chen et al. Рассмотрите возможность этого изменения, приняв три критерия успеха:
pass@1: LLM генерирует правильную программу с первой попытки
pass@10: По крайней мере, одна из 10 сгенерированных программ верна
pass@100: По крайней мере, одна из 100 сгенерированных программ верна
Pass@1 испытания проводятся при нулевой температуре, поэтому модель всегда дает наилучшее предположение. pass@10 и pass@100 испытания проводятся при более высоких температурах, что позволяет системе исследовать более широкий спектр потенциальных решений.
Авторы оценили несколько версий Кодекса по всем 164 задачам. Для самой большой и мощной версии Codex показатель pass@1 составляет около 29%, показатель pass@10 — 47%, а pass@100 достигает 72%. Должны ли мы быть впечатлены или шокированы, когда увидим эти цифры? Стоит ли праздновать, что Кодекс прав с первой попытки почти в трети случаев (когда температура установлена на ноль)? Или, если бы вы были готовы просмотреть 100 предложенных планов, чтобы найти правильный, вероятность успеха выросла бы почти до трех четвертей? Мое личное мнение таково: если вы посмотрите на нынешнее поколение LLM как на новаторскую попытку в долгосрочной исследовательской программе, результаты обнадеживают. Но если вы думаете, что технология может немедленно заменить программное обеспечение, написанное вручную, то надежды мало. Мы все еще далеки от необходимого уровня надежности.
Другие исследования дали в целом аналогичные результаты. Fredrico Cassano et al. Оценка производительности нескольких LLM, генерирующих код на различных языках программирования; Они сообщают о широком диапазоне показателей pass@1, но только два из них превышают 50%. Алессио Бушеми протестировал ChatGPT 3.5 на 40 задачах кодирования, требуя программ, написанных на 10 языках и повторяющих каждый запрос 10 раз. Из 4000 испытаний 1833 дали код, который можно было скомпилировать и выполнить. Liu Zhijie et al. Их оценка ChatGPT основана на вопросах, размещенных на веб-сайте Leetcode. Оценивайте результаты, отправляя сгенерированный код в автоматизированный процесс оценки Leetcode. Средний уровень принятия всех вопросов варьировался от 31% для программ, написанных на C, до 50% для программ на Python. Liu et al. Еще одно интересное наблюдение: ChatGPT набрал гораздо худшие баллы по вопросам, опубликованным после сентября 2021 года (крайний срок для обучающего набора GPT). Они предполагают, что робот может быть лучше способен решать более ранние проблемы, потому что он уже видел решение во время обучения.
Недавняя статья, опубликованная Ли Чжуном (Li Zhong) и Цзылун Ван (Zilong Wang), выходит за рамки базового вопроса корректности программы и рассматривает робастность и надежность. Правильно ли реагирует сгенерированная программа на неправильно сформированный ввод или внешние ошибки, например, при попытке открыть несуществующий файл? Несмотря на то, что приглашение LLM включало пример, показывающий, как правильно справляться с такими проблемами, Чжун и Ван обнаружили, что сгенерированный код не справляется с этой задачей в 30-50 процентах случаев.
Помимо этих разочаровывающих результатов, у меня самого есть еще сомнения. Практически все тесты проводятся через короткие фрагменты кода. Магистр права, который испытывает трудности с написанием программы из 10 строк, может столкнуться с большими трудностями при написании программы из 100 или 1000 строк. Кроме того, простая оценка «годен/не годен» является очень грубой мерой качества кода. Рассмотрим тест на простоту в наборе групповых тестов Чена. Это одна из программ, написанных на Codex:
Этот код оценивается как правильный – он должен быть правильным, потому что он никогда не классифицирует простые числа как составные и наоборот. Однако, когда n велико, у вас может не хватить терпения или жизни, чтобы ждать вердикта. Алгоритм пытается разделить n на каждое целое число от 2 до n−1.
Нетрадиционная практичность LLM
Большие языковые модели еще только начинаются. ChatGPT был выпущен менее года назад; Технологии, лежащей в ее основе, всего около шести лет. Хотя я почти уверен, что утверждаю, что LLM не готов завоевать мир программирования, я не могу предсказать с такой уверенностью, что они никогда этого не сделают. Эти модели, безусловно, будут совершенствоваться, и мы будем использовать их лучше. Уже существует развивающаяся отрасль, которая предлагает рекомендации по проектированию «точно в срок» как способ получить максимальную отдачу от каждого запроса.
Еще одним способом повышения производительности LLM может быть создание гибрида с другой вычислительной системой, оснащенной инструментами логики и рассуждений, а не чисто языковыми инструментами. Накануне своей недавней смерти Дуг Ленат предложил объединить LLM с Cyc, огромной базой данных здравого смысла, над созданием которой он работал четыре десятилетия. Стивен Вольфрам работает над интеграцией ChatGPT в Wolfram|В Alpha Wolfram|Alpha — это онлайн-коллекция тщательно отобранных данных и алгоритмов.
Тем не менее, некоторые препятствия, которые препятствуют созданию курсов LLM, кажутся труднопреодолимыми.
Языковые модели творят чудеса простым способом: в процессе написания предложения или абзаца LLM выбирает следующее слово на основе предыдущего слова. Это похоже на написание текстового сообщения на телефоне: вы набираете «Увидимся...», а программа предлагает альтернативные продолжения: «завтра», «скоро», «позже». В LLM каждому кандидату присваивается вероятность, которая рассчитывается на основе анализа всего текста в модельной обучающей выборке.
Более века назад русский математик А. А. Марков впервые исследовал идею генерации текста из этого статистического анализа. Его процесс теперь известен как модель n-граммы, где n — это количество слов (или символов, или других символов), которые следует учитывать при выборе следующего элемента последовательности. Я уже давно очарован процессом n-граммы, хотя в основном из-за его комедийных возможностей. (В статье, опубликованной 40 лет назад, я назвал это «искусством превращения литературы в тарабарщину».) ")
Конечно, ChatGPT и другие недавние LLM — это больше, чем n-метамодели. Их нейронная сеть фиксирует лингвистические статистические признаки, выходящие далеко за рамки последовательности из n последовательных символов. Особое значение имеет механизм внимания, который отслеживает зависимости между выбранными символами на произвольных расстояниях. В естественных языках эти средства полезны для поддержания согласованности подлежащего и глагола или для ассоциирования местоимений с объектом, к которому они относятся. В языках программирования механизм внимания обеспечивает целостность составных синтаксических структур, таких как if... тогда... else, и он сохраняет скобки правильно парными и вложенными.
Тем не менее, даже с этими улучшениями, LLM, по сути, является инструментом для построения нового текста, основанного на вероятности появления слов в существующем тексте. На мой взгляд, это не мышление. Это что-то более поверхностное, сосредоточенное на словах, а не на идеях. Учитывая этот грубый механизм, я был одновременно удивлен и озадачен тем, как много LLM смог достичь.
На протяжении десятилетий архитекторы ИИ считали, что истинный интеллект, естественный или искусственный, требует ментальной модели мира. Для того, чтобы понять, что происходит вокруг вас (и внутри вас), вам нужно иметь интуицию о том, как все работает, как они сочетаются друг с другом, что происходит дальше, причины и следствия. Линант настаивает на том, что самое важное знание – это знание, которое вы приобретаете задолго до того, как начнете читать. Вы учитесь гравитации, падая. Когда вы обнаруживаете, что блочную башню легко снести, но трудно восстановить, вы понимаете, что такое энтропия. Прежде чем язык начнет укореняться, вы узнаете о боли, страхе, голоде и любви в младенчестве. Мозг в коробке не может получить доступ к этому опыту, потому что он не может получить прямой доступ к физической или социальной вселенной.
Двести пятьдесят лет назад швейцарский часовщик Пьер Жаке-Дро построил механический автомат, который мог писать пером. Это заводное устройство имеет сотни кулачков и шестеренок и одето как маленький мальчик, сидящий на табурете. После активации мальчик обмакнул перо в чернила и написал короткое сообщение, в частности, картезианский афоризм «Я мыслю, следовательно, я существую». Как смешно! Но даже в 18 веке никто не верил, что куклы граффити действительно мыслят. Скептики LLM относят ChatGPT к той же категории.
Я собираюсь сказать вам, какая из этих противоположных теорий менталитета LLM верна? Я нет. Ни один из вариантов меня не привлекал. Если Бендер и другие правы, то мы должны признать тот факт, что гаджет, не способный рассуждать или чувствовать, не имеющий опыта физической вселенной или социального взаимодействия, не обладающий самосознанием, пишет университетские работы, пишет рэп-песни, дает советы влюбленным. Знания, логика, эмоции ничего не стоят; Скользкий язык - это все. Это подрывное предложение. Если ChatGPT может обмануть нас этим бессознательным шоу, возможно, мы тоже лжецы, и их голоса и гнев бессмысленны.
С другой стороны, если Суцкевер прав, то большую часть человеческого опыта, которым мы дорожим, — чувство личности, которое медленно развивается по мере того, как мы растем и живем, — можно узнать, прочитав эти слова в Интернете. Если это так, то мне на самом деле не нужно терпеть невыразимую боль в средней школе, мне не нужно совершать все глупые ошибки, которые причиняют такую душевную боль и трудности; Нет необходимости ранить свою самооценку, сталкиваясь с миром. Я мог бы прочесть все это, удобно устроившись в кресле; Просто слова могут привести меня к состоянию зрелости с ясным умом, не испытывая всех камней преткновения и боли в долине, которая формирует мою душу.
У меня до сих пор есть два мнения (а может быть, и не два!) о статусе и влиянии больших языковых моделей на информатику. )。 Энтузиасты ИИ могут быть правы. Эти модели могут взять на себя программирование, а также многие другие виды работы и обучения. Или они могут потерпеть неудачу, как и в случае с другими многообещающими инновациями в области ИИ. Я не думаю, что нам нужно ждать слишком долго, чтобы получить ответ.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Заключительная глава в искусственном интеллекте и программировании
Первоисточник: CSDN
Ранее в этом году Мэтт Уэлш объявил, что программирование подходит к концу. Он написал в ACM Communications:
Я считаю, что традиционная идея «написания программ» умирает, на самом деле, для всех, кроме очень специализированных приложений, в том виде, в котором мы его знаем, большая часть программного обеспечения будет заменена обученными системами искусственного интеллекта. В некоторых случаях, когда нужны только «простые» программы (ведь не все требует моделей сотен миллиардов параметров, работающих на GPU-кластерах), сами программы будут генерироваться непосредственно ИИ, а не закодированы вручную.
Несколько недель спустя, в своей речи, Уэйлс расширил свои наблюдения за смертью. Уходит в могилу не только искусство программирования, но и информатика в целом. Вся информатика «обречена». (На рисунке ниже показан скриншот выступления.) )
Я не столь оптимистичен в отношении будущего постпрограммирования. Во-первых, я скептически отношусь к этому. Я не думаю, что мы перешагнули порог для того, чтобы машины научились самостоятельно решать интересные вычислительные задачи. Я не думаю, что мы еще близки к этому, или мы движемся в правильном направлении. Более того, если окажется, что моя точка зрения неверна, я побуждаю не смириться, а сопротивляться. С одной стороны, я не приветствую нашего нового повелителя ИИ. Даже если они окажутся лучшими программистами, чем я, я все равно продолжу использовать свой редактор кода и компилятор, спасибо. «Программирование — отстой?» Для меня это уже давно стало источником радости и вдохновения. Я также считаю его ценным инструментом для понимания мира. Я никогда не уверен, что понимаю это, пока не смогу свести идею к коду. Чтобы извлечь пользу из этого опыта, мне пришлось написать программу, а не просто произнести несколько волшебных слов и вызвать джинна из лампы искусственного интеллекта Аладдина.
Идея о том, что программируемые машины могут писать свои собственные программы, глубоко укоренилась в истории вычислительной техники. Чарльз Бэббидж намекнул на такую возможность еще в 1836 году, обсуждая свой план аналитической машины. Когда Фортран был представлен в 1957 году, его официальное название было «Автоматическая система кодирования FORTRAN». Его заявленная цель состоит в том, чтобы компьютеры «кодировали проблемы для себя и создавали программы, которые были бы так же хороши (но без ошибок), как и программисты-люди».
Фортран не избавляет от трюков (или ошибок) программирования, но делает процесс менее утомительным. Более поздние языки и другие инструменты принесли дальнейшие улучшения. И мечта о полностью автоматизированном программировании никогда не была разрушена. Машины, по-видимому, лучше приспособлены к программированию, чем большинство других. Компьютеры методичны, привязаны к правилам, привередливы и буквальны — все эти черты (правильные или неправильные) ассоциируются с опытными программистами.
По иронии судьбы, системы искусственного интеллекта, готовые к решению задач программирования, странным образом не похожи на компьютеры. Их личности больше похожи на Дианну Трой, чем на коммандера Дейту. Логическая последовательность, причинно-следственные рассуждения и тщательное внимание к деталям не являются их сильными сторонами. У них бывают невероятно блестящие моменты, когда кажется, что они обдумывают глубокие мысли, но у них также есть потенциал для поразительных неудач — вопиющих, наглых ошибок разума. Они напоминают мне старую шутку: люди совершают ошибки, и для того, чтобы что-то испортить, нужен компьютер.
Новейшая система искусственного интеллекта называется Big Language Model (LLM). Как и большинство других недавних изобретений ИИ, они построены на искусственных нейронных сетях, многослойной структуре, вдохновленной структурой мозга. Узлы сети похожи на биологические нейроны, а связи между узлами действуют как синапсы, которые являются точками соединения, где сигналы передаются от одного нейрона к другому. Тренировочная сеть может регулировать прочность или вес соединения. В языковой модели обучение осуществляется путем принудительного ввода большого количества текста в сеть. Когда процесс завершен, весовые коэффициенты соединения кодируют подробную статистику по лингвистическим особенностям обучающего текста. В самой большой модели количество весов составляет 100 миллиардов и более.
В этом случае термин «модель» может ввести в заблуждение. Этот термин не относится к масштабным моделям или миниатюрным моделям, таким как модели самолетов. Вместо этого он относится к прогностическим моделям, таким как математические модели, обычно встречающиеся в науке. Точно так же, как атмосферные модели предсказывают завтрашнюю погоду, языковые модели предсказывают следующее слово в предложении.
Самой известной масштабной языковой моделью является ChatGPT, которая была выпущена для публики осенью прошлого года и привлекла большое внимание. Аббревиатура GPT Gee Pee Tee: Мой язык постоянно спотыкается об эти три рифмующихся слога. Другие продукты с искусственным интеллектом имеют милые имена, такие как Барт, Клод, Лама; Жаль, что я не могу переименовать GPT в том же духе. Я бы назвал его Джеппетто, и он перекликается с узором согласных. Аббревиатура GPT расшифровывается как Generative Pre-Trained Transformer (генеративный предварительно обученный трансформатор); Чат-версия системы оснащена разговорным HMI. ChatGPT был разработан компанией OpenAI, которая была основана в 2015 году, чтобы освободить ИИ из-под контроля нескольких богатых технологических компаний. OpenAI успешно выполнила эту миссию до такой степени, что стала богатой технологической компанией.
ChatGPT вызывает восхищение и шокирует своей формулировкой, умением хорошо говорить, беглым владением английским и другими языками. Чат-бот может подражать известным авторам, рассказывать анекдоты, писать любовные письма, переводить стихи, рассылать спам, «помогать» студентам с домашними заданиями и придумывать дезинформацию для политической дезинформации. Хорошо это или плохо, но эти языковые способности представляют собой удивительные технологические достижения. Компьютеры, которые когда-то изо всех сил пытались построить понятное предложение, внезапно стали мастерами слов. То, что говорит GPT, может быть правдой, а может и нет, но это почти всегда хорошо сформулировано.
Вскоре после того, как ChatGPT был выпущен, я был удивлен, обнаружив, что его владение языком распространяется и на языки программирования. Обучающий набор модели, по-видимому, включает в себя не только несколько естественных языков, но и большой объем исходного кода программ из общедоступных репозиториев, таких как GitHub. На основе этого ресурса GPT умеет писать новые программы на основе команд. Меня это удивило, потому что компьютеры очень придирчивы и неумолимы к вводу данных. Несмотря на то, что компьютеры иногда допускают небольшие ошибки, такие как орфографические ошибки, читатели с трудом понимают предложение. Но если компьютер получит ввод даже с одной запятой или несовпадающей скобкой, его выдаст искаженная рвота. Языковые модели с потенциально статистическими или вероятностными свойствами вряд ли смогут поддерживать требуемую точность за пределами нескольких строк.
Я снова ошибся в этом вопросе. Ключевое новшество в больших языковых моделях — механизм внимания — решает эту проблему. Когда я сам начал экспериментировать с ChatGPT, я быстро обнаружил, что он действительно может генерировать программы без небрежных грамматических ошибок.
Но за этим последовали и другие проблемы.
Когда вы садитесь поболтать с машиной, вы сразу сталкиваетесь с неудобным вопросом: «О чем нам говорить?». Я ищу тему, которая справедливо измеряет возможности программирования ChatGPT. Мне нужна задача, которую можно решить вычислительными средствами, но для этого не требуется много арифметики, которая считается одной из слабых сторон больших языковых моделей. Я выбрал анаграмму, изобретенную Льюисом Кэрроллом 150 лет назад и глубоко проанализированную Дональдом Кнутом в 90-х годах 20 века.
В приведенной ниже стенограмме каждый обмен с моей стороны помечен как BR; Розетка — это логотип OpenAI, который указывает на ответ ChatGPT.
Не только отдельные предложения создают впечатление о языковых способностях. Предложения организованы в абзацы, которые нанизываются друг на друга, образуя связный дискурс. Это здорово!
Также примечательна способность робота обрабатывать нечеткие и небрежные данные. Мой первоначальный запрос был сформулирован как вопрос «да» или «нет», но ChatGPT правильно интерпретировал его как просьбу: «Расскажите мне, что вы знаете о слове лестница». Моя вторая инструкция игнорирует любые типографские признаки, указывающие на то, что СВИНЕЦ и ЗОЛОТО следует понимать как слова, а не как металл. Чат-бот должен был предоставить мне рецепты алхимии, но он предоставил недостающие цитаты.
Однако, отбросив в сторону всю эту лингвистическую и риторическую сложность, я действительно хотел проверить способность программы решать задачу о лестнице слов. Оба примера из приведенной выше расшифровки можно найти в Интернете, поэтому они, скорее всего, появятся в обучающих данных ChatGPT. Другими словами, большие языковые модели могут просто запоминать решения, а не строить их. Поэтому я отправил еще более сложное задание:
Это не отдельный, уникальный сбой. Все мои попытки решить словесную лестницу с помощью ChatGPT сбивались с пути, хотя и не всегда одинаково. В одном случае я попросил лестницу от REACH до GRASP. Эксперты по искусственному интеллекту придумали такое решение:
REACH -> НАУЧИТЬ -> ПЕРСИК -> PEACE -> PACES -> PARES -> PARSE -> PARSE -> PARSE -> PARSE -> PARKS -> PARKS -> PARKS -> PARKS -> PARES -> GRASP.
А это:
МЕЧ -> ДЕРНИНА -> НАГРАДА -> ПЕРЕРИСОВКА -> ПЕРЕРИСОВАНА -> ПЕРЕРИСОВАНА -> ПЕРЕРИСОВАНА -> ПЕРЕРИСОВАНА -> ПЕРЕРИСОВАНА -> ПОГАШЕНА -> РЕМОНТ -> МИР
Теперь мы лепещем, как маленькие дети, которые только научились считать: «Раз, два, три, четыре, четыре, три, четыре, четыре, семь, синий, десять!» "
Все результаты, которые я показал до сих пор, задокументированы в ChatGPT версии 3.5. Я также попробовал новую и улучшенную версию 4.0, которая вышла в марте. Обновленный робот излучает ту же дружелюбную уверенность, но, боюсь, у него те же тенденции, впадающие в случайную бессвязность:
Недавно у меня также была возможность попробовать Llama 2, LLM, опубликованную Meta (люди из Facebook). Несмотря на то, что эта модель была разработана независимо от GPT, она, похоже, имеет некоторые из тех же психологических особенностей, таких как создание правил, а затем их игнорирование. Когда я попросила лестницу, соединяющую REACH и GRASP, Лама 2 предложила следующее:
ОХВАТ -> НАУЧИТЬ -> ВЫЩЕЛАЧИВАНИЕ -> ВЫЩЕЛАЧИВАНИЯ -> РЕЧЬ -> СИДЕНЬЕ -> НОГИ -> ЗАХВАТ
Мэтт Уэлш упоминает два режима работы вычислительных систем, построенных на больших языковых моделях. До сих пор мы работали в том, что я называю пророческим режимом, когда вы задаете вопрос, а компьютер выдает ответ. Вы вводите пару слов, и система находит лестницу, которая соединяет их, и выполняет все вычисления, необходимые для того, чтобы добраться до нее. Вы приносите обувную коробку, полную финансовых документов, а компьютер заполняет вашу форму 1040. Вы собираете исторические климатические данные, и компьютер предсказывает среднюю глобальную температуру в 2050 году.
Альтернативой ИИ-оракулам является AI Code Monkey. Во втором режиме машина напрямую не отвечает на ваши вопросы и не выполняет ваши расчеты; Вместо этого он создает программу, которая может работать на обычном компьютере. Вместо лестницы слов от бота вы возвращаете программу, которая генерирует лестницу слов, написанную на выбранном вами языке программирования. Вместо того, чтобы заполнять полную налоговую декларацию, вы получаете программное обеспечение для подготовки налогов; Климатические модели заменяют прогнозы температуры.
Давайте попробуем это с ChatGPT 3.5:
Опять же, беглый взгляд на выходные данные показывает, что производительность была успешной. ChatGPT, похоже, так же свободно владеет Java, как и английским. Он знает синтаксис операторов if, while и for, а также все правила пунктуации и скобок. Кажется, что машинные программы объединяют все эти компоненты для выполнения определенной задачи. Также обратите внимание на большое количество пояснительных комментариев, которые безусловно идут нам на пользу, а не на пользу. Аналогично описательные имена переменных (currentWord, newWord, ladder).
ChatGPT также активно включает инструкции по запуску программы на конкретном примере (с марта по АПРЕЛЬ) и выводит результат, который соответствует ответу, данному в нашем предыдущем обмене. Генерируется ли этот вывод фактическим запуском программы? ChatGPT не говорит об этом прямо, но утверждает, что если вы запустите программу в соответствии с инструкциями, вы получите отображаемые результаты (во всей нелепой красе).
Мы можем проверить это утверждение, загрузив программу в веб-браузер или другую среду выполнения Java. Вывод: поймали! Программа запустилась, но не выдала указанного результата. РЕАЛЬНЫЙ РЕЗУЛЬТАТ ПРОГРАММЫ: МАРТ -> AARCH -> АПРЧ -> АПРХ -> АПРЕЛЬ. Эта последовательность не так уж и странна, потому что она следует правилу изменения только одной буквы за раз, а все «слова» имеют ровно пять букв. С другой стороны, в английских словарях не найти ни одного промежуточного «слова».
СУЩЕСТВУЕТ ПРОСТОЙ АЛГОРИТМ, КОТОРЫЙ ГЕНЕРИРУЕТ ПОСЛЕДОВАТЕЛЬНОСТИ МАРТ -> AARCH -> APRCH -> APRIH -> APRIL. Просто пройдитесь по начальному слову шаг за шагом слева направо, изменяя букву в каждой позиции, чтобы она соответствовала соответствующей букве в целевом слове. Следуя этому правилу, любую пару пятибуквенных слов можно расположить шагами не более чем в пять шагов. МАРТ -> АПРЕЛЬ делает всего четыре шага, потому что букву R посередине менять не нужно. Я не могу представить себе более простого способа составить лестницу слов – при условии, конечно, что вы готовы сделать так, чтобы любая смесь букв считалась одним словом.
Программа, созданная ChatGPT, может использовать эту быструю и грязную процедуру, но она делает нечто гораздо более утомительное: она строит все возможные лестницы, первая из которых является начальным словом, и продолжает расширять эти лестницы, пока не наткнется на ту, которая содержит целевое слово. Это расточительный алгоритм грубой силы. Каждая буква начального слова может быть изменена 25 способами. Таким образом, слово из 5 букв имеет 125 возможных преемников. Когда вы достигнете пятиступенчатой лестницы, у вас будет 190 миллионов возможностей. (ПРИМЕРЫ, КОТОРЫЕ Я ПРИВЕЛ ЗДЕСЬ, ТАКИЕ КАК МАРТ-> АПРЕЛЬ И REACH-> GRAMP, ИМЕЮТ НЕИЗМЕНЯЕМУЮ БУКВУ, ПОЭТОМУ РЕШЕНИЕ ЗАНИМАЕТ ВСЕГО ЧЕТЫРЕ ШАГА.) Попытки вычислить полное пятиступенчатое решение истощили мое терпение. )
Давайте попробуем то же упражнение по кодированию с ChatGPT 4. Получив ту же подсказку, новый бот отвечает следующим образом:
Несмотря на то, что GPT-4 признает необходимость в списке, он предоставляет только заполнитель, последовательность из 10 слов, которую он настраивает для приведенного выше примера REACH-> GRASP. Заглушки этого списка слов мало что дают, даже для того, чтобы воссоздать фальшивую лестницу «REACH-to-GRASP». Если вы попытаетесь это сделать, программа сообщит, что лестницы не существует. В этом результате нет ничего плохого, потому что заданные 10 слов не образуют эффективного пути для изменения только одной буквы за шаг.
Даже если слова в списке тщательно подобраны, словарный запас в 10 человек очень незначителен. Создание больших списков слов кажется простой задачей для языковых моделей. Ведь LLM обучается на огромном корпусе текстов, где почти все английские слова, скорее всего, встречаются хотя бы один раз, в то время как обычные слова появляются миллионы раз. Неужели робот не может взять репрезентативную выборку этих слов? Ответ очевиден: нет. Хотя можно сказать, что GPT «прочитал» весь этот текст, он не хранит эти слова в какой-либо легкодоступной форме. (То же самое относится и к читателям-людям.) Можете ли вы составить список из 10 самых распространенных пятибуквенных слов в вашем словарном запасе, оглядываясь на опыт чтения на протяжении всей жизни?
Когда я попросил ChatGPT 4 сгенерировать список слов, он извиняющимся тоном возразил: «Извините за путаницу, но как ИИ, разработанный OpenAI, я не могу напрямую получить доступ к базе данных слов или получить возможность получать данные из внешних источников...» Поэтому я попробовал несколько трюков и попросил робота написать историю из 1000 слов, а затем отсортировать слова истории по частоте. Трюк сработал, но образец был слишком мал, чтобы быть полезным. До тех пор, пока я придерживаюсь этого, я, возможно, смогу выудить приемлемый список из GPT, но я иду по короткому пути. В конце концов, я не ИИ, разработанный OpenAI, и у меня есть доступ к внешним ресурсам. Я присвоил себе список из 5757 пятибуквенных английских слов, составленный Кнутом для его эксперимента со словесной лестницей. С помощью этого списка программы, написанные на GPT-4, найдут следующую девятиступенчатую лестничную диаграмму:
ОХВАТ -> ПЕРСИК -> МИР -> МЕСТО -> САМОЛЕТ -> ПЛАНЫ -> ГЛАНЫ -> СТЕКЛО -> ТРАВА -> ЗАХВАТ
Этот результат в точности совпадает с результатом собственной лестничной программы Кнута, которую он опубликовал 30 лет назад в Stanford Graphbase.
На данный момент я должен признать, что с небольшой посторонней помощью ChatGPT наконец-то выполнил мою просьбу. Он пишет программу, которая может построить допустимую лестницу слов. Но у меня все же есть оговорки. Несмотря на то, что GPT-4 и Knuth пишут программы, которые выдают один и тот же результат, сами программы не эквивалентны и даже не похожи.
Кнут подошел к этой проблеме в противоположном направлении, начав не с набора всех возможных пятибуквенных строк (которых насчитывается менее 12 миллионов), а со своего гораздо меньшего списка из 5757 распространенных английских слов. Затем он строит граф (или сеть), где каждое слово является узлом, а два узла соединены ребрами тогда и только тогда, когда соответствующие слова отличаются на одну букву. На следующем рисунке показан фрагмент такой диаграммы.
Программа Кнута требует предварительных вложений для преобразования простого списка слов в таблицу. С другой стороны, он позволяет избежать напрасной генерации тысяч или миллионов пятибуквенных строк, которые не могут быть элементами последних. При решении задачи REACH-> GRASP программа GPT-4 произвела 219 180 таких строк; Только 2 792 из них (чуть более 1%) являются реальными словами.
Если различные процедуры лестницы слов, которые я описываю, представлены студентами, то я поставлю неудовлетворительную оценку версии без списка слов. Программа GPT-4 со списком пройдет, но ради эффективности и элегантности я поставлю программе Кнута только самые высокие оценки.
Почему чат-боты предпочитают некачественные алгоритмы? Вы можете просто погуглить «программа лестницы слов», чтобы получить подсказки. Почти все результаты в топе были получены с таких сайтов, как Leetcode, GeeksForGeeks и RosettaCode. Эти сайты явно предназначены для тех, кто ищет работу и участвует в соревнованиях по программированию, с решениями, которые требуют генерации всех 125 однобуквенных вариантов каждого слова, как и программы GPT. Из-за того, что таких сайтов очень много – кажется, их сотни – они более важны, чем другие источники, такие как книга Кнута (если текст действительно появляется в обучающей выборке). Значит ли это, что мы должны винить Leetcode в неправильном выборе алгоритма, а не GPT? Вместо этого я хотел бы указать на неизбежные слабости протокола, наиболее распространенными из которых являются правильный ответ по умолчанию.
Всякий раз, когда я думаю о том, что для всего нашего программного обеспечения пишутся большие языковые модели, меня преследует другая связанная с этим проблема. Откуда берутся новые алгоритмы? Языковая модель колледжа может быть креативной в ремиксах элементов существующих проектов, но я не вижу никакого способа, которым она может изобрести что-то совершенно новое и лучшее.
**
Довольно слова «лестница»! **
Я признаю, что зашел слишком далеко, мучая ChatGPT слишком большим количеством вариантов конкретной (и не относящейся к делу) проблемы. Возможно, языковые модели колледжей лучше справляются с другими вычислительными задачами. Я пробовал несколько, но с неоднозначными результатами. Я просто хочу обсудить один из них, и я нахожу усилия ChatGPT довольно острыми.
В ChatGPT 3.5 я запрашиваю значение 100-го числа Фибоначчи. Обратите внимание, что мой вопрос был задан в режиме Oracle; Я прошу это число, а не программу, которая его вычисляет. Тем не менее, ChatGPT добровольно пишет программу Фибоначчи, а затем визуализирует выходные данные этой программы.
Если мы дадим ту же задачу ChatGPT 4.0, мы отправимся в еще более странное путешествие. В следующем взаимодействии я активировал Code Interpreter, плагин ChatGPT, который позволяет системе тестировать и запускать часть написанного ею кода. Судя по всему, робот воспользовался этой особенностью, сначала придумав программу, которая по неизвестным причинам дала сбой:
В этот момент робот развернется в совершенно новом направлении и взлетит, предложив вычислить требуемое значение Фибоначчи с помощью математического тождества, называемого формулой Бине. Она писала математические выражения, но потом передумала. Она правильно предвидит проблему численной точности: при точном значении квадратного корня из 5 формула даст точный результат, но это неосуществимо.
Поэтому теперь ChatGPT выбрал другую стратегию, используя тот же итеративный алгоритм, что и версия 3.5. На этот раз мы получили правильный ответ, потому что Python (в отличие от Java) не имеет проблем с большими целыми числами.
Я был впечатлен этим выступлением не только правильным ответом, но и мужественным упорством системы. Несмотря на проблемы ChatGPT, он выстоял, озадаченный неожиданными трудностями, но отказался сдаваться. «Что ж, этот матричный метод должен работать. Но, в любом случае, давайте попробуем формулу Бине... Ой, подождите, я забыл... Во всяком случае, не нужно так сильно фантазировать по этому поводу. Давайте сделаем это очевидным, медленным способом. Мне кажется, что это очень человечный подход к решению проблем. Странно видеть такое поведение в машинах.
Мой небольшой эксперимент заставил меня усомниться в утверждении о том, что оракулы ИИ и обезьяны с ИИ-кодом вот-вот вытеснят людей-программистов. Я видел некоторые успехи, но больше провалов. Эта безрадостная запись была составлена по относительно простым вычислительным задачам, решения которых хорошо известны и широко опубликованы.
Другие дали более широкую и глубокую оценку генерации кода LLM. В библиографии в конце этой статьи я перечисляю пять таких исследований. Хотел бы вкратце подытожить некоторые результаты, о которых они доложили.
Два года назад Марк Чен и более 50 коллег из OpenAI приложили много усилий для измерения точности Codex, форка ChatGPT 3, предназначенного для написания кода. (С тех пор Codex стал движком, на котором работает GitHub Copilot, «помощник программиста».) ) создал набор из 164 задач, которые можно выполнить, написав программы на Python. Эти задания в основном представляют собой упражнения из учебников, соревнования по программированию и типы из (ошеломляющей) литературы о том, как преуспеть в программировании на собеседованиях при приеме на работу. Большинство задач можно выполнить с помощью всего нескольких строк кода. Пример: Вычислите количество гласных в данном слове, определите, является ли целое число простым или составным.
Команда профессора Чена также поразмышляла над критериями определения успеха и неудачи. Поскольку процесс LLM является недетерминированным (выбор слов основан на вероятности), модель может сгенерировать ошибочную программу с первой попытки, но в конечном итоге выдаст правильный ответ, если попытка будет продолжена. Параметр, называемый температурой, управляет степенью неопределенности. При нулевой температуре модель всегда выбирает наиболее вероятное слово на каждом шаге; По мере повышения температуры вводится случайность, позволяющая выбирать маловероятные слова. Chen et al. Рассмотрите возможность этого изменения, приняв три критерия успеха:
pass@1: LLM генерирует правильную программу с первой попытки
pass@10: По крайней мере, одна из 10 сгенерированных программ верна
pass@100: По крайней мере, одна из 100 сгенерированных программ верна
Pass@1 испытания проводятся при нулевой температуре, поэтому модель всегда дает наилучшее предположение. pass@10 и pass@100 испытания проводятся при более высоких температурах, что позволяет системе исследовать более широкий спектр потенциальных решений.
Авторы оценили несколько версий Кодекса по всем 164 задачам. Для самой большой и мощной версии Codex показатель pass@1 составляет около 29%, показатель pass@10 — 47%, а pass@100 достигает 72%. Должны ли мы быть впечатлены или шокированы, когда увидим эти цифры? Стоит ли праздновать, что Кодекс прав с первой попытки почти в трети случаев (когда температура установлена на ноль)? Или, если бы вы были готовы просмотреть 100 предложенных планов, чтобы найти правильный, вероятность успеха выросла бы почти до трех четвертей? Мое личное мнение таково: если вы посмотрите на нынешнее поколение LLM как на новаторскую попытку в долгосрочной исследовательской программе, результаты обнадеживают. Но если вы думаете, что технология может немедленно заменить программное обеспечение, написанное вручную, то надежды мало. Мы все еще далеки от необходимого уровня надежности.
Другие исследования дали в целом аналогичные результаты. Fredrico Cassano et al. Оценка производительности нескольких LLM, генерирующих код на различных языках программирования; Они сообщают о широком диапазоне показателей pass@1, но только два из них превышают 50%. Алессио Бушеми протестировал ChatGPT 3.5 на 40 задачах кодирования, требуя программ, написанных на 10 языках и повторяющих каждый запрос 10 раз. Из 4000 испытаний 1833 дали код, который можно было скомпилировать и выполнить. Liu Zhijie et al. Их оценка ChatGPT основана на вопросах, размещенных на веб-сайте Leetcode. Оценивайте результаты, отправляя сгенерированный код в автоматизированный процесс оценки Leetcode. Средний уровень принятия всех вопросов варьировался от 31% для программ, написанных на C, до 50% для программ на Python. Liu et al. Еще одно интересное наблюдение: ChatGPT набрал гораздо худшие баллы по вопросам, опубликованным после сентября 2021 года (крайний срок для обучающего набора GPT). Они предполагают, что робот может быть лучше способен решать более ранние проблемы, потому что он уже видел решение во время обучения.
Недавняя статья, опубликованная Ли Чжуном (Li Zhong) и Цзылун Ван (Zilong Wang), выходит за рамки базового вопроса корректности программы и рассматривает робастность и надежность. Правильно ли реагирует сгенерированная программа на неправильно сформированный ввод или внешние ошибки, например, при попытке открыть несуществующий файл? Несмотря на то, что приглашение LLM включало пример, показывающий, как правильно справляться с такими проблемами, Чжун и Ван обнаружили, что сгенерированный код не справляется с этой задачей в 30-50 процентах случаев.
Помимо этих разочаровывающих результатов, у меня самого есть еще сомнения. Практически все тесты проводятся через короткие фрагменты кода. Магистр права, который испытывает трудности с написанием программы из 10 строк, может столкнуться с большими трудностями при написании программы из 100 или 1000 строк. Кроме того, простая оценка «годен/не годен» является очень грубой мерой качества кода. Рассмотрим тест на простоту в наборе групповых тестов Чена. Это одна из программ, написанных на Codex:
Большие языковые модели еще только начинаются. ChatGPT был выпущен менее года назад; Технологии, лежащей в ее основе, всего около шести лет. Хотя я почти уверен, что утверждаю, что LLM не готов завоевать мир программирования, я не могу предсказать с такой уверенностью, что они никогда этого не сделают. Эти модели, безусловно, будут совершенствоваться, и мы будем использовать их лучше. Уже существует развивающаяся отрасль, которая предлагает рекомендации по проектированию «точно в срок» как способ получить максимальную отдачу от каждого запроса.
Еще одним способом повышения производительности LLM может быть создание гибрида с другой вычислительной системой, оснащенной инструментами логики и рассуждений, а не чисто языковыми инструментами. Накануне своей недавней смерти Дуг Ленат предложил объединить LLM с Cyc, огромной базой данных здравого смысла, над созданием которой он работал четыре десятилетия. Стивен Вольфрам работает над интеграцией ChatGPT в Wolfram|В Alpha Wolfram|Alpha — это онлайн-коллекция тщательно отобранных данных и алгоритмов.
Тем не менее, некоторые препятствия, которые препятствуют созданию курсов LLM, кажутся труднопреодолимыми.
Языковые модели творят чудеса простым способом: в процессе написания предложения или абзаца LLM выбирает следующее слово на основе предыдущего слова. Это похоже на написание текстового сообщения на телефоне: вы набираете «Увидимся...», а программа предлагает альтернативные продолжения: «завтра», «скоро», «позже». В LLM каждому кандидату присваивается вероятность, которая рассчитывается на основе анализа всего текста в модельной обучающей выборке.
Более века назад русский математик А. А. Марков впервые исследовал идею генерации текста из этого статистического анализа. Его процесс теперь известен как модель n-граммы, где n — это количество слов (или символов, или других символов), которые следует учитывать при выборе следующего элемента последовательности. Я уже давно очарован процессом n-граммы, хотя в основном из-за его комедийных возможностей. (В статье, опубликованной 40 лет назад, я назвал это «искусством превращения литературы в тарабарщину».) ")
Конечно, ChatGPT и другие недавние LLM — это больше, чем n-метамодели. Их нейронная сеть фиксирует лингвистические статистические признаки, выходящие далеко за рамки последовательности из n последовательных символов. Особое значение имеет механизм внимания, который отслеживает зависимости между выбранными символами на произвольных расстояниях. В естественных языках эти средства полезны для поддержания согласованности подлежащего и глагола или для ассоциирования местоимений с объектом, к которому они относятся. В языках программирования механизм внимания обеспечивает целостность составных синтаксических структур, таких как if... тогда... else, и он сохраняет скобки правильно парными и вложенными.
Тем не менее, даже с этими улучшениями, LLM, по сути, является инструментом для построения нового текста, основанного на вероятности появления слов в существующем тексте. На мой взгляд, это не мышление. Это что-то более поверхностное, сосредоточенное на словах, а не на идеях. Учитывая этот грубый механизм, я был одновременно удивлен и озадачен тем, как много LLM смог достичь.
На протяжении десятилетий архитекторы ИИ считали, что истинный интеллект, естественный или искусственный, требует ментальной модели мира. Для того, чтобы понять, что происходит вокруг вас (и внутри вас), вам нужно иметь интуицию о том, как все работает, как они сочетаются друг с другом, что происходит дальше, причины и следствия. Линант настаивает на том, что самое важное знание – это знание, которое вы приобретаете задолго до того, как начнете читать. Вы учитесь гравитации, падая. Когда вы обнаруживаете, что блочную башню легко снести, но трудно восстановить, вы понимаете, что такое энтропия. Прежде чем язык начнет укореняться, вы узнаете о боли, страхе, голоде и любви в младенчестве. Мозг в коробке не может получить доступ к этому опыту, потому что он не может получить прямой доступ к физической или социальной вселенной.
Двести пятьдесят лет назад швейцарский часовщик Пьер Жаке-Дро построил механический автомат, который мог писать пером. Это заводное устройство имеет сотни кулачков и шестеренок и одето как маленький мальчик, сидящий на табурете. После активации мальчик обмакнул перо в чернила и написал короткое сообщение, в частности, картезианский афоризм «Я мыслю, следовательно, я существую». Как смешно! Но даже в 18 веке никто не верил, что куклы граффити действительно мыслят. Скептики LLM относят ChatGPT к той же категории.
Я собираюсь сказать вам, какая из этих противоположных теорий менталитета LLM верна? Я нет. Ни один из вариантов меня не привлекал. Если Бендер и другие правы, то мы должны признать тот факт, что гаджет, не способный рассуждать или чувствовать, не имеющий опыта физической вселенной или социального взаимодействия, не обладающий самосознанием, пишет университетские работы, пишет рэп-песни, дает советы влюбленным. Знания, логика, эмоции ничего не стоят; Скользкий язык - это все. Это подрывное предложение. Если ChatGPT может обмануть нас этим бессознательным шоу, возможно, мы тоже лжецы, и их голоса и гнев бессмысленны.
С другой стороны, если Суцкевер прав, то большую часть человеческого опыта, которым мы дорожим, — чувство личности, которое медленно развивается по мере того, как мы растем и живем, — можно узнать, прочитав эти слова в Интернете. Если это так, то мне на самом деле не нужно терпеть невыразимую боль в средней школе, мне не нужно совершать все глупые ошибки, которые причиняют такую душевную боль и трудности; Нет необходимости ранить свою самооценку, сталкиваясь с миром. Я мог бы прочесть все это, удобно устроившись в кресле; Просто слова могут привести меня к состоянию зрелости с ясным умом, не испытывая всех камней преткновения и боли в долине, которая формирует мою душу.
У меня до сих пор есть два мнения (а может быть, и не два!) о статусе и влиянии больших языковых моделей на информатику. )。 Энтузиасты ИИ могут быть правы. Эти модели могут взять на себя программирование, а также многие другие виды работы и обучения. Или они могут потерпеть неудачу, как и в случае с другими многообещающими инновациями в области ИИ. Я не думаю, что нам нужно ждать слишком долго, чтобы получить ответ.