一个对应 A Semantic Loss Function for Deep Learning with Symbolic Knowledge 的最小可运行 toy reproduction。
这版不是空目录,而是已经把最核心的结构落成了一个能跑的小实验:
softmax,而是 4 个独立 sigmoid 概率BCEWithLogitsbaseline 和 semantic-guided 两个版本论文里的关键思想不是“再加一个普通惩罚项”,而是:
直接计算模型输出分布落在“满足逻辑约束的赋值集合”上的概率质量。
在这个 toy 里:
exactly_one之所以不用 softmax,是因为如果直接用 softmax,exactly-one 约束会变得过于平凡,难以演示 semantic loss 真正在约束什么。
exactly_one
at_least_one
exactly_two_bad
这三组主要用于看:
这个 toy 保留了论文里最重要的几件事:
简化掉的地方:
03_semantic_loss_toy/
README.md
notes.md
config.py
data.py
constraints.py
model.py
trainer.py
experiment.py
run.py
results/
默认运行:
python run.py
指定实验名:
python run.py --experiment-name default_demo
切换约束集:
python run.py --constraint-set exactly_one --experiment-name good_demo
python run.py --constraint-set at_least_one --experiment-name weak_demo
python run.py --constraint-set exactly_two_bad --experiment-name bad_demo
调节 semantic loss 权重:
python run.py --lambda-semantic 0.6
跳过画图:
python run.py --epochs 40 --skip-plots
默认会在 results/<experiment_name>/ 下生成:
metrics.jsondecision_and_constraint_maps.pngtraining_curves.pngexactly_one vs baseline
exactly_one vs at_least_one
exactly_one vs exactly_two_bad