什么是“广义”机器学习算法?

人工智能 机器学习 算法
2021-10-26 20:55:45

说机器学习算法的结果可以“泛化”是什么意思?

我不明白什么是“通用”算法、例程或函数。

我搜索了字典和词汇表,但找不到解释。另外,如果有人能告诉我这类东西的好来源在哪里?我正在写关于 AI 和 ML 的文章。

4个回答

实际上,您在那里使用了 2 个术语:

  • 第一个是机器学习算法的结果可以“泛化”。这是指您经过训练的机器学习模型在以前看不见的数据(测试集或现场实施)上的表现如何。这尤其不容易,因为数据趋势可能会随着时间的推移而变化,从而导致准确性下降。有多种方法可以实现这一点(具有交叉验证集和测试集,属于k 折交叉验证的广泛方案)
  • 您提到的第二个是“通用”算法、例程或函数。大多数机器学习算法可以应用于广泛的问题。例如,NN 的训练通常由普遍应用于所有 NN 的反向传播来完成。类似地,您可以使用 CNN 在任何可以以图形形式(DNA 字符串)表示的东西中查找本地感兴趣的特征(即本地依赖项)。CNN 和 RNN 的组合也被用于解决许多问题。因此,只有一个基本的广义算法被应用于许多问题。注意:我从未见过有人在这种情况下使用它,但实际上它确实发生了。

以下是一些用于一般阅读目的(非数学)的资源:

简短的回答是:广义机器算法是一种算法,它可以在以前从未见过的新数据中做得很好并给出很好的结果

使用用算法、例程或函数概括的形容词是晦涩的。更合适的术语是通用的。

泛型从早期的加载器开始,在完整的操作系统被开发出来之前。这个想法是,一个模块可以被加载到计算机内存中,并且加载器能够执行它的功能,无论加载的信息是程序、从程序调用的例程、加载器的更新还是要由程序。这种抽象主要是库尔特·哥德尔和约翰·冯·诺依曼等数学家的心血结晶,他们两人都为抽象代数领域的同类通用表示做出了贡献。

泛型的思想传播到文件系统的开发中。在开发 LISP 时,故意模糊程序和数据之间的区别被构建到低级函数中,以便同时使用两者。函数式编程在 LISP 社区中发展为更高层次的抽象。

泛型的概念由 James Coplien 引入 C++,使用术语idiom来解决可维护性和可读性问题,早期笨拙地尝试使用 C pre-prossessing 指令进行泛型编程。第一个高度可用的泛型形式出现在 SGI 开发的 Alexander Alexandrovich Stepanov 的标准模板库 (STL) 中。COBRA 和 DCOM 等框架旨在允许通用消息传递。

通用编程结构传播到 Java,然后传播到其他语言。许多算法是通用编写的,因此在编译时使用模板之前,该算法所使用的实际对象类型是未知的。

多层感知器是一个通用的学习组件,由前向信号传播的特定数值表示、后向校正信号的数值表示、层深度、每层的宽度和激活函数、学习率和其他超参数进行参数化。(所谓的网络参数不是通用网络的参数,而是控制每一层的输入混合并成为学习过程的主要数据输出的参数。)

其他人工网络类型在这方面是相似的。

甚至单元类型也可以是网络中的类型参数。请参阅神经网络单元(节点)类型

问题是,“机器学习算法的结果可以泛化是什么意思?” 无法智能回答。概括结果过于笼统地描述了可以对结果做些什么而没有任何意义。这可能只是修辞。

没有普遍的“此类事物的良好来源”。对于非常具体的事物,有许多优秀的资源,其数量是勉强正确和缺乏教育意义的资源的一百倍。如果您没有时间仔细检查您正在阅读的内容以仔细提取宝石,那么在受人尊敬的大学参加一些课程以从比互联网更可靠的来源获得更坚实的基础可能是明智的。

当机器学习模型在训练和测试数据集上表现同样出色时,它被称为“泛化”。

为了让任何有监督的机器学习算法运行良好,您需要在大型数据集(训练)上对其进行训练,并在概率分布与训练集相似但不是训练集一部分的数据集上评估其性能。该集合称为“测试”集,然后在该集合上评估性能,如果训练和测试准确度几乎相同,则说模型泛化良好,如果训练准确度远高于测试准确度,则模型以某种方式“记住”训练集并称为“过度拟合”。