AI算法能自我修复吗?

人工智能 神经网络 神经元 以人为本 自我意识
2021-11-15 02:32:00

是否存在能够自我治愈或在检测到受伤区域时再生受伤区域的 AI 算法?

例如:在人类中,如果大脑的某个部分受伤或被移除,邻近的部分就会承担这项工作。这可能是因为我们在生物学上无法生长神经细胞。而其他一些身体部位(肝脏、皮肤)会再生大多数类型的损伤。

现在我的问题是是否存在人工智能算法来解决这个问题,即再生受损区域?据我了解,这可以在使用 dropout 的 NN 中实现(可能)。这是正确的吗?是否存在其他算法(针对 AI/NN)或措施来确保在算法本身受到一些损害时发生愈合?

这在处理有关环境的某些信息的处理器单元出现烧毁的情况下特别有用。其他处理节点必须注意补偿或完全接管受损单元的功能。

(直觉上这可能意味着两件事:

  • 我们没有充分利用处理器系统。
  • 由于其他节点接管损坏节点的功能,系统性能将受到影响)

在脑损伤的情况下也会发生这种情况吗?还是我的推论错了?(请投一些光)。

注意:我不是在寻找像重新布线这样的硬件补偿,我是在寻求无形的修复。调整算法的行为或某些参数。

3个回答

好问题。它与遗传算法概念、自动错误检测和持续集成有关。

早期的遗传启发算法

1990 年代的一些剑桥 LISP 代码刻意朝着自我完善的方向努力,这与自我修复不同,但两者是概念上的兄弟姐妹。

其中一些早期的 LISP 算法是受基因启发的,但不是通过有性生殖自然选择对 DNA 突变的纯粹模拟。这些类似进化的算法中的一些基于固定的有效性模型评估了它们自己的有效性。有效性模型将在运行时接受报告的客观指标并对其进行分析。当分析返回的有效性评估低于最小阈值时,LISP 代码将执行此过程。

  • 复制自身(这在 LISP 中很容易)
  • 根据一些元规则改变副本中的算法
  • 将突变作为生产模拟并行运行一段时间
  • 自行检查突变的有效性

如果突变被认为更有效,它将执行四个无私的步骤。

  • 记录自己
  • 附加自己的性能以供以后元规则使用
  • 将它创建的突变加载到自己的位置
  • 执行细胞凋亡

与生物细胞凋亡不同,这些算法中的细胞凋亡只是将计算资源和运行时间控制传递给加载的突变。

这个过程在 LISP 中曾经并且可能仍然比其他语言更容易,尽管其他语言的爱好者会无休止地争论这一点。

持续集成的扩展

当错误报告与持续集成开发平台和工具集成时,这也是闭环持续改进策略。在当今的许多应用程序、框架、库、驱动程序和操作系统中,我们在自动检测提供的错误列表中看到了持续集成的扩展,特别是对于崩溃。闭环自我修复的许多元素已经在最先进的开发团队中普遍实践。

错误修复本身还没有像研究人员在上面的 LISP 代码中尝试的那样自动化。开发人员和团队负责人正在遵循与此类似的过程。

  • 开发人员或团队负责人将错误(分配)给开发人员
  • 开发人员尝试使用相应版本的代码复制错误
  • 如果复制,找到根本原因
  • 修复设计发生在某个级别
  • 修复已实施

如果持续集成和适当的配置管理到位,那么在提交更改到团队存储库时,它将应用于正确的分支,并运行单元、集成和功能测试的测试套件以检测任何修复可能无意中造成的损坏。

几台全自动化已经投入使用

可以看到,许多部分都已用于自动算法、配置和部署包自我修复。甚至有几家公司正在进行项目,通过记录用户行为和用户对诸如“这有帮助吗?”之类的问题的回答来自动创建功能测试。

缺什么

什么需要进一步开发才能更完整地看到全生命周期的自我改进和自我修复软件?

  • 自动错误复制
  • 自动单元测试创​​建
  • 自动修复设计
  • 从设计中自动创建代码

下一步

我建议接下来要做的就是这些。

  • 评估上述四个缺失的自动化已经完成的工作
  • 审查可能在 1990 年代被搁置的 LISP 程序,或者可能没有,因为我们看不到(也不应该看到)什么被分类或使公司保密)
  • 考虑过去二十年内出现的机器学习构建模块如何提供帮助
  • 寻找利益相关者提供项目资源
  • 开始工作

关于需求、道德和技术置换的说明

说实话,软件质量在 1980 年代、1990 年代、2000 年代和 2010 年代都是一个问题。就在今天,在执行该软件旨在执行的一些最基本功能时,我在被认为是稳定版本的软件中发现了十几个错误。

鉴于错误列表的大小,正如事故使人类是否应该驾驶汽车的问题成为问题一样,人类是否应该保持软件质量也是值得怀疑的。

人类已经在许多事情上幸存下来。

  • 用铅笔和橡皮擦算术不见了
  • 带车库工具的专业农业已经不复存在
  • 使用 Exacto 刀具制作广告机械已不复存在
  • 手动分拣邮件不见了
  • 骑马快递沟通没了

很少有软件工程师乐于修复错误。他们似乎最乐于创建充满其他人应该修复的错误的新软件。为什么不让别人做人呢?

是的,这是许多不同人工智能领域的活跃研究领域。

可能最直接相关的工作是 Bongard、Zykov 和 Lipson从 2000 年代初开始的自我修复机器人。

你也可以在这里看到 Mark Yim 最近的一些作品

有很多不同的方法可以做到这一点,但 Bongard 等人的方法可能是最优雅的。基本思想是将其定义为一个学习问题:机器人能够通过进行受控实验来学习其身体的形状。当身体受损时,机器人可以检测到它的身体已经改变了形状(当它试图移动时,传感器不会报告预期值),执行新的实验来确定损坏的程度,然后生成有效的新动作受损区域周围。Lipson 在此视频中非常简要地介绍了该系统的基础知识

更现代的系统使用类似的方法,但试图修复其身体,而不是绕过损坏。它有一个身体应该是什么样子的内部模型,然后是一组相机,可以帮助它定位各个部件并移动它们以重新组装。

Dropout 是一个类似的想法,但 dropout 通常是为了在训练期间鼓励冗余,这可以帮助模型避免过度拟合。通常不会明确地修复损坏的系统,尽管它首先会使系统更能抵抗损坏。

问题和例子有些矛盾。

这个例子是关于物理性脑损伤的。从 1970 年代开始就存在具有自我修复能力的计算机系统。他们可以修复损坏的磁盘(RAID),用空闲的(主动/被动)替换 CPU,标记有故障的内存块,将网络流量从断开的链接重定向到可用的链接,......如今几乎涵盖了所有硬件故障。

然而,问题是关于“能够治愈自己的算法”,这与“能够治愈心理问题的人”有相似之处。

就像人的情况一样,这取决于问题和预期的恢复量。

一些更简单的情况是:

  • 许多非人工智能系统具有重新同步、自动校准、...

  • 如果任何最小的智能系统检测到它正在产生连续的错误结果,它都可以“停止”。

向前迈出一步,在 ML(神经网络,..)中思考,我们可以评论说,所有无监督学习机器都可以从参数错位中恢复,只需重新执行学习过程(或持续执行它)。

最后,我们可以问“机器能否从奖励函数的错误中恢复”?而且,在这一点上,我的回答是“我不知道有任何系统能够做到这一点,因为它们没有常识”。