Искусственная нейронная сеть, используемая для компиляции исходного кода - PullRequest
3 голосов
/ 14 марта 2011

Было бы правдоподобно иметь ANN, который при обучении миллионам примеров исходного кода и результатам их компиляции мог бы скомпилировать исходный код в правильный вывод?Например, ANN, обученный исходному коду Python и полученному в результате байт-коду Python, который, когда ему предоставляется программа Python, мог правильно скомпилировать его в байт-код.

Ответы [ 4 ]

2 голосов
/ 14 марта 2011

Хотя это может быть очень интересным эпистемологическим вопросом, он, на мой взгляд, не очень интересен с технической точки зрения: если вы посмотрите на то, как развивалось программирование ИИ, вы обнаружите, что первые подходы были ориентированы на обработку чистого логические правила, с которыми люди работают, думая.Например, Решение общих проблем , написанное Саймоном, Шоу и Ньюэллом в 1957 году (!), Пыталось работать на очень высоком абстрактном уровне, следуя общим логическим принципам.

Движущей силой было убеждение, что каждая проблема может быть формализована как логическая проблема и решена с использованием баз знаний с соответствующими правилами вывода.Очевидно, что это не относится к чему-то «тривиальному», как распознавание образов или (визуальное, слуховое и т. Д.) Восприятие.Только после того, как столкнулся с такими проблемами, идея Soft Computing (включая ANN) получила широкое распространение и указала, что для некоторых проблем формальные подходы не уместны .

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

2 голосов
/ 14 марта 2011

Нет, если вы разрешаете произвольно длинные программы.

Если ваш NN конечен, то он может производить только конечное число скомпилированных программ. Но если мы допустим произвольно длинные программы на Python, то у нас будет бесконечное количество скомпилированных программ. Таким образом, конечный NN не может их всех классифицировать.

Даже с программами Python ограниченной длины я думаю, что это вряд ли сработает. NNs хороши и классификационные задачи, такие как «Есть ли на этом фото человек?». Компиляция - это процедурная проблема. Две очень похожие программы на Python могут иметь очень разные функциональные возможности (вы когда-нибудь ошибались в своих отступах в Python?).

0 голосов
/ 22 июля 2018

На самом деле, вы можете компилировать произвольно длинные программы с конечным NN, если вы вводите сегмент кода ограниченного размера за раз.Я думаю, что способ доказать это состоит в том, что:

  • компиляция программы является разрешимой проблемой (например, она может быть решена машиной Тьюринга)
  • , которую вы можете построить из любого логического элементаnand gate
  • вы можете построить машину с полной проверкой, используя логический вентиль
  • нейрон NN, используя в качестве передаточной функции функцию f
    (где f(x) = 1 if x <= 0, f(x) = 0 if x > 0)
    и иметь только два входа с равным весом - это, как правило, nand gate

, так что вы можете построить полный тьюринг NN => существует NN, который может скомпилировать любую программу

0 голосов
/ 14 марта 2011

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

...