Можно ли реализовать виртуальную машину как нейронную сеть?

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

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

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

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

EDIT: Я ищу здесь объяснение того, как именно виртуальная машина на основе нейронной сети будет интерпретировать сборку. Как будут обрабатываться входные данные и т. д.? Будет ли каждый отдельный ввод адресом памяти? Давайте мозговой штурм!


person David Brown    schedule 09.09.2009    source источник
comment
С ответом на редактирование: Вы знакомы с компьютерной архитектурой? Виртуальная машина нейронной сети может быть (как в одном подходе) эквивалентна эмуляции каждой части компьютерного оборудования с помощью виртуальной машины. Так, например, ЦП может быть NN с входами, которые являются битами текущей инструкции, и выходами, которые являются битами регистра управления. Это тип вопроса, который вы задаете?   -  person Walt W    schedule 09.09.2009
comment
Или вы можете просто спросить, завершены ли нейронные сети по Тьюрингу.   -  person quillbreaker    schedule 09.09.2009
comment
Я бы подумал, что если человеческий мозг — это нейронная сеть и вы можете продумать шаги простой виртуальной машины, то да, вы можете сделать виртуальную машину с помощью нейронной сети.   -  person mcjabberz    schedule 09.09.2009
comment
mcjabberz: вы пришли к правильному выводу, но я считаю ваш метод подозрительным. Никогда не было доказано, что человеческий мозг является машиной Тьюринга. Остается (небольшая) вероятность того, что у нас есть оракул Тьюринга, и поэтому обобщение на нейронную сеть может не сработать. Несмотря на это, нейронная сеть завершена по Тьюру.   -  person rmeador    schedule 09.09.2009
comment
Мы не полны по Тьюрингу - в прошлый раз, когда я проверял, у меня не бесконечная память...   -  person Walt W    schedule 09.09.2009
comment
@Walt: хорошо, совершенно верно :) но мы настолько полны по Тьюрингу, как компьютер с ограниченной оперативной памятью.   -  person rmeador    schedule 09.09.2009


Ответы (3)


Ты действительно сделал мой день дружище...

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

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

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

Какой-то глупый пример стековой машины для демонстрации идеи:

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, включая эвристический алгоритм.

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

person artificialidiot    schedule 09.09.2009

Конечно. С довольно сложной сетью несомненно.

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

person mcjabberz    schedule 09.09.2009

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

Ввод может быть примерно таким:

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

Вывод может быть примерно таким:

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

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

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

person mikera    schedule 23.09.2010