多层感知机
此功能处于 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 被计为无生产力。
批量大小
此参数定义了单个批次中分组的训练样本数量。
梯度通过使用 concurrency
个线程并发地在批次上计算。在每个 epoch 结束时,梯度会被求和并缩放,然后用于更新权重。batchSize
不影响模型质量,但可用于调优训练速度。较大的 batchSize
会增加计算的内存消耗。
类别权重
此参数引入了类别权重的概念,该概念在 T. Lin 等人的“Focal Loss for Dense Object Detection”中进行了研究。它通常被称为平衡交叉熵。它为交叉熵损失函数中的每个类别分配一个权重,从而允许模型以不同的重要性对待不同的类别。对于每个样本,其定义为
其中 at
表示真实类别的类别权重。pt
表示真实类别的概率。
对于类别不平衡问题,类别权重通常设置为类别频率的倒数,以改善模型在少数类别上的归纳偏差。
焦点权重
此参数引入了焦点损失的概念,该概念同样在 T. Lin 等人的“Focal Loss for Dense Object Detection”中进行了研究。当 focusWeight
的值大于零时,损失函数从标准交叉熵损失变为焦点损失。对于每个样本,其定义为
其中 pt
表示真实类别的概率。focusWeight
参数是表示为 g
的指数。
增加 focusWeight
将引导模型尝试拟合“难以”错误分类的样本。一个难以错误分类的样本是指模型对真实类别的预测概率较低的样本。在上述等式中,对于真实类别概率较低的样本,损失将呈指数级增加,从而调整模型以尝试拟合它们,代价是可能对“容易”的样本信心不足。
在类别不平衡的数据集中,少数类别通常更难正确分类。有关链接预测中类别不平衡的更多信息,请参阅类别不平衡。