如何将有关单调特征的先验知识包含到神经网络中?

数据挖掘 机器学习 神经网络
2022-01-20 23:38:44

举个例子:我想建立一个神经网络来预测一个人是否肥胖。它具有以下特点:

  • 重量
  • 高度
  • 该人进行运动的小时数
  • 超特殊健康指数
  • 富吧

模型的输出是给定人肥胖的概率。越高,可能性越大。

现在我知道,如果其他一切都保持不变,那么更高的权重应该总是相同或更高的输出概率。但我不知道确切的关系,只是它单调地变化。

如何将这些知识包含到网络中并强制它显示所需的行为?

1个回答

如果您将此类数据插入标准网络,例如 MLP,您通常会希望模型自己实际提取此信息。您可以引入一个对这些信息进行编码的虚拟变量,但您冒着模型学习仅遵循虚拟变量并且没有从数据中学习其强大的抽象和特征的风险。

[已编辑:]一个示例可能是创建一个基于权重的变量,该变量被标准化为其他物理特征,例如DV = weight / (height + waist circumfrence). 然后,根据您的假设,这应该与输出肥胖很好地扩展。


人们可能将先验信息包含到模型中的另一种方法是使用概率建模,它结合了贝叶斯统计的思想。您可以做一些事情,例如根据您的输入定义输出的先验分布 - 本质上允许您向模型提供信息(例如体重与肥胖相关,其他条件不变) - 然后推动模型遵循这些线。

如果你想进入它,已经有一些很棒的库可以让它变得非常容易:

  1. Stan - 具有多种语言的接口:Python、R、State 等。
  2. Edward - 具有现代 GPU 加速和深度学习集成(Tensorflow 和 Keras)的概率编程。

似乎是对一些方法和工具的一个很好的概述,但我还没有通读所有内容。


我可以建议的另一种方法是使用模型的架构和辅助模型的想法。看看我最近对​​Szegedy 等人关于 Inception 模型的问题的回答。.

这个想法是,您仅在训练时有分支从模型中脱落,这些分支也会进行预测并产生错误,以通过前面的权重进行反向传播。

您可以制作一个预测肥胖的侧面模型,例如基于输入权重以及从您的神经网络第一层提取的一些相关特征。这将使这种关系的想法或重要性在训练期间更加突出,随后将调整权重以考虑到这一点。

在测试时,您只需忽略这些辅助分支。