多层感知器
此功能处于 alpha 层级。有关功能层级的更多信息,请参阅 API 层级.
多层感知器 (MLP) 是一种前馈神经网络。它由多层连接的神经元组成。神经元的值是通过对来自前一层的加权输入的聚合值应用激活函数来计算的。对于分类,输出层的尺寸取决于类的数量。为了优化网络的权重,GDS 使用带有交叉熵损失的梯度下降。
调整超参数
为了平衡模型的偏差与方差、训练的速率与内存消耗等问题,GDS 公开了可以调整的多个超参数。下面将对每个超参数进行描述。
在基于梯度下降的训练中,我们试图找到模型的最佳权重。在每个 epoch 中,我们处理所有训练样本以计算损失和权重的梯度。然后,这些梯度用于更新权重。对于更新,我们使用 Adam 优化器,如 https://arxiv.org/pdf/1412.6980.pdf 中所述。
有关训练的统计信息,请参阅 neo4j 调试日志。
耐心
此参数定义无效果连续 epoch 的最大数量。如果 epoch 没有将训练损失提高至少当前损失的 tolerance
部分,则该 epoch 则为无效果的。
假设训练运行了 minEpochs
次,此参数定义训练何时收敛。
设置此参数可以带来更稳健的训练,并避免类似于 minEpochs
的过早终止。但是,较高的耐心会导致运行比必要更多的 epoch。
根据我们的经验,patience
的合理值在 1
到 3
的范围内。
容忍度
此参数定义何时将一个 epoch 视为无效果的,并且与 patience
一起定义了训练的收敛标准。如果 epoch 没有将训练损失提高至少当前损失的 tolerance
部分,则该 epoch 则为无效果的。
较低的容忍度会导致更敏感的训练,训练时间更长的可能性更高。较高的容忍度意味着训练不太敏感,因此会导致更多 epoch 被计为无效果的 epoch。
批次大小
此参数定义将多少个训练样本分组到一个批次中。
使用 concurrency
个线程并行计算批次上的梯度。在一个 epoch 的末尾,梯度会在更新权重之前进行累加和缩放。batchSize
不会影响模型质量,但可以用来调整训练速度。更大的 batchSize
会增加计算的内存消耗。
类别权重
此参数引入了类别权重的概念,在 T. Lin 等人撰写的“密集目标检测的焦点损失”中有所研究。它通常被称为平衡交叉熵。它为交叉熵损失函数中的每个类别分配一个权重,从而使模型能够以不同的重要性对待不同的类别。它针对每个示例定义为:
其中at
表示真类别的类别权重。pt
表示真类别的概率。
对于类别不平衡问题,类别权重通常设置为类别频率的倒数,以提高模型对少数类别的归纳偏差。
焦点权重
此参数引入了焦点损失的概念,同样在 T. Lin 等人撰写的“密集目标检测的焦点损失”中有所研究。当focusWeight
的值为大于零的数字时,损失函数会从标准交叉熵损失变为焦点损失。它针对每个示例定义为:
其中pt
表示真类别的概率。focusWeight
参数是表示为g
的指数。
增加focusWeight
将引导模型尝试拟合“困难”的错误分类示例。一个困难的错误分类示例是指模型对真类别具有低预测概率的示例。在上式中,损失对于低真类别概率示例将呈指数级增长,因此模型会调整以尝试拟合这些示例,代价可能是对“容易”示例的信心降低。
在类别不平衡的数据集中,少数类别通常更难正确分类。有关链接预测中类别不平衡的更多信息,请阅读 类别不平衡。