2

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

我一直在阅读有关用于机器学习的神经网络的文章,但是在尝试编写简单的虚拟机时,我开始怀疑它们是否可以以其他方式应用。

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

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

编辑:我在这里寻找的是对基于神经网络的 VM 将如何解释程序集的确切解释。如何处理输入等?每个单独的输入都会是一个内存地址吗?让我们集思广益!

4

3 回答 3

2

你真的让我的好朋友...

由于已经训练过的神经网络与常规状态机没有太大区别,因此没有必要为确定性指令集编写神经网络 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 中,包括启发式算法。

您会发现它看起来很傻,而且不完全区分上下文,但是如果不在线学习,神经网络就没有任何价值。

于 2009-09-09T20:34:50.540 回答
1

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

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

于 2009-09-09T16:19:28.200 回答
1

你当然可以用神经网络来做到这一点——我可以很容易地看到学习给定字节码的正确状态转换。

输入可能是这样的:

  • 栈顶值
  • 电流累加器中的值
  • 当前指令指针处的字节码
  • 当前数据指针处的字节值
  • 以前的标志

输出可能类似于:

  • 更改为指令指针
  • 更改为数据指针
  • 改为蓄能器
  • 堆栈操作(push、pop 或无)
  • 内存操作(读累加器,写累加器或什么都不做)
  • 新旗帜

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

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

于 2010-09-23T11:06:33.130 回答