Позволить ИИ программироваться автоматически — одна из давних мечтаний в области искусственного интеллекта. Теперь два исследователя из Bloomberg и Intel Labs утверждают, что создали первую систему ИИ «Программист ИИ», которая может автоматически генерировать полные программы. Этот «программист ИИ» использует для разработки генетические алгоритмы и языки, полные по Тьюрингу. способный решать любые задачи. Началась эра автоматического программирования ИИ.
Автоматизация программирования ИИ всегда была мечтой ученого-компьютерщика. В настоящее время в этой области очень мало достижений, таких как предоставление ИИ возможности автоматически завершать языки программирования или выполнять простые процедуры добавления. Работа, которую мы собираемся представить сегодня, называется первой системой машинного обучения «AI Programmer», которая может автоматически генерировать полные программы.
Исследователи говорят, что использовали систему, чтобы доказать давнее предположение, что полностью функциональные программы действительно могут быть созданы автоматически. Специально для этой работы AI Programmer использует генетические алгоритмы в машинном обучении для моделирования сложных инструкций. Хотя программы, созданные программистами ИИ сегодня, сравнимы по сложности с результатами, написанными начинающими программистами-людьми. Но исследователи считают, что программы, написанные программистами ИИ, могут выходить за рамки традиционных категорий и не ограничены человеческим временем и интеллектом.
Программы, написанные на основе ИИ, просто находят золотую середину между сложностью тестов и вычислительными ресурсами. Другими словами, возможности безграничны.
Исследователи также заявили, что нам необходимо переосмыслить и разработать новые машинно-ориентированные языки программирования, поскольку существующие языки программирования ориентированы на человека и не подходят для программирования на основе ML. «При рассмотрении будущего поколения драйверов ML нам необходимо отказаться и переосмыслить подход к созданию типичного языка программирования».
Исследователи пишут, что только так мы сможем представить себе новое будущее разработки компьютерного программного обеспечения, управляемое системами искусственного интеллекта и руководимое человеческим творчеством и дизайном.
Архитектура программного обеспечения программиста ИИ. Как видно из рисунка, деталей, управляемых человеком, очень мало, нужно только вводить инструкции в начале и в итоге получать функцию, подходящую для определенной задачи, а все остальное делает машина.
Программист ИИ: автоматически генерировать программы с использованием генетических алгоритмов, теоретически способных выполнять все типы задач.
Согласно статье, исследователи выбрали нетипизированный язык программирования и включили только восемь инструкций, чтобы AI Programmer мог генерировать программное обеспечение.
Язык программирования, используемый AI Programmer, является полным по Тьюрингу, как показано в таблице 1. Теоретически полный по Тьюрингу язык программирования может справиться с любой задачей программирования с неограниченным временем и памятью. По сути, любой язык программирования с таким качеством может решить огромное количество программных задач. Опять же, программное обеспечение, созданное AI Programmer, способно решать все задачи.
С этой гарантией давайте посмотрим на ядро AI Programmer — генетический алгоритм.
Чтобы сгенерировать программу с использованием генетического алгоритма, сначала необходимо создать геном. Геном — это группа генов, объединенных в единое целое. Геном программиста ИИ закодирован как массив чисел с плавающей запятой с фиксированным диапазоном значений от 0 до 1 для каждой уникальной инструкции, как показано в столбце диапазона генов в таблице 1 выше.
Как только геном создан, программист ИИ преобразует его в соответствующую программу, выполняет ее и назначает пригодность полученной программе на основе вывода программы. Чем ближе сгенерированная программа к решению поставленной задачи, тем выше ее приспособленность и тем больше вероятность того, что она продолжит развиваться для следующего поколения. В каждом поколении Программист ИИ использует случайный отбор, кроссовер и мутацию для создания подпрограмм, которые содержат небольшие случайные возмущения и потенциально лучшие геномы, чем их родители, для решения целевой задачи.
На рис. 3 показан пример построения генома из массива чисел с плавающей запятой. Каждый диапазон значений соответствует определенной инструкции языка программирования. Изначально эти значения были случайными, из-за чего получившаяся программа не работала должным образом. Однако один или два из них смогут запускать и выполнять некоторые допустимые инструкции. Чем успешнее выполняется программа, тем больше вероятность того, что код будет продолжать использоваться для более успешного потомства.
Чтобы создать потомство, родители передают часть своих генов своим детям, процесс, показанный на рисунке 4. В дополнение к наследованию инструкций по программированию от своих родителей каждый ребенок может также испытывать мутации, которые представляют собой добавление контролируемых, но случайных изменений в определенные гены. Это приводит к модификации значения конкретного гена, что меняет результирующие инструкции программирования, что, в свою очередь, изменяет всю программу.
Исполняемые файлы ранжируются в соответствии с их выполнением, как показано на рис. 5. Среди них определенные программы немедленно удаляются из геномного пула, а успешные программы продвигаются вперед для создания нового потомства.
AI Programmer использует результат: выводит «Hello World», переворачивает строку, складывает, вычитает и умножает, выводит последовательность Фибоначчи...
AI Programmer состоит из модульной структуры, разработанной C#.NET. Включает механизмы для запуска генетических алгоритмов, кодировщики и декодеры генома, интерпретаторы песочницы для выполнения программ моделирования и компиляторы для преобразования кода в двоичные исполняемые файлы. Хотя AI Programmer изначально был разработан с использованием C#, важно отметить, что принципы проектирования не ограничиваются использованием C#.
Исследователи отмечают, что программная среда адаптивного тестирования AI Programmer является гибкой и была разработана. Пользователи могут самостоятельно разрабатывать бесчисленное количество специализированного программного обеспечения, в конечном итоге руководя созданием генетического алгоритма (ГА) системы и эволюцией программного обеспечения.
Если целевая программа предназначена для генерации строки, такой как «Hello World» (см. выше), результатом теста может быть число в строке. Но поскольку AI Programmer генерирует код на уровне байтов, оценка теста должна учитывать возрастающую разницу в выходных символах.
Исследователи говорят, что они могут создавать множество программ с помощью AI Programmer. Таблица 2 представляет собой список сгенерированных программ.
Вначале исследователи заставили программиста ИИ создать очень простую программу для вывода «привет». После 5700 поколений испытание прошло успешно. Сгенерированный код показан на рисунке 9.
После 580 900 поколений генерируется «hello world», как показано на рисунке 10.
После 6 057 200 поколений Программист ИИ успешно сгенерировал «Я люблю всех людей», как показано на рисунке 11.
AI Programmer создает программы, которые переворачивают строки. Сгенерированный код показан на рисунке 13.
AI Programmer может генерировать программы сложения после 92 400 генераций, программы вычитания после 177 900 генераций, как показано на рисунке 15.
Программа генерации, показанная на рисунке 16, может вывести последовательность Фибоначчи из двух начальных входных значений.
Диссертация: Программист ИИ, Использование генетических алгоритмов для автоматического создания программ
Резюме
В этой статье мы представляем первую систему машинного обучения (ML), которая может автоматически генерировать полную программу с минимальным участием человека. Система под названием «AI Programmer» использует в своей основе генетический алгоритм (GA) в сочетании с жестко ограниченным языком программирования, чтобы минимизировать накладные расходы на поисковое пространство машинного обучения. Новизна AI Programmer частично связана с (i) уникальной конструкцией системы, включающей встроенный ручной интерпретатор для повышения эффективности и безопасности, и (ii) улучшениями генетических алгоритмов, которые включают рандомизированные связывания генов-инструкций (команда-ген), и методы конструирования и удаления генома для конкретных языков программирования. Детализируем ИИ Проект системы программиста с подробным описанием того, как система работает, а также экспериментальные данные с использованием основных ЦП для демонстрации возможностей и производительности, создаваемых программным обеспечением.
источник:Синьчжиюань