Глубокие нейронные сети решают множество сложных проблем, но программирование? Microsoft Research и Кембриджский университет думают, что это вполне возможно, и добиваются определенного успеха — хватит ли нам паниковать? На данный момент кажется, что наши рабочие места безопасны, но …
Работа началась несколько лет назад, но последние результаты только что были представлены на Международной конференции по обучающимся представлениям (ICLR, 2017).
Есть много проблем с машинным обучением, применяемым к программированию, но самая большая проблема заключается в том, что целевой результат не дифференцируем. То есть. небольшое изменение текста программы не имеет большого значения для вывода. Фактически, небольшое изменение вывода часто делает программу недействительной, и поэтому мы переходим от чего-то работающего и, возможно, эффективного к чему-то бессмысленному.
Распространенный подход — попытаться сделать языковое соединение ввода / вывода каким-либо образом дифференцируемым. В данной работе используется не такой подход:
«Мы утверждаем, что машинное обучение может обеспечить значительную ценность для решения индуктивного синтеза программ (IPS), преобразовав проблему в проблему больших данных. Мы показываем, что обучение нейронной сети на большом количестве сгенерированных задач IPS для прогнозирования сигналов от описание проблемы может помочь при поиске «.
Однако по-прежнему существует потребность в использовании специального упрощенного языка — языка, специфичного для домена DSL. Это что-то вроде SQL или LINQ, способное решать проблемы реального мира. Используемые функции ограничены работой с целыми числами или целочисленными массивами. Как видно из приведенного ниже примера, язык очень «функциональный».
Затем грамматика языка была использована для создания набора данных программ, которые соединяют входы с выходами. Затем нейронная сеть получила наборы входных выходов и обучена предсказывать наличие или отсутствие отдельных функций в языке.
Это создало нейронную сеть, которая могла брать наборы ввода-вывода и предсказывать характеристики программы, которая их создала. Затем это использовалось, чтобы направлять алгоритм поиска, чтобы найти программу, которая производит наборы ввода-вывода. Помимо работы с программами фиксированного размера, команда также попыталась обучить более короткие программы, а затем использовать это, чтобы найти более крупные программы в качестве теста на их обобщаемость.
Программа работала тем, что сокращала время поиска тегов на 1–3 порядка. Кроме того:
«Мы обнаружили несколько проблем в реальных задачах онлайн-программирования, которые могут быть решены с помощью программы на нашем языке, которая подтверждает актуальность класса задач, которые мы изучали в этой работе. В целом это говорит о том, что мы добились значительного прогресса. к возможности решать проблемы конкуренции в программировании, а компонент машинного обучения играет важную роль в обеспечении управляемости «.
Так что это может быть не конец вашей работы, но может стать концом веселья с соревнованиями по программированию определенного типа.