Технология в деталях №18, июнь 2023

Конец программирования

Фото аватара
Мэтт Уэлш

Свое совершеннолетие я встретил в 1980-х, программируя дома персональные компьютеры, такие как Commodore VIC-20 и Apple. Параллельно я продолжал изучать информатику (computer science, CS) в колледже, что в итоге привело меня к получению докторской степени в Беркли. Основная часть моей профессиональной подготовки была связана с тем, что я буду называть «классической» компьютерной наукой: программированием, алгоритмами, структурами данных, системами, языками программирования.

Цель классической информатики – свести любую идею или историю, написанную на естественном языке, к программе, написанной на языке формальном. То есть каждая идея в Classical CS — независимо от того, насколько она сложна или изощренна, от алгоритма соединения с базой данных до умопомрачительно бестолкового консенсусного протокола Paxos — может быть выражена в виде удобочитаемой и понятной человеку программы.

Когда я учился в колледже в начале 1990-х, мы все еще находились в стадии «ИИ-зимы», где доминировали классические алгоритмы. Моей первой исследовательской работой в Корнельском университете была совместная работа с Дэном Хаттенлохером (DanHuttenlocher) — лидером в области компьютерного зрения (а ныне деканом Колледжа вычислительных технологий имени Шварцмана Массачусетского технологического института).

На курсе Хаттенлохера по компьютерному зрению в 1995 году (или около того) мы ни разу не обсуждали что-то похожее на глубокое обучение или нейронные сети – везде использовались только классические алгоритмы, такие как детектор границ Кэнни, оптический поток и хаусдорфовы расстояния. Глубокое обучение находилось в зачаточном состоянии и даже не считалось заслуживающим внимания в контексте ИИ, не говоря уже о CS.

Конечно, это было 30 лет назад, и с тех пор многое изменилось, но одна вещь, которая на самом деле не изменилась, это то, что CS преподается как дисциплина, в основе которой лежат структуры данных, алгоритмы и программирование.

Я буду удивлен, если через 30 или даже 10 лет мы все еще будем подходить к CS таким же образом. На самом деле, я думаю, что CS как отрасль ждут довольно серьезные потрясения, к которым немногие из нас действительно готовы.

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

Я не считаю эту идею сумасшедшей. Несомненно, самые ранние пионеры информатики, вышедшие из (относительно) примитивной пещеры электротехники, твердо верили, что всем будущим ученым-компьютерщикам потребуется глубокое понимание полупроводников, двоичной арифметики и проектирования микропроцессоров, чтобы понимать программное обеспечение. Перенесемся в сегодняшний день, и я готов поспорить на хорошие деньги, что 99% людей, которые пишут программное обеспечение, почти не имеют представления о том, как на самом деле работает процессор, не говоря уже о физике, лежащей в основе конструкции транзистора. Более того, я считаю, что компьютерщики будущего будут настолько далеки от классических определений «программного обеспечения», что им будет трудно перевернуть связанный список или внедрить быструю сортировку. (Я, кстати, не уверен, что помню, как реализовать быструю сортировку самостоятельно.)

Помощники по программированию на основе ИИ, такие как CoPilot, лишь поверхностно касаются того, что я описываю. Мне кажется совершенно очевидным, что все программы в будущем, в конечном счете, будут написаны ИИ, а людям будет отведена в лучшем случае контролирующая роль. Любому, кто сомневается в этом прогнозе, достаточно взглянуть на очень быстрый прогресс, достигнутый в других аспектах создания контента ИИ, таких как, например, создание изображений. Разница в качестве и сложности между DALL-E v1 и DALL-E v2, о выходе которой было объявлено всего через 15 месяцев, ошеломляет. Если я чему-то и научился за последние несколько лет работы в области ИИ, так это тому, что очень легко недооценить силу все более крупномасштабных моделей ИИ. Вещи, которые еще несколько месяцев назад казались фантастикой, быстро становятся реальностью.

Так что я говорю не только о том, что CoPilot на Github заменяет программистов.1 Я говорю о замене всей концепции написания программ обучающими моделями. В будущем студентам компьютерных наук не нужно будет изучать такие рутинные навыки, как добавление узла в двоичное дерево или программирование на C++. Такое образование устареет так же, как устарело обучение студентов технических специальностей использованию логарифмической линейки.

Инженеры будущего в несколько нажатий клавиш запустят модель с четырьмя квинтиллионами параметров, где уже закодирован весь объем человеческих знаний; модель эта будет готова к любой задаче, требуемой от машины. Основная часть интеллектуальной работы, направленной на то, чтобы заставить машину делать то, что нужно, будет заключаться в том, чтобы придумать правильные примеры, подобрать правильные данные для обучения и найти правильные способы оценки процесса обучения. Достаточно мощные модели, способные обобщать посредством обучения за несколько шагов, потребуют лишь несколько хороших примеров для выполнения задачи. Массивы данных, тщательно подобранные человеком, в большинстве случаев уже не понадобятся, и большинство людей, «обучающих» модель ИИ, не будут запускать циклы градиентного спуска в PyTorch или что-то подобное. Они будут учиться на собственном примере, а все остальное сделает машина.

