Informed_machine_learning

logic_net_toy

一个对应 Harnessing Deep Neural Networks with Logic Rules 的扩展 toy reproduction。

当前版本已经不只是最小单次实验,而是支持:

这个 toy 在做什么

任务是二维二分类。

当前支持的规则集

这几组规则分别用于:

和原论文的对应关系

这个 toy 保留了原论文最核心的结构:

  1. student -> teacher -> student
  2. teacher 由当前 student 输出和规则联合构造
  3. 训练目标同时包含标签监督和 teacher 模仿

简化部分:

  1. 任务从文本改成二维分类
  2. 规则从一阶逻辑简化成可解释的软规则集合
  3. teacher 从完整 posterior regularization 简化成“student 概率 + rule 概率”的对数加权融合

目录结构

01_logic_net_toy/
  README.md
  notes.md
  config.py
  data.py
  experiment.py
  model.py
  rules.py
  sweep.py
  trainer.py
  run.py
  results/

单次实验

默认运行:

python run.py

带规则集和实验名:

python run.py --rule-set multi_good --experiment-name multi_good_demo

错误规则对照:

python run.py --rule-set single_bad --experiment-name wrong_rule_demo

跳过画图:

python run.py --epochs 80 --rule-set multi_mixed --skip-plots

参数扫描

最常用的扫描命令:

python sweep.py --name quick_scan --epochs 40

自定义扫描:

python sweep.py ^
  --name labeled_vs_rules ^
  --epochs 50 ^
  --seeds 7,13 ^
  --num-labeled-values 32,64,128 ^
  --rule-strengths 0.5,1.0,1.5 ^
  --distill-weights 0.35,0.65 ^
  --rule-sets single_good,single_bad,multi_good,multi_mixed,multi_bad

扫描结果会输出到:

每个组合的单独 metrics.json 也会保留。

运行后会产生什么

单次实验默认会在 results/<experiment_name>/ 下生成:

建议你先看的对照

  1. single_good vs single_bad
    • 看规则方向是否真的重要
  2. single_good vs multi_good
    • 看多规则是否比单规则更稳定
  3. multi_good vs multi_mixed
    • 看加入错误规则后会不会被拖累
  4. multi_good vs multi_bad
    • 看系统性错误规则会不会把 teacher 带偏
  5. 小标注量 vs 大标注量
    • 看规则是不是在 low-label 场景更有帮助