如何决定一个问题是需要算法还是机器学习技术来解决?
链接问题和您的问题中描述了两个不同的问题:优化和学习。
优化
如果您询问优化(第二个链接问题:使用学习机算法搜索最小值),您可以有 3 种不同的方法:
- 分析法
- 数值方法
- 元启发式
正如您所建议的,通常最好从第一个到最后一个尝试。第一种方法对于目标函数的优化通常是不可行的,但通常您可以对某些特定类别的问题(例如线性/二次规划)或迭代方法(例如共轭梯度法)使用数学优化。只有在考虑了这种方法之后,第三类方法才有意义,遗传算法是一个值得注意的例子,它通常被归类为人工智能方法。
学习
如果您问的是学习,那么第一个相关问题(关于如何让神经网络学习如何将序列拆分为子序列的想法)似乎是一个示例。但是并不清楚问题是什么,因为目标函数似乎很明显,所以不需要学习。
在这种情况下,首先尝试以数学方式确定问题并在不可能并且如果您有数据(输入/输出示例)时求助于机器学习也是有意义的。
当我们将监督学习应用于问题时,我们已经在系统化该方法。人类已经决定存在一个功能(从输入映射到唯一输出),并且提供的功能是唯一需要考虑的功能。然后学习继续寻找给定这些限制的最佳解决方案。无监督学习更通用一些,搜索可能不一定是函数的关联或关系。神经网络还不能概括和要求更多信息,除非有人干预,否则它只会变得更具体。
一切都取决于问题的细节。如果很明显某个函数必须存在,那么我们可以设置一个 NN 来找到该函数。许多其他问题更加困难——一家公司正在亏损,你有数据,但中途更换了 CEO,因此必须混合人为推理来处理这种情况。人类可以修改 NN 的体系结构以引入虚拟变量,但 NN 自身无法做到这一点。
所以你的答案真的是“我选择这种方法是因为(缺乏)我需要人为地限制解决问题的方法。”
嗯,有了基本的、非平凡的 M 游戏,我毫不怀疑 ALphaZero 可以在很短的时间内撕裂任何活着的人类玩家。我希望人们会开始尝试这一点,尤其是在 m > 3 和 n > 2 的 m^n(m^n) 上,看看它们是如何承受的。问题是,一旦你扩展超过 n > 3,人类就很难玩了。这导致了一种情况,即高阶 M 上的 NN 的性能只能针对其他算法进行实际评估。在这种情况下,开发一种通用的经典算法似乎是值得的,它可以评估任何阶 M,而不管树搜索与问题大小相关的效果如何,但要理解在博弈树变得易于处理之前,决策永远不会被认为是最优的。m或n确实改变了核心启发式。
从实际的角度来看,作为一款为移动设备设计的产品,没有假设连接性,在最小公分母的移动设备拥有足够的资源之前,开始集成 NN 是没有意义的。在这种情况下,包大小的问题也很重要——经典算法需要少量的代码和体积。最重要的是,使用由启发式算法和参数集组成的经典算法允许重新组合函数以产生各种强度不同的自动机。(这可以通过改变树搜索算法的大小来轻松实现,但可能只与确定哪些启发式算法在树搜索限制下表现更好有关。)
最后,由于 M-games 提供了一系列精确的度量,因此开发基于人类推理的核心启发式函数可能是值得的。
请注意,“算法上”可以指任何使用算法的东西。目前,机器学习系统是用算法训练的,神经网络可以看作是算法(尽管是黑盒算法),所以机器学习也是算法的。在计算机上运行的所有东西(图灵机的具体版本)都可以被视为一种算法(或程序)!事实上,计算机正是为此目的而发明的:执行一些算法操作(即一组指令,如食谱)。
因此,通过algorithmic,我假设您指的是通常在计算机科学专业学生的“算法和数据结构”课程中教授的技术,例如二分搜索(最简单但最漂亮和有用的算法之一! ),这是一种算法,在给定一些约束(排序数组)的情况下,可以为您提供一个完全正确的解决方案时间。但是,我认为您还指的是主要基于 if-then 语句和循环的每个程序(例如桌面应用程序、网站等)
要回答您的问题,您首先需要了解机器学习领域的范围。
机器学习(如统计学)是一组试图从数据中学习的技术。因此,可以通过机器学习技术解决每个可用数据(并且您可以从中获得洞察力)的问题。ML 技术通常会产生近似解,并且通常用于解决精确解不可行的问题。但是,请注意,机器学习并不是解决难题的唯一方法(例如,您还可以使用元启发式算法,例如蚁群优化算法)。
如果您有一个算法可以在多项式时间内(最好在时间),那么机器学习(或任何其他产生近似解决方案的技术,例如启发式)是毫无用处的。