Может ли виртуальная машина быть реализована как нейронная сеть? - PullRequest
2 голосов
/ 09 сентября 2009

Отказ от ответственности: Я не математический гений и не имею опыта написания нейронных сетей. Поэтому, пожалуйста, прости меня за все те идиотские вещи, которые я здесь произнесу. ;)

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

В частности, можно ли создать виртуальную машину как нейронную сеть? Если да, как это будет работать (не стесняйтесь использовать абстрактное описание здесь, если нужно)?

Я слышал о Машине Джойстика, но не могу найти никакой информации, кроме очень, очень смутных объяснений.

РЕДАКТИРОВАТЬ: Здесь я ищу объяснение того, как виртуальная машина на основе нейронной сети будет интерпретировать сборку. Как будут обрабатываться входные данные и т. Д.? Будет ли каждый отдельный ввод адресом памяти? Давайте проведем мозговой штурм!

Ответы [ 3 ]

2 голосов
/ 10 сентября 2009

Ты действительно сделал мой день приятель ...

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

Может быть интересно обучить такую ​​ВМ с несколькими наборами команд или неизвестным набором. Однако я сомневаюсь, что такое обучение будет практичным, и даже правильный интерпретатор% 99 пригодится для обычного байт-кода.

Единственное использование нейронной сети, которую я могу придумать, - это выполнение программы, содержащей нечеткие логические конструкции или эвристику алгоритма AI.

Пример глупого стека, демонстрирующий идею:

push [x1]
push [y1] ;start coord
push [x2]
push [y2] ;end coord
pushmap [map] ;some struct
stepastar ;push the next step of A* heuristics to accumulator and update the map
pop ;do sth with is and pop
stepastar ;next step again
... ;stack top is a map
reward ;we liked the coordinate. reinforce the heuristic
stepastar
... ;stack top is a map
punish ;we didn't like the next coordinate. try something different

Здесь нет объяснения эвристики. Просто предположим, что мы сохраняем все состояния в * map, включая эвристический алгоритм.

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

1 голос
/ 09 сентября 2009

Конечно. Без сомнения, с довольно сложной сетью.

Большая часть синтаксического анализа байт-кодов / кодов операций - это сопоставление с образцом, в котором нейронные сети превосходят.

0 голосов
/ 23 сентября 2010

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

Ввод может быть что-то вроде:

  • Значение на вершине стека
  • Значение в аккумуляторе тока
  • Байт-код в текущем указателе инструкций
  • Значение байта в текущем указателе данных
  • Предыдущие флаги

Вывод может быть что-то вроде:

  • Изменить указатель на инструкцию
  • Изменить указатель данных
  • Изменить на аккумулятор
  • Операция со стеком (push, pop или ничего)
  • Операция с памятью (чтение в аккумулятор, запись в аккумулятор или ничего)
  • Новые флаги

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

Кроме того, по моему опыту, нейронные сети, как правило, хороши в распознавании образов, но очень плохо в изучении логических операций (таких как двоичное сложение или XOR), когда вы выходите за пределы определенного масштаба (то есть больше, чем несколько бит). Поэтому, в зависимости от сложности вашего набора инструкций, для обучения сети может потребоваться очень много времени.

...