用途:nvalchemi 训练流程中的损失函数 API,用于组合内置损失或按模板方法模式实现自定义损失。损失函数是 torch.nn.Module 子类,根为 BaseLossFunction;叶子消费 (pred, target, **kwargs) 返回标量;ComposedLossFunction 将键控预测/目标映射路由到叶子,按组件权重(float 或 LossWeightSchedule)加权,返回 ComposedLossOutput TypedDict。
内置损失:EnergyMSELoss(默认能量回归,系统规模变化时配 per_atom=True)、EnergyMAELoss、EnergyHuberLoss;ForceMSELoss(默认力目标)、ForceL2NormLoss、ForceHuberLoss;StressMSELoss、StressHuberLoss(仅在应力标签可靠且模型输出应力时使用)。组合示例:loss_fn = 1.0 * EnergyMSELoss() + 10.0 * ForceMSELoss() + 0.1 * StressMSELoss();out = loss_fn(predictions, targets, step=step, epoch=epoch, batch=batch);out["total_loss"].backward()。需要图结构的损失可传 batch=。
自定义:BaseLossFunction.forward 依次调用 validate、normalize、mask、compute_residual(抽象,必须重写)、reduce。最少只需实现 compute_residual。可通过重写 normalize 实现逐原子归一化(把权重放入 ReductionContext["weights"],基类 reduce 自动使用);重写 mask 排除非有限值或 padding;重写 reduce 实现按图平衡归约并填充 self.per_sample_loss。参与组合的损失应定义 target_key 和 prediction_key,钩子接受 **kwargs;compute_residual 需用 valid 掩码将无效项置零。多布局(稠密 (V,3) 与填充 (B,V_max,3))可参考 terms.py 用 plum 的 @overload/@dispatch 实现。ReductionContext 是 dict 子类以兼容 torch.compile。关键文件包括 composition.py、terms.py、reductions.py、schedules.py、base.py 及测试与用户指南。限制:资料未提供安装命令、收费、性能或平台信息。