免责声明: 我不是数学天才,也没有任何编写神经网络的经验。所以,请原谅我在这里所说的任何愚蠢的话。;)

我一直读到有关神经网络用于机器学习的内容,但在尝试编写简单的虚拟机时,我开始想知道它们是否可以以另一种方式应用。

具体来说,可以将虚拟机创建为神经网络吗?如果是这样,它会如何工作(如果必须的话,请随意在此处使用抽象描述)?

我听说过 Joycean Machine,但除了非常非常模糊的解释之外我找不到任何信息。

编辑: 我在这里寻找的是基于神经网络的虚拟机如何解释汇编的确切解释。如何处理输入等?每个单独的输入都是一个内存地址吗?我们来集思广益吧!

有帮助吗?

解决方案

你真的让我的一天好友......

由于已经训练过的神经网络与常规状态机没有太大区别,因此没有必要为确定性指令集编写神经网络VM。

使用多个指令集或未知集训练这样的VM可能会很有趣。但是,我怀疑执行这样的训练是否切实可行,甚至一个%99正确的解释器也可用于传统的字节码。

我能想到的神经网络VM的唯一用途是执行一个包含模糊逻辑结构或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中,包括启发式算法。

你看它看起来很傻而且不完全是上下文敏感的,但是如果没有在线学习,那么神经网络是没有价值的。

其他提示

当然。毫无疑问,网络相当复杂。

大部分字节码/操作码的解析都是神经网络擅长的模式匹配。

您当然可以使用神经网络来做到这一点 - 我可以轻松地看到学习给定字节码片段的正确状态转换。

输入可能类似于:

  • 堆栈顶部的值
  • 当前累加器中的值
  • 当前指令指针处的字节码
  • 当前数据指针处的字节值
  • 以前的旗帜

输出可能类似于:

  • 更改为指令指针
  • 更改为数据指针
  • 更改为累加器
  • 堆栈操作(压入、弹出或什么都不做)
  • 内存操作(读取累加器、写入累加器或什么也不做)
  • 新旗帜

但是 - 我不确定你为什么要这样做。与直接执行字节码相比,神经网络的效率要低得多(并且可能会犯错误,除非你训练得足够好)。无论如何,您可能需要编写一个准确的字节码评估器才能创建足够的训练数据......

此外,根据我的经验,神经网络往往擅长模式识别,但一旦超过一定规模(即,学习逻辑运算(例如二进制加法或异或))就非常糟糕。多于几个位)。因此,根据指令集的复杂性,网络可能需要大量时间来训练。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top