要明确我并不是说,只要序列中的最后两个数字提供下一个数字:
(2, 3, -> 5)
但相反,给定任何索引提供斐波纳契数:
(0 -> 1) or (7 -> 21) or (11 -> 144)
对于任何机器学习结构,添加两个数字是一项非常简单的任务,并且通过扩展计数,两个数字或任何固定数字是一个简单的加法规则.然而递归计算......
据我所知,大多数学习网络只依赖于前向评估,而大多数编程语言都有循环,跳转或循环流模式(所有这些都是某种类型的ASM跳转),从而允许递归.
当然有些网络不仅仅是前锋; 但是,使用双曲正切或sigmoid函数处理权重是否可以进入任何计算完整的状态?
即条件语句,条件跳转,强制跳转,简单循环,具有多个条件的复杂循环,提供排序顺序,元素的实际重新排序,赋值,分配额外的寄存器等等?
似乎即使是非前向唯一的网络也只能找到最佳拟合的多项式,从而减少了训练集范围内的误差,并且不再进一步.
我错过了一些明显的东西,或者大多数机器学习只是看看递归并假装那些问题不存在?
更新
从技术上讲,任何编程语言都可以被认为是遗传算法的DNA,其中编译器(以及可能的控制台测量)将是适应度函数.问题是编程(到目前为止)不能以爬山的方式表达 - 字面上,健身是0,直到健身为1.事情不是编程的一半,如果他们这样做,没有办法衡量一个程序在未知情况下的"工作"程度.即使是一个错误也可能看起来是完全不同且混乱的系统,没有输出.这正是首先学习编码非常困难的原因,学习曲线几乎是垂直的.
有些人可能会争辩说,你只需要为系统提供更强大的基础规则来利用 - 但这只会导致尝试概括所有编程问题,这些问题一直围绕着设计编程语言并且完全失去了某些学习机器的概念.沿着这条道路带您到LISP的近似变体,具有可变异的代码和几乎无意义的健身功能,这些功能可以强制"漂亮"和"简单"的代码空间,以尝试遵循人类编码最佳实践.
其他人可能会争辩说,我们根本没有使用足够的人口或动力来获得错误表面,或者朝着解决方案迈出有意义的一步.但随着你的人口接近DNA排列的数量,你实际上只是粗暴的强迫(并且非常低效).暴力强制代码排列并不是什么新鲜事,绝对不是机器学习 - 它实际上在正则表达式高尔夫中很常见,我认为甚至还有一个关于它的xkcd ......
真正的问题不是找到适用于某些特定递归函数的解决方案,而是找到一个可以以某种有用的方式包含递归域的解决方案空间.
因此,除了使用反向传播训练的神经网络,假设找到递归函数的封闭形式(如果封闭形式甚至存在,并且它们在递归有用的大多数实际情况中不存在),或者非转发网络就像伪编程语言在最好的情况下具有可怕的健身前景,加上调整退出约束以防止无限递归的几乎不可能的任务......到目前为止,机器学习和递归真的是这样吗?
根据Kolmogorov等人的关于通过一个变量和加法的连续函数的叠加来表示多个变量的连续函数,三层神经网络可以使用线性和逻辑函数来模拟任意函数,包括f(n) = ((1+sqrt(5))^n - (1-sqrt(5))^n) / (2^n * sqrt(5))
,这是近似形式的解决方案.斐波那契序列.
如果您希望将问题视为没有封闭形式解决方案的递归序列,我会将其视为一种特殊的滑动窗口方法(我称之为特殊,因为您的窗口大小似乎固定为2).对于您感兴趣的窗口大小,有更多的一般性研究.看到这两个帖子:
基于神经网络的时间序列预测
利用递归神经网络进行时间序列分析的正确方法
好的,从哪里开始......
首先,你谈论'机器学习'和'完美模仿'.这通常不是机器学习算法的目的.他们根据世界上存在的一些证据和一些关于结构的概念做出了明智的猜测.这通常意味着一个近似的答案比一个错误的"确切"答案要好.所以,不,大多数现有的机器学习方法都不是回答你问题的正确工具.
其次,你将"递归结构"称为某种神奇的子弹.然而,它们仅仅是表示函数的便捷方式,有点类似于高阶微分方程.由于他们倾向于引入反馈,因此函数往往是非线性的.一些机器学习方法会遇到麻烦,但是如果有充分的证据,许多(例如神经网络)应该能够很好地逼近你的功能.
另外,在这里,有或没有封闭形式的解决方案在某种程度上是无关紧要的.重要的是手头的功能与机器学习算法中体现的假设的匹配程度.这种关系可能很复杂(例如:尝试使用支持向量机来逼近fibbonacci),但这才是最重要的.
现在,如果您想要一种针对递归结构的精确表示而定制的机器学习算法,您可以设置一些假设并让您的算法产生最适合您数据的"精确"递归结构.可能有现实世界的问题,这样的事情会有用.实际上,优化领域会遇到类似的问题.
其他答案中提到的遗传算法可能就是一个例子,特别是如果你提供的"基因组"与你认为可能正在处理的递归函数相匹配.封闭形式的原语也可以构成该空间的一部分,如果你认为它们比更复杂的遗传生成算法更"精确".
关于你的编程不能以爬山方式表达的断言,这并不妨碍学习算法根据你能够复制多少证据以及它们有多复杂来对可能的解决方案进行评分.在许多情况下(大多数?虽然这里的计数案例实际上不可能)但这样的方法会找到正确的答案.当然,你可以提出病态病例,但对于那些病例,无论如何都没有希望.
总而言之,机器学习算法通常不是为解决"精确"解决方案而设计的,因此它们不是正确的工具.但是,通过嵌入一些先前的假设,确切的解决方案是最好的,也许你正在寻找的那种精确的解决方案,你可能会很好地使用遗传算法,也可能使用支持向量机等算法.
我想你也总结得很好:
真正的问题不是找到适用于某些特定递归函数的解决方案,而是找到一个可以以某种有用的方式包含递归域的解决方案空间.
其他答案还有很长的路要走,告诉你最先进的地方.如果您想要更多,那么前方就会有一条崭新的研究路径!