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

В последнее время появились сообщения о том, что чат-боты проходят тест Тьюринга, обманывая людей, а также различные критические замечания по поводу теста как полезного показателя прогресса ИИ. Машины, которые побеждают человеческих чемпионов в сложных играх, таких как Libratus и AlphaZero, кажутся полезными в качестве доказательства концепции, а возможности IBM Watson были превращены в полезные коммерческие продукты и услуги. Я предлагаю веху в области ИИ, которая похожа на парадигму Уотсона, но, я утверждаю, особенно актуальна для будущего ИИ.

Тест семантического кодирования:
Учитывая некоторые начальные структуры данных и описание псевдокода (возможно, на естественном языке), ИИ может генерировать функциональный код на нескольких популярных языках (например, Python, C ++, и Java).

Сначала я немного мотивирую, затем объясню, почему я думаю, что это было бы чрезвычайно полезно, и, наконец, вернусь к некоторым практическим деталям и трудностям.

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

На основе этих данных я хочу посмотреть на распределение ближайших ресторанов, чтобы увидеть, как это меняется с определением слова поблизости. То есть для разных пороговых значений удаленности от центра города мне нужна двухмерная гистограмма количества ресторанов по кухням и ценовой категории. Этот вопрос (я надеюсь) легко понять из этого краткого описания и довольно легко сделать для определенных пороговых значений расстояния, но потребовалось много времени, чтобы выяснить, как реализовать в Python Bokeh с ползунком (требуется обратный вызов CustomJS ). Я бы предпочел использовать это время для экспериментов с данными (реальные данные отличаются и содержат гораздо больше полей). Я бы с удовольствием сказал: Создайте фильтр с ползунком для расстояния до центра города и отобразите гистограмму по кухне и ценовой категории, а затем ИИ сгенерирует и запустит код.

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

В частности, я думаю, что исследование данных с помощью ИИ было бы малоизвестным плодом, который принесет много пользы. Различные компании предлагают пользовательские интерфейсы для исследования данных, которые стараются быть более естественными, но системы, как правило, имеют компромисс, заключающийся в меньшей функциональности и настройке. Генерация кода AI позволит быстрее исследовать, но сохранит полную настройку для тех, кто знает, как настроить код.

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

А теперь вернемся к непростым практическим соображениям. Существуют уже существующие попытки машинной генерации кода: например, Google’s AutoML может настраивать код машинного обучения лучше, чем люди, а Microsoft’s DeepCoder может генерировать код на предметно-ориентированном языке. Однако мне не известно о каких-либо усилиях, готовых для прайм-тайма, которые могли бы использовать новички.

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

Что нужно сделать ИИ, чтобы пройти тест семантического кодирования?

  1. Изобразите данный псевдокод в некотором полезном пространстве. Вот где будет полезна возможность интерпретации, подобная Ватсону. Для пользователей кажется разумным также выучить немного стандартизированной лексики - обычного английского, но при точном использовании - навыку, который студенты все равно должны изучать. Это упростило бы этот шаг.
  2. Превратите это представление в четко определенный набор целей. Это по-прежнему проблематично для ИИ.
  3. Сформулируйте план достижения целей. Это будет включать создание подзадач, каждая из которых может порождать фрагмент кода. Это по-прежнему проблематично для ИИ. Более того, некоторые цели могут оказаться невозможными, поэтому ИИ должен будет предложить пользователю обратную связь: указать, почему шаг невозможен, получить разъяснения, предложить компромисс и т. Д.
  4. Выполните план и отлаживайте. Я подозреваю, что даже ИИ будет генерировать небольшие расхождения между различными частями кода для подзадач, поэтому их нужно будет интегрировать во что-то, что может компилироваться / запускаться.

Вехи на этом пути, некоторые из которых уже достигаются существующими усилиями, включают:
A. ИИ может создавать короткие фрагменты кода для вычисления "простых" функций на специализированном языке
B. ИИ может возьмите небольшой блок кода на одном языке и воссоздайте функциональность на другом языке
C. То же, что A для одного из стандартных языков программирования, но без необходимости доступа к специализированным библиотекам
D. То же, что A для стандартный язык программирования со специализированными библиотеками
E. Расширение до многих языков и библиотек

Я понятия не имею, сколько времени потребуется, чтобы достичь этих вех (если когда-либо), но я надеюсь отпраздновать день, когда компьютер создаст для меня значимую программу.

Вы не согласны с этими пунктами или у вас есть другие соответствующие комментарии? Пожалуйста, присоединяйтесь.