В этой новой информатике — если мы вообще будем называть ее компьютерной наукой, computer science, — машины будут настолько мощными и будут знать, как делать такое множество вещей, что эта область будет выглядеть не столько как инженерное предприятие, сколько как образовательное; то есть наука о том, как лучше всего обучать машину, мало чем отличается от поиска лучших способов обучения детей в школе. Однако эти системы ИИ будут управлять нашими самолетами, нашими энергосистемами и, возможно, даже целыми странами – в отличие от (человеческих) детей. Я бы сказал, что значительная часть классической информатики становится неактуальной, когда мы фокусируемся на обучении интеллектуальных машин, а не на их непосредственном программировании. Программирование в общепринятом смысле фактически умрет.

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

Этот сдвиг подчеркивается тем фактом, что никто на самом деле не понимает, как работают большие модели ИИ. Люди публикуют исследовательские работы,3,4,5 фактически обнаруживая новое поведение существующих больших моделей, несмотря на то, что эти системы были спроектированы людьми. Крупные модели ИИ способны делать то, чему их явно не обучали, и это должно напугать до смерти Ника Бострома (Nick Bostrom)2 и всех, кто беспокоится (по праву) о сверхразумном ИИ, выходящем из-под контроля. В настоящее время у нас нет другого способа определить пределы существующих систем ИИ, кроме как сделать это путем эмпирического исследования. Что касается будущих моделей ИИ, которые на несколько порядков больше и сложнее, — удачи!

Смещение акцента с программ на модели должно быть очевидным для любого, кто читал современные статьи по машинному обучению. В этих документах почти не упоминается код или системы, лежащие в основе этих инноваций; строительные блоки систем ИИ — это абстракции гораздо более высокого уровня, такие как уровни внимания, токенизаторы и наборы данных.

Путешественнику во времени, перенесшемуся к нам из 2000-х, было бы трудно понять даже три предложения в (75-страничном!) документе GPT-3,3 описывающем фактическое программное обеспечение, созданное для модели:

«Мы используем ту же модель и архитектуру, что и GPT-2, включая модифицированную инициализацию, предварительную нормализацию и обратимую токенизацию, описанные в нем, за исключением того, что мы используем чередующиеся плотные и локально полосчатые разреженные паттерны внимания в слоях трансформера, аналогично разреженному трансформеру. Чтобы изучить зависимость производительности машинного обучения от размера модели, мы обучаем восемь различных размеров модели в диапазоне более трех порядков от 125 миллионов параметров до 175 миллиардов параметров, причем последней является модель, которую мы называем GPT-3. Предыдущая работа предполагает, что при достаточном количестве обучающих данных масштабирование потерь при проверке должно быть приблизительно сглаженной степенной зависимостью от размера; множество обучающих моделей различных размеров позволяют нам проверить эту гипотезу как для потерь при проверке, так и для последующих языковых задач».

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

Ссылки:

  1. Бергер, Э. Борьба со вторым пилотом. Блог о перспективах SIGPLAN PL, 2022; https://bit.ly/3XbJv5J
  2. Бостром Н. Сверхразум: пути, опасности, стратегии. Издательство Оксфордского университета, 2014.
  3. Браун Т. и соавт. Языковые модели — это учащиеся с небольшим количеством попыток. 2020; https://bit.ly/3Eh1DT5
  4. Кодзима Т. и соавт. Большие языковые модели — это бесполезные рассуждения. 2022; https://bit.ly/3Ohmlqo
  5. Най М. и соавт. Покажите свою работу: Блокноты для промежуточных вычислений с языковыми моделями. 2021; https://bit.ly/3TLnfMY

Об авторе

Мэтт Уэлш (mdw@mdw.la) — генеральный директор и соучредитель Fixie.ai, недавно основанного стартапа, разрабатывающего возможности искусственного интеллекта для поддержки групп разработчиков программного обеспечения. Ранее он был профессором компьютерных наук в Гарвардском университете, техническим директором в Google, ведущим инженером в Apple и старшим вице-президентом по инженерным вопросам в OctoML. Он получил докторскую степень в Калифорнийском университете (в Беркли) в те дни, когда ИИ еще не очень хорошо играл в шахматы.

Цифровая библиотека издается Ассоциацией вычислительной техники. Авторское право © 2023 ACM, Inc.

Вспомните предсказание Эда Юрдона (Edward Yourdon) в 1992 году (см. https://en.m.wikipedia.org/wiki/Decline_and_Fall_of_the_American_Programmer). Прогноз Мэтта Уолша может быть точным, а может и нет, но временные рамки не всегда ясны.